From f9633b0bef26184c5e36eba25d8b3b6bd687ee18 Mon Sep 17 00:00:00 2001 From: Teddy Date: Sat, 17 Aug 2013 16:26:40 +0800 Subject: fixed a bug in the `SpecialOptForce` --- builtin.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'builtin.cpp') diff --git a/builtin.cpp b/builtin.cpp index bbc2f93..1ab1d37 100644 --- a/builtin.cpp +++ b/builtin.cpp @@ -564,9 +564,10 @@ Pair *SpecialOptForce::call(Pair *_args, Environment * &lenvt, args = TO_PAIR(args->cdr); Pair *ret_addr = cont->pc; Pair *nexp = cont->state; + PromObj *prom = static_cast(args->car); if (nexp) { - EvalObj *mem = args->car; + EvalObj *mem = TO_PAIR(args->cdr)->car; prom->feed_mem(mem); gc.expose(*top_ptr); *top_ptr++ = gc.attach(mem); @@ -577,7 +578,6 @@ Pair *SpecialOptForce::call(Pair *_args, Environment * &lenvt, { if (!args->car->is_prom_obj()) throw TokenError("a promise", RUN_ERR_WRONG_TYPE); - prom = static_cast(args->car); EvalObj *mem = prom->get_mem(); if (mem) // fetch from memorized result { @@ -588,6 +588,7 @@ Pair *SpecialOptForce::call(Pair *_args, Environment * &lenvt, } else // force { + gc.attach(static_cast(*(++top_ptr))); gc.attach(static_cast(*(++top_ptr))); top_ptr++; nexp = cont->state = prom->get_exp(); -- cgit v1.2.3