public override bool Visit(AstIfStatement node) { ErrorIfIsNull(node.Condition); ErrorIfIsNull(node.ThenBlock); ErrorIfIsNull(node.ElseBlock); return true; }
public override bool Visit(AstIfStatement node) { return true; }
// #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); }
// #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); }
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; }
public abstract bool Visit(AstIfStatement node);