Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        protected override void VisitStoreVar(StoreVar downNode, object o)
        {
            PointerValue ptr = new PointerToLocationValue(this.state.Pool[downNode.Var]);

            this.storeVar(downNode, ptr, o);
        }