public override void EvalCond(PathCond evalCond, IDictionary <FullCellAddr, PathCond> evalConds, List <CGCachedExpr> caches) { if (es.Length == 3) { CachedAtom atom = new CachedAtom(es[0], caches); es[0].EvalCond(evalCond, evalConds, caches); es[0] = atom.cachedExpr; es[1].EvalCond(evalCond.And(atom), evalConds, caches); es[2].EvalCond(evalCond.AndNot(atom), evalConds, caches); } }
public override void EvalCond(PathCond evalCond, IDictionary <FullCellAddr, PathCond> evalConds, List <CGCachedExpr> caches) { for (int i = 0; i < es.Length; i++) { es[i].EvalCond(evalCond, evalConds, caches); if (SHORTCIRCUIT_EVALCONDS && i != es.Length - 1) { // Take short-circuit evaluation into account for precision CachedAtom atom = new CachedAtom(es[i], caches); evalCond = evalCond.AndNot(atom); es[i] = atom.cachedExpr; } } }