public static BoundUnaryExpression Not(SyntaxNode syntax, BoundExpression condition) { Debug.Assert(condition.Type == TypeSymbol.Bool); var op = BoundUnaryOperator.Bind(SyntaxKind.BangToken, TypeSymbol.Bool); Debug.Assert(op != null); return(new BoundUnaryExpression(syntax, op, condition)); }
private BoundExpression Negate(BoundExpression condition) { if (condition is BoundLiteralExpression literal) { var value = (bool)literal.Value; return(new BoundLiteralExpression(!value)); } var op = BoundUnaryOperator.Bind(SyntaxKind.BangToken, TypeSymbol.Bool); return(new BoundUnaryExpression(op, condition)); }
private BoundExpression BindUnaryExpression(UnaryExpressionSyntax syntax) { var boundOperand = BindExpression(syntax.Operand); var boundOperator = BoundUnaryOperator.Bind(syntax.OperatorToken.Kind, boundOperand.Type); if (boundOperator == null) { _diagnostics.ReportUndefinedUnaryOperator(syntax.OperatorToken.Span, syntax.OperatorToken.Text, boundOperand.Type); return(boundOperand); } return(new BoundUnaryExpression(boundOperator, boundOperand)); }
private BoundExpression Negate(BoundExpression expression) { if (expression is BoundLiteralExpression literal) { var value = (bool)literal.Value; return(new BoundLiteralExpression(!value)); } var negate = BoundUnaryOperator.Bind(TokenKind.Bang, TypeSymbol.Bool); return(new BoundUnaryExpression(negate, expression)); }
private BoundExpression BindUnaryExpression(UnaryExpressionSyntax syntax) { var boundOperand = BindExpression(syntax.Operand); var boundOperator = BoundUnaryOperator.Bind(syntax.OperatorToken.Kind, boundOperand.Type); if (boundOperator == null) { _diagnostics.Add($"Unary operator '{syntax.OperatorToken.Text}' is not defined for type {boundOperand.Type}."); return(boundOperand); } return(new BoundUnaryExpression(boundOperator, boundOperand)); }