From: Matthew Flatt <mflatt@cs.utah.edu> To: plt-scheme@list.cs.brown.edu Date: Wed, 12 Feb 2003 10:18:22 -0700 Subject: [plt-scheme] 203.4 The exp-tagged code in CVS for MzScheme and MrEd is now version 203.4. This version finally corrects the handling of top-level and module-top-level definitions when the defined identifier originates from a macro expansion. Examples: (define-syntax def-and-use-of-x (syntax-rules () [(def-and-use-of-x val) ; x below originates from this macro: (begin (define x val) x)])) (define x 1) x ; => 1 (def-and-use-of-x 2) ; => 2 x ; => 1 (define-syntax def-and-use (syntax-rules () [(def-and-use x val) ; x below was provided by the macro use: (begin (define x val) x)])) (def-and-use x 3) ; => 3 x ; => 3 Within a module, `require’ and `provide’ similarly respect identifier origins when introducing and referencing bindings. External names for `provide’ do not depend on an origin, though (for various reasons, but mainly because the export would be useless). See the documentation for details. Other changes, mostly related: * Added `make-syntax-introducer’ for creating new macro origins on the fly. * Changed `generate-temporaries’ so that it does not use `gensym’, but instead uses `make-syntax-introducer’ to distinguish names. * Fixed parse problems with # in numbers, so that `1#/2’ is now parsed correctly, as well as my new favorite: `#e#x+e#s+e@-e#l-e’. As a side note, I’m fairly certain that it’s now possible to implement versions of `let-syntax’ and `letrec-syntax’ that can be wrapped around top-level definitions. I haven’t actually tried, yet. Matthew