Hi everyone,

I'm running into some unexpected behavior with regards to how
scribble/eval drives an evaluator in an @interaction.  When I do
something like this:

    @interaction[#:eval my-eval
                       "foobar"]

I see that my-eval is being fed an s-expression of the form:

     `(begin "foobar")

However, my-eval uses a language that does not provide a begin-like
form, so this raises an error.

I've traced the source of this "begin" down to the do-plain-eval
function in scribble/eval.rkt.

             ;; within do-plain-eval:
             (cond [(syntax? s)
                    (syntax-case s (module)
                      [(module . _rest) (syntax->datum s)]
                      [_else s])]
                   [(bytes? s) `(begin ,s)]
                   [(string? s) `(begin ,s)]
                   [else s]))))

I assume it's trying to make sure than an evaluator defined by
racket/sandbox doesn't treat it as program source rather than as data,
since the sandbox treats strings and bytes in a special way.

Would it be equivalent behavior to turn the datum into a syntax object
instead?  That is:

             ;; within do-plain-eval:
             (cond [(syntax? s)
                    (syntax-case s (module)
                      [(module . _rest) (syntax->datum s)]
                      [_else s])]
                   [(bytes? s) (datum->syntax #f s)]
                   [(string? s) (datum->syntax #f s)]
                   [else s]))))

If this looks right, I can send as a patch.
_________________________
  Racket Developers list:
  http://lists.racket-lang.org/dev

Reply via email to