From 58a6724deab0c2d010e7a37031dde2b671e96e0a Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Thu, 5 Nov 2009 18:54:25 +0900 Subject: [PATCH] setting correct top in sexp_apply --- eval.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/eval.c b/eval.c index 04124004..463b2cde 100644 --- a/eval.c +++ b/eval.c @@ -2264,18 +2264,20 @@ sexp sexp_env_copy (sexp ctx, sexp to, sexp from, sexp ls) { /************************** eval interface ****************************/ sexp sexp_apply (sexp ctx, sexp proc, sexp args) { - sexp ls, *stack = sexp_stack_data(sexp_context_stack(ctx)); - sexp_sint_t top = sexp_context_top(ctx), offset; - offset = top + sexp_unbox_fixnum(sexp_length(ctx, args)); + sexp res, ls, *stack = sexp_stack_data(sexp_context_stack(ctx)); + sexp_sint_t top = sexp_context_top(ctx), len, offset; + len = sexp_unbox_fixnum(sexp_length(ctx, args)); + offset = top + len; for (ls=args; sexp_pairp(ls); ls=sexp_cdr(ls), top++) stack[--offset] = sexp_car(ls); - stack[top] = sexp_make_fixnum(top); + stack[top] = sexp_make_fixnum(len); top++; sexp_context_top(ctx) = top + 3; stack[top++] = sexp_make_fixnum(0); stack[top++] = final_resumer; 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) {