adjust rename-transformer expansion to transfer srcloc of use to expansion
This commit is contained in:
parent
a7bc964c69
commit
7abbff4749
|
@ -4711,7 +4711,8 @@ do_local_exp_time_value(const char *name, int argc, Scheme_Object *argv[], int r
|
|||
v = SCHEME_PTR_VAL(v);
|
||||
if (scheme_is_rename_transformer(v)) {
|
||||
sym = scheme_rename_transformer_id(v);
|
||||
sym = scheme_stx_cert(sym, scheme_false, menv, sym, NULL, 1);
|
||||
sym = scheme_transfer_srcloc(scheme_stx_cert(sym, scheme_false, menv, sym, NULL, 1),
|
||||
v);
|
||||
renamed = 1;
|
||||
menv = NULL;
|
||||
SCHEME_USE_FUEL(1);
|
||||
|
|
|
@ -6577,8 +6577,9 @@ Scheme_Object *scheme_check_immediate_macro(Scheme_Object *first,
|
|||
} else if (SAME_TYPE(SCHEME_TYPE(val), scheme_macro_type)) {
|
||||
if (scheme_is_rename_transformer(SCHEME_PTR_VAL(val))) {
|
||||
/* It's a rename. Look up the target name and try again. */
|
||||
name = scheme_stx_cert(scheme_rename_transformer_id(SCHEME_PTR_VAL(val)),
|
||||
scheme_false, menv, name, NULL, 1);
|
||||
name = scheme_transfer_srcloc(scheme_stx_cert(scheme_rename_transformer_id(SCHEME_PTR_VAL(val)),
|
||||
scheme_false, menv, name, NULL, 1),
|
||||
name);
|
||||
menv = NULL;
|
||||
SCHEME_USE_FUEL(1);
|
||||
} else {
|
||||
|
@ -6782,7 +6783,7 @@ scheme_compile_expand_expr(Scheme_Object *form, Scheme_Comp_Env *env,
|
|||
new_name = scheme_stx_track(new_name, find_name, find_name);
|
||||
}
|
||||
new_name = scheme_stx_cert(new_name, scheme_false, menv, find_name, NULL, 1);
|
||||
find_name = new_name;
|
||||
find_name = scheme_transfer_srcloc(new_name, find_name);
|
||||
SCHEME_USE_FUEL(1);
|
||||
menv = NULL;
|
||||
protected = 0;
|
||||
|
@ -6899,7 +6900,7 @@ scheme_compile_expand_expr(Scheme_Object *form, Scheme_Comp_Env *env,
|
|||
new_name = scheme_stx_track(new_name, find_name, find_name);
|
||||
}
|
||||
new_name = scheme_stx_cert(new_name, scheme_false, menv, find_name, NULL, 1);
|
||||
find_name = new_name;
|
||||
find_name = scheme_transfer_srcloc(new_name, find_name);
|
||||
SCHEME_USE_FUEL(1);
|
||||
menv = NULL;
|
||||
} else
|
||||
|
@ -6986,7 +6987,7 @@ scheme_compile_expand_expr(Scheme_Object *form, Scheme_Comp_Env *env,
|
|||
new_name = scheme_stx_track(new_name, find_name, find_name);
|
||||
}
|
||||
new_name = scheme_stx_cert(new_name, scheme_false, menv, find_name, NULL, 1);
|
||||
find_name = new_name;
|
||||
find_name = scheme_transfer_srcloc(new_name, find_name);
|
||||
SCHEME_USE_FUEL(1);
|
||||
menv = NULL;
|
||||
} else
|
||||
|
|
|
@ -1023,6 +1023,8 @@ XFORM_NONGCING Scheme_Object *scheme_phase_index_symbol(int src_phase_index);
|
|||
Scheme_Object *scheme_explode_syntax(Scheme_Object *stx, Scheme_Hash_Table *ht);
|
||||
void scheme_populate_pt_ht(struct Scheme_Module_Phase_Exports * pt);
|
||||
|
||||
Scheme_Object *scheme_transfer_srcloc(Scheme_Object *to, Scheme_Object *from);
|
||||
|
||||
/*========================================================================*/
|
||||
/* syntax run-time structures */
|
||||
/*========================================================================*/
|
||||
|
|
|
@ -8855,6 +8855,40 @@ static Scheme_Object *syntax_track_origin(int argc, Scheme_Object **argv)
|
|||
return scheme_stx_track(argv[0], argv[1], argv[2]);
|
||||
}
|
||||
|
||||
Scheme_Object *scheme_transfer_srcloc(Scheme_Object *to, Scheme_Object *from)
|
||||
{
|
||||
if (!SAME_OBJ(((Scheme_Stx *)from)->srcloc, empty_srcloc)) {
|
||||
Scheme_Stx *stx = (Scheme_Stx *)to;
|
||||
Scheme_Object *wraps, *modinfo_cache;
|
||||
Scheme_Object *certs;
|
||||
long lazy_prefix;
|
||||
|
||||
wraps = stx->wraps;
|
||||
if (STX_KEY(stx) & STX_SUBSTX_FLAG) {
|
||||
modinfo_cache = NULL;
|
||||
lazy_prefix = stx->u.lazy_prefix;
|
||||
} else {
|
||||
modinfo_cache = stx->u.modinfo_cache;
|
||||
lazy_prefix = 0;
|
||||
}
|
||||
certs = stx->certs;
|
||||
|
||||
stx = (Scheme_Stx *)scheme_make_stx(stx->val,
|
||||
((Scheme_Stx *)from)->srcloc,
|
||||
stx->props);
|
||||
|
||||
stx->wraps = wraps;
|
||||
if (modinfo_cache)
|
||||
stx->u.modinfo_cache = modinfo_cache;
|
||||
else
|
||||
stx->u.lazy_prefix = lazy_prefix; /* same as NULL modinfo if no SUBSTX */
|
||||
stx->certs = certs;
|
||||
|
||||
return (Scheme_Object *)stx;
|
||||
} else
|
||||
return to;
|
||||
}
|
||||
|
||||
static Scheme_Object *delta_introducer(int argc, struct Scheme_Object *argv[], Scheme_Object *p)
|
||||
{
|
||||
Scheme_Object *r, *delta;
|
||||
|
|
Loading…
Reference in New Issue
Block a user