Fix evaluator.rkt
to work with dynamic-require
.
original commit: 774afb6cafe6d547d40b20709f94a761dcf583bb
This commit is contained in:
parent
33ab9f0488
commit
baf7f6ccee
|
@ -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)))]))
|
||||
|
|
Loading…
Reference in New Issue
Block a user