remove bogus cross-phase-persistent declaration

Also fix and improve source-location reporting.
This commit is contained in:
Matthew Flatt 2013-07-22 15:31:18 -06:00
parent 3e53fd3a93
commit 92f2d7d386
2 changed files with 16 additions and 8 deletions

View File

@ -1,7 +1,5 @@
(module errortrace-key '#%kernel (module errortrace-key '#%kernel
(#%declare #:cross-phase-persistent)
;; this file is badly named; it contains ;; this file is badly named; it contains
;; all of the code used at runtime by the ;; all of the code used at runtime by the
;; various annotations inserted by this ;; various annotations inserted by this

View File

@ -8427,7 +8427,7 @@ static Scheme_Object *do_module_begin_at_phase(Scheme_Object *form, Scheme_Comp_
Scheme_Object *lifted_reqs = scheme_null, *req_data, *unbounds = scheme_null; Scheme_Object *lifted_reqs = scheme_null, *req_data, *unbounds = scheme_null;
int maybe_has_lifts = 0, expand_ends = (phase == 0), non_phaseless, requested_phaseless; int maybe_has_lifts = 0, expand_ends = (phase == 0), non_phaseless, requested_phaseless;
Scheme_Object *observer, *vec, *end_statements; Scheme_Object *observer, *vec, *end_statements;
Scheme_Object *begin_for_syntax_stx; Scheme_Object *begin_for_syntax_stx, *non_phaseless_form = NULL;
const char *who = "module"; const char *who = "module";
#ifdef DO_STACK_CHECK #ifdef DO_STACK_CHECK
@ -8734,8 +8734,10 @@ static Scheme_Object *do_module_begin_at_phase(Scheme_Object *form, Scheme_Comp_
var_count++; var_count++;
} }
if (!(non_phaseless & NON_PHASELESS_FORM) && !phaseless_rhs(val, var_count, phase)) if (!(non_phaseless & NON_PHASELESS_FORM) && !phaseless_rhs(val, var_count, phase)) {
non_phaseless |= NON_PHASELESS_FORM; non_phaseless |= NON_PHASELESS_FORM;
non_phaseless_form = val;
}
SCHEME_EXPAND_OBSERVE_EXIT_PRIM(observer, e); SCHEME_EXPAND_OBSERVE_EXIT_PRIM(observer, e);
kind = DEFN_MODFORM_KIND; kind = DEFN_MODFORM_KIND;
@ -8948,6 +8950,8 @@ static Scheme_Object *do_module_begin_at_phase(Scheme_Object *form, Scheme_Comp_
kind = DONE_MODFORM_KIND; kind = DONE_MODFORM_KIND;
non_phaseless |= NON_PHASELESS_FORM; non_phaseless |= NON_PHASELESS_FORM;
if (!non_phaseless_form)
non_phaseless_form = e;
} else if (scheme_stx_module_eq_x(require_stx, fst, phase)) { } else if (scheme_stx_module_eq_x(require_stx, fst, phase)) {
/************ require *************/ /************ require *************/
SCHEME_EXPAND_OBSERVE_ENTER_PRIM(observer, e); SCHEME_EXPAND_OBSERVE_ENTER_PRIM(observer, e);
@ -9060,14 +9064,20 @@ static Scheme_Object *do_module_begin_at_phase(Scheme_Object *form, Scheme_Comp_
} else { } else {
kind = EXPR_MODFORM_KIND; kind = EXPR_MODFORM_KIND;
non_phaseless |= NON_PHASELESS_FORM; non_phaseless |= NON_PHASELESS_FORM;
if (!non_phaseless_form)
non_phaseless_form = e;
} }
} else { } else {
non_phaseless |= NON_PHASELESS_FORM;
kind = EXPR_MODFORM_KIND; kind = EXPR_MODFORM_KIND;
non_phaseless |= NON_PHASELESS_FORM;
if (!non_phaseless_form)
non_phaseless_form = e;
} }
} else { } else {
non_phaseless |= NON_PHASELESS_FORM;
kind = EXPR_MODFORM_KIND; kind = EXPR_MODFORM_KIND;
non_phaseless |= NON_PHASELESS_FORM;
if (!non_phaseless_form)
non_phaseless_form = e;
} }
if (e) { if (e) {
@ -9359,9 +9369,9 @@ static Scheme_Object *do_module_begin_at_phase(Scheme_Object *form, Scheme_Comp_
env->genv->module->phaseless = scheme_true; env->genv->module->phaseless = scheme_true;
else { else {
if (non_phaseless & NON_PHASELESS_IMPORT) if (non_phaseless & NON_PHASELESS_IMPORT)
scheme_wrong_syntax(who, form, NULL, "cannot be cross-phase persistent due to required modules"); scheme_wrong_syntax(who, NULL, form, "cannot be cross-phase persistent due to required modules");
else else
scheme_wrong_syntax(who, form, NULL, "does not satisfy cross-phase persistent grammar"); scheme_wrong_syntax(who, non_phaseless_form, form, "does not satisfy cross-phase persistent grammar");
} }
} }