id,summary,reporter,owner,description,type,status,priority,milestone,component,version,resolution,keywords,cc,difficulty 1132,Expansion of internal definitions ignores import status/redefinition of `define` et al.,evhan,,"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.",defect,closed,major,5.4,expander,4.9.x,fixed,"expander, syntax, define",,hard