protected override void VisitLift(Lift downNode, object o) { PointerToNode ptrUpNode = (o as Data).PointerToNode; LiftTask task = downNode.Task; if (task is StackLiftTask) { int depth = (task as StackLiftTask).Depth; ptrUpNode = new PointerToNode(ptrUpNode.Node = SpecializingVisitor.liftValue(this.state.Stack[depth])); this.state.Stack.RemoveAt(depth); } else { Variable var = (task as VariableLiftTask).Variable; ptrUpNode = new PointerToNode(ptrUpNode.Node = SpecializingVisitor.liftValue(this.state.Pool[var].Val)); PointerValue ptr = new PointerToLocationValue(this.state.Pool[var]); ptrUpNode = new PointerToNode(ptrUpNode.Node = new StoreVar(this.varsHash[ptr])); ptr.SetZeroValue(); } this.AddTask(downNode.Next, ptrUpNode); }
protected override void VisitStoreVar(StoreVar downNode, object o) { PointerValue ptr = new PointerToLocationValue(this.state.Pool[downNode.Var]); this.storeVar(downNode, ptr, o); }