public static Argument Evaluate(CompilerState state, SyntaxNode node) { if (state is null) { throw new ArgumentNullException(nameof(state)); } if (node is null) { throw new ArgumentNullException(nameof(node)); } var result = node switch { TextSyntax text => textInstruction.Evaluate(state, text), QuoteSyntax quote => quoteInstruction.Evaluate(state, quote), StringLiteralSyntax stringLiteral => stringInstruction.Evaluate(state, stringLiteral), ArgumentSyntax argumentSyntax => argumentInstruction.Evaluate(state, argumentSyntax), CommandSyntax command => commandInstruction.Evaluate(state, command), ObjectSyntax objectSyntax => objectCreationInstruction.Evaluate(state, objectSyntax), FieldSyntax fieldSyntax => fieldInstruction.Evaluate(state, fieldSyntax), ArraySyntax arraySyntax => arrayInstruction.Evaluate(state, arraySyntax), PercentSyntax percentSyntax => percentInstruction.Evaluate(state, percentSyntax), ListSyntax list => blockInstruction.Evaluate(state, list), CommentSyntax _ => null, _ => throw new ArgumentException($"Evaluation of node type {node.GetType().Name} not implemented.", nameof(node)), }; return(new Argument(node, result)); }
private bool TryParseStringLiteral([NotNullWhen(true)] out ExpressionSyntax?expressionSyntax) { Debug.Assert(_lexer.PeekTokenType() == TokenType.StringLiteral); expressionSyntax = null; var tokenPosition = _lexer.Position; var tokenSpan = _lexer.GetToken(); // The string literal must end in a quote if (tokenSpan.Length < 2 || tokenSpan[tokenSpan.Length - 1] != (byte)'"') { _diagnosticSink.Add(DiagnosticCode.ExpectedClosingQuote, tokenPosition); return(false); } // Strip the quotes // TODO: Process escape sequences expressionSyntax = new StringLiteralSyntax(tokenSpan.Slice(1, tokenSpan.Length - 2).ToArray(), tokenPosition); return(true); }
public virtual void PostWalkStringLiteral(StringLiteralSyntax stringLiteralSyntax) { }
// StringLiteralSyntax public virtual bool WalkStringLiteral(StringLiteralSyntax stringLiteralSyntax) { return DefaultWalk(stringLiteralSyntax); }
public StringLiteral(StringLiteralSyntax syntax, Package containingPackage) : base(syntax, containingPackage) { }
protected virtual void VisitStringLiteralSyntax(StringLiteralSyntax pNode) { }
public virtual void VisitStringLiteral(StringLiteralSyntax node) { }
protected virtual SyntaxNode VisitStringLiteralSyntax(StringLiteralSyntax pNode) { return(pNode); }