Inheritance: IASTNode
            public void Visit(ASTNode_If node)
            {
                Label thenLabel = mILGenerator.DefineLabel();
                Label endLabel  = mILGenerator.DefineLabel();

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

                mILGenerator.Emit(OpCodes.Unbox_Any, typeof(bool));
                mILGenerator.Emit(OpCodes.Brtrue, thenLabel);

                mTaillCallFlags.Push(true);
                node.elseNode.AcceptVisitor(this);
                mTaillCallFlags.Pop();

                mILGenerator.Emit(OpCodes.Br, endLabel);

                mILGenerator.MarkLabel(thenLabel);

                mTaillCallFlags.Push(true);
                node.thenNode.AcceptVisitor(this);
                mTaillCallFlags.Pop();

                mILGenerator.MarkLabel(endLabel);
            }
 public void Visit(ASTNode_If node)
 {
     node.predNode.AcceptVisitor(this);
     if ((bool)Value)
     {
         node.thenNode.AcceptVisitor(this);
     }
     else
     {
         node.elseNode.AcceptVisitor(this);
     }
 }
Example #3
0
 public void Visit(ASTNode_If node)
 {
     node.predNode.AcceptVisitor(this);
     if ((bool)Value) node.thenNode.AcceptVisitor(this);
     else node.elseNode.AcceptVisitor(this);
 }
Example #4
0
 public void Visit(ASTNode_If node)
 {
     node.predNode.AcceptVisitor(this);
     node.thenNode.AcceptVisitor(this);
     node.elseNode.AcceptVisitor(this);
 }
            public void Visit(ASTNode_If node)
            {
                Label thenLabel = mILGenerator.DefineLabel();
                Label endLabel = mILGenerator.DefineLabel();

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

                mILGenerator.Emit(OpCodes.Unbox_Any, typeof(bool));
                mILGenerator.Emit(OpCodes.Brtrue, thenLabel);

                mTaillCallFlags.Push(true);
                node.elseNode.AcceptVisitor(this);
                mTaillCallFlags.Pop();

                mILGenerator.Emit(OpCodes.Br, endLabel);

                mILGenerator.MarkLabel(thenLabel);

                mTaillCallFlags.Push(true);
                node.thenNode.AcceptVisitor(this);
                mTaillCallFlags.Pop();

                mILGenerator.MarkLabel(endLabel);
            }
Example #6
0
 public void Visit(ASTNode_If node)
 {
     node.predNode.AcceptVisitor(this);
     node.thenNode.AcceptVisitor(this);
     node.elseNode.AcceptVisitor(this);
 }