From 4b39efdee4cddb7a1e747709945a1c7457b25b60 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 16 Mar 2011 06:36:48 -0600 Subject: [PATCH] fix `syntax-local-bind-syntaxes' argument checking Closes PR 11808 --- collects/tests/racket/macro.rktl | 9 +++++++++ src/racket/src/eval.c | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/collects/tests/racket/macro.rktl b/collects/tests/racket/macro.rktl index a4200119fc..c55716c86d 100644 --- a/collects/tests/racket/macro.rktl +++ b/collects/tests/racket/macro.rktl @@ -540,4 +540,13 @@ ;; ---------------------------------------- +(let () + (define-syntax (foo stx) + (define context (syntax-local-make-definition-context)) + (with-handlers ([exn:fail:contract? (lambda (x) #''ok)]) + (syntax-local-bind-syntaxes (list 'q) #'1 context))) + (test 'ok 'ok (foo))) + +;; ---------------------------------------- + (report-errs) diff --git a/src/racket/src/eval.c b/src/racket/src/eval.c index edb7f16d53..36a4fda838 100644 --- a/src/racket/src/eval.c +++ b/src/racket/src/eval.c @@ -11559,7 +11559,7 @@ local_eval(int argc, Scheme_Object **argv) names = argv[0]; for (l = names; SCHEME_PAIRP(l); l = SCHEME_CDR(l)) { a = SCHEME_CAR(l); - if (!SCHEME_STX_SYMBOLP(a)) + if (!SCHEME_STXP(a) || !SCHEME_STX_SYMBOLP(a)) break; cnt++; }