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(); var actual = sut.Parse();
Assert.Collection(actual.Diagnostics, item => Assert.Equal("Unexpected token 'SemicolonToken', expected 'IdentifierToken'.", item.Message)); 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; return red;
} }
// this is a token // this is a token
return new SyntaxToken(listSlot, listSlot._green.GetSlot(index)); return new SyntaxToken(listSlot, listSlot._green.GetSlot(index), _node.GetChildPosition(index));
} }
else else
{ {
@ -100,7 +100,7 @@ namespace Parser
return red; return red;
} }
// this is a token // 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; _fullWidth = fullWidth;
} }
internal abstract Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent); internal abstract Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent, int position);
protected int _fullWidth; protected int _fullWidth;

View File

@ -29,9 +29,9 @@ namespace Parser.Internal
public override bool IsList => true; 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; 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; _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) public override GreenNode GetSlot(int i)
@ -70,9 +70,9 @@ namespace Parser.Internal
_endKeyword = endKeyword; _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) public override GreenNode GetSlot(int i)
@ -108,9 +108,9 @@ namespace Parser.Internal
_assignmentSign = assignmentSign; _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) public override GreenNode GetSlot(int i)
@ -145,9 +145,9 @@ namespace Parser.Internal
_closingBracket = closingBracket; _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) public override GreenNode GetSlot(int i)
@ -191,9 +191,9 @@ namespace Parser.Internal
_endKeyword = endKeyword; _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) public override GreenNode GetSlot(int i)
@ -235,9 +235,9 @@ namespace Parser.Internal
_body = body; _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) public override GreenNode GetSlot(int i)
@ -282,9 +282,9 @@ namespace Parser.Internal
_endKeyword = endKeyword; _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) public override GreenNode GetSlot(int i)
@ -326,9 +326,9 @@ namespace Parser.Internal
_body = body; _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) public override GreenNode GetSlot(int i)
@ -361,9 +361,9 @@ namespace Parser.Internal
_body = body; _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) public override GreenNode GetSlot(int i)
@ -414,9 +414,9 @@ namespace Parser.Internal
_endKeyword = endKeyword; _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) public override GreenNode GetSlot(int i)
@ -464,9 +464,9 @@ namespace Parser.Internal
_endKeyword = endKeyword; _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) public override GreenNode GetSlot(int i)
@ -504,9 +504,9 @@ namespace Parser.Internal
_rhs = rhs; _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) public override GreenNode GetSlot(int i)
@ -538,9 +538,9 @@ namespace Parser.Internal
_catchBody = catchBody; _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) public override GreenNode GetSlot(int i)
@ -579,9 +579,9 @@ namespace Parser.Internal
_endKeyword = endKeyword; _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) public override GreenNode GetSlot(int i)
@ -610,9 +610,9 @@ namespace Parser.Internal
_expression = expression; _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) public override GreenNode GetSlot(int i)
@ -638,9 +638,9 @@ namespace Parser.Internal
_semicolon = semicolon; _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) public override GreenNode GetSlot(int i)
@ -662,9 +662,9 @@ namespace Parser.Internal
Slots = 0; 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) public override GreenNode GetSlot(int i)
@ -693,9 +693,9 @@ namespace Parser.Internal
_operand = operand; _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) public override GreenNode GetSlot(int i)
@ -722,9 +722,9 @@ namespace Parser.Internal
_nodes = nodes; _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) public override GreenNode GetSlot(int i)
@ -754,9 +754,9 @@ namespace Parser.Internal
_functionName = functionName; _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) public override GreenNode GetSlot(int i)
@ -791,9 +791,9 @@ namespace Parser.Internal
_body = body; _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) public override GreenNode GetSlot(int i)
@ -829,9 +829,9 @@ namespace Parser.Internal
_rhs = rhs; _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) public override GreenNode GetSlot(int i)
@ -859,9 +859,9 @@ namespace Parser.Internal
_name = name; _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) public override GreenNode GetSlot(int i)
@ -887,9 +887,9 @@ namespace Parser.Internal
_number = number; _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) public override GreenNode GetSlot(int i)
@ -915,9 +915,9 @@ namespace Parser.Internal
_stringToken = stringToken; _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) public override GreenNode GetSlot(int i)
@ -943,9 +943,9 @@ namespace Parser.Internal
_stringToken = stringToken; _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) public override GreenNode GetSlot(int i)
@ -971,9 +971,9 @@ namespace Parser.Internal
_stringToken = stringToken; _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) public override GreenNode GetSlot(int i)
@ -1007,9 +1007,9 @@ namespace Parser.Internal
_closingSquareBracket = closingSquareBracket; _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) public override GreenNode GetSlot(int i)
@ -1045,9 +1045,9 @@ namespace Parser.Internal
_closingBrace = closingBrace; _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) public override GreenNode GetSlot(int i)
@ -1083,9 +1083,9 @@ namespace Parser.Internal
_closingBracket = closingBracket; _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) public override GreenNode GetSlot(int i)
@ -1125,9 +1125,9 @@ namespace Parser.Internal
_closingBrace = closingBrace; _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) public override GreenNode GetSlot(int i)
@ -1168,9 +1168,9 @@ namespace Parser.Internal
_closingBracket = closingBracket; _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) public override GreenNode GetSlot(int i)
@ -1207,9 +1207,9 @@ namespace Parser.Internal
_rightOperand = rightOperand; _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) public override GreenNode GetSlot(int i)
@ -1241,9 +1241,9 @@ namespace Parser.Internal
_operation = operation; _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) public override GreenNode GetSlot(int i)
@ -1278,9 +1278,9 @@ namespace Parser.Internal
_closingBracket = closingBracket; _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) public override GreenNode GetSlot(int i)
@ -1312,9 +1312,9 @@ namespace Parser.Internal
_arguments = arguments; _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) public override GreenNode GetSlot(int i)
@ -1349,9 +1349,9 @@ namespace Parser.Internal
_baseClassNameAndArguments = baseClassNameAndArguments; _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) public override GreenNode GetSlot(int i)
@ -1383,9 +1383,9 @@ namespace Parser.Internal
_value = value; _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) public override GreenNode GetSlot(int i)
@ -1416,9 +1416,9 @@ namespace Parser.Internal
_assignment = assignment; _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) public override GreenNode GetSlot(int i)
@ -1453,9 +1453,9 @@ namespace Parser.Internal
_closingBracket = closingBracket; _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) public override GreenNode GetSlot(int i)
@ -1507,9 +1507,9 @@ namespace Parser.Internal
_endKeyword = endKeyword; _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) public override GreenNode GetSlot(int i)
@ -1549,9 +1549,9 @@ namespace Parser.Internal
_inputDescription = inputDescription; _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) public override GreenNode GetSlot(int i)
@ -1591,9 +1591,9 @@ namespace Parser.Internal
_endKeyword = endKeyword; _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) public override GreenNode GetSlot(int i)
@ -1634,9 +1634,9 @@ namespace Parser.Internal
_endKeyword = endKeyword; _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) public override GreenNode GetSlot(int i)
@ -1669,9 +1669,9 @@ namespace Parser.Internal
_baseClasses = baseClasses; _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) public override GreenNode GetSlot(int i)
@ -1718,9 +1718,9 @@ namespace Parser.Internal
_endKeyword = endKeyword; _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) public override GreenNode GetSlot(int i)
@ -1759,9 +1759,9 @@ namespace Parser.Internal
_closingBracket = closingBracket; _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) public override GreenNode GetSlot(int i)
@ -1797,9 +1797,9 @@ namespace Parser.Internal
_commas = commas; _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) public override GreenNode GetSlot(int i)
@ -1839,9 +1839,9 @@ namespace Parser.Internal
_endKeyword = endKeyword; _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) public override GreenNode GetSlot(int i)
@ -1882,9 +1882,9 @@ namespace Parser.Internal
_endKeyword = endKeyword; _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) public override GreenNode GetSlot(int i)

