31 lines
903 B
Scheme
31 lines
903 B
Scheme
#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:
|