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)); }
public BoundUnaryExpression(BoundUnaryOperator op, BoundExpression operand) { this.Op = op; Operand = operand; }