Summary
hygiene problem using `map' with prefixed `scheme' import
Metadata
- Id: ebf31114f1ba8b3995d3f6ec4a728400b59b5d12
- Trac id: 816
- Type: defect
- Reporter: syn
- Owner:
- Cc:
- Status: closed
- Component: compiler
- Estimated difficulty:
- Resolution: fixed
- Priority: minor
- Milestone: 4.9.0
- Version: 4.7.x
- Changetime: 2012-09-24 21:47:48 UTC
- Created: 2012-04-15 17:49:33 UTC
- Keywords:
Attachments
- ebf31114f1ba8b3995d3f6ec4a728400b59b5d12/attachments/0001-Always-add-default-core-macros-to-syntax-env-in-inte.patch
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