Below is a short example showing that identifier-binding doesn't seem to 
work quite right with Scribble's make-base-eval. It works fine with 
make-evaluator from racket/sandbox.

I'm not sure why this is, but using syntax-local-value instead works 
everywhere. (Implementation here: 
https://github.com/default-kramer/plisqin/commit/2723d7c11be5b6938e681ea869e8b9f4957849b0#diff-1a91d998f2be05413392d588a89323d3R31)

#lang racket
(require scribble/eval
         racket/sandbox)

(define (setup eval)
  (eval
   '(define-syntax (define-if-not stx)
      (syntax-case stx ()
        [(_ id val)
         (identifier-binding #'id)
         #'(void)]
        [(_ id val)
         #'(define id val)]))))

(define scribble-eval (make-base-eval))
(scribble-eval '(require racket))
(setup scribble-eval)

(define racket-eval (make-evaluator 'racket))
(setup racket-eval)

(scribble-eval '(define-if-not foo 1))
(scribble-eval '(define-if-not foo 2))
(scribble-eval 'foo) ; want 1, get 2

(racket-eval '(define-if-not bar 3))
(racket-eval '(define-if-not bar 4))
(racket-eval 'bar) ; want 3, get 3

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to