コード例 #1
0
 public override bool Visit(AstIfStatement node)
 {
     ErrorIfIsNull(node.Condition);
     ErrorIfIsNull(node.ThenBlock);
     ErrorIfIsNull(node.ElseBlock);
     return true;
 }
コード例 #2
0
 public override bool Visit(AstIfStatement node)
 {
     return true;
 }
コード例 #3
0
        // #IF_THEN_STATEMENT IF LEFT_PAREN #OR_TEST RIGHT_PAREN BLOCK_START #STATEMENTS_BLOCK BLOCK_END
        private void ConstructIfThenStatement()
        {
            var thenBlock = nodes.Pop() as AstStatementsBlock;
            var orTest = nodes.Pop() as AstExpression;

            var elseBlock = new AstStatementsBlock(new AstStatementsList(new List<AstStatement>()));
            var ifThenStmt = new AstIfStatement(orTest, thenBlock, elseBlock);
            PushNode(ifThenStmt);
        }
コード例 #4
0
        // #IF_STATEMENT #IF_THEN_STATEMENT ELSE BLOCK_START #STATEMENTS_BLOCK BLOCK_END
        private void ConstructIfElseStatement()
        {
            var elseBlock = nodes.Pop() as AstStatementsBlock;
            var ifStmt = nodes.Pop() as AstIfStatement;

            var thenElseStmt = new AstIfStatement(
                ifStmt.Condition,
                ifStmt.ThenBlock,
                elseBlock
            );

            PushNode(thenElseStmt);
        }
コード例 #5
0
        public override bool Visit(AstIfStatement node)
        {
            node.Condition.Accept(this);
            string currIf = CreateIfUse().ToString();

            var condExprResult = GetCurrUnnamedVariable();
            codeStream.WriteLine(CreateUnnamedVariable() + " = icmp eq i1 1, " + condExprResult);
            codeStream.WriteLine("br i1 " + GetCurrUnnamedVariable() + ", label %then" + currIf + ", label %else" + currIf);
            codeStream.WriteLine("then" + currIf.ToString() + ":");
            node.ThenBlock.Statements.Accept(this);
            codeStream.WriteLine("br label %endif" + currIf);
            codeStream.WriteLine("else" + currIf + ":");
            node.ElseBlock.Accept(this);
            codeStream.WriteLine("br label %endif" + currIf);
            codeStream.WriteLine("endif" + currIf + ":");
            return false;
        }
コード例 #6
0
 public abstract bool Visit(AstIfStatement node);