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                          }