Assign GreenNode.Slots outside of constructor

This commit is contained in:
Alexander Luzgarev 2018-12-16 12:39:13 +01:00
parent 6bc04ad659
commit 6e61b4c768
8 changed files with 167 additions and 73 deletions

View File

@ -9,19 +9,13 @@ namespace Parser.Internal
internal abstract class GreenNode internal abstract class GreenNode
{ {
public TokenKind Kind { get; } public TokenKind Kind { get; }
public int Slots { get; } public int Slots { get; protected set; }
public abstract GreenNode GetSlot(int i); public abstract GreenNode GetSlot(int i);
public GreenNode(TokenKind kind) public GreenNode(TokenKind kind)
{ {
Kind = kind; Kind = kind;
} }
public GreenNode(TokenKind kind, int slots)
{
Kind = kind;
Slots = slots;
}
internal abstract Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent); internal abstract Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent);

View File

@ -7,8 +7,9 @@ namespace Parser.Internal
{ {
private readonly GreenNode[] _elements; private readonly GreenNode[] _elements;
protected SyntaxList(GreenNode[] elements) : base(TokenKind.List, elements.Length) protected SyntaxList(GreenNode[] elements) : base(TokenKind.List)
{ {
Slots = elements.Length;
_elements = elements; _elements = elements;
} }

View File

@ -1,14 +1,12 @@
using System; namespace Parser.Internal
using System.Collections.Generic;
namespace Parser.Internal
{ {
internal class SyntaxList<T> : SyntaxNode where T : GreenNode internal class SyntaxList<T> : SyntaxNode where T : GreenNode
{ {
private readonly SyntaxList _list; private readonly SyntaxList _list;
protected SyntaxList(T[] list) : base(TokenKind.List, list.Length) protected SyntaxList(T[] list) : base(TokenKind.List)
{ {
Slots = list.Length;
_list = SyntaxList.List(list); _list = SyntaxList.List(list);
} }

View File

@ -7,8 +7,10 @@ namespace Parser.Internal
internal FileSyntaxNode( internal FileSyntaxNode(
SyntaxList statementList, SyntaxList statementList,
SyntaxToken endOfFile) : base(TokenKind.File, 2) SyntaxToken endOfFile) : base(TokenKind.File)
{ {
Slots = 2;
_statementList = statementList; _statementList = statementList;
_endOfFile = endOfFile; _endOfFile = endOfFile;
} }
@ -46,8 +48,10 @@ namespace Parser.Internal
FunctionInputDescriptionSyntaxNode inputDescription, FunctionInputDescriptionSyntaxNode inputDescription,
SyntaxList<SyntaxToken> commas, SyntaxList<SyntaxToken> commas,
SyntaxList body, SyntaxList body,
SyntaxToken endKeyword) : base(TokenKind.FunctionDeclaration, 7) SyntaxToken endKeyword) : base(TokenKind.FunctionDeclaration)
{ {
Slots = 7;
_functionKeyword = functionKeyword; _functionKeyword = functionKeyword;
_outputDescription = outputDescription; _outputDescription = outputDescription;
_name = name; _name = name;
@ -85,8 +89,10 @@ namespace Parser.Internal
internal FunctionOutputDescriptionSyntaxNode( internal FunctionOutputDescriptionSyntaxNode(
SyntaxList outputList, SyntaxList outputList,
SyntaxToken assignmentSign) : base(TokenKind.FunctionOutputDescription, 2) SyntaxToken assignmentSign) : base(TokenKind.FunctionOutputDescription)
{ {
Slots = 2;
_outputList = outputList; _outputList = outputList;
_assignmentSign = assignmentSign; _assignmentSign = assignmentSign;
} }
@ -116,8 +122,10 @@ namespace Parser.Internal
internal FunctionInputDescriptionSyntaxNode( internal FunctionInputDescriptionSyntaxNode(
SyntaxToken openingBracket, SyntaxToken openingBracket,
SyntaxList parameterList, SyntaxList parameterList,
SyntaxToken closingBracket) : base(TokenKind.FunctionInputDescription, 3) SyntaxToken closingBracket) : base(TokenKind.FunctionInputDescription)
{ {
Slots = 3;
_openingBracket = openingBracket; _openingBracket = openingBracket;
_parameterList = parameterList; _parameterList = parameterList;
_closingBracket = closingBracket; _closingBracket = closingBracket;
@ -153,8 +161,10 @@ namespace Parser.Internal
ExpressionSyntaxNode switchExpression, ExpressionSyntaxNode switchExpression,
SyntaxList<SyntaxToken> optionalCommas, SyntaxList<SyntaxToken> optionalCommas,
SyntaxList<SwitchCaseSyntaxNode> cases, SyntaxList<SwitchCaseSyntaxNode> cases,
SyntaxToken endKeyword) : base(TokenKind.SwitchStatement, 5) SyntaxToken endKeyword) : base(TokenKind.SwitchStatement)
{ {
Slots = 5;
_switchKeyword = switchKeyword; _switchKeyword = switchKeyword;
_switchExpression = switchExpression; _switchExpression = switchExpression;
_optionalCommas = optionalCommas; _optionalCommas = optionalCommas;
@ -192,8 +202,10 @@ namespace Parser.Internal
SyntaxToken caseKeyword, SyntaxToken caseKeyword,
ExpressionSyntaxNode caseIdentifier, ExpressionSyntaxNode caseIdentifier,
SyntaxList<SyntaxToken> optionalCommas, SyntaxList<SyntaxToken> optionalCommas,
SyntaxList body) : base(TokenKind.SwitchCase, 4) SyntaxList body) : base(TokenKind.SwitchCase)
{ {
Slots = 4;
_caseKeyword = caseKeyword; _caseKeyword = caseKeyword;
_caseIdentifier = caseIdentifier; _caseIdentifier = caseIdentifier;
_optionalCommas = optionalCommas; _optionalCommas = optionalCommas;
@ -231,8 +243,10 @@ namespace Parser.Internal
ExpressionSyntaxNode condition, ExpressionSyntaxNode condition,
SyntaxList<SyntaxToken> optionalCommas, SyntaxList<SyntaxToken> optionalCommas,
SyntaxList body, SyntaxList body,
SyntaxToken endKeyword) : base(TokenKind.WhileStatement, 5) SyntaxToken endKeyword) : base(TokenKind.WhileStatement)
{ {
Slots = 5;
_whileKeyword = whileKeyword; _whileKeyword = whileKeyword;
_condition = condition; _condition = condition;
_optionalCommas = optionalCommas; _optionalCommas = optionalCommas;
@ -270,8 +284,10 @@ namespace Parser.Internal
SyntaxToken elseifKeyword, SyntaxToken elseifKeyword,
ExpressionSyntaxNode condition, ExpressionSyntaxNode condition,
SyntaxList<SyntaxToken> optionalCommas, SyntaxList<SyntaxToken> optionalCommas,
SyntaxList body) : base(TokenKind.ElseifClause, 4) SyntaxList body) : base(TokenKind.ElseifClause)
{ {
Slots = 4;
_elseifKeyword = elseifKeyword; _elseifKeyword = elseifKeyword;
_condition = condition; _condition = condition;
_optionalCommas = optionalCommas; _optionalCommas = optionalCommas;
@ -303,8 +319,10 @@ namespace Parser.Internal
internal ElseClause( internal ElseClause(
SyntaxToken elseKeyword, SyntaxToken elseKeyword,
SyntaxList body) : base(TokenKind.ElseClause, 2) SyntaxList body) : base(TokenKind.ElseClause)
{ {
Slots = 2;
_elseKeyword = elseKeyword; _elseKeyword = elseKeyword;
_body = body; _body = body;
} }
@ -342,8 +360,10 @@ namespace Parser.Internal
SyntaxList body, SyntaxList body,
SyntaxList<ElseifClause> elseifClauses, SyntaxList<ElseifClause> elseifClauses,
ElseClause elseClause, ElseClause elseClause,
SyntaxToken endKeyword) : base(TokenKind.IfStatement, 7) SyntaxToken endKeyword) : base(TokenKind.IfStatement)
{ {
Slots = 7;
_ifKeyword = ifKeyword; _ifKeyword = ifKeyword;
_condition = condition; _condition = condition;
_optionalCommas = optionalCommas; _optionalCommas = optionalCommas;
@ -387,8 +407,10 @@ namespace Parser.Internal
AssignmentExpressionSyntaxNode assignment, AssignmentExpressionSyntaxNode assignment,
SyntaxList<SyntaxToken> optionalCommas, SyntaxList<SyntaxToken> optionalCommas,
SyntaxList body, SyntaxList body,
SyntaxToken endKeyword) : base(TokenKind.ForStatement, 5) SyntaxToken endKeyword) : base(TokenKind.ForStatement)
{ {
Slots = 5;
_forKeyword = forKeyword; _forKeyword = forKeyword;
_assignment = assignment; _assignment = assignment;
_optionalCommas = optionalCommas; _optionalCommas = optionalCommas;
@ -424,8 +446,10 @@ namespace Parser.Internal
internal AssignmentExpressionSyntaxNode( internal AssignmentExpressionSyntaxNode(
ExpressionSyntaxNode lhs, ExpressionSyntaxNode lhs,
SyntaxToken assignmentSign, SyntaxToken assignmentSign,
ExpressionSyntaxNode rhs) : base(TokenKind.AssignmentExpression, 3) ExpressionSyntaxNode rhs) : base(TokenKind.AssignmentExpression)
{ {
Slots = 3;
_lhs = lhs; _lhs = lhs;
_assignmentSign = assignmentSign; _assignmentSign = assignmentSign;
_rhs = rhs; _rhs = rhs;
@ -455,8 +479,10 @@ namespace Parser.Internal
internal CatchClauseSyntaxNode( internal CatchClauseSyntaxNode(
SyntaxToken catchKeyword, SyntaxToken catchKeyword,
SyntaxList catchBody) : base(TokenKind.CatchClause, 2) SyntaxList catchBody) : base(TokenKind.CatchClause)
{ {
Slots = 2;
_catchKeyword = catchKeyword; _catchKeyword = catchKeyword;
_catchBody = catchBody; _catchBody = catchBody;
} }
@ -488,8 +514,10 @@ namespace Parser.Internal
SyntaxToken tryKeyword, SyntaxToken tryKeyword,
SyntaxList tryBody, SyntaxList tryBody,
CatchClauseSyntaxNode catchClause, CatchClauseSyntaxNode catchClause,
SyntaxToken endKeyword) : base(TokenKind.TryCatchStatement, 4) SyntaxToken endKeyword) : base(TokenKind.TryCatchStatement)
{ {
Slots = 4;
_tryKeyword = tryKeyword; _tryKeyword = tryKeyword;
_tryBody = tryBody; _tryBody = tryBody;
_catchClause = catchClause; _catchClause = catchClause;
@ -519,8 +547,10 @@ namespace Parser.Internal
internal readonly ExpressionSyntaxNode _expression; internal readonly ExpressionSyntaxNode _expression;
internal ExpressionStatementSyntaxNode( internal ExpressionStatementSyntaxNode(
ExpressionSyntaxNode expression) : base(TokenKind.ExpressionStatement, 1) ExpressionSyntaxNode expression) : base(TokenKind.ExpressionStatement)
{ {
Slots = 1;
_expression = expression; _expression = expression;
} }
@ -544,8 +574,10 @@ namespace Parser.Internal
internal readonly SyntaxToken _semicolon; internal readonly SyntaxToken _semicolon;
internal EmptyStatementSyntaxNode( internal EmptyStatementSyntaxNode(
SyntaxToken semicolon) : base(TokenKind.EmptyStatement, 1) SyntaxToken semicolon) : base(TokenKind.EmptyStatement)
{ {
Slots = 1;
_semicolon = semicolon; _semicolon = semicolon;
} }
@ -567,8 +599,10 @@ namespace Parser.Internal
internal class EmptyExpressionSyntaxNode : ExpressionSyntaxNode internal class EmptyExpressionSyntaxNode : ExpressionSyntaxNode
{ {
internal EmptyExpressionSyntaxNode() : base(TokenKind.EmptyExpression, 0) internal EmptyExpressionSyntaxNode() : base(TokenKind.EmptyExpression)
{ {
Slots = 0;
} }
internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent) internal override Parser.SyntaxNode CreateRed(Parser.SyntaxNode parent)
@ -592,8 +626,10 @@ namespace Parser.Internal
internal UnaryPrefixOperationExpressionSyntaxNode( internal UnaryPrefixOperationExpressionSyntaxNode(
SyntaxToken operation, SyntaxToken operation,
ExpressionSyntaxNode operand) : base(TokenKind.UnaryPrefixOperationExpression, 2) ExpressionSyntaxNode operand) : base(TokenKind.UnaryPrefixOperationExpression)
{ {
Slots = 2;
_operation = operation; _operation = operation;
_operand = operand; _operand = operand;
} }
@ -619,8 +655,10 @@ namespace Parser.Internal
internal readonly SyntaxList _nodes; internal readonly SyntaxList _nodes;
internal CompoundNameSyntaxNode( internal CompoundNameSyntaxNode(
SyntaxList nodes) : base(TokenKind.CompoundName, 1) SyntaxList nodes) : base(TokenKind.CompoundName)
{ {
Slots = 1;
_nodes = nodes; _nodes = nodes;
} }
@ -646,8 +684,10 @@ namespace Parser.Internal
internal NamedFunctionHandleSyntaxNode( internal NamedFunctionHandleSyntaxNode(
SyntaxToken atSign, SyntaxToken atSign,
CompoundNameSyntaxNode functionName) : base(TokenKind.NamedFunctionHandle, 2) CompoundNameSyntaxNode functionName) : base(TokenKind.NamedFunctionHandle)
{ {
Slots = 2;
_atSign = atSign; _atSign = atSign;
_functionName = functionName; _functionName = functionName;
} }
@ -677,8 +717,10 @@ namespace Parser.Internal
internal LambdaSyntaxNode( internal LambdaSyntaxNode(
SyntaxToken atSign, SyntaxToken atSign,
FunctionInputDescriptionSyntaxNode input, FunctionInputDescriptionSyntaxNode input,
ExpressionSyntaxNode body) : base(TokenKind.Lambda, 3) ExpressionSyntaxNode body) : base(TokenKind.Lambda)
{ {
Slots = 3;
_atSign = atSign; _atSign = atSign;
_input = input; _input = input;
_body = body; _body = body;
@ -710,8 +752,10 @@ namespace Parser.Internal
internal BinaryOperationExpressionSyntaxNode( internal BinaryOperationExpressionSyntaxNode(
ExpressionSyntaxNode lhs, ExpressionSyntaxNode lhs,
SyntaxToken operation, SyntaxToken operation,
ExpressionSyntaxNode rhs) : base(TokenKind.BinaryOperation, 3) ExpressionSyntaxNode rhs) : base(TokenKind.BinaryOperation)
{ {
Slots = 3;
_lhs = lhs; _lhs = lhs;
_operation = operation; _operation = operation;
_rhs = rhs; _rhs = rhs;
@ -739,8 +783,10 @@ namespace Parser.Internal
internal readonly SyntaxToken _name; internal readonly SyntaxToken _name;
internal IdentifierNameSyntaxNode( internal IdentifierNameSyntaxNode(
SyntaxToken name) : base(TokenKind.IdentifierName, 1) SyntaxToken name) : base(TokenKind.IdentifierName)
{ {
Slots = 1;
_name = name; _name = name;
} }
@ -764,8 +810,10 @@ namespace Parser.Internal
internal readonly SyntaxToken _number; internal readonly SyntaxToken _number;
internal NumberLiteralSyntaxNode( internal NumberLiteralSyntaxNode(
SyntaxToken number) : base(TokenKind.NumberLiteralExpression, 1) SyntaxToken number) : base(TokenKind.NumberLiteralExpression)
{ {
Slots = 1;
_number = number; _number = number;
} }
@ -789,8 +837,10 @@ namespace Parser.Internal
internal readonly SyntaxToken _stringToken; internal readonly SyntaxToken _stringToken;
internal StringLiteralSyntaxNode( internal StringLiteralSyntaxNode(
SyntaxToken stringToken) : base(TokenKind.StringLiteralExpression, 1) SyntaxToken stringToken) : base(TokenKind.StringLiteralExpression)
{ {
Slots = 1;
_stringToken = stringToken; _stringToken = stringToken;
} }
@ -814,8 +864,10 @@ namespace Parser.Internal
internal readonly SyntaxToken _stringToken; internal readonly SyntaxToken _stringToken;
internal DoubleQuotedStringLiteralSyntaxNode( internal DoubleQuotedStringLiteralSyntaxNode(
SyntaxToken stringToken) : base(TokenKind.DoubleQuotedStringLiteralExpression, 1) SyntaxToken stringToken) : base(TokenKind.DoubleQuotedStringLiteralExpression)
{ {
Slots = 1;
_stringToken = stringToken; _stringToken = stringToken;
} }
@ -839,8 +891,10 @@ namespace Parser.Internal
internal readonly SyntaxToken _stringToken; internal readonly SyntaxToken _stringToken;
internal UnquotedStringLiteralSyntaxNode( internal UnquotedStringLiteralSyntaxNode(
SyntaxToken stringToken) : base(TokenKind.UnquotedStringLiteralExpression, 1) SyntaxToken stringToken) : base(TokenKind.UnquotedStringLiteralExpression)
{ {
Slots = 1;
_stringToken = stringToken; _stringToken = stringToken;
} }
@ -868,8 +922,10 @@ namespace Parser.Internal
internal ArrayLiteralExpressionSyntaxNode( internal ArrayLiteralExpressionSyntaxNode(
SyntaxToken openingSquareBracket, SyntaxToken openingSquareBracket,
SyntaxList nodes, SyntaxList nodes,
SyntaxToken closingSquareBracket) : base(TokenKind.ArrayLiteralExpression, 3) SyntaxToken closingSquareBracket) : base(TokenKind.ArrayLiteralExpression)
{ {
Slots = 3;
_openingSquareBracket = openingSquareBracket; _openingSquareBracket = openingSquareBracket;
_nodes = nodes; _nodes = nodes;
_closingSquareBracket = closingSquareBracket; _closingSquareBracket = closingSquareBracket;
@ -901,8 +957,10 @@ namespace Parser.Internal
internal CellArrayLiteralExpressionSyntaxNode( internal CellArrayLiteralExpressionSyntaxNode(
SyntaxToken openingBrace, SyntaxToken openingBrace,
SyntaxList nodes, SyntaxList nodes,
SyntaxToken closingBrace) : base(TokenKind.CellArrayLiteralExpression, 3) SyntaxToken closingBrace) : base(TokenKind.CellArrayLiteralExpression)
{ {
Slots = 3;
_openingBrace = openingBrace; _openingBrace = openingBrace;
_nodes = nodes; _nodes = nodes;
_closingBrace = closingBrace; _closingBrace = closingBrace;
@ -934,8 +992,10 @@ namespace Parser.Internal
internal ParenthesizedExpressionSyntaxNode( internal ParenthesizedExpressionSyntaxNode(
SyntaxToken openingBracket, SyntaxToken openingBracket,
ExpressionSyntaxNode expression, ExpressionSyntaxNode expression,
SyntaxToken closingBracket) : base(TokenKind.ParenthesizedExpression, 3) SyntaxToken closingBracket) : base(TokenKind.ParenthesizedExpression)
{ {
Slots = 3;
_openingBracket = openingBracket; _openingBracket = openingBracket;
_expression = expression; _expression = expression;
_closingBracket = closingBracket; _closingBracket = closingBracket;
@ -969,8 +1029,10 @@ namespace Parser.Internal
ExpressionSyntaxNode expression, ExpressionSyntaxNode expression,
SyntaxToken openingBrace, SyntaxToken openingBrace,
SyntaxList nodes, SyntaxList nodes,
SyntaxToken closingBrace) : base(TokenKind.CellArrayElementAccess, 4) SyntaxToken closingBrace) : base(TokenKind.CellArrayElementAccess)
{ {
Slots = 4;
_expression = expression; _expression = expression;
_openingBrace = openingBrace; _openingBrace = openingBrace;
_nodes = nodes; _nodes = nodes;
@ -1006,8 +1068,10 @@ namespace Parser.Internal
ExpressionSyntaxNode functionName, ExpressionSyntaxNode functionName,
SyntaxToken openingBracket, SyntaxToken openingBracket,
SyntaxList nodes, SyntaxList nodes,
SyntaxToken closingBracket) : base(TokenKind.FunctionCall, 4) SyntaxToken closingBracket) : base(TokenKind.FunctionCall)
{ {
Slots = 4;
_functionName = functionName; _functionName = functionName;
_openingBracket = openingBracket; _openingBracket = openingBracket;
_nodes = nodes; _nodes = nodes;
@ -1041,8 +1105,10 @@ namespace Parser.Internal
internal MemberAccessSyntaxNode( internal MemberAccessSyntaxNode(
SyntaxNode leftOperand, SyntaxNode leftOperand,
SyntaxToken dot, SyntaxToken dot,
SyntaxNode rightOperand) : base(TokenKind.MemberAccess, 3) SyntaxNode rightOperand) : base(TokenKind.MemberAccess)
{ {
Slots = 3;
_leftOperand = leftOperand; _leftOperand = leftOperand;
_dot = dot; _dot = dot;
_rightOperand = rightOperand; _rightOperand = rightOperand;
@ -1072,8 +1138,10 @@ namespace Parser.Internal
internal UnaryPostixOperationExpressionSyntaxNode( internal UnaryPostixOperationExpressionSyntaxNode(
ExpressionSyntaxNode operand, ExpressionSyntaxNode operand,
SyntaxToken operation) : base(TokenKind.UnaryPostfixOperationExpression, 2) SyntaxToken operation) : base(TokenKind.UnaryPostfixOperationExpression)
{ {
Slots = 2;
_operand = operand; _operand = operand;
_operation = operation; _operation = operation;
} }
@ -1103,8 +1171,10 @@ namespace Parser.Internal
internal IndirectMemberAccessSyntaxNode( internal IndirectMemberAccessSyntaxNode(
SyntaxToken openingBracket, SyntaxToken openingBracket,
ExpressionSyntaxNode expression, ExpressionSyntaxNode expression,
SyntaxToken closingBracket) : base(TokenKind.IndirectMemberAccess, 3) SyntaxToken closingBracket) : base(TokenKind.IndirectMemberAccess)
{ {
Slots = 3;
_openingBracket = openingBracket; _openingBracket = openingBracket;
_expression = expression; _expression = expression;
_closingBracket = closingBracket; _closingBracket = closingBracket;
@ -1134,8 +1204,10 @@ namespace Parser.Internal
internal CommandExpressionSyntaxNode( internal CommandExpressionSyntaxNode(
IdentifierNameSyntaxNode commandName, IdentifierNameSyntaxNode commandName,
SyntaxList<UnquotedStringLiteralSyntaxNode> arguments) : base(TokenKind.Command, 2) SyntaxList<UnquotedStringLiteralSyntaxNode> arguments) : base(TokenKind.Command)
{ {
Slots = 2;
_commandName = commandName; _commandName = commandName;
_arguments = arguments; _arguments = arguments;
} }
@ -1165,8 +1237,10 @@ namespace Parser.Internal
internal BaseClassInvokationSyntaxNode( internal BaseClassInvokationSyntaxNode(
ExpressionSyntaxNode methodName, ExpressionSyntaxNode methodName,
SyntaxToken atSign, SyntaxToken atSign,
ExpressionSyntaxNode baseClassNameAndArguments) : base(TokenKind.ClassInvokation, 3) ExpressionSyntaxNode baseClassNameAndArguments) : base(TokenKind.ClassInvokation)
{ {
Slots = 3;
_methodName = methodName; _methodName = methodName;
_atSign = atSign; _atSign = atSign;
_baseClassNameAndArguments = baseClassNameAndArguments; _baseClassNameAndArguments = baseClassNameAndArguments;
@ -1196,8 +1270,10 @@ namespace Parser.Internal
internal AttributeAssignmentSyntaxNode( internal AttributeAssignmentSyntaxNode(
SyntaxToken assignmentSign, SyntaxToken assignmentSign,
ExpressionSyntaxNode value) : base(TokenKind.AttributeAssignment, 2) ExpressionSyntaxNode value) : base(TokenKind.AttributeAssignment)
{ {
Slots = 2;
_assignmentSign = assignmentSign; _assignmentSign = assignmentSign;
_value = value; _value = value;
} }
@ -1225,8 +1301,10 @@ namespace Parser.Internal
internal AttributeSyntaxNode( internal AttributeSyntaxNode(
IdentifierNameSyntaxNode name, IdentifierNameSyntaxNode name,
AttributeAssignmentSyntaxNode assignment) : base(TokenKind.Attribute, 2) AttributeAssignmentSyntaxNode assignment) : base(TokenKind.Attribute)
{ {
Slots = 2;
_name = name; _name = name;
_assignment = assignment; _assignment = assignment;
} }
@ -1256,8 +1334,10 @@ namespace Parser.Internal
internal AttributeListSyntaxNode( internal AttributeListSyntaxNode(
SyntaxToken openingBracket, SyntaxToken openingBracket,
SyntaxList nodes, SyntaxList nodes,
SyntaxToken closingBracket) : base(TokenKind.AttributeList, 3) SyntaxToken closingBracket) : base(TokenKind.AttributeList)
{ {
Slots = 3;
_openingBracket = openingBracket; _openingBracket = openingBracket;
_nodes = nodes; _nodes = nodes;
_closingBracket = closingBracket; _closingBracket = closingBracket;
@ -1297,8 +1377,10 @@ namespace Parser.Internal
FunctionInputDescriptionSyntaxNode inputDescription, FunctionInputDescriptionSyntaxNode inputDescription,
SyntaxList<SyntaxToken> commas, SyntaxList<SyntaxToken> commas,
SyntaxList body, SyntaxList body,
SyntaxToken endKeyword) : base(TokenKind.MethodDefinition, 7) SyntaxToken endKeyword) : base(TokenKind.MethodDefinition)
{ {
Slots = 7;
_functionKeyword = functionKeyword; _functionKeyword = functionKeyword;
_outputDescription = outputDescription; _outputDescription = outputDescription;
_name = name; _name = name;
@ -1338,8 +1420,10 @@ namespace Parser.Internal
internal AbstractMethodDeclarationSyntaxNode( internal AbstractMethodDeclarationSyntaxNode(
FunctionOutputDescriptionSyntaxNode outputDescription, FunctionOutputDescriptionSyntaxNode outputDescription,
CompoundNameSyntaxNode name, CompoundNameSyntaxNode name,
FunctionInputDescriptionSyntaxNode inputDescription) : base(TokenKind.AbstractMethodDeclaration, 3) FunctionInputDescriptionSyntaxNode inputDescription) : base(TokenKind.AbstractMethodDeclaration)
{ {
Slots = 3;
_outputDescription = outputDescription; _outputDescription = outputDescription;
_name = name; _name = name;
_inputDescription = inputDescription; _inputDescription = inputDescription;
@ -1373,8 +1457,10 @@ namespace Parser.Internal
SyntaxToken methodsKeyword, SyntaxToken methodsKeyword,
AttributeListSyntaxNode attributes, AttributeListSyntaxNode attributes,
SyntaxList methods, SyntaxList methods,
SyntaxToken endKeyword) : base(TokenKind.MethodsList, 4) SyntaxToken endKeyword) : base(TokenKind.MethodsList)
{ {
Slots = 4;
_methodsKeyword = methodsKeyword; _methodsKeyword = methodsKeyword;
_attributes = attributes; _attributes = attributes;
_methods = methods; _methods = methods;
@ -1410,8 +1496,10 @@ namespace Parser.Internal
SyntaxToken propertiesKeyword, SyntaxToken propertiesKeyword,
AttributeListSyntaxNode attributes, AttributeListSyntaxNode attributes,
SyntaxList properties, SyntaxList properties,
SyntaxToken endKeyword) : base(TokenKind.PropertiesList, 4) SyntaxToken endKeyword) : base(TokenKind.PropertiesList)
{ {
Slots = 4;
_propertiesKeyword = propertiesKeyword; _propertiesKeyword = propertiesKeyword;
_attributes = attributes; _attributes = attributes;
_properties = properties; _properties = properties;
@ -1443,8 +1531,10 @@ namespace Parser.Internal
internal BaseClassListSyntaxNode( internal BaseClassListSyntaxNode(
SyntaxToken lessSign, SyntaxToken lessSign,
SyntaxList baseClasses) : base(TokenKind.BaseClassList, 2) SyntaxList baseClasses) : base(TokenKind.BaseClassList)
{ {
Slots = 2;
_lessSign = lessSign; _lessSign = lessSign;
_baseClasses = baseClasses; _baseClasses = baseClasses;
} }
@ -1480,8 +1570,10 @@ namespace Parser.Internal
IdentifierNameSyntaxNode className, IdentifierNameSyntaxNode className,
BaseClassListSyntaxNode baseClassList, BaseClassListSyntaxNode baseClassList,
SyntaxList nodes, SyntaxList nodes,
SyntaxToken endKeyword) : base(TokenKind.ClassDeclaration, 6) SyntaxToken endKeyword) : base(TokenKind.ClassDeclaration)
{ {
Slots = 6;
_classdefKeyword = classdefKeyword; _classdefKeyword = classdefKeyword;
_attributes = attributes; _attributes = attributes;
_className = className; _className = className;
@ -1519,8 +1611,10 @@ namespace Parser.Internal
internal EnumerationItemValueSyntaxNode( internal EnumerationItemValueSyntaxNode(
SyntaxToken openingBracket, SyntaxToken openingBracket,
SyntaxList values, SyntaxList values,
SyntaxToken closingBracket) : base(TokenKind.EnumerationItemValue, 3) SyntaxToken closingBracket) : base(TokenKind.EnumerationItemValue)
{ {
Slots = 3;
_openingBracket = openingBracket; _openingBracket = openingBracket;
_values = values; _values = values;
_closingBracket = closingBracket; _closingBracket = closingBracket;
@ -1552,8 +1646,10 @@ namespace Parser.Internal
internal EnumerationItemSyntaxNode( internal EnumerationItemSyntaxNode(
IdentifierNameSyntaxNode name, IdentifierNameSyntaxNode name,
EnumerationItemValueSyntaxNode values, EnumerationItemValueSyntaxNode values,
SyntaxList<SyntaxToken> commas) : base(TokenKind.EnumerationItem, 3) SyntaxList<SyntaxToken> commas) : base(TokenKind.EnumerationItem)
{ {
Slots = 3;
_name = name; _name = name;
_values = values; _values = values;
_commas = commas; _commas = commas;
@ -1587,8 +1683,10 @@ namespace Parser.Internal
SyntaxToken enumerationKeyword, SyntaxToken enumerationKeyword,
AttributeListSyntaxNode attributes, AttributeListSyntaxNode attributes,
SyntaxList<EnumerationItemSyntaxNode> items, SyntaxList<EnumerationItemSyntaxNode> items,
SyntaxToken endKeyword) : base(TokenKind.EnumerationList, 4) SyntaxToken endKeyword) : base(TokenKind.EnumerationList)
{ {
Slots = 4;
_enumerationKeyword = enumerationKeyword; _enumerationKeyword = enumerationKeyword;
_attributes = attributes; _attributes = attributes;
_items = items; _items = items;
@ -1624,8 +1722,10 @@ namespace Parser.Internal
SyntaxToken eventsKeyword, SyntaxToken eventsKeyword,
AttributeListSyntaxNode attributes, AttributeListSyntaxNode attributes,
SyntaxList events, SyntaxList events,
SyntaxToken endKeyword) : base(TokenKind.EventsList, 4) SyntaxToken endKeyword) : base(TokenKind.EventsList)
{ {
Slots = 4;
_eventsKeyword = eventsKeyword; _eventsKeyword = eventsKeyword;
_attributes = attributes; _attributes = attributes;
_events = events; _events = events;

View File

@ -6,7 +6,7 @@ namespace Parser.Internal
{ {
internal abstract class SyntaxNode : GreenNode internal abstract class SyntaxNode : GreenNode
{ {
protected SyntaxNode(TokenKind kind, int slots) : base(kind, slots) protected SyntaxNode(TokenKind kind) : base(kind)
{ {
} }
@ -54,28 +54,28 @@ namespace Parser.Internal
internal abstract class StatementSyntaxNode : SyntaxNode internal abstract class StatementSyntaxNode : SyntaxNode
{ {
protected StatementSyntaxNode(TokenKind kind, int slots) : base(kind, slots + 1) protected StatementSyntaxNode(TokenKind kind) : base(kind)
{ {
} }
} }
internal abstract class ExpressionSyntaxNode : SyntaxNode internal abstract class ExpressionSyntaxNode : SyntaxNode
{ {
protected ExpressionSyntaxNode(TokenKind kind, int slots) : base(kind, slots) protected ExpressionSyntaxNode(TokenKind kind) : base(kind)
{ {
} }
} }
internal abstract class FunctionHandleSyntaxNode : ExpressionSyntaxNode internal abstract class FunctionHandleSyntaxNode : ExpressionSyntaxNode
{ {
protected FunctionHandleSyntaxNode(TokenKind kind, int slots) : base(kind, slots) protected FunctionHandleSyntaxNode(TokenKind kind) : base(kind)
{ {
} }
} }
internal abstract class MethodDeclarationSyntaxNode : StatementSyntaxNode internal abstract class MethodDeclarationSyntaxNode : StatementSyntaxNode
{ {
protected MethodDeclarationSyntaxNode(TokenKind kind, int slots) : base(kind, slots) protected MethodDeclarationSyntaxNode(TokenKind kind) : base(kind)
{ {
} }
} }

View File

@ -187,7 +187,7 @@ namespace Parser.Internal
public override string Text => ""; public override string Text => "";
} }
protected SyntaxToken(TokenKind kind) : base(kind, 0) protected SyntaxToken(TokenKind kind) : base(kind)
{ {
} }

View File

@ -9,7 +9,7 @@ namespace Parser.Internal
{ {
private readonly string _text; private readonly string _text;
public SyntaxTrivia(TokenKind kind, string text) : base(kind, 0) public SyntaxTrivia(TokenKind kind, string text) : base(kind)
{ {
_text = text; _text = text;
} }

View File

@ -82,11 +82,12 @@ namespace SyntaxGenerator
node.Fields.Select(field => $"\n {field.FieldType} {field.FieldName}")); node.Fields.Select(field => $"\n {field.FieldType} {field.FieldName}"));
var header = var header =
$" internal {node.ClassName}({arguments}) : base(TokenKind.{node.TokenKindName}, {node.Fields.Length})\n"; $" internal {node.ClassName}({arguments}) : base(TokenKind.{node.TokenKindName})\n";
var slotsAssignment = $"\n Slots = {node.Fields.Length};\n";
var assignments = string.Join( var assignments = string.Join(
"", "",
node.Fields.Select(GenerateFieldAssignmentInsideConstructor)); node.Fields.Select(GenerateFieldAssignmentInsideConstructor));
return header + " {\n" + assignments + " }\n"; return header + " {\n" + slotsAssignment + assignments + " }\n";
} }
private static string GenerateConstructor(SyntaxNodeDescription node) private static string GenerateConstructor(SyntaxNodeDescription node)