Fix evaluator.rkt to work with dynamic-require.

original commit: 774afb6cafe6d547d40b20709f94a761dcf583bb
This commit is contained in:
Sam Tobin-Hochstadt 2014-05-07 12:19:38 -04:00
parent 33ab9f0488
commit baf7f6ccee

View File

@ -1,22 +1,36 @@
#lang racket/base
;; Allow evaluation at phase1
(require (for-syntax racket/base syntax/parse))
(provide phase1-eval phase1-phase0-eval phase1-phase0-run)
(provide phase1-eval phase1-phase0-eval)
(define-namespace-anchor anchor)
(define namespace (namespace-anchor->empty-namespace anchor))
;; See discussion of this function here:
;; http://www.mail-archive.com/dev@racket-lang.org/msg10759.html
;; http://lists.racket-lang.org/dev/archive/2014-May/014273.html
(define (prep! varref)
(define p (variable-reference->resolved-module-path varref))
(when p
(parameterize ([current-namespace namespace])
(dynamic-require p 0))))
(define-syntax phase1-phase0-run
(syntax-parser
[(_ form:expr ...)
#'(let-syntax ([go (lambda (stx) form ...)]) (go))]))
(define-syntax phase1-phase0-eval
(syntax-parser
[(_ form:expr ...)
#'(eval-syntax (quote-syntax (phase1-phase0-run form ...)) namespace)]))
(define-syntax phase1-phase0-eval
(syntax-parser
[(_ form:expr ...)
#'(begin
(prep! (#%variable-reference))
(eval-syntax (quote-syntax (phase1-phase0-run form ...)) namespace))]))
(define-syntax phase1-eval
(syntax-parser
[(_ form:expr ...)
#'(phase1-phase0-eval form ... #'(void))]))
(define-syntax phase1-eval
(syntax-parser
[(_ form:expr ...)
#'(begin
(prep! (#%variable-reference))
(phase1-phase0-eval form ... #'(void)))]))