Subject: bug#14449: closed (Re: bug#14449: Guile 2.1 and macro nesting)

From: [email-masked] (GNU bug Tracking System)
Date: Thu, 03 Oct 2013 09:12:03 +0000

Your bug report

#14449: Guile 2.1 and macro nesting

which was filed against the guile package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
14449: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=14449
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#14449: Guile 2.1 and macro nesting
From: Ian Price <[email-masked]>
To: Sanel Zukan <[email-masked]>
Cc: [email-masked]
Date: Thu, 03 Oct 2013 10:11:30 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

tags 14449 notabug
thanks

Sanel Zukan <[email-masked]> 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"

Subject: Guile 2.1 and macro nesting
From: Sanel Zukan <[email-masked]>
To: [email-masked]
Date: Thu, 23 May 2013 15:50:32 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

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