From e078b24e8af94572f6e0f50b5b6426dfce02769b Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 16 Nov 2005 21:36:24 +0000 Subject: [PATCH] fix expansion of #%variable-reference svn: r1331 --- src/mzscheme/src/syntax.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/mzscheme/src/syntax.c b/src/mzscheme/src/syntax.c index 38a1e976c1..d80dc99c0a 100644 --- a/src/mzscheme/src/syntax.c +++ b/src/mzscheme/src/syntax.c @@ -1445,7 +1445,10 @@ ref_syntax (Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, } if (SCHEME_STX_PAIRP(name)) { - var = scheme_expand_expr(name, env, rec, drec); + if (rec[drec].comp) + var = scheme_compile_expr(name, env, rec, drec); + else + var = scheme_expand_expr(name, env, rec, drec); } else { scheme_rec_add_certs(rec, drec, form); @@ -1463,15 +1466,20 @@ ref_syntax (Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, if (SAME_TYPE(SCHEME_TYPE(var), scheme_variable_type) || SAME_TYPE(SCHEME_TYPE(var), scheme_module_variable_type)) { - var = scheme_register_toplevel_in_prefix(var, env, rec, drec); + if (rec[drec].comp) + var = scheme_register_toplevel_in_prefix(var, env, rec, drec); } else { scheme_wrong_syntax(NULL, name, form, "identifier does not refer to a top-level or module variable"); } - scheme_compile_rec_done_local(rec, drec); + if (rec[drec].comp) + scheme_compile_rec_done_local(rec, drec); } - return scheme_make_syntax_compiled(REF_EXPD, var); + if (rec[drec].comp) + return scheme_make_syntax_compiled(REF_EXPD, var); + else + return scheme_void; } static Scheme_Object *