@@ -228,9 +228,9 @@ return theID; } override Value eval_( Die e, Table ctx, bool ctxMod ) { - return new BottomValue; + return this.lift(new BottomValue, ctx, e.pos); } override Value eval_( Str e, Table ctx, bool ctxMod ) { return this.lift(super.eval_(e,ctx,ctxMod), ctx, e.pos); @@ -414,21 +414,20 @@ // automatic memoized co-recursive execution MemokeyType memokey = new MemokeyType(cast(void*)ast, lay, ctx); if(auto p = memokey in memo) { - (*p)[1] ++; - return (*p)[0]; + if( ++(*p)[1] >= 2 ) // [TODO] is 2 really enough?? + return (*p)[0]; } - else { + else + { Value v; try { v = evlay.lift(new BottomValue, ctx, pos); } catch { v = new BottomValue; } memo[memokey] = tuple(v, 0); } Value r = nonMemoizedRun(); - - int touched = memo[memokey][1]; - memo[memokey] = tuple(r, 12345678); + memo[memokey] = tuple(r, 9999); return r; } } return new UserDefinedFunValue(e,ctx);