Opened 11 years ago
Closed 2 years ago
#1132 closed defect (fixed)
Expansion of internal definitions ignores import status/redefinition of `define` et al.
| Reported by: | evhan | Owned by: | |
|---|---|---|---|
| Priority: | major | Milestone: | 5.4 |
| Component: | expander | Version: | 4.9.x |
| Keywords: | expander, syntax, define | Cc: | |
| Estimated difficulty: | hard |
Description
Forms starting with define, define-values and define-syntax are expanded as internal definitions in let and lambda bodies regardless of whether those identifiers have been imported or redefined to some other transformer.
With redefinition:
(define-syntax define
(syntax-rules ()
((_ . a) (list . a))))
;; Works, gives (1 2 3).
(define 1 2 3)
;; Works, prints (1 2 3), since the define isn't treated
;; as an internal definition.
(let ()
(display (define 1 2 3)))
;; Fails, errors since the define is treated as an internal
;; definition when it should instead return a list.
(let ()
(define 1 2 3))
Without having been imported:
;; Works, errors due to define being unbound. (module foo () (import (except scheme define)) (define a 1)) ;; Fails, should error due to define being unbound but doesn't. (module foo () (import (except scheme define)) (let () (define a 1)))
The same applies for define-values and define-syntax.
Bindings introduced by let, let-syntax and friends are handled correctly.
Change History (4)
comment:1 Changed 9 years ago by
| Estimated difficulty: | → hard |
|---|
comment:2 Changed 2 years ago by
| Milestone: | someday → 6.0.0 |
|---|
comment:3 Changed 2 years ago by
| Milestone: | 6.0.0 → 5.4 |
|---|
comment:4 Changed 2 years ago by
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
Note: See
TracTickets for help on using
tickets.

Fixed with 75c0461c8b541a3b03e337e7546ce3b0ea4e6931