From 089cb6669ceece6ba75d44d22c228de8bbd09a90 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 14 Jun 2012 15:10:00 +0800 Subject: [PATCH] improve implicit-begin syntax-error reporting --- src/racket/src/compile.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/racket/src/compile.c b/src/racket/src/compile.c index 6158eeee3e..7de3b59294 100644 --- a/src/racket/src/compile.c +++ b/src/racket/src/compile.c @@ -5488,6 +5488,14 @@ scheme_expand_expr_lift_to_let(Scheme_Object *form, Scheme_Comp_Env *env, return compile_expand_expr_lift_to_let(form, env, erec, drec); } +static Scheme_Object *beginify(Scheme_Comp_Env *env, Scheme_Object *lst) +{ + return scheme_datum_to_syntax(scheme_make_pair(begin_symbol, lst), + lst, + scheme_sys_wraps(env), + 0, 0); +} + static Scheme_Object * compile_expand_block(Scheme_Object *forms, Scheme_Comp_Env *env, Scheme_Compile_Expand_Info *rec, int drec, @@ -5537,7 +5545,7 @@ compile_expand_block(Scheme_Object *forms, Scheme_Comp_Env *env, SCHEME_EXPAND_OBSERVE_NEXT(rec[drec].observer); if (!SCHEME_STX_PAIRP(forms)) { - scheme_wrong_syntax(scheme_begin_stx_string, NULL, forms, "bad syntax"); + scheme_wrong_syntax(scheme_begin_stx_string, NULL, beginify(env, forms), "bad syntax"); return NULL; } @@ -5836,7 +5844,7 @@ compile_expand_block(Scheme_Object *forms, Scheme_Comp_Env *env, more = 0; } else { /* Empty body: illegal. */ - scheme_wrong_syntax(scheme_begin_stx_string, NULL, orig, + scheme_wrong_syntax(scheme_begin_stx_string, NULL, beginify(env, orig), "no expression after a sequence of internal definitions"); } } else if (mixed) { @@ -5931,7 +5939,7 @@ compile_expand_block(Scheme_Object *forms, Scheme_Comp_Env *env, forms = scheme_datum_to_syntax(newforms, orig, orig, 0, -1); if (scheme_stx_proper_list_length(forms) < 0) - scheme_wrong_syntax(scheme_begin_stx_string, NULL, forms, "bad syntax"); + scheme_wrong_syntax(scheme_begin_stx_string, NULL, beginify(env, forms), "bad syntax"); SCHEME_EXPAND_OBSERVE_BLOCK_TO_LIST(rec[drec].observer, forms); forms = scheme_expand_list(forms, env, recs, 0);