public override void VisitIf(IfStatement ifStmt) { ifStmt.Test.Accept(this); if (ifStmt.Test.NodeType != typeManager.BoolType) { report.Error(ifStmt.Test.Location, "BOOL expression expected"); } ifStmt.ThenPart.Accept(this); if (ifStmt.ElsePart != null) ifStmt.ElsePart.Accept(this); }
public override void VisitIf(IfStatement ifStmt) { Label endLabel = ilGenerator.DefineLabel(); ifStmt.Test.Accept(this); if (ifStmt.ElsePart == null) { ilGenerator.Emit(OpCodes.Brfalse, endLabel); ifStmt.ThenPart.Accept(this); } else { Label elseLabel = ilGenerator.DefineLabel(); ilGenerator.Emit(OpCodes.Brfalse, elseLabel); ifStmt.ThenPart.Accept(this); ilGenerator.Emit(OpCodes.Br, endLabel); ilGenerator.MarkLabel(elseLabel); ifStmt.ElsePart.Accept(this); } ilGenerator.MarkLabel(endLabel); }
public IfExpression(Expression test, Node thenPart, Node elsePart, Location location) : base(location) { ifStatement = new IfStatement(test, thenPart, elsePart, location); }
public virtual void VisitIf(IfStatement ifStmt) { }