public override SemanticCheckResult VisitLessEqual(ASTLessEqualNode LessEqual) { var left = LessEqual.Left.Accept(this); var right = LessEqual.Right.Accept(this); LessEqual.SemanticCheckResult.Ensure(left, left.Type == CompilationUnit.TypeEnvironment.Int, new Lazy <Error>(() => new Error("Left Expresion must be of tipe Int.", ErrorKind.TypeError, LessEqual.LessEqualToken.Line, LessEqual.LessEqualToken.Column))); LessEqual.SemanticCheckResult.Ensure(right, right.Type == CompilationUnit.TypeEnvironment.Int, new Lazy <Error>(() => new Error("Right Expresion must be of tipe Int.", ErrorKind.TypeError, LessEqual.LessEqualToken.Line, LessEqual.LessEqualToken.Column))); LessEqual.SemanticCheckResult.EnsureReturnType(CompilationUnit.TypeEnvironment.Bool); return(LessEqual.SemanticCheckResult); }
public ASTCILNode VisitLessEqual(ASTLessEqualNode LessEqual) { var ifLabel = labelIlGenerator.GenerateIf(); return(new ASTCILIfNode( new ASTCILBlockNode(new ASTCILExpressionNode[] { new ASTCILBoolOrTwoVariablesNode( (ASTCILExpressionNode)(new ASTLessThanNode { Left = LessEqual.Left, Right = LessEqual.Right }).Accept(this), (ASTCILExpressionNode)(new ASTEqualNode { Left = LessEqual.Left, Right = LessEqual.Right }).Accept(this)), new ASTCILGotoNode(ifLabel.end), }), new ASTCILIntConstantNode(1), new ASTCILIntConstantNode(0), ifLabel)); }
public virtual T VisitLessEqual(ASTLessEqualNode LessEqual) { LessEqual.Left.Accept(this); LessEqual.Right.Accept(this); return(default(T)); }