View File

@ -208,7 +208,7 @@ namespace Parser.Internal
throw new System.InvalidOperationException(); 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(); throw new InvalidOperationException();
} }

View File

@ -22,7 +22,7 @@ namespace Parser.Internal
throw new System.NotImplementedException(); 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(); throw new InvalidOperationException();
} }

View File

@ -23,7 +23,7 @@ namespace Parser
var green = parser.ParseFile(); var green = parser.ParseFile();
var parserDiagnostics = parser.Diagnostics; var parserDiagnostics = parser.Diagnostics;
var totalDiagnostics = new DiagnosticsBag(lexerDiagnostics.Concat(parserDiagnostics)); 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); return new SyntaxTree(root, totalDiagnostics);
} }
} }

View File

@ -4,13 +4,13 @@ namespace Parser
{ {
private SyntaxNode _statementList; 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 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 public SyntaxNodeOrTokenList StatementList
@ -48,23 +48,23 @@ namespace Parser
private SyntaxNode _commas; private SyntaxNode _commas;
private SyntaxNode _body; 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 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 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 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 public FunctionOutputDescriptionSyntaxNode OutputDescription
@ -138,13 +138,13 @@ namespace Parser
{ {
private SyntaxNode _outputList; 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 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 public SyntaxNodeOrTokenList OutputList
@ -179,18 +179,18 @@ namespace Parser
{ {
private SyntaxNode _parameterList; 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 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 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 public SyntaxNodeOrTokenList ParameterList
@ -227,18 +227,18 @@ namespace Parser
private SyntaxNode _optionalCommas; private SyntaxNode _optionalCommas;
private SyntaxNode _cases; 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 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 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 public ExpressionSyntaxNode SwitchExpression
@ -301,13 +301,13 @@ namespace Parser
private SyntaxNode _optionalCommas; private SyntaxNode _optionalCommas;
private SyntaxNode _body; 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 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 public ExpressionSyntaxNode CaseIdentifier
@ -370,18 +370,18 @@ namespace Parser
private SyntaxNode _optionalCommas; private SyntaxNode _optionalCommas;
private SyntaxNode _body; 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 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 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 public ExpressionSyntaxNode Condition
@ -444,13 +444,13 @@ namespace Parser
private SyntaxNode _optionalCommas; private SyntaxNode _optionalCommas;
private SyntaxNode _body; 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 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 public ExpressionSyntaxNode Condition
@ -511,13 +511,13 @@ namespace Parser
{ {
private SyntaxNode _body; 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 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 public SyntaxNodeOrTokenList Body
@ -556,18 +556,18 @@ namespace Parser
private SyntaxNode _elseifClauses; private SyntaxNode _elseifClauses;
private SyntaxNode _elseClause; 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 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 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 public ExpressionSyntaxNode Condition
@ -656,18 +656,18 @@ namespace Parser
private SyntaxNode _optionalCommas; private SyntaxNode _optionalCommas;
private SyntaxNode _body; 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 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 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 public AssignmentExpressionSyntaxNode Assignment
@ -729,13 +729,13 @@ namespace Parser
private SyntaxNode _lhs; private SyntaxNode _lhs;
private SyntaxNode _rhs; 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 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 public ExpressionSyntaxNode Lhs
@ -783,13 +783,13 @@ namespace Parser
{ {
private SyntaxNode _catchBody; 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 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 public SyntaxNodeOrTokenList CatchBody
@ -825,18 +825,18 @@ namespace Parser
private SyntaxNode _tryBody; private SyntaxNode _tryBody;
private SyntaxNode _catchClause; 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 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 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 public SyntaxNodeOrTokenList TryBody
@ -884,7 +884,7 @@ namespace Parser
{ {
private SyntaxNode _expression; 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 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 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 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; 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 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 public ExpressionSyntaxNode Operand
@ -1014,7 +1014,7 @@ namespace Parser
{ {
private SyntaxNode _nodes; 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; 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 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 public CompoundNameSyntaxNode FunctionName
@ -1093,13 +1093,13 @@ namespace Parser
private SyntaxNode _input; private SyntaxNode _input;
private SyntaxNode _body; 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 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 public FunctionInputDescriptionSyntaxNode Input
@ -1148,13 +1148,13 @@ namespace Parser
private SyntaxNode _lhs; private SyntaxNode _lhs;
private SyntaxNode _rhs; 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 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 public ExpressionSyntaxNode Lhs
@ -1201,13 +1201,13 @@ namespace Parser
public class IdentifierNameSyntaxNode : ExpressionSyntaxNode 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 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 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 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 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 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 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 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 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 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; 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 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 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 public SyntaxNodeOrTokenList Nodes
@ -1388,18 +1388,18 @@ namespace Parser
{ {
private SyntaxNode _nodes; 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 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 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 public SyntaxNodeOrTokenList Nodes
@ -1434,18 +1434,18 @@ namespace Parser
{ {
private SyntaxNode _expression; 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 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 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 public ExpressionSyntaxNode Expression
@ -1481,18 +1481,18 @@ namespace Parser
private SyntaxNode _expression; private SyntaxNode _expression;
private SyntaxNode _nodes; 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 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 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 public ExpressionSyntaxNode Expression
@ -1541,18 +1541,18 @@ namespace Parser
private SyntaxNode _functionName; private SyntaxNode _functionName;
private SyntaxNode _nodes; 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 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 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 public ExpressionSyntaxNode FunctionName
@ -1601,13 +1601,13 @@ namespace Parser
private SyntaxNode _leftOperand; private SyntaxNode _leftOperand;
private SyntaxNode _rightOperand; 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 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 public SyntaxNode LeftOperand
@ -1655,13 +1655,13 @@ namespace Parser
{ {
private SyntaxNode _operand; 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 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 public ExpressionSyntaxNode Operand
@ -1696,18 +1696,18 @@ namespace Parser
{ {
private SyntaxNode _expression; 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 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 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 public ExpressionSyntaxNode Expression
@ -1743,7 +1743,7 @@ namespace Parser
private SyntaxNode _commandName; private SyntaxNode _commandName;
private SyntaxNode _arguments; 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 _methodName;
private SyntaxNode _baseClassNameAndArguments; 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 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 public ExpressionSyntaxNode MethodName
@ -1848,13 +1848,13 @@ namespace Parser
{ {
private SyntaxNode _value; 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 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 public ExpressionSyntaxNode Value
@ -1890,7 +1890,7 @@ namespace Parser
private SyntaxNode _name; private SyntaxNode _name;
private SyntaxNode _assignment; 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; 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 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 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 public SyntaxNodeOrTokenList Nodes
@ -1990,18 +1990,18 @@ namespace Parser
private SyntaxNode _commas; private SyntaxNode _commas;
private SyntaxNode _body; 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 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 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 public FunctionOutputDescriptionSyntaxNode OutputDescription
@ -2090,7 +2090,7 @@ namespace Parser
private SyntaxNode _name; private SyntaxNode _name;
private SyntaxNode _inputDescription; 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 _attributes;
private SyntaxNode _methods; 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 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 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 public AttributeListSyntaxNode Attributes
@ -2214,18 +2214,18 @@ namespace Parser
private SyntaxNode _attributes; private SyntaxNode _attributes;
private SyntaxNode _properties; 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 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 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 public AttributeListSyntaxNode Attributes
@ -2273,13 +2273,13 @@ namespace Parser
{ {
private SyntaxNode _baseClasses; 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 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 public SyntaxNodeOrTokenList BaseClasses
@ -2317,18 +2317,18 @@ namespace Parser
private SyntaxNode _baseClassList; private SyntaxNode _baseClassList;
private SyntaxNode _nodes; 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 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 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 public AttributeListSyntaxNode Attributes
@ -2402,18 +2402,18 @@ namespace Parser
{ {
private SyntaxNode _values; 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 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 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 public SyntaxNodeOrTokenList Values
@ -2450,7 +2450,7 @@ namespace Parser
private SyntaxNode _values; private SyntaxNode _values;
private SyntaxNode _commas; 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 _attributes;
private SyntaxNode _items; 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 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 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 public AttributeListSyntaxNode Attributes
@ -2574,18 +2574,18 @@ namespace Parser
private SyntaxNode _attributes; private SyntaxNode _attributes;
private SyntaxNode _events; 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 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 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 public AttributeListSyntaxNode Attributes

View File

@ -8,21 +8,41 @@ namespace Parser
{ {
private readonly SyntaxNode _parent; private readonly SyntaxNode _parent;
internal readonly Internal.GreenNode _green; internal readonly Internal.GreenNode _green;
internal SyntaxNode(SyntaxNode parent, Internal.GreenNode green) internal SyntaxNode(SyntaxNode parent, Internal.GreenNode green, int position)
{ {
_parent = parent; _parent = parent;
_green = green; _green = green;
Position = position;
} }
public TokenKind Kind => _green.Kind; public TokenKind Kind => _green.Kind;
public SyntaxNode Parent => _parent; public SyntaxNode Parent => _parent;
public int Slots => _green.Slots;
public ChildNodesAndTokensList GetChildNodesAndTokens() public ChildNodesAndTokensList GetChildNodesAndTokens()
{ {
return new ChildNodesAndTokensList(this); 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 abstract SyntaxNode GetNode(int index);
internal SyntaxNode GetRed(ref SyntaxNode field, int slot) internal SyntaxNode GetRed(ref SyntaxNode field, int slot)
@ -32,7 +52,7 @@ namespace Parser
var green = _green.GetSlot(slot); var green = _green.GetSlot(slot);
if (green != null) 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 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 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 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 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; _token = null;
_nodeOrParent = node; _nodeOrParent = node;
_isToken = false; _isToken = false;
Position = node.Position;
} }
internal SyntaxNodeOrToken(SyntaxNode parent, Internal.GreenNode token) internal SyntaxNodeOrToken(SyntaxNode parent, Internal.GreenNode token, int position)
{ {
_token = token; _token = token;
_nodeOrParent = parent; _nodeOrParent = parent;
_isToken = true; _isToken = true;
Position = position;
} }
public bool IsToken => _isToken; public bool IsToken => _isToken;
public bool IsNode => !IsToken; public bool IsNode => !IsToken;
public int Position { get; }
public SyntaxNode AsNode() public SyntaxNode AsNode()
{ {
if (_isToken) if (_isToken)
@ -39,12 +43,12 @@
{ {
return default(SyntaxToken); return default(SyntaxToken);
} }
return new SyntaxToken(_nodeOrParent, _token); return new SyntaxToken(_nodeOrParent, _token, Position);
} }
public static implicit operator SyntaxNodeOrToken(SyntaxToken token) 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) public static implicit operator SyntaxNodeOrToken(SyntaxNode node)

View File

@ -7,7 +7,7 @@ namespace Parser
{ {
public class SyntaxNodeOrTokenList : SyntaxNode, IReadOnlyCollection<SyntaxNodeOrToken> 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); var green = _green.GetSlot(index);
if (green is Internal.SyntaxToken) if (green is Internal.SyntaxToken)
{ {
return new SyntaxToken(this, green); return new SyntaxToken(this, green, this.GetChildPosition(index));
} }
else else
{ {
return green.CreateRed(this); return green.CreateRed(this, this.GetChildPosition(index));
} }
} }
throw new ArgumentOutOfRangeException(); throw new ArgumentOutOfRangeException();

View File

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

View File

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