Differences From Artifact [09f6f71388735bcb]:
- File
polemy/eval.d
- 2010-11-27 14:23:54 - part of checkin [005474ba5b] on branch trunk - changed: not to lift _|_ (user: kinaba) [annotate]
To Artifact [271574033e4f3a71]:
- File
polemy/eval.d
- 2010-11-27 14:28:33 - part of checkin [950fc6d3d4] on branch trunk - no. lift _|_ for corecursion checking again. Current choices is, if it failed we instead assing _|_ itself. Maybe the better choice is to give up memoization when it failed to lift... (user: kinaba) [annotate]
414 // automatic memoized co-recursive execution 414 // automatic memoized co-recursive execution
415 MemokeyType memokey = new MemokeyType(cast(void* 415 MemokeyType memokey = new MemokeyType(cast(void*
416 if(auto p = memokey in memo) 416 if(auto p = memokey in memo)
417 { 417 {
418 (*p)[1] ++; 418 (*p)[1] ++;
419 return (*p)[0]; 419 return (*p)[0];
420 } 420 }
421 else | 421 else {
> 422 Value v;
> 423 try { v = evlay.lift(new BottomValue, ct
422 memo[memokey] = tuple(cast(Value)new Bot | 424 memo[memokey] = tuple(v, 0);
> 425 }
423 426
424 Value r = nonMemoizedRun(); 427 Value r = nonMemoizedRun();
425 428
426 int touched = memo[memokey][1]; 429 int touched = memo[memokey][1];
427 memo[memokey] = tuple(r, 12345678); 430 memo[memokey] = tuple(r, 12345678);
428 return r; 431 return r;
429 } 432 }