Summary

csi segfaults when playing with modules and macros

Metadata

Description

Crashes with master (Version 4.7.5 (rev 5fe91ae)) when run with the interpreter.

If run compiled it just raises the expected error: "Error: unbound variable: define25"

------

(module foo

(bar)
(import chicken scheme)

(define-syntax bar
  (ir-macro-transformer
   (lambda (e i c)
     `(list define)))))

(module a

*
(import chicken scheme)
(import foo)

(bar))

Changes and comments

[2012-05-18 09:53:56 UTC] sjamaan wrote:

The problem here is that bar returns the actual macro transformer procedure bound to define. In the compiler, that doesn't work because macro transformers aren't available as first-class procedures in the compiler (unless you make them available somehow).

You *might* be able to see this by modifying it to an er-macro-transformer:

  (module foo
   (bar)
   (import chicken scheme)
 
   (define-syntax bar
     (er-macro-transformer
      (lambda (e r c)
        `(,(r 'list) ,(r 'define))))))
 
  (module a
   *
   (import chicken scheme)
   (import foo)
 
   (bar))
 

This code crashes in master (w/ debugbuild), but shows the following in 4.7.0 (w/o debugbuild):

 (((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((syntax-rules ((synta......

That's how macro transformers are currently printed ;)

The segfault is a problem in the printer, not in the macro transformer.

[2012-05-18 12:48:15 UTC] felix changed milestone from 4.8.0 to 4.9.0

[2012-05-19 18:03:47 UTC] sjamaan wrote:

I retract that statement: the printer's fine. The macro expander's fine too. It's the interpreter (closure compiler) which goes wrong when finally trying to look up the variable in the syntactic environment after the macro has been expanded.

It finds the actual macro transformer object there, but it shouldn't return that. The compiler does something similar but it pretends not to find anything since macros aren't first-class so can't be returned as variables.

A fix has been posted to chicken-hackers.

[2012-05-19 20:04:43 UTC] sjamaan changed status from new to accepted

[2012-05-19 20:04:43 UTC] sjamaan set owner to sjamaan

[2012-05-24 18:02:29 UTC] megane changed status from accepted to closed

[2012-05-24 18:02:29 UTC] megane set resolution to fixed

[2012-05-24 18:02:29 UTC] megane wrote:

Works on Version 4.7.5 (rev bd1d0fc).