WIP: eval/apply i/t

This commit is contained in:
Jan Nieuwenhuizen 2019-10-26 16:11:54 +02:00
parent 606675ae8d
commit ab5128960e
No known key found for this signature in database
GPG Key ID: F3C1A0D9C1D65273
1 changed files with 9 additions and 7 deletions

View File

@ -375,6 +375,7 @@ eval_apply ()
SCM c;
SCM d;
int t;
long i;
eval_apply:
if (R3 == cell_vm_evlis2)
@ -488,11 +489,12 @@ apply:
}
else if (t == TCONTINUATION)
{
v = CONTINUATION (CAR (R1));
a = CAR (R1);
v = CONTINUATION (a);
if (LENGTH (v) != 0)
{
for (t = 0; t < LENGTH (v); t = t + 1)
g_stack_array[STACK_SIZE - LENGTH (v) + t] = vector_ref_ (v, t);
for (i = 0; i < LENGTH (v); i = i + 1)
g_stack_array[STACK_SIZE - LENGTH (v) + i] = vector_ref_ (v, i);
g_stack = STACK_SIZE - LENGTH (v);
}
x = R1;
@ -974,16 +976,16 @@ call_with_current_continuation:
x = make_continuation (g_continuations);
g_continuations = g_continuations + 1;
v = make_vector__ (STACK_SIZE - g_stack);
for (t = g_stack; t < STACK_SIZE; t = t + 1)
vector_set_x_ (v, t - g_stack, g_stack_array[t]);
for (i = g_stack; i < STACK_SIZE; i = i + 1)
vector_set_x_ (v, i - g_stack, g_stack_array[i]);
CONTINUATION (x) = v;
gc_pop_frame ();
push_cc (cons (CAR (R1), cons (x, cell_nil)), x, R0, cell_vm_call_with_current_continuation2);
goto apply;
call_with_current_continuation2:
v = make_vector__ (STACK_SIZE - g_stack);
for (t = g_stack; t < STACK_SIZE; t = t + 1)
vector_set_x_ (v, t - g_stack, g_stack_array[t]);
for (i = g_stack; i < STACK_SIZE; i = i + 1)
vector_set_x_ (v, i - g_stack, g_stack_array[i]);
CONTINUATION (R2) = v;
goto vm_return;