On 04/07/2013 01:24 AM, Eric Dobson wrote:
I am trying to test a helper to a macro. It generates a syntax object
with bindings at phase-1, this is then returned by the macro and it
correctly evaluates. Is there a way to not go through the macro, but
still evaluate the syntax-object with those bindings it has at phase-1
relative to the helper and not phase 0 relative?

Example code:
#lang racket/load

(module t racket
   (provide (all-defined-out))
   (define temp 7))

(module stx-compute racket
   (provide (all-defined-out))
   (require (for-template 't))
   ;(require 't)
   (define (compute) #'temp))


(module stx racket
   (provide (all-defined-out))
   (require (for-syntax 'stx-compute))
   (define-syntax (use-compute stx)
     (compute)))

(require 'stx)
(displayln (use-compute))
(require 'stx-compute)
(displayln (eval-syntax (compute)))

This fails on the eval-syntax, but succeds if I uncomment the (require 't).

You might find phase1-eval from unstable/macro-testing helpful.

(require (for-syntax 'stx-compute)
         unstable/macro-testing))

(phase1-eval (compute))
;; => 'temp

(phase1-eval (compute) #:quote quote-syntax)
;; => #<syntax temp>

(eval-syntax (phase1-eval (compute) #:quote quote-syntax))
;; => 7

Ryan

____________________
 Racket Users list:
 http://lists.racket-lang.org/users

Reply via email to