GNU bug report logs -
#14449
Guile 2.1 and macro nesting
Previous Next
Reported by: Sanel Zukan <sanelz <at> gmail.com>
Date: Thu, 23 May 2013 14:05:01 UTC
Severity: normal
Done: Ian Price <ianprice90 <at> googlemail.com>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your message dated Thu, 03 Oct 2013 10:11:30 +0100
with message-id <87fvsiwwfx.fsf <at> googlemail.com>
and subject line Re: bug#14449: Guile 2.1 and macro nesting
has caused the debbugs.gnu.org bug report #14449,
regarding Guile 2.1 and macro nesting
to be marked as done.
(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)
--
14449: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=14449
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
Hi,
Looks like macro nesting (using define-macro) inside guile 2.x is no
longer possible. Here is example:
-----------------------------------------
scheme@(guile-user)>
(define-macro (def-caller abbrev proc)
`(define-macro (,abbrev var expr)
`(,',proc
(lambda (,var) ,expr))))
scheme@(guile-user)> (def-caller katch call/cc)
scheme@(guile-user)> (macroexpand '(katch 3 (+ 1 1)))
ice-9/psyntax.scm:2146:53: In procedure #<procedure 282adc0 (args e1
e2)>:
ice-9/psyntax.scm:2146:53: Syntax error:
unknown location: lambda: invalid argument list in subform (3) of (3)
Entering a new prompt. Type `,bt' for a backtrace or `,q' to
continue.
-----------------------------------------
However, doing the same in guile 1.x and/or any other Scheme
implementation where define-macro is native, it works without
problems.
Best,
Sanel
[Message part 3 (message/rfc822, inline)]
tags 14449 notabug
thanks
Sanel Zukan <sanelz <at> gmail.com> writes:
> scheme@(guile-user)>
> (define-macro (def-caller abbrev proc)
> `(define-macro (,abbrev var expr)
> `(,',proc
> (lambda (,var) ,expr))))
>
> scheme@(guile-user)> (def-caller katch call/cc)
> scheme@(guile-user)> (macroexpand '(katch 3 (+ 1 1)))
> ice-9/psyntax.scm:2146:53: In procedure #<procedure 282adc0 (args e1
> e2)>:
> ice-9/psyntax.scm:2146:53: Syntax error:
> unknown location: lambda: invalid argument list in subform (3) of (3)
>
> Entering a new prompt. Type `,bt' for a backtrace or `,q' to
> continue.
Sorry it's taken so long. This is not a bug. You are using a number as
a variable in a lambda list, nothing to do with defmacro.
scheme@(guile-user)> (macroexpand '(lambda (3) (+ x 1)))
ice-9/psyntax.scm:2156:53: In procedure #<procedure 8e000a0 (args e1 e2)>:
ice-9/psyntax.scm:2156:53: Syntax error:
unknown location: lambda: invalid argument list in subform (3) of (3)
Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue.
If you use a variable name, it works correctly.
scheme@(guile-user)> (define-macro (def-caller abbrev proc)
`(define-macro (,abbrev var expr)
`(,',proc
(lambda (,var) ,expr))))
scheme@(guile-user)> (def-caller katch call/cc)
scheme@(guile-user)> (macroexpand '(katch x (+ 1 1)))
$2 = #<tree-il (call (toplevel call/cc) (lambda () (lambda-case (((x) #f
#f #f () (x-478)) (call (toplevel +) (const 1) (const 1))))))>
scheme@(guile-user)> ,expand (katch a (+ 1 1))
$3 = (call/cc (lambda (a) (+ 1 1)))
scheme@(guile-user)> (katch a (+ 1 (a 3)))
$4 = 3
I'm closing this one.
--
Ian Price -- shift-reset.com
"Programming is like pinball. The reward for doing it well is
the opportunity to do it again" - from "The Wizardy Compiled"
This bug report was last modified 11 years and 235 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.