unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
From: Paul Smith <psmith@gnu.org>
To: Thien-Thi Nguyen <ttn@gnuvola.org>
Cc: guile-user@gnu.org
Subject: Re: Errors using Guile 2.0 vs. Guile 1.8
Date: Sun, 29 Jan 2012 16:51:53 -0500	[thread overview]
Message-ID: <1327873913.3401.26.camel@homebase> (raw)
In-Reply-To: <87aa56us0v.fsf@gnuvola.org>

On Sun, 2012-01-29 at 22:18 +0100, Thien-Thi Nguyen wrote:
> () Paul Smith <psmith@gnu.org>
> () Sun, 29 Jan 2012 10:54:18 -0500
> 
>            $ cat g1.mk
>            define show
>            (define (show s)
>              (display s)
>              (newline))
>            endef
>            $(info define display)
>            $(guile $(show))
>            $(info after define)
>            $(guile (show "HI"))      # this one
>            all:;
> 
>    I don't know what this means, or how to proceed with debugging.
> 
> What happens if you change the marked line to:
> 
>            $(guile (map object->string
>                         (list show
>                               current-output-port
>                               (current-output-port))))
> 
> ?  I would also try simply ‘$(guile show)’, but remember faintly
> that such a type would cause an error.  Thinking along these lines
> some more, the problem is perhaps with the return value of ‘show’,
> which is the return value of calling ‘newline’, which is probably
> unspecified.
> 
> As for 1.8 vs 2.0, i dare not speculate.

Sorry for being unclear.  What I was trying to indicate by having the
$(info ...) lines there is that the error is actually generated when the
(define ...) is parsed, NOT when the function is invoked.  In fact I can
remove the invocation and still get the errors:

        $ cat /tmp/g2.mk
        define show
        (define (show s)
          (display s)
          (newline))
        endef
        $(info define display)
        $(guile $(show))
        $(info after define)
        all:;
        
        $ ./make -f /tmp/g2.mk
        define display
        Backtrace:
        In ice-9/boot-9.scm:
         162: 5 [catch #t #<catch-closure 19a45c0> ...]
         170: 4 [#<procedure 19a7cd0 ()>]
        In unknown file:
           ?: 3 [catch-closure]
        In ice-9/eval.scm:
         389: 2 [eval # #]
         374: 1 [eval # #]
        In unknown file:
           ?: 0 [scm-error misc-error #f ...]
        
        ERROR: In procedure scm-error:
        ERROR: Unknown object: #<variable 19bf180 value: #<procedure 19a85a0 at ice-9/eval.scm:378:13 (a)>>
        after define
        make: `all' is up to date.

I can also (define ...) a function which is entirely numeric (for
example the Fibonacci calculator in the test suite) so there's no issue
with string return values or ports or anything like that:

        $ cat /tmp/g3.mk
        # Define the "fib" function in Guile
        define fib
        ;; A procedure for counting the n:th Fibonacci number
        ;; See SICP, p. 37
        (define (fib n)
          (cond ((= n 0) 0)
                ((= n 1) 1)
                (else (+ (fib (- n 1))
                         (fib (- n 2))))))
        endef
        $(guile $(fib))
        x:;
        
        $ ./make -f /tmp/g3.mk
        Backtrace:
        In ice-9/boot-9.scm:
         162: 5 [catch #t #<catch-closure add5c0> ...]
         170: 4 [#<procedure ae0cd0 ()>]
        In unknown file:
           ?: 3 [catch-closure]
        In ice-9/eval.scm:
         389: 2 [eval # #]
         374: 1 [eval # #]
        In unknown file:
           ?: 0 [scm-error misc-error #f ...]
        
        ERROR: In procedure scm-error:
        ERROR: Unknown object: #<variable afed00 value: #<procedure ae5630 at ice-9/eval.scm:378:13 (a)>>
        make: `x' is up to date.

As you can see I'm not actually calling these functions at all; simply
defining them is enough to cause the error.

Again these all work perfectly with Guile 1.8.

-- 
-------------------------------------------------------------------------------
 Paul D. Smith <psmith@gnu.org>          Find some GNU make tips at:
 http://www.gnu.org                      http://make.mad-scientist.net
 "Please remain calm...I may be mad, but I am a professional." --Mad Scientist




  reply	other threads:[~2012-01-29 21:51 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-29 15:54 Errors using Guile 2.0 vs. Guile 1.8 Paul Smith
2012-01-29 21:18 ` Thien-Thi Nguyen
2012-01-29 21:51   ` Paul Smith [this message]
2012-01-29 22:26 ` Mark H Weaver
2012-01-29 22:57   ` Mark H Weaver
2012-01-30  0:17     ` Paul Smith
2012-01-30  1:16       ` Mark H Weaver
2012-01-30  1:42         ` Paul Smith
2012-01-30 11:06     ` Andy Wingo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/guile/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1327873913.3401.26.camel@homebase \
    --to=psmith@gnu.org \
    --cc=guile-user@gnu.org \
    --cc=ttn@gnuvola.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).