mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-07-09 14:07:34 +02:00
setting correct top in sexp_apply
This commit is contained in:
parent
9c128c49fa
commit
58a6724dea
1 changed files with 7 additions and 5 deletions
12
eval.c
12
eval.c
|
@ -2264,18 +2264,20 @@ sexp sexp_env_copy (sexp ctx, sexp to, sexp from, sexp ls) {
|
||||||
/************************** eval interface ****************************/
|
/************************** eval interface ****************************/
|
||||||
|
|
||||||
sexp sexp_apply (sexp ctx, sexp proc, sexp args) {
|
sexp sexp_apply (sexp ctx, sexp proc, sexp args) {
|
||||||
sexp ls, *stack = sexp_stack_data(sexp_context_stack(ctx));
|
sexp res, ls, *stack = sexp_stack_data(sexp_context_stack(ctx));
|
||||||
sexp_sint_t top = sexp_context_top(ctx), offset;
|
sexp_sint_t top = sexp_context_top(ctx), len, offset;
|
||||||
offset = top + sexp_unbox_fixnum(sexp_length(ctx, args));
|
len = sexp_unbox_fixnum(sexp_length(ctx, args));
|
||||||
|
offset = top + len;
|
||||||
for (ls=args; sexp_pairp(ls); ls=sexp_cdr(ls), top++)
|
for (ls=args; sexp_pairp(ls); ls=sexp_cdr(ls), top++)
|
||||||
stack[--offset] = sexp_car(ls);
|
stack[--offset] = sexp_car(ls);
|
||||||
stack[top] = sexp_make_fixnum(top);
|
stack[top] = sexp_make_fixnum(len);
|
||||||
top++;
|
top++;
|
||||||
sexp_context_top(ctx) = top + 3;
|
sexp_context_top(ctx) = top + 3;
|
||||||
stack[top++] = sexp_make_fixnum(0);
|
stack[top++] = sexp_make_fixnum(0);
|
||||||
stack[top++] = final_resumer;
|
stack[top++] = final_resumer;
|
||||||
stack[top++] = sexp_make_fixnum(0);
|
stack[top++] = sexp_make_fixnum(0);
|
||||||
return sexp_vm(ctx, proc);
|
res = sexp_vm(ctx, proc);
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
sexp sexp_compile (sexp ctx, sexp x) {
|
sexp sexp_compile (sexp ctx, sexp x) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue