Implement Position for red nodes and tokens

This commit is contained in:
Alexander Luzgarev 2018-12-17 19:58:44 +01:00
parent accc18c897
commit c361b8e004
15 changed files with 288 additions and 245 deletions

View File

@ -52,5 +52,21 @@ namespace Parser.Tests
var actual = sut.Parse();
Assert.Collection(actual.Diagnostics, item => Assert.Equal("Unexpected token 'SemicolonToken', expected 'IdentifierToken'.", item.Message));
}
[Fact]
public void ProvidePosition()
{
var text = "2 + 3";
var sut = GetSut(text);
var actual = sut.Parse();
var statement = actual.Root.StatementList[0].AsNode() as ExpressionStatementSyntaxNode;
var expression = statement.Expression as BinaryOperationExpressionSyntaxNode;
var lhs = expression.Lhs;
var operation = expression.Operation;
var rhs = expression.Rhs;
Assert.Equal(0, lhs.Position);
Assert.Equal(2, operation.Position);
Assert.Equal(4, rhs.Position);
}
}
}

View File

@ -90,7 +90,7 @@ namespace Parser
return red;
}
// this is a token
return new SyntaxToken(listSlot, listSlot._green.GetSlot(index));
return new SyntaxToken(listSlot, listSlot._green.GetSlot(index), _node.GetChildPosition(index));
}
else
{
@ -100,7 +100,7 @@ namespace Parser
return red;
}
// this is a token
return new SyntaxToken(_node, _node._green.GetSlot(currentSlotIndex));
return new SyntaxToken(_node, _node._green.GetSlot(currentSlotIndex), _node.GetChildPosition(currentSlotIndex));
}
}

View File

@ -23,7 +23,7 @@ namespace Parser.Internal
_fullWidth = fullWidth;
}
internal abstract Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent);
internal abstract Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position);
protected int _fullWidth;

View File

@ -29,9 +29,9 @@ namespace Parser.Internal
public override bool IsList => true;
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.SyntaxNodeOrTokenList(parent, this);
return new Parser.SyntaxNodeOrTokenList(parent, this, position);
}
}
}

View File

@ -26,9 +26,9 @@
public override bool IsList => true;
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.SyntaxNodeOrTokenList(parent, this);
return new Parser.SyntaxNodeOrTokenList(parent, this, position);
}
}
}

View File

@ -17,9 +17,9 @@ namespace Parser.Internal
_endOfFile = endOfFile;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.FileSyntaxNode(parent, this);
return new Parser.FileSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -70,9 +70,9 @@ namespace Parser.Internal
_endKeyword = endKeyword;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.FunctionDeclarationSyntaxNode(parent, this);
return new Parser.FunctionDeclarationSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -108,9 +108,9 @@ namespace Parser.Internal
_assignmentSign = assignmentSign;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.FunctionOutputDescriptionSyntaxNode(parent, this);
return new Parser.FunctionOutputDescriptionSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -145,9 +145,9 @@ namespace Parser.Internal
_closingBracket = closingBracket;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.FunctionInputDescriptionSyntaxNode(parent, this);
return new Parser.FunctionInputDescriptionSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -191,9 +191,9 @@ namespace Parser.Internal
_endKeyword = endKeyword;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.SwitchStatementSyntaxNode(parent, this);
return new Parser.SwitchStatementSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -235,9 +235,9 @@ namespace Parser.Internal
_body = body;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.SwitchCaseSyntaxNode(parent, this);
return new Parser.SwitchCaseSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -282,9 +282,9 @@ namespace Parser.Internal
_endKeyword = endKeyword;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.WhileStatementSyntaxNode(parent, this);
return new Parser.WhileStatementSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -326,9 +326,9 @@ namespace Parser.Internal
_body = body;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.ElseifClause(parent, this);
return new Parser.ElseifClause(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -361,9 +361,9 @@ namespace Parser.Internal
_body = body;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.ElseClause(parent, this);
return new Parser.ElseClause(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -414,9 +414,9 @@ namespace Parser.Internal
_endKeyword = endKeyword;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.IfStatementSyntaxNode(parent, this);
return new Parser.IfStatementSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -464,9 +464,9 @@ namespace Parser.Internal
_endKeyword = endKeyword;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.ForStatementSyntaxNode(parent, this);
return new Parser.ForStatementSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -504,9 +504,9 @@ namespace Parser.Internal
_rhs = rhs;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.AssignmentExpressionSyntaxNode(parent, this);
return new Parser.AssignmentExpressionSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -538,9 +538,9 @@ namespace Parser.Internal
_catchBody = catchBody;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.CatchClauseSyntaxNode(parent, this);
return new Parser.CatchClauseSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -579,9 +579,9 @@ namespace Parser.Internal
_endKeyword = endKeyword;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.TryCatchStatementSyntaxNode(parent, this);
return new Parser.TryCatchStatementSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -610,9 +610,9 @@ namespace Parser.Internal
_expression = expression;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.ExpressionStatementSyntaxNode(parent, this);
return new Parser.ExpressionStatementSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -638,9 +638,9 @@ namespace Parser.Internal
_semicolon = semicolon;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.EmptyStatementSyntaxNode(parent, this);
return new Parser.EmptyStatementSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -662,9 +662,9 @@ namespace Parser.Internal
Slots = 0;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.EmptyExpressionSyntaxNode(parent, this);
return new Parser.EmptyExpressionSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -693,9 +693,9 @@ namespace Parser.Internal
_operand = operand;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.UnaryPrefixOperationExpressionSyntaxNode(parent, this);
return new Parser.UnaryPrefixOperationExpressionSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -722,9 +722,9 @@ namespace Parser.Internal
_nodes = nodes;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.CompoundNameSyntaxNode(parent, this);
return new Parser.CompoundNameSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -754,9 +754,9 @@ namespace Parser.Internal
_functionName = functionName;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.NamedFunctionHandleSyntaxNode(parent, this);
return new Parser.NamedFunctionHandleSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -791,9 +791,9 @@ namespace Parser.Internal
_body = body;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.LambdaSyntaxNode(parent, this);
return new Parser.LambdaSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -829,9 +829,9 @@ namespace Parser.Internal
_rhs = rhs;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.BinaryOperationExpressionSyntaxNode(parent, this);
return new Parser.BinaryOperationExpressionSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -859,9 +859,9 @@ namespace Parser.Internal
_name = name;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.IdentifierNameSyntaxNode(parent, this);
return new Parser.IdentifierNameSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -887,9 +887,9 @@ namespace Parser.Internal
_number = number;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.NumberLiteralSyntaxNode(parent, this);
return new Parser.NumberLiteralSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -915,9 +915,9 @@ namespace Parser.Internal
_stringToken = stringToken;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.StringLiteralSyntaxNode(parent, this);
return new Parser.StringLiteralSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -943,9 +943,9 @@ namespace Parser.Internal
_stringToken = stringToken;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.DoubleQuotedStringLiteralSyntaxNode(parent, this);
return new Parser.DoubleQuotedStringLiteralSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -971,9 +971,9 @@ namespace Parser.Internal
_stringToken = stringToken;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.UnquotedStringLiteralSyntaxNode(parent, this);
return new Parser.UnquotedStringLiteralSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -1007,9 +1007,9 @@ namespace Parser.Internal
_closingSquareBracket = closingSquareBracket;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.ArrayLiteralExpressionSyntaxNode(parent, this);
return new Parser.ArrayLiteralExpressionSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -1045,9 +1045,9 @@ namespace Parser.Internal
_closingBrace = closingBrace;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.CellArrayLiteralExpressionSyntaxNode(parent, this);
return new Parser.CellArrayLiteralExpressionSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -1083,9 +1083,9 @@ namespace Parser.Internal
_closingBracket = closingBracket;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.ParenthesizedExpressionSyntaxNode(parent, this);
return new Parser.ParenthesizedExpressionSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -1125,9 +1125,9 @@ namespace Parser.Internal
_closingBrace = closingBrace;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.CellArrayElementAccessExpressionSyntaxNode(parent, this);
return new Parser.CellArrayElementAccessExpressionSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -1168,9 +1168,9 @@ namespace Parser.Internal
_closingBracket = closingBracket;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.FunctionCallExpressionSyntaxNode(parent, this);
return new Parser.FunctionCallExpressionSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -1207,9 +1207,9 @@ namespace Parser.Internal
_rightOperand = rightOperand;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.MemberAccessSyntaxNode(parent, this);
return new Parser.MemberAccessSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -1241,9 +1241,9 @@ namespace Parser.Internal
_operation = operation;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.UnaryPostixOperationExpressionSyntaxNode(parent, this);
return new Parser.UnaryPostixOperationExpressionSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -1278,9 +1278,9 @@ namespace Parser.Internal
_closingBracket = closingBracket;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.IndirectMemberAccessSyntaxNode(parent, this);
return new Parser.IndirectMemberAccessSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -1312,9 +1312,9 @@ namespace Parser.Internal
_arguments = arguments;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.CommandExpressionSyntaxNode(parent, this);
return new Parser.CommandExpressionSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -1349,9 +1349,9 @@ namespace Parser.Internal
_baseClassNameAndArguments = baseClassNameAndArguments;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.BaseClassInvokationSyntaxNode(parent, this);
return new Parser.BaseClassInvokationSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -1383,9 +1383,9 @@ namespace Parser.Internal
_value = value;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.AttributeAssignmentSyntaxNode(parent, this);
return new Parser.AttributeAssignmentSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -1416,9 +1416,9 @@ namespace Parser.Internal
_assignment = assignment;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.AttributeSyntaxNode(parent, this);
return new Parser.AttributeSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -1453,9 +1453,9 @@ namespace Parser.Internal
_closingBracket = closingBracket;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.AttributeListSyntaxNode(parent, this);
return new Parser.AttributeListSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -1507,9 +1507,9 @@ namespace Parser.Internal
_endKeyword = endKeyword;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.MethodDefinitionSyntaxNode(parent, this);
return new Parser.MethodDefinitionSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -1549,9 +1549,9 @@ namespace Parser.Internal
_inputDescription = inputDescription;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.AbstractMethodDeclarationSyntaxNode(parent, this);
return new Parser.AbstractMethodDeclarationSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -1591,9 +1591,9 @@ namespace Parser.Internal
_endKeyword = endKeyword;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.MethodsListSyntaxNode(parent, this);
return new Parser.MethodsListSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -1634,9 +1634,9 @@ namespace Parser.Internal
_endKeyword = endKeyword;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.PropertiesListSyntaxNode(parent, this);
return new Parser.PropertiesListSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -1669,9 +1669,9 @@ namespace Parser.Internal
_baseClasses = baseClasses;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.BaseClassListSyntaxNode(parent, this);
return new Parser.BaseClassListSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -1718,9 +1718,9 @@ namespace Parser.Internal
_endKeyword = endKeyword;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.ClassDeclarationSyntaxNode(parent, this);
return new Parser.ClassDeclarationSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -1759,9 +1759,9 @@ namespace Parser.Internal
_closingBracket = closingBracket;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.EnumerationItemValueSyntaxNode(parent, this);
return new Parser.EnumerationItemValueSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -1797,9 +1797,9 @@ namespace Parser.Internal
_commas = commas;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.EnumerationItemSyntaxNode(parent, this);
return new Parser.EnumerationItemSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -1839,9 +1839,9 @@ namespace Parser.Internal
_endKeyword = endKeyword;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.EnumerationListSyntaxNode(parent, this);
return new Parser.EnumerationListSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)
@ -1882,9 +1882,9 @@ namespace Parser.Internal
_endKeyword = endKeyword;
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
return new Parser.EventsListSyntaxNode(parent, this);
return new Parser.EventsListSyntaxNode(parent, this, position);
}
public override GreenNode GetSlot(int i)

View File

@ -208,7 +208,7 @@ namespace Parser.Internal
throw new System.InvalidOperationException();
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
throw new InvalidOperationException();
}

View File

@ -22,7 +22,7 @@ namespace Parser.Internal
throw new System.NotImplementedException();
}
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position)
{
throw new InvalidOperationException();
}

View File

@ -23,7 +23,7 @@ namespace Parser
var green = parser.ParseFile();
var parserDiagnostics = parser.Diagnostics;
var totalDiagnostics = new DiagnosticsBag(lexerDiagnostics.Concat(parserDiagnostics));
var root = new FileSyntaxNode(null, green);
var root = new FileSyntaxNode(null, green, 0);
return new SyntaxTree(root, totalDiagnostics);
}
}

View File

@ -4,13 +4,13 @@ namespace Parser
{
private SyntaxNode _statementList;
internal FileSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal FileSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken EndOfFile
{
get { return new SyntaxToken(this, ((Parser.Internal.FileSyntaxNode)_green)._endOfFile); }
get { return new SyntaxToken(this, ((Parser.Internal.FileSyntaxNode)_green)._endOfFile, this.GetChildPosition(1)); }
}
public SyntaxNodeOrTokenList StatementList
@ -48,23 +48,23 @@ namespace Parser
private SyntaxNode _commas;
private SyntaxNode _body;
internal FunctionDeclarationSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal FunctionDeclarationSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken FunctionKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.FunctionDeclarationSyntaxNode)_green)._functionKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.FunctionDeclarationSyntaxNode)_green)._functionKeyword, this.GetChildPosition(0)); }
}
public SyntaxToken Name
{
get { return new SyntaxToken(this, ((Parser.Internal.FunctionDeclarationSyntaxNode)_green)._name); }
get { return new SyntaxToken(this, ((Parser.Internal.FunctionDeclarationSyntaxNode)_green)._name, this.GetChildPosition(2)); }
}
public SyntaxToken EndKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.FunctionDeclarationSyntaxNode)_green)._endKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.FunctionDeclarationSyntaxNode)_green)._endKeyword, this.GetChildPosition(6)); }
}
public FunctionOutputDescriptionSyntaxNode OutputDescription
@ -138,13 +138,13 @@ namespace Parser
{
private SyntaxNode _outputList;
internal FunctionOutputDescriptionSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal FunctionOutputDescriptionSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken AssignmentSign
{
get { return new SyntaxToken(this, ((Parser.Internal.FunctionOutputDescriptionSyntaxNode)_green)._assignmentSign); }
get { return new SyntaxToken(this, ((Parser.Internal.FunctionOutputDescriptionSyntaxNode)_green)._assignmentSign, this.GetChildPosition(1)); }
}
public SyntaxNodeOrTokenList OutputList
@ -179,18 +179,18 @@ namespace Parser
{
private SyntaxNode _parameterList;
internal FunctionInputDescriptionSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal FunctionInputDescriptionSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken OpeningBracket
{
get { return new SyntaxToken(this, ((Parser.Internal.FunctionInputDescriptionSyntaxNode)_green)._openingBracket); }
get { return new SyntaxToken(this, ((Parser.Internal.FunctionInputDescriptionSyntaxNode)_green)._openingBracket, this.GetChildPosition(0)); }
}
public SyntaxToken ClosingBracket
{
get { return new SyntaxToken(this, ((Parser.Internal.FunctionInputDescriptionSyntaxNode)_green)._closingBracket); }
get { return new SyntaxToken(this, ((Parser.Internal.FunctionInputDescriptionSyntaxNode)_green)._closingBracket, this.GetChildPosition(2)); }
}
public SyntaxNodeOrTokenList ParameterList
@ -227,18 +227,18 @@ namespace Parser
private SyntaxNode _optionalCommas;
private SyntaxNode _cases;
internal SwitchStatementSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal SwitchStatementSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken SwitchKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.SwitchStatementSyntaxNode)_green)._switchKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.SwitchStatementSyntaxNode)_green)._switchKeyword, this.GetChildPosition(0)); }
}
public SyntaxToken EndKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.SwitchStatementSyntaxNode)_green)._endKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.SwitchStatementSyntaxNode)_green)._endKeyword, this.GetChildPosition(4)); }
}
public ExpressionSyntaxNode SwitchExpression
@ -301,13 +301,13 @@ namespace Parser
private SyntaxNode _optionalCommas;
private SyntaxNode _body;
internal SwitchCaseSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal SwitchCaseSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken CaseKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.SwitchCaseSyntaxNode)_green)._caseKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.SwitchCaseSyntaxNode)_green)._caseKeyword, this.GetChildPosition(0)); }
}
public ExpressionSyntaxNode CaseIdentifier
@ -370,18 +370,18 @@ namespace Parser
private SyntaxNode _optionalCommas;
private SyntaxNode _body;
internal WhileStatementSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal WhileStatementSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken WhileKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.WhileStatementSyntaxNode)_green)._whileKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.WhileStatementSyntaxNode)_green)._whileKeyword, this.GetChildPosition(0)); }
}
public SyntaxToken EndKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.WhileStatementSyntaxNode)_green)._endKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.WhileStatementSyntaxNode)_green)._endKeyword, this.GetChildPosition(4)); }
}
public ExpressionSyntaxNode Condition
@ -444,13 +444,13 @@ namespace Parser
private SyntaxNode _optionalCommas;
private SyntaxNode _body;
internal ElseifClause(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal ElseifClause(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken ElseifKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.ElseifClause)_green)._elseifKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.ElseifClause)_green)._elseifKeyword, this.GetChildPosition(0)); }
}
public ExpressionSyntaxNode Condition
@ -511,13 +511,13 @@ namespace Parser
{
private SyntaxNode _body;
internal ElseClause(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal ElseClause(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken ElseKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.ElseClause)_green)._elseKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.ElseClause)_green)._elseKeyword, this.GetChildPosition(0)); }
}
public SyntaxNodeOrTokenList Body
@ -556,18 +556,18 @@ namespace Parser
private SyntaxNode _elseifClauses;
private SyntaxNode _elseClause;
internal IfStatementSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal IfStatementSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken IfKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.IfStatementSyntaxNode)_green)._ifKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.IfStatementSyntaxNode)_green)._ifKeyword, this.GetChildPosition(0)); }
}
public SyntaxToken EndKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.IfStatementSyntaxNode)_green)._endKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.IfStatementSyntaxNode)_green)._endKeyword, this.GetChildPosition(6)); }
}
public ExpressionSyntaxNode Condition
@ -656,18 +656,18 @@ namespace Parser
private SyntaxNode _optionalCommas;
private SyntaxNode _body;
internal ForStatementSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal ForStatementSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken ForKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.ForStatementSyntaxNode)_green)._forKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.ForStatementSyntaxNode)_green)._forKeyword, this.GetChildPosition(0)); }
}
public SyntaxToken EndKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.ForStatementSyntaxNode)_green)._endKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.ForStatementSyntaxNode)_green)._endKeyword, this.GetChildPosition(4)); }
}
public AssignmentExpressionSyntaxNode Assignment
@ -729,13 +729,13 @@ namespace Parser
private SyntaxNode _lhs;
private SyntaxNode _rhs;
internal AssignmentExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal AssignmentExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken AssignmentSign
{
get { return new SyntaxToken(this, ((Parser.Internal.AssignmentExpressionSyntaxNode)_green)._assignmentSign); }
get { return new SyntaxToken(this, ((Parser.Internal.AssignmentExpressionSyntaxNode)_green)._assignmentSign, this.GetChildPosition(1)); }
}
public ExpressionSyntaxNode Lhs
@ -783,13 +783,13 @@ namespace Parser
{
private SyntaxNode _catchBody;
internal CatchClauseSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal CatchClauseSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken CatchKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.CatchClauseSyntaxNode)_green)._catchKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.CatchClauseSyntaxNode)_green)._catchKeyword, this.GetChildPosition(0)); }
}
public SyntaxNodeOrTokenList CatchBody
@ -825,18 +825,18 @@ namespace Parser
private SyntaxNode _tryBody;
private SyntaxNode _catchClause;
internal TryCatchStatementSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal TryCatchStatementSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken TryKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.TryCatchStatementSyntaxNode)_green)._tryKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.TryCatchStatementSyntaxNode)_green)._tryKeyword, this.GetChildPosition(0)); }
}
public SyntaxToken EndKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.TryCatchStatementSyntaxNode)_green)._endKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.TryCatchStatementSyntaxNode)_green)._endKeyword, this.GetChildPosition(3)); }
}
public SyntaxNodeOrTokenList TryBody
@ -884,7 +884,7 @@ namespace Parser
{
private SyntaxNode _expression;
internal ExpressionStatementSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal ExpressionStatementSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
@ -920,13 +920,13 @@ namespace Parser
public class EmptyStatementSyntaxNode : StatementSyntaxNode
{
internal EmptyStatementSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal EmptyStatementSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken Semicolon
{
get { return new SyntaxToken(this, ((Parser.Internal.EmptyStatementSyntaxNode)_green)._semicolon); }
get { return new SyntaxToken(this, ((Parser.Internal.EmptyStatementSyntaxNode)_green)._semicolon, this.GetChildPosition(0)); }
}
@ -948,7 +948,7 @@ namespace Parser
public class EmptyExpressionSyntaxNode : ExpressionSyntaxNode
{
internal EmptyExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal EmptyExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
@ -973,13 +973,13 @@ namespace Parser
{
private SyntaxNode _operand;
internal UnaryPrefixOperationExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal UnaryPrefixOperationExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken Operation
{
get { return new SyntaxToken(this, ((Parser.Internal.UnaryPrefixOperationExpressionSyntaxNode)_green)._operation); }
get { return new SyntaxToken(this, ((Parser.Internal.UnaryPrefixOperationExpressionSyntaxNode)_green)._operation, this.GetChildPosition(0)); }
}
public ExpressionSyntaxNode Operand
@ -1014,7 +1014,7 @@ namespace Parser
{
private SyntaxNode _nodes;
internal CompoundNameSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal CompoundNameSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
@ -1051,13 +1051,13 @@ namespace Parser
{
private SyntaxNode _functionName;
internal NamedFunctionHandleSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal NamedFunctionHandleSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken AtSign
{
get { return new SyntaxToken(this, ((Parser.Internal.NamedFunctionHandleSyntaxNode)_green)._atSign); }
get { return new SyntaxToken(this, ((Parser.Internal.NamedFunctionHandleSyntaxNode)_green)._atSign, this.GetChildPosition(0)); }
}
public CompoundNameSyntaxNode FunctionName
@ -1093,13 +1093,13 @@ namespace Parser
private SyntaxNode _input;
private SyntaxNode _body;
internal LambdaSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal LambdaSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken AtSign
{
get { return new SyntaxToken(this, ((Parser.Internal.LambdaSyntaxNode)_green)._atSign); }
get { return new SyntaxToken(this, ((Parser.Internal.LambdaSyntaxNode)_green)._atSign, this.GetChildPosition(0)); }
}
public FunctionInputDescriptionSyntaxNode Input
@ -1148,13 +1148,13 @@ namespace Parser
private SyntaxNode _lhs;
private SyntaxNode _rhs;
internal BinaryOperationExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal BinaryOperationExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken Operation
{
get { return new SyntaxToken(this, ((Parser.Internal.BinaryOperationExpressionSyntaxNode)_green)._operation); }
get { return new SyntaxToken(this, ((Parser.Internal.BinaryOperationExpressionSyntaxNode)_green)._operation, this.GetChildPosition(1)); }
}
public ExpressionSyntaxNode Lhs
@ -1201,13 +1201,13 @@ namespace Parser
public class IdentifierNameSyntaxNode : ExpressionSyntaxNode
{
internal IdentifierNameSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal IdentifierNameSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken Name
{
get { return new SyntaxToken(this, ((Parser.Internal.IdentifierNameSyntaxNode)_green)._name); }
get { return new SyntaxToken(this, ((Parser.Internal.IdentifierNameSyntaxNode)_green)._name, this.GetChildPosition(0)); }
}
@ -1229,13 +1229,13 @@ namespace Parser
public class NumberLiteralSyntaxNode : ExpressionSyntaxNode
{
internal NumberLiteralSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal NumberLiteralSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken Number
{
get { return new SyntaxToken(this, ((Parser.Internal.NumberLiteralSyntaxNode)_green)._number); }
get { return new SyntaxToken(this, ((Parser.Internal.NumberLiteralSyntaxNode)_green)._number, this.GetChildPosition(0)); }
}
@ -1257,13 +1257,13 @@ namespace Parser
public class StringLiteralSyntaxNode : ExpressionSyntaxNode
{
internal StringLiteralSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal StringLiteralSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken StringToken
{
get { return new SyntaxToken(this, ((Parser.Internal.StringLiteralSyntaxNode)_green)._stringToken); }
get { return new SyntaxToken(this, ((Parser.Internal.StringLiteralSyntaxNode)_green)._stringToken, this.GetChildPosition(0)); }
}
@ -1285,13 +1285,13 @@ namespace Parser
public class DoubleQuotedStringLiteralSyntaxNode : ExpressionSyntaxNode
{
internal DoubleQuotedStringLiteralSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal DoubleQuotedStringLiteralSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken StringToken
{
get { return new SyntaxToken(this, ((Parser.Internal.DoubleQuotedStringLiteralSyntaxNode)_green)._stringToken); }
get { return new SyntaxToken(this, ((Parser.Internal.DoubleQuotedStringLiteralSyntaxNode)_green)._stringToken, this.GetChildPosition(0)); }
}
@ -1313,13 +1313,13 @@ namespace Parser
public class UnquotedStringLiteralSyntaxNode : ExpressionSyntaxNode
{
internal UnquotedStringLiteralSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal UnquotedStringLiteralSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken StringToken
{
get { return new SyntaxToken(this, ((Parser.Internal.UnquotedStringLiteralSyntaxNode)_green)._stringToken); }
get { return new SyntaxToken(this, ((Parser.Internal.UnquotedStringLiteralSyntaxNode)_green)._stringToken, this.GetChildPosition(0)); }
}
@ -1342,18 +1342,18 @@ namespace Parser
{
private SyntaxNode _nodes;
internal ArrayLiteralExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal ArrayLiteralExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken OpeningSquareBracket
{
get { return new SyntaxToken(this, ((Parser.Internal.ArrayLiteralExpressionSyntaxNode)_green)._openingSquareBracket); }
get { return new SyntaxToken(this, ((Parser.Internal.ArrayLiteralExpressionSyntaxNode)_green)._openingSquareBracket, this.GetChildPosition(0)); }
}
public SyntaxToken ClosingSquareBracket
{
get { return new SyntaxToken(this, ((Parser.Internal.ArrayLiteralExpressionSyntaxNode)_green)._closingSquareBracket); }
get { return new SyntaxToken(this, ((Parser.Internal.ArrayLiteralExpressionSyntaxNode)_green)._closingSquareBracket, this.GetChildPosition(2)); }
}
public SyntaxNodeOrTokenList Nodes
@ -1388,18 +1388,18 @@ namespace Parser
{
private SyntaxNode _nodes;
internal CellArrayLiteralExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal CellArrayLiteralExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken OpeningBrace
{
get { return new SyntaxToken(this, ((Parser.Internal.CellArrayLiteralExpressionSyntaxNode)_green)._openingBrace); }
get { return new SyntaxToken(this, ((Parser.Internal.CellArrayLiteralExpressionSyntaxNode)_green)._openingBrace, this.GetChildPosition(0)); }
}
public SyntaxToken ClosingBrace
{
get { return new SyntaxToken(this, ((Parser.Internal.CellArrayLiteralExpressionSyntaxNode)_green)._closingBrace); }
get { return new SyntaxToken(this, ((Parser.Internal.CellArrayLiteralExpressionSyntaxNode)_green)._closingBrace, this.GetChildPosition(2)); }
}
public SyntaxNodeOrTokenList Nodes
@ -1434,18 +1434,18 @@ namespace Parser
{
private SyntaxNode _expression;
internal ParenthesizedExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal ParenthesizedExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken OpeningBracket
{
get { return new SyntaxToken(this, ((Parser.Internal.ParenthesizedExpressionSyntaxNode)_green)._openingBracket); }
get { return new SyntaxToken(this, ((Parser.Internal.ParenthesizedExpressionSyntaxNode)_green)._openingBracket, this.GetChildPosition(0)); }
}
public SyntaxToken ClosingBracket
{
get { return new SyntaxToken(this, ((Parser.Internal.ParenthesizedExpressionSyntaxNode)_green)._closingBracket); }
get { return new SyntaxToken(this, ((Parser.Internal.ParenthesizedExpressionSyntaxNode)_green)._closingBracket, this.GetChildPosition(2)); }
}
public ExpressionSyntaxNode Expression
@ -1481,18 +1481,18 @@ namespace Parser
private SyntaxNode _expression;
private SyntaxNode _nodes;
internal CellArrayElementAccessExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal CellArrayElementAccessExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken OpeningBrace
{
get { return new SyntaxToken(this, ((Parser.Internal.CellArrayElementAccessExpressionSyntaxNode)_green)._openingBrace); }
get { return new SyntaxToken(this, ((Parser.Internal.CellArrayElementAccessExpressionSyntaxNode)_green)._openingBrace, this.GetChildPosition(1)); }
}
public SyntaxToken ClosingBrace
{
get { return new SyntaxToken(this, ((Parser.Internal.CellArrayElementAccessExpressionSyntaxNode)_green)._closingBrace); }
get { return new SyntaxToken(this, ((Parser.Internal.CellArrayElementAccessExpressionSyntaxNode)_green)._closingBrace, this.GetChildPosition(3)); }
}
public ExpressionSyntaxNode Expression
@ -1541,18 +1541,18 @@ namespace Parser
private SyntaxNode _functionName;
private SyntaxNode _nodes;
internal FunctionCallExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal FunctionCallExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken OpeningBracket
{
get { return new SyntaxToken(this, ((Parser.Internal.FunctionCallExpressionSyntaxNode)_green)._openingBracket); }
get { return new SyntaxToken(this, ((Parser.Internal.FunctionCallExpressionSyntaxNode)_green)._openingBracket, this.GetChildPosition(1)); }
}
public SyntaxToken ClosingBracket
{
get { return new SyntaxToken(this, ((Parser.Internal.FunctionCallExpressionSyntaxNode)_green)._closingBracket); }
get { return new SyntaxToken(this, ((Parser.Internal.FunctionCallExpressionSyntaxNode)_green)._closingBracket, this.GetChildPosition(3)); }
}
public ExpressionSyntaxNode FunctionName
@ -1601,13 +1601,13 @@ namespace Parser
private SyntaxNode _leftOperand;
private SyntaxNode _rightOperand;
internal MemberAccessSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal MemberAccessSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken Dot
{
get { return new SyntaxToken(this, ((Parser.Internal.MemberAccessSyntaxNode)_green)._dot); }
get { return new SyntaxToken(this, ((Parser.Internal.MemberAccessSyntaxNode)_green)._dot, this.GetChildPosition(1)); }
}
public SyntaxNode LeftOperand
@ -1655,13 +1655,13 @@ namespace Parser
{
private SyntaxNode _operand;
internal UnaryPostixOperationExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal UnaryPostixOperationExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken Operation
{
get { return new SyntaxToken(this, ((Parser.Internal.UnaryPostixOperationExpressionSyntaxNode)_green)._operation); }
get { return new SyntaxToken(this, ((Parser.Internal.UnaryPostixOperationExpressionSyntaxNode)_green)._operation, this.GetChildPosition(1)); }
}
public ExpressionSyntaxNode Operand
@ -1696,18 +1696,18 @@ namespace Parser
{
private SyntaxNode _expression;
internal IndirectMemberAccessSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal IndirectMemberAccessSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken OpeningBracket
{
get { return new SyntaxToken(this, ((Parser.Internal.IndirectMemberAccessSyntaxNode)_green)._openingBracket); }
get { return new SyntaxToken(this, ((Parser.Internal.IndirectMemberAccessSyntaxNode)_green)._openingBracket, this.GetChildPosition(0)); }
}
public SyntaxToken ClosingBracket
{
get { return new SyntaxToken(this, ((Parser.Internal.IndirectMemberAccessSyntaxNode)_green)._closingBracket); }
get { return new SyntaxToken(this, ((Parser.Internal.IndirectMemberAccessSyntaxNode)_green)._closingBracket, this.GetChildPosition(2)); }
}
public ExpressionSyntaxNode Expression
@ -1743,7 +1743,7 @@ namespace Parser
private SyntaxNode _commandName;
private SyntaxNode _arguments;
internal CommandExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal CommandExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
@ -1794,13 +1794,13 @@ namespace Parser
private SyntaxNode _methodName;
private SyntaxNode _baseClassNameAndArguments;
internal BaseClassInvokationSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal BaseClassInvokationSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken AtSign
{
get { return new SyntaxToken(this, ((Parser.Internal.BaseClassInvokationSyntaxNode)_green)._atSign); }
get { return new SyntaxToken(this, ((Parser.Internal.BaseClassInvokationSyntaxNode)_green)._atSign, this.GetChildPosition(1)); }
}
public ExpressionSyntaxNode MethodName
@ -1848,13 +1848,13 @@ namespace Parser
{
private SyntaxNode _value;
internal AttributeAssignmentSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal AttributeAssignmentSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken AssignmentSign
{
get { return new SyntaxToken(this, ((Parser.Internal.AttributeAssignmentSyntaxNode)_green)._assignmentSign); }
get { return new SyntaxToken(this, ((Parser.Internal.AttributeAssignmentSyntaxNode)_green)._assignmentSign, this.GetChildPosition(0)); }
}
public ExpressionSyntaxNode Value
@ -1890,7 +1890,7 @@ namespace Parser
private SyntaxNode _name;
private SyntaxNode _assignment;
internal AttributeSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal AttributeSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
@ -1940,18 +1940,18 @@ namespace Parser
{
private SyntaxNode _nodes;
internal AttributeListSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal AttributeListSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken OpeningBracket
{
get { return new SyntaxToken(this, ((Parser.Internal.AttributeListSyntaxNode)_green)._openingBracket); }
get { return new SyntaxToken(this, ((Parser.Internal.AttributeListSyntaxNode)_green)._openingBracket, this.GetChildPosition(0)); }
}
public SyntaxToken ClosingBracket
{
get { return new SyntaxToken(this, ((Parser.Internal.AttributeListSyntaxNode)_green)._closingBracket); }
get { return new SyntaxToken(this, ((Parser.Internal.AttributeListSyntaxNode)_green)._closingBracket, this.GetChildPosition(2)); }
}
public SyntaxNodeOrTokenList Nodes
@ -1990,18 +1990,18 @@ namespace Parser
private SyntaxNode _commas;
private SyntaxNode _body;
internal MethodDefinitionSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal MethodDefinitionSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken FunctionKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.MethodDefinitionSyntaxNode)_green)._functionKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.MethodDefinitionSyntaxNode)_green)._functionKeyword, this.GetChildPosition(0)); }
}
public SyntaxToken EndKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.MethodDefinitionSyntaxNode)_green)._endKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.MethodDefinitionSyntaxNode)_green)._endKeyword, this.GetChildPosition(6)); }
}
public FunctionOutputDescriptionSyntaxNode OutputDescription
@ -2090,7 +2090,7 @@ namespace Parser
private SyntaxNode _name;
private SyntaxNode _inputDescription;
internal AbstractMethodDeclarationSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal AbstractMethodDeclarationSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
@ -2154,18 +2154,18 @@ namespace Parser
private SyntaxNode _attributes;
private SyntaxNode _methods;
internal MethodsListSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal MethodsListSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken MethodsKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.MethodsListSyntaxNode)_green)._methodsKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.MethodsListSyntaxNode)_green)._methodsKeyword, this.GetChildPosition(0)); }
}
public SyntaxToken EndKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.MethodsListSyntaxNode)_green)._endKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.MethodsListSyntaxNode)_green)._endKeyword, this.GetChildPosition(3)); }
}
public AttributeListSyntaxNode Attributes
@ -2214,18 +2214,18 @@ namespace Parser
private SyntaxNode _attributes;
private SyntaxNode _properties;
internal PropertiesListSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal PropertiesListSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken PropertiesKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.PropertiesListSyntaxNode)_green)._propertiesKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.PropertiesListSyntaxNode)_green)._propertiesKeyword, this.GetChildPosition(0)); }
}
public SyntaxToken EndKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.PropertiesListSyntaxNode)_green)._endKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.PropertiesListSyntaxNode)_green)._endKeyword, this.GetChildPosition(3)); }
}
public AttributeListSyntaxNode Attributes
@ -2273,13 +2273,13 @@ namespace Parser
{
private SyntaxNode _baseClasses;
internal BaseClassListSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal BaseClassListSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken LessSign
{
get { return new SyntaxToken(this, ((Parser.Internal.BaseClassListSyntaxNode)_green)._lessSign); }
get { return new SyntaxToken(this, ((Parser.Internal.BaseClassListSyntaxNode)_green)._lessSign, this.GetChildPosition(0)); }
}
public SyntaxNodeOrTokenList BaseClasses
@ -2317,18 +2317,18 @@ namespace Parser
private SyntaxNode _baseClassList;
private SyntaxNode _nodes;
internal ClassDeclarationSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal ClassDeclarationSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken ClassdefKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.ClassDeclarationSyntaxNode)_green)._classdefKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.ClassDeclarationSyntaxNode)_green)._classdefKeyword, this.GetChildPosition(0)); }
}
public SyntaxToken EndKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.ClassDeclarationSyntaxNode)_green)._endKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.ClassDeclarationSyntaxNode)_green)._endKeyword, this.GetChildPosition(5)); }
}
public AttributeListSyntaxNode Attributes
@ -2402,18 +2402,18 @@ namespace Parser
{
private SyntaxNode _values;
internal EnumerationItemValueSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal EnumerationItemValueSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken OpeningBracket
{
get { return new SyntaxToken(this, ((Parser.Internal.EnumerationItemValueSyntaxNode)_green)._openingBracket); }
get { return new SyntaxToken(this, ((Parser.Internal.EnumerationItemValueSyntaxNode)_green)._openingBracket, this.GetChildPosition(0)); }
}
public SyntaxToken ClosingBracket
{
get { return new SyntaxToken(this, ((Parser.Internal.EnumerationItemValueSyntaxNode)_green)._closingBracket); }
get { return new SyntaxToken(this, ((Parser.Internal.EnumerationItemValueSyntaxNode)_green)._closingBracket, this.GetChildPosition(2)); }
}
public SyntaxNodeOrTokenList Values
@ -2450,7 +2450,7 @@ namespace Parser
private SyntaxNode _values;
private SyntaxNode _commas;
internal EnumerationItemSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal EnumerationItemSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
@ -2514,18 +2514,18 @@ namespace Parser
private SyntaxNode _attributes;
private SyntaxNode _items;
internal EnumerationListSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal EnumerationListSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken EnumerationKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.EnumerationListSyntaxNode)_green)._enumerationKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.EnumerationListSyntaxNode)_green)._enumerationKeyword, this.GetChildPosition(0)); }
}
public SyntaxToken EndKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.EnumerationListSyntaxNode)_green)._endKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.EnumerationListSyntaxNode)_green)._endKeyword, this.GetChildPosition(3)); }
}
public AttributeListSyntaxNode Attributes
@ -2574,18 +2574,18 @@ namespace Parser
private SyntaxNode _attributes;
private SyntaxNode _events;
internal EventsListSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal EventsListSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
public SyntaxToken EventsKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.EventsListSyntaxNode)_green)._eventsKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.EventsListSyntaxNode)_green)._eventsKeyword, this.GetChildPosition(0)); }
}
public SyntaxToken EndKeyword
{
get { return new SyntaxToken(this, ((Parser.Internal.EventsListSyntaxNode)_green)._endKeyword); }
get { return new SyntaxToken(this, ((Parser.Internal.EventsListSyntaxNode)_green)._endKeyword, this.GetChildPosition(3)); }
}
public AttributeListSyntaxNode Attributes

View File

@ -8,21 +8,41 @@ namespace Parser
{
private readonly SyntaxNode _parent;
internal readonly Internal.GreenNode _green;
internal SyntaxNode(SyntaxNode parent, Internal.GreenNode green)
internal SyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position)
{
_parent = parent;
_green = green;
Position = position;
}
public TokenKind Kind => _green.Kind;
public SyntaxNode Parent => _parent;
public int Slots => _green.Slots;
public ChildNodesAndTokensList GetChildNodesAndTokens()
{
return new ChildNodesAndTokensList(this);
}
public int Position { get; }
internal int GetChildPosition(int slot)
{
var result = Position;
while (slot > 0)
{
slot--;
var greenChild = _green.GetSlot(slot);
if (greenChild != null)
{
result += greenChild.FullWidth;
}
}
return result;
}
internal abstract SyntaxNode GetNode(int index);
internal SyntaxNode GetRed(ref SyntaxNode field, int slot)
@ -32,7 +52,7 @@ namespace Parser
var green = _green.GetSlot(slot);
if (green != null)
{
field = green.CreateRed(this);
field = green.CreateRed(this, this.GetChildPosition(slot));
}
}
@ -73,28 +93,28 @@ namespace Parser
public abstract class StatementSyntaxNode : SyntaxNode
{
internal StatementSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal StatementSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
}
public abstract class ExpressionSyntaxNode : SyntaxNode
{
internal ExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal ExpressionSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
}
public abstract class FunctionHandleSyntaxNode : ExpressionSyntaxNode
{
internal FunctionHandleSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal FunctionHandleSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
}
public abstract class MethodDeclarationSyntaxNode : StatementSyntaxNode
{
internal MethodDeclarationSyntaxNode(SyntaxNode parent, Internal.GreenNode green) : base(parent, green)
internal MethodDeclarationSyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position) : base(parent, green, position)
{
}
}

