Ticket #816 (closed defect: fixed)

Opened 14 months ago

Last modified 8 months ago

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

Reported by: syn Owned by:
Priority: minor Milestone: 4.9.0
Component: compiler Version: 4.7.x
Keywords: Cc:

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

Attachments

0001-Always-add-default-core-macros-to-syntax-env-in-inte.patch (3.6 kB) - added by sjamaan 13 months ago.
Always add core macros to syntax env of internal compiler syntax

Change History

Changed 14 months ago by syn

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.

Changed 13 months ago by sjamaan

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

Changed 13 months ago by sjamaan

Always add core macros to syntax env of internal compiler syntax

Changed 13 months ago by felix

  • status changed from new to closed
  • resolution set to fixed

Changed 8 months ago by felix

  • milestone changed from 4.8.0 to 4.9.0

Milestone 4.8.0 deleted

Note: See TracTickets for help on using tickets.