Index: polemy/eval.d ================================================================== --- polemy/eval.d +++ polemy/eval.d @@ -416,12 +416,15 @@ if(auto p = memokey in memo) { (*p)[1] ++; return (*p)[0]; } - else - memo[memokey] = tuple(cast(Value)new BottomValue, 0); + 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);