syntax-local-lift-require
svn: r13075
This commit is contained in:
parent
0e8cf2e160
commit
17ad24945b
|
@ -340,6 +340,24 @@ eventually expanded in an expression context.
|
||||||
@transform-time[]}
|
@transform-time[]}
|
||||||
|
|
||||||
|
|
||||||
|
@defproc[(syntax-local-lift-require [quoted-raw-require-spec any/c][stx syntax?])
|
||||||
|
syntax?]{
|
||||||
|
|
||||||
|
Lifts a @scheme[#%require] form corresponding to
|
||||||
|
@scheme[quoted-raw-require-spec] to the top-level or to the top of the
|
||||||
|
module currently being expanded, wrapping it with @scheme[for-meta] if
|
||||||
|
the current expansion context is not @tech{phase level} 0.
|
||||||
|
|
||||||
|
The resulting syntax object is the same as @scheme[stx], except that a
|
||||||
|
fresh @tech{syntax mark} is added. The same @tech{syntax mark} is
|
||||||
|
added to the lifted @scheme[#%require] form, so that the
|
||||||
|
@scheme[#%require] form can bind uses of imported identifiers in the
|
||||||
|
resulting syntax object (assuming that the lexical information of
|
||||||
|
@scheme[stx] includes the binding environment into which the
|
||||||
|
@scheme[#%require] is lifted).
|
||||||
|
|
||||||
|
@transform-time[]}
|
||||||
|
|
||||||
@defproc[(syntax-local-name) (or/c symbol? #f)]{
|
@defproc[(syntax-local-name) (or/c symbol? #f)]{
|
||||||
|
|
||||||
Returns an inferred name for the expression position being
|
Returns an inferred name for the expression position being
|
||||||
|
|
|
@ -606,7 +606,7 @@ export name, though the same binding can be specified with the
|
||||||
multiple symbolic names.}
|
multiple symbolic names.}
|
||||||
|
|
||||||
|
|
||||||
@defform[(for-meta require-spec ...)]{See @scheme[require] and @scheme[provide].}
|
@defform[(for-meta phase-level require-spec ...)]{See @scheme[require] and @scheme[provide].}
|
||||||
@defform[(for-syntax require-spec ...)]{See @scheme[require] and @scheme[provide].}
|
@defform[(for-syntax require-spec ...)]{See @scheme[require] and @scheme[provide].}
|
||||||
@defform[(for-template require-spec ...)]{See @scheme[require] and @scheme[provide].}
|
@defform[(for-template require-spec ...)]{See @scheme[require] and @scheme[provide].}
|
||||||
@defform[(for-label require-spec ...)]{See @scheme[require] and @scheme[provide].}
|
@defform[(for-label require-spec ...)]{See @scheme[require] and @scheme[provide].}
|
||||||
|
|
|
@ -1018,7 +1018,7 @@
|
||||||
(lambda (w e)
|
(lambda (w e)
|
||||||
(purge-marked/update-headers)))
|
(purge-marked/update-headers)))
|
||||||
(send global-keymap add-function "gc"
|
(send global-keymap add-function "gc"
|
||||||
(lambda (w e) (collect-garbage) (collect-garbage)))
|
(lambda (w e) (collect-garbage) (collect-garbage) (dump-memory-stats)))
|
||||||
(send global-keymap add-function "show-memory-graph"
|
(send global-keymap add-function "show-memory-graph"
|
||||||
(lambda (w e) (show-memory-graph)))
|
(lambda (w e) (show-memory-graph)))
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
Somewhere in there:
|
Version 4.1.3.10
|
||||||
function contracts now preserve tail recursion in many cases; the
|
Added syntax-local-lift-require
|
||||||
'any' contract is no longer special.
|
|
||||||
|
|
||||||
Version 4.1.3.8
|
Version 4.1.3.8
|
||||||
Added procedure-rename
|
Added procedure-rename
|
||||||
|
@ -15,6 +14,7 @@ Version 4.1.3.6
|
||||||
Memory accounting changed to bias charges to parent instead of children
|
Memory accounting changed to bias charges to parent instead of children
|
||||||
|
|
||||||
Version 4.1.3.3
|
Version 4.1.3.3
|
||||||
|
Function contracts preserve tail recursion in many cases
|
||||||
Added compile-context-preservation-enabled
|
Added compile-context-preservation-enabled
|
||||||
Added exception-backtrace support for x86_84+JIT
|
Added exception-backtrace support for x86_84+JIT
|
||||||
Added scheme/package, scheme/splicing
|
Added scheme/package, scheme/splicing
|
||||||
|
|
|
@ -321,7 +321,7 @@ void wxMediaLine::Delete(wxMediaLine **root)
|
||||||
else
|
else
|
||||||
x = v->right;
|
x = v->right;
|
||||||
|
|
||||||
x->parent = v->parent;
|
x->parent = v->parent; /* x could be NIL; fixup at end */
|
||||||
|
|
||||||
if (PTREQ(v->parent, NIL))
|
if (PTREQ(v->parent, NIL))
|
||||||
*root = x;
|
*root = x;
|
||||||
|
@ -448,6 +448,11 @@ void wxMediaLine::Delete(wxMediaLine **root)
|
||||||
SET_BLACK(x);
|
SET_BLACK(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (PTRNE(NIL->parent, NIL)) {
|
||||||
|
/* fixup: we set NIL's parent above */
|
||||||
|
NIL->parent = NIL;
|
||||||
|
}
|
||||||
|
|
||||||
right = left = NIL;
|
right = left = NIL;
|
||||||
DELETE_OBJ this;
|
DELETE_OBJ this;
|
||||||
}
|
}
|
||||||
|
@ -594,7 +599,8 @@ wxMediaParagraph *wxMediaLine::GetParagraphStyle(Bool *first)
|
||||||
} else { \
|
} else { \
|
||||||
node = node->parent; \
|
node = node->parent; \
|
||||||
} \
|
} \
|
||||||
} \
|
}
|
||||||
|
|
||||||
|
|
||||||
void wxMediaLine::SetLength(long len)
|
void wxMediaLine::SetLength(long len)
|
||||||
{
|
{
|
||||||
|
|
|
@ -110,6 +110,7 @@ static Scheme_Object *local_module_expanding_provides(int argc, Scheme_Object *a
|
||||||
static Scheme_Object *local_lift_expr(int argc, Scheme_Object *argv[]);
|
static Scheme_Object *local_lift_expr(int argc, Scheme_Object *argv[]);
|
||||||
static Scheme_Object *local_lift_context(int argc, Scheme_Object *argv[]);
|
static Scheme_Object *local_lift_context(int argc, Scheme_Object *argv[]);
|
||||||
static Scheme_Object *local_lift_end_statement(int argc, Scheme_Object *argv[]);
|
static Scheme_Object *local_lift_end_statement(int argc, Scheme_Object *argv[]);
|
||||||
|
static Scheme_Object *local_lift_require(int argc, Scheme_Object *argv[]);
|
||||||
static Scheme_Object *make_introducer(int argc, Scheme_Object *argv[]);
|
static Scheme_Object *make_introducer(int argc, Scheme_Object *argv[]);
|
||||||
static Scheme_Object *local_make_delta_introduce(int argc, Scheme_Object *argv[]);
|
static Scheme_Object *local_make_delta_introduce(int argc, Scheme_Object *argv[]);
|
||||||
static Scheme_Object *make_set_transformer(int argc, Scheme_Object *argv[]);
|
static Scheme_Object *make_set_transformer(int argc, Scheme_Object *argv[]);
|
||||||
|
@ -550,6 +551,7 @@ static void make_kernel_env(void)
|
||||||
GLOBAL_PRIM_W_ARITY("syntax-local-lift-expression", local_lift_expr, 1, 1, env);
|
GLOBAL_PRIM_W_ARITY("syntax-local-lift-expression", local_lift_expr, 1, 1, env);
|
||||||
GLOBAL_PRIM_W_ARITY("syntax-local-lift-context", local_lift_context, 0, 0, env);
|
GLOBAL_PRIM_W_ARITY("syntax-local-lift-context", local_lift_context, 0, 0, env);
|
||||||
GLOBAL_PRIM_W_ARITY("syntax-local-lift-module-end-declaration", local_lift_end_statement, 1, 1, env);
|
GLOBAL_PRIM_W_ARITY("syntax-local-lift-module-end-declaration", local_lift_end_statement, 1, 1, env);
|
||||||
|
GLOBAL_PRIM_W_ARITY("syntax-local-lift-require", local_lift_require, 2, 2, env);
|
||||||
|
|
||||||
{
|
{
|
||||||
Scheme_Object *sym;
|
Scheme_Object *sym;
|
||||||
|
@ -1366,7 +1368,7 @@ scheme_add_compilation_binding(int index, Scheme_Object *val, Scheme_Comp_Env *f
|
||||||
}
|
}
|
||||||
|
|
||||||
void scheme_frame_captures_lifts(Scheme_Comp_Env *env, Scheme_Lift_Capture_Proc cp, Scheme_Object *data,
|
void scheme_frame_captures_lifts(Scheme_Comp_Env *env, Scheme_Lift_Capture_Proc cp, Scheme_Object *data,
|
||||||
Scheme_Object *end_stmts, Scheme_Object *context_key)
|
Scheme_Object *end_stmts, Scheme_Object *context_key, Scheme_Object *requires)
|
||||||
{
|
{
|
||||||
Scheme_Lift_Capture_Proc *pp;
|
Scheme_Lift_Capture_Proc *pp;
|
||||||
Scheme_Object *vec;
|
Scheme_Object *vec;
|
||||||
|
@ -1374,16 +1376,45 @@ void scheme_frame_captures_lifts(Scheme_Comp_Env *env, Scheme_Lift_Capture_Proc
|
||||||
pp = (Scheme_Lift_Capture_Proc *)scheme_malloc_atomic(sizeof(Scheme_Lift_Capture_Proc));
|
pp = (Scheme_Lift_Capture_Proc *)scheme_malloc_atomic(sizeof(Scheme_Lift_Capture_Proc));
|
||||||
*pp = cp;
|
*pp = cp;
|
||||||
|
|
||||||
vec = scheme_make_vector(5, NULL);
|
vec = scheme_make_vector(7, NULL);
|
||||||
SCHEME_VEC_ELS(vec)[0] = scheme_null;
|
SCHEME_VEC_ELS(vec)[0] = scheme_null;
|
||||||
SCHEME_VEC_ELS(vec)[1] = (Scheme_Object *)pp;
|
SCHEME_VEC_ELS(vec)[1] = (Scheme_Object *)pp;
|
||||||
SCHEME_VEC_ELS(vec)[2] = data;
|
SCHEME_VEC_ELS(vec)[2] = data;
|
||||||
SCHEME_VEC_ELS(vec)[3] = end_stmts;
|
SCHEME_VEC_ELS(vec)[3] = end_stmts;
|
||||||
SCHEME_VEC_ELS(vec)[4] = context_key;
|
SCHEME_VEC_ELS(vec)[4] = context_key;
|
||||||
|
SCHEME_VEC_ELS(vec)[5] = (requires ? requires : scheme_false);
|
||||||
|
SCHEME_VEC_ELS(vec)[6] = scheme_null; /* accumulated requires */
|
||||||
|
|
||||||
COMPILE_DATA(env)->lifts = vec;
|
COMPILE_DATA(env)->lifts = vec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void scheme_propagate_require_lift_capture(Scheme_Comp_Env *orig_env, Scheme_Comp_Env *env)
|
||||||
|
{
|
||||||
|
while (orig_env) {
|
||||||
|
if ((COMPILE_DATA(orig_env)->lifts)
|
||||||
|
&& SCHEME_TRUEP(SCHEME_VEC_ELS(COMPILE_DATA(orig_env)->lifts)[5]))
|
||||||
|
break;
|
||||||
|
orig_env = orig_env->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (orig_env) {
|
||||||
|
Scheme_Object *vec, *p;
|
||||||
|
|
||||||
|
p = scheme_make_raw_pair(NULL, (Scheme_Object *)orig_env);
|
||||||
|
|
||||||
|
vec = scheme_make_vector(7, NULL);
|
||||||
|
SCHEME_VEC_ELS(vec)[0] = scheme_false;
|
||||||
|
SCHEME_VEC_ELS(vec)[1] = scheme_void;
|
||||||
|
SCHEME_VEC_ELS(vec)[2] = scheme_void;
|
||||||
|
SCHEME_VEC_ELS(vec)[3] = scheme_false;
|
||||||
|
SCHEME_VEC_ELS(vec)[4] = scheme_false;
|
||||||
|
SCHEME_VEC_ELS(vec)[5] = p; /* (rcons NULL env) => continue with env */
|
||||||
|
SCHEME_VEC_ELS(vec)[6] = scheme_null;
|
||||||
|
|
||||||
|
COMPILE_DATA(env)->lifts = vec;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Scheme_Object *scheme_frame_get_lifts(Scheme_Comp_Env *env)
|
Scheme_Object *scheme_frame_get_lifts(Scheme_Comp_Env *env)
|
||||||
{
|
{
|
||||||
return SCHEME_VEC_ELS(COMPILE_DATA(env)->lifts)[0];
|
return SCHEME_VEC_ELS(COMPILE_DATA(env)->lifts)[0];
|
||||||
|
@ -1394,6 +1425,11 @@ Scheme_Object *scheme_frame_get_end_statement_lifts(Scheme_Comp_Env *env)
|
||||||
return SCHEME_VEC_ELS(COMPILE_DATA(env)->lifts)[3];
|
return SCHEME_VEC_ELS(COMPILE_DATA(env)->lifts)[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Scheme_Object *scheme_frame_get_require_lifts(Scheme_Comp_Env *env)
|
||||||
|
{
|
||||||
|
return SCHEME_VEC_ELS(COMPILE_DATA(env)->lifts)[6];
|
||||||
|
}
|
||||||
|
|
||||||
void scheme_add_local_syntax(int cnt, Scheme_Comp_Env *env)
|
void scheme_add_local_syntax(int cnt, Scheme_Comp_Env *env)
|
||||||
{
|
{
|
||||||
Scheme_Object **ns, **vs;
|
Scheme_Object **ns, **vs;
|
||||||
|
@ -4748,6 +4784,10 @@ local_lift_expr(int argc, Scheme_Object *argv[])
|
||||||
env = env->next;
|
env = env->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (env)
|
||||||
|
if (SCHEME_FALSEP(SCHEME_VEC_ELS(COMPILE_DATA(env)->lifts)[0]))
|
||||||
|
env = NULL;
|
||||||
|
|
||||||
if (!env)
|
if (!env)
|
||||||
scheme_raise_exn(MZEXN_FAIL_CONTRACT,
|
scheme_raise_exn(MZEXN_FAIL_CONTRACT,
|
||||||
"syntax-local-lift-expression: no lift target");
|
"syntax-local-lift-expression: no lift target");
|
||||||
|
@ -4851,6 +4891,61 @@ local_lift_end_statement(int argc, Scheme_Object *argv[])
|
||||||
return scheme_void;
|
return scheme_void;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Scheme_Object *local_lift_require(int argc, Scheme_Object *argv[])
|
||||||
|
{
|
||||||
|
Scheme_Comp_Env *env;
|
||||||
|
Scheme_Object *local_mark, *mark, *data, *pr, *form;
|
||||||
|
long phase;
|
||||||
|
|
||||||
|
if (!SCHEME_STXP(argv[1]))
|
||||||
|
scheme_wrong_type("syntax-local-lift-require", "syntax", 1, argc, argv);
|
||||||
|
|
||||||
|
env = scheme_current_thread->current_local_env;
|
||||||
|
local_mark = scheme_current_thread->current_local_mark;
|
||||||
|
phase = env->genv->phase;
|
||||||
|
|
||||||
|
if (!env)
|
||||||
|
scheme_raise_exn(MZEXN_FAIL_CONTRACT,
|
||||||
|
"syntax-local-lift-require: not currently transforming");
|
||||||
|
|
||||||
|
data = NULL;
|
||||||
|
|
||||||
|
while (env) {
|
||||||
|
if (COMPILE_DATA(env)->lifts
|
||||||
|
&& SCHEME_TRUEP(SCHEME_VEC_ELS(COMPILE_DATA(env)->lifts)[5])) {
|
||||||
|
data = SCHEME_VEC_ELS(COMPILE_DATA(env)->lifts)[5];
|
||||||
|
if (SCHEME_RPAIRP(data)
|
||||||
|
&& !SCHEME_CAR(data)) {
|
||||||
|
env = (Scheme_Comp_Env *)SCHEME_CDR(data);
|
||||||
|
} else
|
||||||
|
break;
|
||||||
|
} else
|
||||||
|
env = env->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!env)
|
||||||
|
scheme_raise_exn(MZEXN_FAIL_CONTRACT,
|
||||||
|
"syntax-local-lift-requires: could not find target context");
|
||||||
|
|
||||||
|
|
||||||
|
mark = scheme_new_mark();
|
||||||
|
|
||||||
|
if (SCHEME_RPAIRP(data))
|
||||||
|
form = scheme_parse_lifted_require(argv[0], phase, mark, SCHEME_CAR(data));
|
||||||
|
else
|
||||||
|
form = scheme_toplevel_require_for_expand(argv[0], phase, env, mark);
|
||||||
|
|
||||||
|
pr = scheme_make_pair(form, SCHEME_VEC_ELS(COMPILE_DATA(env)->lifts)[6]);
|
||||||
|
SCHEME_VEC_ELS(COMPILE_DATA(env)->lifts)[6] = pr;
|
||||||
|
|
||||||
|
form = argv[1];
|
||||||
|
form = scheme_add_remove_mark(form, local_mark);
|
||||||
|
form = scheme_add_remove_mark(form, mark);
|
||||||
|
form = scheme_add_remove_mark(form, local_mark);
|
||||||
|
|
||||||
|
return form;
|
||||||
|
}
|
||||||
|
|
||||||
static Scheme_Object *
|
static Scheme_Object *
|
||||||
make_set_transformer(int argc, Scheme_Object *argv[])
|
make_set_transformer(int argc, Scheme_Object *argv[])
|
||||||
{
|
{
|
||||||
|
|
|
@ -1218,7 +1218,7 @@ char *scheme_make_arity_expect_string(Scheme_Object *proc,
|
||||||
name = scheme_get_proc_name((Scheme_Object *)proc, &namelen, 1);
|
name = scheme_get_proc_name((Scheme_Object *)proc, &namelen, 1);
|
||||||
#endif
|
#endif
|
||||||
} else if (SCHEME_STRUCTP(proc)) {
|
} else if (SCHEME_STRUCTP(proc)) {
|
||||||
name = proc;
|
name = (const char *)proc;
|
||||||
mina = -1;
|
mina = -1;
|
||||||
maxa = 0;
|
maxa = 0;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -4911,7 +4911,7 @@ static void *compile_k(void)
|
||||||
int writeable, for_eval, rename, enforce_consts, comp_flags;
|
int writeable, for_eval, rename, enforce_consts, comp_flags;
|
||||||
Scheme_Env *genv;
|
Scheme_Env *genv;
|
||||||
Scheme_Compile_Info rec, rec2;
|
Scheme_Compile_Info rec, rec2;
|
||||||
Scheme_Object *o, *tl_queue;
|
Scheme_Object *o, *rl, *tl_queue;
|
||||||
Scheme_Compilation_Top *top;
|
Scheme_Compilation_Top *top;
|
||||||
Resolve_Prefix *rp;
|
Resolve_Prefix *rp;
|
||||||
Resolve_Info *ri;
|
Resolve_Info *ri;
|
||||||
|
@ -4973,7 +4973,8 @@ static void *compile_k(void)
|
||||||
find one, break it up to eval first expression
|
find one, break it up to eval first expression
|
||||||
before the rest. */
|
before the rest. */
|
||||||
while (1) {
|
while (1) {
|
||||||
scheme_frame_captures_lifts(cenv, scheme_make_lifted_defn, scheme_sys_wraps(cenv), scheme_false, scheme_false);
|
scheme_frame_captures_lifts(cenv, scheme_make_lifted_defn, scheme_sys_wraps(cenv),
|
||||||
|
scheme_false, scheme_false, scheme_null);
|
||||||
form = scheme_check_immediate_macro(form,
|
form = scheme_check_immediate_macro(form,
|
||||||
cenv, &rec, 0,
|
cenv, &rec, 0,
|
||||||
0, &gval, NULL, NULL);
|
0, &gval, NULL, NULL);
|
||||||
|
@ -4989,10 +4990,13 @@ static void *compile_k(void)
|
||||||
} else
|
} else
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
|
rl = scheme_frame_get_require_lifts(cenv);
|
||||||
o = scheme_frame_get_lifts(cenv);
|
o = scheme_frame_get_lifts(cenv);
|
||||||
if (!SCHEME_NULLP(o)) {
|
if (!SCHEME_NULLP(o)
|
||||||
|
|| !SCHEME_NULLP(rl)) {
|
||||||
tl_queue = scheme_make_pair(form, tl_queue);
|
tl_queue = scheme_make_pair(form, tl_queue);
|
||||||
tl_queue = scheme_append(o, tl_queue);
|
tl_queue = scheme_append(o, tl_queue);
|
||||||
|
tl_queue = scheme_append(rl, tl_queue);
|
||||||
form = SCHEME_CAR(tl_queue);
|
form = SCHEME_CAR(tl_queue);
|
||||||
tl_queue = SCHEME_CDR(tl_queue);
|
tl_queue = SCHEME_CDR(tl_queue);
|
||||||
}
|
}
|
||||||
|
@ -5010,7 +5014,8 @@ static void *compile_k(void)
|
||||||
Scheme_Object *l, *prev_o = NULL;
|
Scheme_Object *l, *prev_o = NULL;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
scheme_frame_captures_lifts(cenv, scheme_make_lifted_defn, scheme_sys_wraps(cenv), scheme_false, scheme_false);
|
scheme_frame_captures_lifts(cenv, scheme_make_lifted_defn, scheme_sys_wraps(cenv),
|
||||||
|
scheme_false, scheme_false, scheme_null);
|
||||||
|
|
||||||
scheme_init_compile_recs(&rec, 0, &rec2, 1);
|
scheme_init_compile_recs(&rec, 0, &rec2, 1);
|
||||||
|
|
||||||
|
@ -5031,10 +5036,13 @@ static void *compile_k(void)
|
||||||
/* If any definitions were lifted in the process of compiling o,
|
/* If any definitions were lifted in the process of compiling o,
|
||||||
we need to fold them in. */
|
we need to fold them in. */
|
||||||
l = scheme_frame_get_lifts(cenv);
|
l = scheme_frame_get_lifts(cenv);
|
||||||
if (!SCHEME_NULLP(l)) {
|
rl = scheme_frame_get_require_lifts(cenv);
|
||||||
l = icons(scheme_datum_to_syntax(begin_symbol, scheme_false, scheme_sys_wraps(cenv), 0, 0),
|
if (!SCHEME_NULLP(l)
|
||||||
l);
|
|| !SCHEME_NULLP(rl)) {
|
||||||
form = scheme_datum_to_syntax(l, scheme_false, scheme_false, 0, 0);
|
l = scheme_append(rl, l);
|
||||||
|
rl = icons(scheme_datum_to_syntax(begin_symbol, scheme_false, scheme_sys_wraps(cenv), 0, 0),
|
||||||
|
rl);
|
||||||
|
form = scheme_datum_to_syntax(rl, scheme_false, scheme_false, 0, 0);
|
||||||
prev_o = o;
|
prev_o = o;
|
||||||
} else
|
} else
|
||||||
break;
|
break;
|
||||||
|
@ -6213,7 +6221,7 @@ compile_expand_expr_lift_to_let(Scheme_Object *form, Scheme_Comp_Env *env,
|
||||||
|
|
||||||
context_key = scheme_generate_lifts_key();
|
context_key = scheme_generate_lifts_key();
|
||||||
|
|
||||||
scheme_frame_captures_lifts(inserted, pair_lifted, (Scheme_Object *)ip, scheme_false, context_key);
|
scheme_frame_captures_lifts(inserted, pair_lifted, (Scheme_Object *)ip, scheme_false, context_key, NULL);
|
||||||
|
|
||||||
if (rec[drec].comp) {
|
if (rec[drec].comp) {
|
||||||
scheme_init_compile_recs(rec, drec, recs, 2);
|
scheme_init_compile_recs(rec, drec, recs, 2);
|
||||||
|
@ -8877,7 +8885,9 @@ static void *expand_k(void)
|
||||||
erec1.comp_flags = comp_flags;
|
erec1.comp_flags = comp_flags;
|
||||||
|
|
||||||
if (catch_lifts_key)
|
if (catch_lifts_key)
|
||||||
scheme_frame_captures_lifts(env, scheme_make_lifted_defn, scheme_sys_wraps(env), scheme_false, catch_lifts_key);
|
scheme_frame_captures_lifts(env, scheme_make_lifted_defn, scheme_sys_wraps(env),
|
||||||
|
scheme_false, catch_lifts_key,
|
||||||
|
(!as_local && catch_lifts_key) ? scheme_null : NULL);
|
||||||
|
|
||||||
if (just_to_top) {
|
if (just_to_top) {
|
||||||
Scheme_Object *gval;
|
Scheme_Object *gval;
|
||||||
|
@ -8886,9 +8896,12 @@ static void *expand_k(void)
|
||||||
obj = scheme_expand_expr(obj, env, &erec1, 0);
|
obj = scheme_expand_expr(obj, env, &erec1, 0);
|
||||||
|
|
||||||
if (catch_lifts_key) {
|
if (catch_lifts_key) {
|
||||||
Scheme_Object *l;
|
Scheme_Object *l, *rl;
|
||||||
l = scheme_frame_get_lifts(env);
|
l = scheme_frame_get_lifts(env);
|
||||||
if (SCHEME_PAIRP(l)) {
|
rl = scheme_frame_get_require_lifts(env);
|
||||||
|
if (SCHEME_PAIRP(l)
|
||||||
|
|| SCHEME_PAIRP(rl)) {
|
||||||
|
l = scheme_append(rl, l);
|
||||||
obj = add_lifts_as_begin(obj, l, env);
|
obj = add_lifts_as_begin(obj, l, env);
|
||||||
SCHEME_EXPAND_OBSERVE_LIFT_LOOP(erec1.observer,obj);
|
SCHEME_EXPAND_OBSERVE_LIFT_LOOP(erec1.observer,obj);
|
||||||
if ((depth >= 0) || as_local)
|
if ((depth >= 0) || as_local)
|
||||||
|
@ -9189,6 +9202,7 @@ do_local_expand(const char *name, int for_stx, int catch_lifts, int for_expr, in
|
||||||
if (for_stx) {
|
if (for_stx) {
|
||||||
scheme_prepare_exp_env(env->genv);
|
scheme_prepare_exp_env(env->genv);
|
||||||
env = scheme_new_comp_env(env->genv->exp_env, env->insp, 0);
|
env = scheme_new_comp_env(env->genv->exp_env, env->insp, 0);
|
||||||
|
scheme_propagate_require_lift_capture(orig_env, env);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (for_expr)
|
if (for_expr)
|
||||||
|
@ -9322,7 +9336,7 @@ do_local_expand(const char *name, int for_stx, int catch_lifts, int for_expr, in
|
||||||
|
|
||||||
if (catch_lifts_key)
|
if (catch_lifts_key)
|
||||||
scheme_frame_captures_lifts(env, scheme_make_lifted_defn, scheme_sys_wraps(env), scheme_false,
|
scheme_frame_captures_lifts(env, scheme_make_lifted_defn, scheme_sys_wraps(env), scheme_false,
|
||||||
catch_lifts_key);
|
catch_lifts_key, NULL);
|
||||||
|
|
||||||
memset(drec, 0, sizeof(drec));
|
memset(drec, 0, sizeof(drec));
|
||||||
drec[0].value_name = scheme_false; /* or scheme_current_thread->current_local_name ? */
|
drec[0].value_name = scheme_false; /* or scheme_current_thread->current_local_name ? */
|
||||||
|
|
|
@ -5749,6 +5749,76 @@ static Scheme_Object *add_lifted_defn(Scheme_Object *data, Scheme_Object **_id,
|
||||||
return scheme_make_lifted_defn(scheme_sys_wraps(env), _id, expr, _env);
|
return scheme_make_lifted_defn(scheme_sys_wraps(env), _id, expr, _env);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Scheme_Object *make_require_form(Scheme_Object *module_path, long phase, Scheme_Object *mark)
|
||||||
|
{
|
||||||
|
Scheme_Object *e = module_path;
|
||||||
|
|
||||||
|
if (phase != 0) {
|
||||||
|
e = scheme_make_pair(for_meta_symbol,
|
||||||
|
scheme_make_pair(scheme_make_integer(phase),
|
||||||
|
scheme_make_pair(e,
|
||||||
|
scheme_null)));
|
||||||
|
}
|
||||||
|
e = scheme_make_pair(require_stx, scheme_make_pair(e, scheme_null));
|
||||||
|
e = scheme_datum_to_syntax(e, scheme_false, scheme_false, 0, 0);
|
||||||
|
|
||||||
|
e = scheme_add_remove_mark(e, mark);
|
||||||
|
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
|
Scheme_Object *scheme_parse_lifted_require(Scheme_Object *module_path,
|
||||||
|
long phase,
|
||||||
|
Scheme_Object *mark,
|
||||||
|
void *data)
|
||||||
|
{
|
||||||
|
Scheme_Object *e;
|
||||||
|
Scheme_Object *base_modidx = (Scheme_Object *)((void **)data)[1];
|
||||||
|
Scheme_Env *env = (Scheme_Env *)((void **)data)[2];
|
||||||
|
Scheme_Module *for_m = (Scheme_Module *)((void **)data)[3];
|
||||||
|
Scheme_Object *rns = (Scheme_Object *)((void **)data)[4];
|
||||||
|
Scheme_Object *post_ex_rns = (Scheme_Object *)((void **)data)[5];
|
||||||
|
void *tables = ((void **)data)[6];
|
||||||
|
Scheme_Object *redef_modname = (Scheme_Object *)((void **)data)[7];
|
||||||
|
int *all_simple = (int *)((void **)data)[8];
|
||||||
|
|
||||||
|
e = make_require_form(module_path, phase, mark);
|
||||||
|
|
||||||
|
parse_requires(e, base_modidx, env, for_m,
|
||||||
|
rns, post_ex_rns,
|
||||||
|
check_require_name, tables,
|
||||||
|
redef_modname,
|
||||||
|
0, 0, 1, 0,
|
||||||
|
all_simple);
|
||||||
|
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Scheme_Object *package_require_data(Scheme_Object *base_modidx,
|
||||||
|
Scheme_Env *env,
|
||||||
|
Scheme_Module *for_m,
|
||||||
|
Scheme_Object *rns, Scheme_Object *post_ex_rns,
|
||||||
|
void *data,
|
||||||
|
Scheme_Object *redef_modname,
|
||||||
|
int *all_simple)
|
||||||
|
{
|
||||||
|
void **vals;
|
||||||
|
|
||||||
|
vals = MALLOC_N(void*, 9);
|
||||||
|
vals[0] = NULL; /* this slot is available */
|
||||||
|
vals[1] = base_modidx;
|
||||||
|
vals[2] = env;
|
||||||
|
vals[3] = for_m;
|
||||||
|
vals[4] = rns;
|
||||||
|
vals[5] = post_ex_rns;
|
||||||
|
vals[6] = data;
|
||||||
|
vals[7] = redef_modname;
|
||||||
|
vals[8] = all_simple;
|
||||||
|
|
||||||
|
return scheme_make_raw_pair((Scheme_Object *)vals, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void flush_definitions(Scheme_Env *genv)
|
static void flush_definitions(Scheme_Env *genv)
|
||||||
{
|
{
|
||||||
if (genv->syntax) {
|
if (genv->syntax) {
|
||||||
|
@ -5786,9 +5856,10 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env,
|
||||||
Scheme_Object *exclude_hint = scheme_false, *lift_data;
|
Scheme_Object *exclude_hint = scheme_false, *lift_data;
|
||||||
Scheme_Object **exis, **et_exis, **exsis;
|
Scheme_Object **exis, **et_exis, **exsis;
|
||||||
Scheme_Object *lift_ctx;
|
Scheme_Object *lift_ctx;
|
||||||
|
Scheme_Object *lifted_reqs = scheme_null, *req_data;
|
||||||
int exicount, et_exicount, exsicount;
|
int exicount, et_exicount, exsicount;
|
||||||
char *exps, *et_exps;
|
char *exps, *et_exps;
|
||||||
int all_simple_renames = 1;
|
int *all_simple_renames;
|
||||||
int maybe_has_lifts = 0;
|
int maybe_has_lifts = 0;
|
||||||
int reprovide_kernel;
|
int reprovide_kernel;
|
||||||
Scheme_Object *redef_modname;
|
Scheme_Object *redef_modname;
|
||||||
|
@ -5931,6 +6002,15 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env,
|
||||||
maybe_has_lifts = 0;
|
maybe_has_lifts = 0;
|
||||||
lift_ctx = scheme_generate_lifts_key();
|
lift_ctx = scheme_generate_lifts_key();
|
||||||
|
|
||||||
|
all_simple_renames = (int *)scheme_malloc_atomic(sizeof(int));
|
||||||
|
*all_simple_renames = 1;
|
||||||
|
|
||||||
|
req_data = package_require_data(self_modidx, env->genv, env->genv->module,
|
||||||
|
rn_set, post_ex_rn_set,
|
||||||
|
tables,
|
||||||
|
redef_modname,
|
||||||
|
all_simple_renames);
|
||||||
|
|
||||||
/* Pass 1 */
|
/* Pass 1 */
|
||||||
|
|
||||||
/* Partially expand all expressions, and process definitions, requires,
|
/* Partially expand all expressions, and process definitions, requires,
|
||||||
|
@ -5949,7 +6029,8 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env,
|
||||||
p = (maybe_has_lifts
|
p = (maybe_has_lifts
|
||||||
? scheme_frame_get_end_statement_lifts(xenv)
|
? scheme_frame_get_end_statement_lifts(xenv)
|
||||||
: scheme_null);
|
: scheme_null);
|
||||||
scheme_frame_captures_lifts(xenv, scheme_make_lifted_defn, scheme_sys_wraps(xenv), p, lift_ctx);
|
scheme_frame_captures_lifts(xenv, scheme_make_lifted_defn, scheme_sys_wraps(xenv),
|
||||||
|
p, lift_ctx, req_data);
|
||||||
maybe_has_lifts = 1;
|
maybe_has_lifts = 1;
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -5966,11 +6047,13 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env,
|
||||||
e = scheme_expand_expr(e, xenv, &erec1, 0);
|
e = scheme_expand_expr(e, xenv, &erec1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lifted_reqs = scheme_append(scheme_frame_get_require_lifts(xenv), lifted_reqs);
|
||||||
|
|
||||||
fst = scheme_frame_get_lifts(xenv);
|
fst = scheme_frame_get_lifts(xenv);
|
||||||
if (!SCHEME_NULLP(fst)) {
|
if (!SCHEME_NULLP(fst)) {
|
||||||
/* Expansion lifted expressions, so add them to
|
/* Expansion lifted expressions, so add them to
|
||||||
the front and try again. */
|
the front and try again. */
|
||||||
all_simple_renames = 0;
|
*all_simple_renames = 0;
|
||||||
fm = SCHEME_STX_CDR(fm);
|
fm = SCHEME_STX_CDR(fm);
|
||||||
e = scheme_add_rename(e, post_ex_rn_set);
|
e = scheme_add_rename(e, post_ex_rn_set);
|
||||||
fm = scheme_named_map_1(NULL, add_a_rename, fm, post_ex_rn_set);
|
fm = scheme_named_map_1(NULL, add_a_rename, fm, post_ex_rn_set);
|
||||||
|
@ -6066,7 +6149,7 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env,
|
||||||
/* Add a renaming: */
|
/* Add a renaming: */
|
||||||
if (!SAME_OBJ(SCHEME_STX_VAL(orig_name), name)) {
|
if (!SAME_OBJ(SCHEME_STX_VAL(orig_name), name)) {
|
||||||
scheme_extend_module_rename(post_ex_rn, self_modidx, name, name, self_modidx, name, 0, NULL, NULL, 0);
|
scheme_extend_module_rename(post_ex_rn, self_modidx, name, name, self_modidx, name, 0, NULL, NULL, 0);
|
||||||
all_simple_renames = 0;
|
*all_simple_renames = 0;
|
||||||
} else
|
} else
|
||||||
scheme_extend_module_rename(rn, self_modidx, name, name, self_modidx, name, 0, NULL, NULL, 0);
|
scheme_extend_module_rename(rn, self_modidx, name, name, self_modidx, name, 0, NULL, NULL, 0);
|
||||||
|
|
||||||
|
@ -6102,6 +6185,7 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env,
|
||||||
|
|
||||||
scheme_prepare_exp_env(env->genv);
|
scheme_prepare_exp_env(env->genv);
|
||||||
eenv = scheme_new_comp_env(env->genv->exp_env, env->insp, 0);
|
eenv = scheme_new_comp_env(env->genv->exp_env, env->insp, 0);
|
||||||
|
scheme_frame_captures_lifts(eenv, NULL, NULL, scheme_false, scheme_false, req_data);
|
||||||
|
|
||||||
oenv = (for_stx ? eenv : env);
|
oenv = (for_stx ? eenv : env);
|
||||||
|
|
||||||
|
@ -6148,7 +6232,7 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env,
|
||||||
if (!SAME_OBJ(SCHEME_STX_VAL(orig_name), name)) {
|
if (!SAME_OBJ(SCHEME_STX_VAL(orig_name), name)) {
|
||||||
scheme_extend_module_rename(for_stx ? post_ex_et_rn : post_ex_rn, self_modidx, name, name, self_modidx, name,
|
scheme_extend_module_rename(for_stx ? post_ex_et_rn : post_ex_rn, self_modidx, name, name, self_modidx, name,
|
||||||
for_stx ? 1 : 0, NULL, NULL, 0);
|
for_stx ? 1 : 0, NULL, NULL, 0);
|
||||||
all_simple_renames = 0;
|
*all_simple_renames = 0;
|
||||||
} else
|
} else
|
||||||
scheme_extend_module_rename(for_stx ? et_rn : rn, self_modidx, name, name, self_modidx, name,
|
scheme_extend_module_rename(for_stx ? et_rn : rn, self_modidx, name, name, self_modidx, name,
|
||||||
for_stx ? 1 : 0, NULL, NULL, 0);
|
for_stx ? 1 : 0, NULL, NULL, 0);
|
||||||
|
@ -6186,6 +6270,8 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env,
|
||||||
}
|
}
|
||||||
m = scheme_compile_expr_lift_to_let(code, eenv, &mrec, 0);
|
m = scheme_compile_expr_lift_to_let(code, eenv, &mrec, 0);
|
||||||
|
|
||||||
|
lifted_reqs = scheme_append(scheme_frame_get_require_lifts(eenv), lifted_reqs);
|
||||||
|
|
||||||
oi = scheme_optimize_info_create();
|
oi = scheme_optimize_info_create();
|
||||||
oi->context = (Scheme_Object *)env->genv->module;
|
oi->context = (Scheme_Object *)env->genv->module;
|
||||||
if (!(rec[drec].comp_flags & COMP_CAN_INLINE))
|
if (!(rec[drec].comp_flags & COMP_CAN_INLINE))
|
||||||
|
@ -6243,7 +6329,7 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env,
|
||||||
check_require_name, tables,
|
check_require_name, tables,
|
||||||
redef_modname,
|
redef_modname,
|
||||||
0, 0, 1, 0,
|
0, 0, 1, 0,
|
||||||
&all_simple_renames);
|
all_simple_renames);
|
||||||
|
|
||||||
if (rec[drec].comp)
|
if (rec[drec].comp)
|
||||||
e = NULL;
|
e = NULL;
|
||||||
|
@ -6361,7 +6447,7 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env,
|
||||||
l = (maybe_has_lifts
|
l = (maybe_has_lifts
|
||||||
? scheme_frame_get_end_statement_lifts(cenv)
|
? scheme_frame_get_end_statement_lifts(cenv)
|
||||||
: scheme_null);
|
: scheme_null);
|
||||||
scheme_frame_captures_lifts(cenv, add_lifted_defn, lift_data, l, lift_ctx);
|
scheme_frame_captures_lifts(cenv, add_lifted_defn, lift_data, l, lift_ctx, req_data);
|
||||||
maybe_has_lifts = 1;
|
maybe_has_lifts = 1;
|
||||||
|
|
||||||
if (kind == 2)
|
if (kind == 2)
|
||||||
|
@ -6381,6 +6467,8 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env,
|
||||||
e = scheme_expand_expr(e, nenv, &erec1, 0);
|
e = scheme_expand_expr(e, nenv, &erec1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lifted_reqs = scheme_append(scheme_frame_get_require_lifts(xenv), lifted_reqs);
|
||||||
|
|
||||||
l = scheme_frame_get_lifts(cenv);
|
l = scheme_frame_get_lifts(cenv);
|
||||||
if (SCHEME_NULLP(l)) {
|
if (SCHEME_NULLP(l)) {
|
||||||
/* No lifts - continue normally */
|
/* No lifts - continue normally */
|
||||||
|
@ -6389,7 +6477,7 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env,
|
||||||
p = SCHEME_CDR(p);
|
p = SCHEME_CDR(p);
|
||||||
} else {
|
} else {
|
||||||
/* Lifts - insert them and try again */
|
/* Lifts - insert them and try again */
|
||||||
all_simple_renames = 0;
|
*all_simple_renames = 0;
|
||||||
SCHEME_EXPAND_OBSERVE_MODULE_LIFT_LOOP(observer, scheme_copy_list(l));
|
SCHEME_EXPAND_OBSERVE_MODULE_LIFT_LOOP(observer, scheme_copy_list(l));
|
||||||
e = scheme_make_pair(e, scheme_make_integer(0)); /* don't re-compile/-expand */
|
e = scheme_make_pair(e, scheme_make_integer(0)); /* don't re-compile/-expand */
|
||||||
SCHEME_CAR(p) = e;
|
SCHEME_CAR(p) = e;
|
||||||
|
@ -6632,7 +6720,7 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env,
|
||||||
env->genv->module->indirect_provides = exis;
|
env->genv->module->indirect_provides = exis;
|
||||||
env->genv->module->num_indirect_provides = exicount;
|
env->genv->module->num_indirect_provides = exicount;
|
||||||
|
|
||||||
if (all_simple_renames) {
|
if (*all_simple_renames) {
|
||||||
env->genv->module->indirect_syntax_provides = exsis;
|
env->genv->module->indirect_syntax_provides = exsis;
|
||||||
env->genv->module->num_indirect_syntax_provides = exsicount;
|
env->genv->module->num_indirect_syntax_provides = exsicount;
|
||||||
} else {
|
} else {
|
||||||
|
@ -6645,7 +6733,7 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env,
|
||||||
|
|
||||||
env->genv->module->comp_prefix = cenv->prefix;
|
env->genv->module->comp_prefix = cenv->prefix;
|
||||||
|
|
||||||
if (all_simple_renames) {
|
if (*all_simple_renames) {
|
||||||
env->genv->module->rn_stx = scheme_true;
|
env->genv->module->rn_stx = scheme_true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6659,6 +6747,13 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env,
|
||||||
}
|
}
|
||||||
|
|
||||||
p = SCHEME_STX_CAR(form);
|
p = SCHEME_STX_CAR(form);
|
||||||
|
|
||||||
|
/* Add lifted requires */
|
||||||
|
if (!SCHEME_NULLP(lifted_reqs)) {
|
||||||
|
lifted_reqs = scheme_reverse(lifted_reqs);
|
||||||
|
first = scheme_append(lifted_reqs, first);
|
||||||
|
}
|
||||||
|
|
||||||
return scheme_datum_to_syntax(cons(p, first), form, form, 0, 2);
|
return scheme_datum_to_syntax(cons(p, first), form, form, 0, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9045,7 +9140,7 @@ static Scheme_Object *do_require(Scheme_Object *form, Scheme_Comp_Env *env,
|
||||||
0, 0, 0, 0,
|
0, 0, 0, 0,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
if (rec[drec].comp) {
|
if (rec && rec[drec].comp) {
|
||||||
/* Dummy lets us access a top-level environment: */
|
/* Dummy lets us access a top-level environment: */
|
||||||
dummy = scheme_make_environment_dummy(env);
|
dummy = scheme_make_environment_dummy(env);
|
||||||
|
|
||||||
|
@ -9071,6 +9166,20 @@ require_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *er
|
||||||
return do_require(form, env, erec, drec);
|
return do_require(form, env, erec, drec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Scheme_Object *scheme_toplevel_require_for_expand(Scheme_Object *module_path,
|
||||||
|
long phase,
|
||||||
|
Scheme_Comp_Env *cenv,
|
||||||
|
Scheme_Object *mark)
|
||||||
|
{
|
||||||
|
Scheme_Object *form;
|
||||||
|
|
||||||
|
form = make_require_form(module_path, phase, mark);
|
||||||
|
|
||||||
|
do_require(form, cenv, NULL, 0);
|
||||||
|
|
||||||
|
return form;
|
||||||
|
}
|
||||||
|
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
/* dummy forms */
|
/* dummy forms */
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
|
|
|
@ -11,9 +11,9 @@
|
||||||
EXPECTED_PRIM_COUNT to the new value, and then USE_COMPILED_STARTUP
|
EXPECTED_PRIM_COUNT to the new value, and then USE_COMPILED_STARTUP
|
||||||
can be set to 1 again. */
|
can be set to 1 again. */
|
||||||
|
|
||||||
#define USE_COMPILED_STARTUP 1
|
#define USE_COMPILED_STARTUP 0
|
||||||
|
|
||||||
#define EXPECTED_PRIM_COUNT 945
|
#define EXPECTED_PRIM_COUNT 946
|
||||||
|
|
||||||
#ifdef MZSCHEME_SOMETHING_OMITTED
|
#ifdef MZSCHEME_SOMETHING_OMITTED
|
||||||
# undef USE_COMPILED_STARTUP
|
# undef USE_COMPILED_STARTUP
|
||||||
|
|
|
@ -2065,11 +2065,22 @@ Scheme_Object *scheme_env_frame_uid(Scheme_Comp_Env *env);
|
||||||
|
|
||||||
typedef Scheme_Object *(*Scheme_Lift_Capture_Proc)(Scheme_Object *, Scheme_Object **, Scheme_Object *, Scheme_Comp_Env *);
|
typedef Scheme_Object *(*Scheme_Lift_Capture_Proc)(Scheme_Object *, Scheme_Object **, Scheme_Object *, Scheme_Comp_Env *);
|
||||||
void scheme_frame_captures_lifts(Scheme_Comp_Env *env, Scheme_Lift_Capture_Proc cp, Scheme_Object *data,
|
void scheme_frame_captures_lifts(Scheme_Comp_Env *env, Scheme_Lift_Capture_Proc cp, Scheme_Object *data,
|
||||||
Scheme_Object *end_stmts, Scheme_Object *context_key);
|
Scheme_Object *end_stmts, Scheme_Object *context_key, Scheme_Object *require_lifts);
|
||||||
|
void scheme_propagate_require_lift_capture(Scheme_Comp_Env *orig_env, Scheme_Comp_Env *env);
|
||||||
Scheme_Object *scheme_frame_get_lifts(Scheme_Comp_Env *env);
|
Scheme_Object *scheme_frame_get_lifts(Scheme_Comp_Env *env);
|
||||||
Scheme_Object *scheme_frame_get_end_statement_lifts(Scheme_Comp_Env *env);
|
Scheme_Object *scheme_frame_get_end_statement_lifts(Scheme_Comp_Env *env);
|
||||||
|
Scheme_Object *scheme_frame_get_require_lifts(Scheme_Comp_Env *env);
|
||||||
Scheme_Object *scheme_generate_lifts_key(void);
|
Scheme_Object *scheme_generate_lifts_key(void);
|
||||||
|
|
||||||
|
Scheme_Object *scheme_toplevel_require_for_expand(Scheme_Object *module_path,
|
||||||
|
long phase,
|
||||||
|
Scheme_Comp_Env *cenv,
|
||||||
|
Scheme_Object *mark);
|
||||||
|
Scheme_Object *scheme_parse_lifted_require(Scheme_Object *module_path,
|
||||||
|
long phase,
|
||||||
|
Scheme_Object *mark,
|
||||||
|
void *data);
|
||||||
|
|
||||||
void scheme_add_local_syntax(int cnt, Scheme_Comp_Env *env);
|
void scheme_add_local_syntax(int cnt, Scheme_Comp_Env *env);
|
||||||
void scheme_set_local_syntax(int pos, Scheme_Object *name, Scheme_Object *val,
|
void scheme_set_local_syntax(int pos, Scheme_Object *name, Scheme_Object *val,
|
||||||
Scheme_Comp_Env *env);
|
Scheme_Comp_Env *env);
|
||||||
|
|
|
@ -13,12 +13,12 @@
|
||||||
consistently.)
|
consistently.)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define MZSCHEME_VERSION "4.1.3.9"
|
#define MZSCHEME_VERSION "4.1.3.10"
|
||||||
|
|
||||||
#define MZSCHEME_VERSION_X 4
|
#define MZSCHEME_VERSION_X 4
|
||||||
#define MZSCHEME_VERSION_Y 1
|
#define MZSCHEME_VERSION_Y 1
|
||||||
#define MZSCHEME_VERSION_Z 3
|
#define MZSCHEME_VERSION_Z 3
|
||||||
#define MZSCHEME_VERSION_W 9
|
#define MZSCHEME_VERSION_W 10
|
||||||
|
|
||||||
#define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y)
|
#define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y)
|
||||||
#define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W)
|
#define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user