fix evaluation of #%variable-reference
variants
This commit is contained in:
parent
e6bab71e8a
commit
57b6a1402f
|
@ -1764,7 +1764,6 @@ static Scheme_Object *ref_execute (Scheme_Object *data)
|
||||||
}
|
}
|
||||||
|
|
||||||
tl = SCHEME_PTR2_VAL(data);
|
tl = SCHEME_PTR2_VAL(data);
|
||||||
toplevels = (Scheme_Prefix *)MZ_RUNSTACK[SCHEME_TOPLEVEL_DEPTH(tl)];
|
|
||||||
if (SCHEME_FALSEP(tl))
|
if (SCHEME_FALSEP(tl))
|
||||||
home = NULL;
|
home = NULL;
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -2651,7 +2651,7 @@ int scheme_generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int w
|
||||||
finish_branch_with_true(jitter, for_branch);
|
finish_branch_with_true(jitter, for_branch);
|
||||||
else {
|
else {
|
||||||
Scheme_Object *dummy;
|
Scheme_Object *dummy;
|
||||||
int pos, is_const;
|
int pos, is_const, prefix_ready = 0;
|
||||||
|
|
||||||
mz_rs_sync();
|
mz_rs_sync();
|
||||||
|
|
||||||
|
@ -2660,7 +2660,7 @@ int scheme_generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int w
|
||||||
dummy = SCHEME_PTR2_VAL(obj);
|
dummy = SCHEME_PTR2_VAL(obj);
|
||||||
obj = SCHEME_PTR1_VAL(obj);
|
obj = SCHEME_PTR1_VAL(obj);
|
||||||
|
|
||||||
if (!SCHEME_SYMBOLP(obj) && !SCHEME_FALSEP(obj)) {
|
if (!SCHEME_SYMBOLP(obj) && !SCHEME_FALSEP(obj) && !SAME_OBJ(obj, scheme_true)) {
|
||||||
/* Load global array: */
|
/* Load global array: */
|
||||||
pos = mz_remap(SCHEME_TOPLEVEL_DEPTH(obj));
|
pos = mz_remap(SCHEME_TOPLEVEL_DEPTH(obj));
|
||||||
jit_ldxi_p(JIT_R2, JIT_RUNSTACK, WORDS_TO_BYTES(pos));
|
jit_ldxi_p(JIT_R2, JIT_RUNSTACK, WORDS_TO_BYTES(pos));
|
||||||
|
@ -2668,16 +2668,22 @@ int scheme_generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int w
|
||||||
pos = SCHEME_TOPLEVEL_POS(obj);
|
pos = SCHEME_TOPLEVEL_POS(obj);
|
||||||
jit_ldxi_p(JIT_R1, JIT_R2, &(((Scheme_Prefix *)0x0)->a[pos]));
|
jit_ldxi_p(JIT_R1, JIT_R2, &(((Scheme_Prefix *)0x0)->a[pos]));
|
||||||
CHECK_LIMIT();
|
CHECK_LIMIT();
|
||||||
|
prefix_ready = 1;
|
||||||
|
} else if (SCHEME_FALSEP(obj)) {
|
||||||
|
(void)jit_movi_p(JIT_R1, scheme_false);
|
||||||
} else {
|
} else {
|
||||||
scheme_mz_load_retained(jitter, JIT_R1, obj);
|
scheme_mz_load_retained(jitter, JIT_R1, obj);
|
||||||
pos = mz_remap(SCHEME_TOPLEVEL_DEPTH(dummy));
|
|
||||||
jit_ldxi_p(JIT_R2, JIT_RUNSTACK, WORDS_TO_BYTES(pos));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Load dummy bucket: */
|
/* Load dummy bucket: */
|
||||||
if (SCHEME_FALSEP(dummy)) {
|
if (SCHEME_FALSEP(dummy)) {
|
||||||
(void)jit_movi_p(JIT_R2, scheme_false);
|
(void)jit_movi_p(JIT_R2, scheme_false);
|
||||||
} else {
|
} else {
|
||||||
|
if (!prefix_ready) {
|
||||||
|
/* Load global array: */
|
||||||
|
pos = mz_remap(SCHEME_TOPLEVEL_DEPTH(dummy));
|
||||||
|
jit_ldxi_p(JIT_R2, JIT_RUNSTACK, WORDS_TO_BYTES(pos));
|
||||||
|
}
|
||||||
pos = SCHEME_TOPLEVEL_POS(dummy);
|
pos = SCHEME_TOPLEVEL_POS(dummy);
|
||||||
jit_ldxi_p(JIT_R2, JIT_R2, &(((Scheme_Prefix *)0x0)->a[pos]));
|
jit_ldxi_p(JIT_R2, JIT_R2, &(((Scheme_Prefix *)0x0)->a[pos]));
|
||||||
CHECK_LIMIT();
|
CHECK_LIMIT();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user