#lang scheme/base (require scheme/list) (require scheme/match) (require scheme/path) (require scheme/pretty) (provide read-module) (define (read-module [port (current-input-port)]) `(lambda *argv* ,@(read-forms port))) (define (read-forms [port (current-input-port)]) (let iter ([form (read port)] [forms '()]) (match form [(? eof-object?) (reverse forms)] [`(load ,(? string? pathname)) (let ([loaded-forms (with-input-from-file pathname (lambda () (parameterize ([current-directory (or (path-only pathname) ".")]) (read-forms))))]) (iter (read port) (cons `(begin ,@loaded-forms) forms)))] [`(load . ,_) (error "Unrecognized load-form:" (first forms))] [_ (iter (read port) (cons form forms))]))) ; vim:set sw=2 expandtab: