GNU bug report logs - #32847
Wrong macro expansion in eval

Previous Next

Package: guile;

Reported by: Stefan Israelsson Tampe <stefan.itampe <at> gmail.com>

Date: Wed, 26 Sep 2018 20:04:02 UTC

Severity: normal

Tags: notabug

Done: Mark H Weaver <mhw <at> netris.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Stefan Israelsson Tampe <stefan.itampe <at> gmail.com>
To: Mark H Weaver <mhw <at> netris.org>
Cc: 32847 <at> debbugs.gnu.org
Subject: bug#32847: Wrong macro expansion in eval
Date: Thu, 27 Sep 2018 10:33:00 +0200
[Message part 1 (text/plain, inline)]
yes that makes sense. thanks!

On Thu, Sep 27, 2018 at 4:16 AM Mark H Weaver <mhw <at> netris.org> wrote:

> Hi Stefan,
>
> Stefan Israelsson Tampe <stefan.itampe <at> gmail.com> writes:
>
> > This for guile 2.4 and master,
> >
> >> (eval `(let-syntax ((f (lambda (x) ,#'(+ (pk 'a 1) 2)))) f)
> (current-module))
> >
> > ;;; (#<syntax a> 1)
> >
> > But without eval:
> >> (let-syntax ((f (lambda (x) #'(+ (pk 'a 1) 2)))) f)
> >
> > ;;; (a 1)
>
> I think the mistake is in your code above.  In the first case, what you
> want is this:
>
>   (eval `(let-syntax ((f (lambda (x) ,'#'(+ (pk 'a 1) 2)))) f)
>         (current-module))
>
> Note the addition of a quote (') between the unquote (,) and syntax (#')
> above.
>
> The expression that follows unquote (,) should evaluate to an
> s-expression.  In this case, you want it to evaluate to the s-expression
> #'(+ (pk 'a 1) 2), i.e. (syntax (+ (pk 'a 1) 2)), i.e. a list with two
> elements, the first being the symbol 'syntax'.  But that's not what
> you're doing above.  Instead, you are returning the syntax object
> itself, which is being spliced directly into the code.
>
> Does that make sense?
>
>        Mark
>
[Message part 2 (text/html, inline)]

This bug report was last modified 6 years and 242 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.