internal AssignmentExpressionNode(Token identifier, Token equal, ExpressionNode expression) { Identifier = identifier ?? throw new ArgumentNullException(nameof(identifier)); Equal = equal ?? throw new ArgumentNullException(nameof(equal)); Expression = expression ?? throw new ArgumentNullException(nameof(expression)); }
internal ParenthesizedExpressionNode(Token openParenthesis, ExpressionNode expression) { MainToken = openParenthesis; Expression = expression ?? throw new ArgumentNullException(nameof(expression)); }
internal UnaryExpressionNode(Token op, ExpressionNode operand) { Operator = op ?? throw new ArgumentNullException(nameof(op)); Operand = operand ?? throw new ArgumentNullException(nameof(operand)); }
internal BinaryExpressionNode(ExpressionNode lhs, Token op, ExpressionNode rhs) { Left = lhs ?? throw new ArgumentNullException(nameof(lhs)); Operator = op ?? throw new ArgumentNullException(nameof(op)); Right = rhs ?? throw new ArgumentNullException(nameof(rhs)); }
internal InvokeExpressionNode(Token functionName, Token openParenthesis, IEnumerable <ExpressionNode> arguments, Token closeParenthesis) { FunctionName = functionName ?? throw new ArgumentNullException(nameof(functionName)); OpenParenthesis = openParenthesis ?? throw new ArgumentNullException(nameof(openParenthesis)); Arguments = arguments ?? new ExpressionNode[0]; CloseParenthesis = closeParenthesis ?? throw new ArgumentNullException(nameof(closeParenthesis)); }
internal NameExpressionNode(Token identifier) =>
public static LiteralExpressionNode MakeStringLiteral(Token literal) => new LiteralExpressionNode(literal, literal.Value, BuiltinTypes.String);
public static LiteralExpressionNode MakeDoubleLiteral(Token literal) => new LiteralExpressionNode(literal, literal.Value, BuiltinTypes.Double);
public static LiteralExpressionNode MakeIntLiteral(Token literal) => new LiteralExpressionNode(literal, literal.Value, BuiltinTypes.Int);
public static LiteralExpressionNode MakeBoolLiteral(Token literal, bool value) => new LiteralExpressionNode(literal, value, BuiltinTypes.Bool);
private LiteralExpressionNode(Token literal, object value, TypeSymbol type) { Literal = literal ?? throw new ArgumentNullException(nameof(literal)); Value = value ?? throw new ArgumentNullException(nameof(value)); Type = type ?? throw new ArgumentNullException(nameof(type)); }