stxparse-info/my-include.rkt
2018-03-26 19:54:51 +02:00

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)))])))