View File

@ -11,18 +11,22 @@
_token = null;
_nodeOrParent = node;
_isToken = false;
Position = node.Position;
}
internal SyntaxNodeOrToken(SyntaxNode parent, Internal.GreenNode token)
internal SyntaxNodeOrToken(SyntaxNode parent, Internal.GreenNode token, int position)
{
_token = token;
_nodeOrParent = parent;
_isToken = true;
Position = position;
}
public bool IsToken => _isToken;
public bool IsNode => !IsToken;
public int Position { get; }
public SyntaxNode AsNode()
{
if (_isToken)
@ -39,12 +43,12 @@
{
return default(SyntaxToken);
}
return new SyntaxToken(_nodeOrParent, _token);
return new SyntaxToken(_nodeOrParent, _token, Position);
}
public static implicit operator SyntaxNodeOrToken(SyntaxToken token)
{
return new SyntaxNodeOrToken(token.Parent, token.Token);
return new SyntaxNodeOrToken(token.Parent, token.Token, token.Position);
}
public static implicit operator SyntaxNodeOrToken(SyntaxNode node)

View File

@ -7,7 +7,7 @@ namespace Parser
{
public class SyntaxNodeOrTokenList : SyntaxNode, IReadOnlyCollection<SyntaxNodeOrToken>
{
internal SyntaxNodeOrTokenList(SyntaxNode parent, GreenNode green) : base(parent, green)
internal SyntaxNodeOrTokenList(SyntaxNode parent, GreenNode green, int position) : base(parent, green, position)
{
}
@ -20,11 +20,11 @@ namespace Parser
var green = _green.GetSlot(index);
if (green is Internal.SyntaxToken)
{
return new SyntaxToken(this, green);
return new SyntaxToken(this, green, this.GetChildPosition(index));
}
else
{
return green.CreateRed(this);
return green.CreateRed(this, this.GetChildPosition(index));
}
}
throw new ArgumentOutOfRangeException();

View File

@ -17,15 +17,18 @@ namespace Parser
return _token.ToString();
}
internal SyntaxToken(SyntaxNode parent, Internal.GreenNode token)
internal SyntaxToken(SyntaxNode parent, Internal.GreenNode token, int position)
{
_parent = parent;
_token = token ?? throw new ArgumentNullException(nameof(token));
Position = position;
}
public SyntaxNode Parent => _parent;
internal Internal.GreenNode Token => _token;
public int Position { get; }
public bool Equals(SyntaxToken other)
{
return Equals(_parent, other._parent) && Equals(_token, other._token);

View File

@ -94,9 +94,9 @@ namespace SyntaxGenerator
private static string GenerateConstructor(SyntaxNodeDescription node)
{
var arguments = "SyntaxNode parent, Internal.GreenNode green";
var arguments = "SyntaxNode parent, Internal.GreenNode green, int position";
var header =
$" internal {node.ClassName}({arguments}) : base(parent, green)\n";
$" internal {node.ClassName}({arguments}) : base(parent, green, position)\n";
return header + " {\n }\n";
}
@ -132,8 +132,8 @@ namespace SyntaxGenerator
private static string GenerateCreateRed(SyntaxNodeDescription node)
{
var header = $" internal override {OuterNamespace}.SyntaxNode CreateRed({OuterNamespace}.SyntaxNode parent)\n";
var text = $" return new {OuterNamespace}.{node.ClassName}(parent, this);\n";
var header = $" internal override {OuterNamespace}.SyntaxNode CreateRed({OuterNamespace}.SyntaxNode parent, int position)\n";
var text = $" return new {OuterNamespace}.{node.ClassName}(parent, this, position);\n";
return header + " {\n" + text + " }\n";
}
@ -165,11 +165,11 @@ namespace SyntaxGenerator
return s[0].ToString().ToUpper() + s.Substring(1, s.Length - 1);
}
private static string GenerateTokenAccessor(SyntaxNodeDescription node, FieldDescription field)
private static string GenerateTokenAccessor(SyntaxNodeDescription node, FieldDescription field, int index)
{
var header = $" public SyntaxToken {Capitalize(field.FieldName)}\n";
var text =
$" get {{ return new SyntaxToken(this, (({InternalNamespace}.{node.ClassName})_green)._{field.FieldName}); }}";
$" get {{ return new SyntaxToken(this, (({InternalNamespace}.{node.ClassName})_green)._{field.FieldName}, this.GetChildPosition({index})); }}";
return header + " {\n" + text + "\n }\n";
}
@ -236,7 +236,7 @@ namespace SyntaxGenerator
var tokenAccessors =
string.Join(
"\n",
tokenSlots.Select(pair => GenerateTokenAccessor(node, pair.field)));
tokenSlots.Select(pair => GenerateTokenAccessor(node, pair.field, pair.index)));
var nodeAccessors =
string.Join(
"\n",