On Wed, Feb 18, 2015 at 10:22 PM, Thomas Gilray <thomas.gil...@gmail.com> wrote: > Hi everyone, > > I am trying to figure out how to use read-syntax on a port for an entire > .rkt file. I then want to call (expand ...) on this and get back a (begin > ...) or (module ...) for the entire file in fully expanded form. > > If I run (expand #`(define ...)) under a #lang racket, everything works. If > I place this in a file and use read-syntax however, each top-level > expression is returned individually, the language declaration isn't > supported, and without this information the expander complains that "define" > isn't defined. How do I properly read-syntax a whole file at once? > > Any ideas would be greatly appreciated.
I've implemented this a couple times recently, probably the best version is here: https://github.com/samth/pycket/blob/master/pycket/pycket-lang/expand.rkt The short answer is that you want to use `read-accept-lang` to enable #lang, call `read-syntax` once on the port, and the call `expand` in a new namespace (probably created with `make-base-namespace`). Sam ____________________ Racket Users list: http://lists.racket-lang.org/users