24 lines
746 B
Racket
24 lines
746 B
Racket
#lang racket
|
|
(provide my-include)
|
|
(require (for-syntax mzlib/etc))
|
|
|
|
(define-syntax (my-include stx)
|
|
(syntax-case stx ()
|
|
[(_ filename)
|
|
(string? (syntax-e #'filename))
|
|
#'(begin
|
|
(define-syntax (tmp _stx)
|
|
(my-include2 (this-expression-source-directory filename) filename))
|
|
(tmp))]))
|
|
|
|
(define-for-syntax (my-include2 dirname filename)
|
|
(let ([filename (build-path dirname
|
|
filename)])
|
|
(define s
|
|
(parameterize ([read-accept-reader #t])
|
|
(read-syntax filename (open-input-file filename))))
|
|
(syntax-case s ()
|
|
[(-module name . rest)
|
|
#'(begin (module name . rest)
|
|
(require 'name)
|
|
(provide (all-from-out 'name)))]))) |