public void Visit(ASTNode_SetVar node)
            {
                if (node.address is GlobalAddress)
                {
                    JITInterpreter_DS.Instance().BeginEmitPopGlobal(mILGenerator, (GlobalAddress)node.address);

                    mTailCallFlags.Push(false);
                    node.rightNode.AcceptVisitor(this);
                    mTailCallFlags.Pop();

                    JITInterpreter_DS.Instance().EndEmitPopGlobal(mILGenerator, (GlobalAddress)node.address);
                }
                else if (node.address is LocalAddress)
                {
                    BeginEmitPopLocal((LocalAddress)node.address);

                    mTailCallFlags.Push(false);
                    node.rightNode.AcceptVisitor(this);
                    mTailCallFlags.Pop();

                    EndEmitPopLocal((LocalAddress)node.address);
                }
                else
                {
                    var context = BeginEmitPopFree((FreeAddress)node.address);

                    mTailCallFlags.Push(false);
                    node.rightNode.AcceptVisitor(this);
                    mTailCallFlags.Pop();

                    EndEmitPopFree((FreeAddress)node.address, context);
                }
                mILGenerator.Emit(OpCodes.Ldnull);
            }
示例#2
0
 public void Visit(ASTNode_SetVar node)
 {
     if (node.address is FreeAddress)
     {
         BodyFreeAddresses.Add((FreeAddress)node.address);
     }
     node.rightNode.AcceptVisitor(this);
 }
示例#3
0
 public void Visit(ASTNode_SetVar node)
 {
     node.rightNode.AcceptVisitor(this);
     Env.SetVar(mEnv, node.address, Value);
     Value = null;
 }
 public void Visit(ASTNode_SetVar node)
 {
     node.rightNode.AcceptVisitor(this);
     Env.SetVar(mEnv, node.address, Value);
     Value = null;
 }
            public void Visit(ASTNode_SetVar node)
            {
                if (node.address is GlobalAddress) {
                    JITInterpreter_DS2.Instance().BeginEmitPopGlobal(mILGenerator, (GlobalAddress)node.address);

                    mTaillCallFlags.Push(false);
                    node.rightNode.AcceptVisitor(this);
                    mTaillCallFlags.Pop();

                    JITInterpreter_DS2.Instance().EndEmitPopGlobal(mILGenerator, (GlobalAddress)node.address);
                } else if (node.address is LocalAddress) {
                    BeginEmitPopLocal((LocalAddress)node.address);

                    mTaillCallFlags.Push(false);
                    node.rightNode.AcceptVisitor(this);
                    mTaillCallFlags.Pop();

                    EndEmitPopLocal((LocalAddress)node.address);
                } else {
                    BeginEmitPopFree((FreeAddress)node.address);

                    mTaillCallFlags.Push(false);
                    node.rightNode.AcceptVisitor(this);
                    mTaillCallFlags.Pop();

                    EndEmitPopFree((FreeAddress)node.address);
                }
                mILGenerator.Emit(OpCodes.Ldnull);
            }
示例#6
0
 public void Visit(ASTNode_SetVar node)
 {
     if (node.address is FreeAddress) {
         BodyFreeAddresses.Add((FreeAddress)node.address);
     }
     node.rightNode.AcceptVisitor(this);
 }