Summary

hygiene problem using `map' with prefixed `scheme' import

Metadata

Attachments

Description

The compiler seems to rewrite calls to map in an unhygienic fashion. This surfaces when importing the scheme module with a prefix into a fresh module. The interpreter handles it fine though.

Example:

 (module foo
 
 ()
 
 ;; the `quote' import is necessary due to another hygiene problem 
 ;; I'm investigating right now
 (import (only scheme quote))
 (import (prefix scheme ~))
 
 (~map (~lambda (y) y) x)
 
 )

This leads to the following warnings by csc (tested with 4.7.0.3-st and current master):

 Warning: reference to possibly unbound identifier `set!'
 Warning:    suggesting one of:
 Warning:    (import r5rs-null)
 Warning:    (import r4rs-null)
 Warning:    (import scheme)
 Warning:    (import r4rs)
 
 Warning: reference to possibly unbound identifier `cons'
 Warning:    suggesting one of:
 Warning:    (import scheme)
 Warning:    (import r4rs)
 
 Warning: reference to possibly unbound identifier `g14'
 
 Warning: reference to possibly unbound identifier `and'
 Warning:    suggesting one of:
 Warning:    (import r5rs-null)
 Warning:    (import r4rs-null)
 Warning:    (import scheme)
 Warning:    (import r4rs)
 
 Warning: reference to possibly unbound identifier `if'
 Warning:    suggesting one of:
 Warning:    (import r5rs-null)
 Warning:    (import r4rs-null)
 Warning:    (import scheme)
 Warning:    (import r4rs)
 
 Warning: reference to possibly unbound identifier `map-loop'
 
 Warning: reference to possibly unbound identifier `x'
 
 Warning: reference to possibly unbound identifier `g25'
 
 Warning: reference to possibly unbound identifier `g19'
 
 Warning: reference to possibly unbound identifier `g18'
 
 Warning: reference to possibly unbound identifier `g17'
 
 Warning: reference to possibly unbound identifier `let'
 Warning:    suggesting one of:
 Warning:    (import r5rs-null)
 Warning:    (import r4rs-null)
 Warning:    (import scheme)
 Warning:    (import r4rs)
 
 Error: module unresolved: foo

Changes and comments

[2012-04-15 19:23:30 UTC] syn wrote:

The culprit here is the macro defined in compiler-syntax.scm, line 91. The problem can be avoided for now by passing -no-compiler-syntax to the csc call.

[2012-04-21 20:19:19 UTC] sjamaan wrote:

Here's a simple fix. Maybe this can make it into 4.8.0?

[2012-04-21 20:39:08 UTC] sjamaan attached 0001-Always-add-default-core-macros-to-syntax-env-in-inte.patch (description=Always add core macros to syntax env of internal compiler syntax )

[2012-04-24 09:09:31 UTC] felix changed status from new to closed

[2012-04-24 09:09:31 UTC] felix set resolution to fixed

[2012-09-24 21:47:48 UTC] felix changed milestone from 4.8.0 to 4.9.0

[2012-09-24 21:47:48 UTC] felix wrote:

Milestone 4.8.0 deleted