From e2951a9f3def38f2e1eff1ab1238bbe77541ba1a Mon Sep 17 00:00:00 2001 From: elamaunt Date: Sat, 26 Jun 2021 14:22:33 +0500 Subject: [PATCH] WIP: cloning basics --- .../Atributes/GDClassNameAtribute.cs | 5 ++++ .../Atributes/GDExtendsAtribute.cs | 5 ++++ .../Atributes/GDToolAtribute.cs | 5 ++++ src/GDShrapt.Reader/Basics/GDNode.cs | 13 ++++++++ src/GDShrapt.Reader/Basics/GDSyntaxToken.cs | 15 ++++++++-- .../Declarations/GDClassDeclaration.cs | 5 ++++ .../GDDictionaryKeyValueDeclaration.cs | 5 ++++ .../Declarations/GDEnumDeclaration.cs | 5 ++++ .../Declarations/GDEnumValueDeclaration.cs | 5 ++++ .../Declarations/GDExportDeclaration.cs | 5 ++++ .../Declarations/GDInnerClassDeclaration.cs | 5 ++++ .../Declarations/GDMatchCaseDeclaration.cs | 5 ++++ .../Declarations/GDMethodDeclaration.cs | 5 ++++ .../Declarations/GDParameterDeclaration.cs | 5 ++++ .../Declarations/GDSignalDeclaration.cs | 5 ++++ .../Declarations/GDVariableDeclaration.cs | 5 ++++ .../GDArrayInitializerExpression.cs | 5 ++++ .../Expressions/GDBoolExpression.cs | 5 ++++ .../Expressions/GDBracketExpression.cs | 5 ++++ .../Expressions/GDBreakExpression.cs | 5 ++++ .../Expressions/GDBreakPointExpression.cs | 5 ++++ ...GDCallExression.cs => GDCallExpression.cs} | 9 ++++-- .../Expressions/GDContinueExpression.cs | 5 ++++ .../GDDictionaryInitializerExpression.cs | 5 ++++ .../Expressions/GDDualOperatorExression.cs | 5 ++++ .../Expressions/GDGetNodeExpression.cs | 5 ++++ .../Expressions/GDIdentifierExpression.cs | 5 ++++ .../Expressions/GDIfExpression.cs | 5 ++++ .../Expressions/GDIndexerExression.cs | 4 +-- .../GDMatchCaseVariableExpression.cs | 5 ++++ .../GDMatchDefaultOperatorExpression.cs | 5 ++++ .../Expressions/GDMemberOperatorExpression.cs | 5 ++++ .../Expressions/GDNodePathExpression.cs | 5 ++++ .../Expressions/GDNumberExpression.cs | 5 ++++ .../Expressions/GDPassExpression.cs | 5 ++++ .../Expressions/GDReturnExpression.cs | 5 ++++ .../Expressions/GDSingleOperatorExpression.cs | 5 ++++ .../Expressions/GDStringExpression.cs | 5 ++++ .../Expressions/GDYieldExpression.cs | 6 ++++ src/GDShrapt.Reader/GDTokensForm.cs | 30 +++++++++++++++++++ .../Lists/GDClassAtributesList.cs | 9 ++++++ .../Lists/GDClassMembersList.cs | 9 ++++++ .../GDDictionaryKeyValueDeclarationList.cs | 8 +++++ .../Lists/GDElifBranchesList.cs | 9 ++++++ src/GDShrapt.Reader/Lists/GDEnumValuesList.cs | 5 ++++ .../Lists/GDExportParametersList.cs | 5 ++++ .../Lists/GDExpressionsList.cs | 5 ++++ src/GDShrapt.Reader/Lists/GDMatchCasesList.cs | 5 ++++ src/GDShrapt.Reader/Lists/GDParametersList.cs | 5 ++++ src/GDShrapt.Reader/Lists/GDPathList.cs | 5 ++++ src/GDShrapt.Reader/Lists/GDStatementsList.cs | 5 ++++ .../Resolvers/GDExpressionResolver.cs | 2 +- src/GDShrapt.Reader/SimpleTokens/GDAssign.cs | 5 ++++ src/GDShrapt.Reader/SimpleTokens/GDAt.cs | 5 ++++ .../SimpleTokens/GDCloseBracket.cs | 5 ++++ src/GDShrapt.Reader/SimpleTokens/GDColon.cs | 5 ++++ src/GDShrapt.Reader/SimpleTokens/GDComma.cs | 5 ++++ src/GDShrapt.Reader/SimpleTokens/GDComment.cs | 8 +++++ .../SimpleTokens/GDCornerCloseBracket.cs | 5 ++++ .../SimpleTokens/GDCornerOpenBracket.cs | 5 ++++ .../SimpleTokens/GDDefaultToken.cs | 5 ++++ src/GDShrapt.Reader/SimpleTokens/GDDollar.cs | 5 ++++ .../SimpleTokens/GDDualOperator.cs | 7 +++++ .../SimpleTokens/GDFigureCloseBracket.cs | 5 ++++ .../SimpleTokens/GDFigureOpenBracket.cs | 5 ++++ .../SimpleTokens/GDIdentifier.cs | 8 +++++ .../SimpleTokens/GDIntendation.cs | 8 +++++ .../SimpleTokens/GDInvalidToken.cs | 8 +++++ src/GDShrapt.Reader/SimpleTokens/GDNewLine.cs | 5 ++++ src/GDShrapt.Reader/SimpleTokens/GDNumber.cs | 8 +++++ .../SimpleTokens/GDOpenBracket.cs | 5 ++++ src/GDShrapt.Reader/SimpleTokens/GDPoint.cs | 5 ++++ .../SimpleTokens/GDRightSlash.cs | 5 ++++ .../SimpleTokens/GDSemiColon.cs | 5 ++++ .../SimpleTokens/GDSingleOperator.cs | 8 +++++ src/GDShrapt.Reader/SimpleTokens/GDSpace.cs | 8 +++++ .../SimpleTokens/GDSquareCloseBracket.cs | 5 ++++ .../SimpleTokens/GDSquareOpenBracket.cs | 5 ++++ src/GDShrapt.Reader/SimpleTokens/GDString.cs | 10 +++++++ src/GDShrapt.Reader/SimpleTokens/GDType.cs | 8 +++++ .../SimpleTokens/Keywords/GDBreakKeyword.cs | 5 ++++ .../Keywords/GDBreakPointKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDClassKeyword.cs | 5 ++++ .../Keywords/GDClassNameKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDConstKeyword.cs | 5 ++++ .../Keywords/GDContinueKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDElifKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDElseKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDEnumKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDExportKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDExtendsKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDFalseKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDForKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDFuncKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDIfKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDInKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDMatchKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDOnreadyKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDPassKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDReturnKeyword.cs | 5 ++++ .../Keywords/GDReturnTypeKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDSetGetKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDSignalKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDStaticKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDToolKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDTrueKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDVarKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDWhileKeyword.cs | 5 ++++ .../SimpleTokens/Keywords/GDYieldKeyword.cs | 5 ++++ .../Statements/GDExpressionStatement.cs | 5 ++++ .../Statements/GDForStatement.cs | 4 +++ .../Statements/GDIfStatement.cs | 5 ++++ .../Statements/GDMatchStatement.cs | 5 ++++ .../GDVariableDeclarationStatement.cs | 5 ++++ .../Statements/GDWhileStatement.cs | 5 ++++ .../Statements/IfStatement/GDElifBranch.cs | 5 ++++ .../Statements/IfStatement/GDElseBranch.cs | 5 ++++ .../Statements/IfStatement/GDIfBranch.cs | 5 ++++ 118 files changed, 672 insertions(+), 7 deletions(-) rename src/GDShrapt.Reader/Expressions/{GDCallExression.cs => GDCallExpression.cs} (95%) diff --git a/src/GDShrapt.Reader/Atributes/GDClassNameAtribute.cs b/src/GDShrapt.Reader/Atributes/GDClassNameAtribute.cs index 00cfc37..ed29b87 100644 --- a/src/GDShrapt.Reader/Atributes/GDClassNameAtribute.cs +++ b/src/GDShrapt.Reader/Atributes/GDClassNameAtribute.cs @@ -76,6 +76,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDClassNameAtribute(); + } + void IKeywordReceiver.HandleReceivedToken(GDClassNameKeyword token) { if (_form.State == State.ClassName) diff --git a/src/GDShrapt.Reader/Atributes/GDExtendsAtribute.cs b/src/GDShrapt.Reader/Atributes/GDExtendsAtribute.cs index fe81669..80b514d 100644 --- a/src/GDShrapt.Reader/Atributes/GDExtendsAtribute.cs +++ b/src/GDShrapt.Reader/Atributes/GDExtendsAtribute.cs @@ -63,6 +63,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDExtendsAtribute(); + } + void IKeywordReceiver.HandleReceivedToken(GDExtendsKeyword token) { if (_form.State == State.Extends) diff --git a/src/GDShrapt.Reader/Atributes/GDToolAtribute.cs b/src/GDShrapt.Reader/Atributes/GDToolAtribute.cs index f2d197d..fd1b78b 100644 --- a/src/GDShrapt.Reader/Atributes/GDToolAtribute.cs +++ b/src/GDShrapt.Reader/Atributes/GDToolAtribute.cs @@ -44,6 +44,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDToolAtribute(); + } + void IKeywordReceiver.HandleReceivedToken(GDToolKeyword token) { if (_form.State == State.Tool) diff --git a/src/GDShrapt.Reader/Basics/GDNode.cs b/src/GDShrapt.Reader/Basics/GDNode.cs index 70230d5..09ffec0 100644 --- a/src/GDShrapt.Reader/Basics/GDNode.cs +++ b/src/GDShrapt.Reader/Basics/GDNode.cs @@ -83,6 +83,19 @@ public override string ToString() return builder.ToString(); } + /// + /// Creates empty instance of this node type + /// + /// New empty instance + public abstract GDNode CreateEmptyInstance(); + + public override GDSyntaxToken Clone() + { + var node = CreateEmptyInstance(); + node.Form.CloneFrom(node.Form); + return node; + } + void ITokenReceiver.HandleReceivedToken(GDInvalidToken token) { Form.AddBeforeActiveToken(token); diff --git a/src/GDShrapt.Reader/Basics/GDSyntaxToken.cs b/src/GDShrapt.Reader/Basics/GDSyntaxToken.cs index 190d369..4029a86 100644 --- a/src/GDShrapt.Reader/Basics/GDSyntaxToken.cs +++ b/src/GDShrapt.Reader/Basics/GDSyntaxToken.cs @@ -8,7 +8,7 @@ namespace GDShrapt.Reader /// Basic syntax node. /// [DebuggerDisplay("{DebuggerView}")] - public abstract class GDSyntaxToken : GDReader + public abstract class GDSyntaxToken : GDReader, ICloneable { GDNode _parent; @@ -34,7 +34,7 @@ internal set } /// - /// Removes this node parent or do nothing if + /// Removes this node from parent or do nothing if /// public bool RemoveFromParent() { @@ -50,6 +50,17 @@ public virtual void AppendTo(StringBuilder builder) builder.Append(ToString()); } + /// + /// Creates deep clone of the current token and it's children + /// + /// New token with all children (if node) + public abstract GDSyntaxToken Clone(); + + object ICloneable.Clone() + { + return Clone(); + } + [DebuggerHidden] internal string DebuggerView => $"{NodeName} '{ToString()}'"; } diff --git a/src/GDShrapt.Reader/Declarations/GDClassDeclaration.cs b/src/GDShrapt.Reader/Declarations/GDClassDeclaration.cs index 41f75e5..b34c2c0 100644 --- a/src/GDShrapt.Reader/Declarations/GDClassDeclaration.cs +++ b/src/GDShrapt.Reader/Declarations/GDClassDeclaration.cs @@ -39,6 +39,11 @@ public GDClassDeclaration() public IEnumerable Enums => Members.OfType(); public IEnumerable InnerClasses => Members.OfType(); + public override GDNode CreateEmptyInstance() + { + return new GDClassDeclaration(); + } + internal override void HandleChar(char c, GDReadingState state) { if (IsSpace(c)) diff --git a/src/GDShrapt.Reader/Declarations/GDDictionaryKeyValueDeclaration.cs b/src/GDShrapt.Reader/Declarations/GDDictionaryKeyValueDeclaration.cs index 0895e1d..5c59173 100644 --- a/src/GDShrapt.Reader/Declarations/GDDictionaryKeyValueDeclaration.cs +++ b/src/GDShrapt.Reader/Declarations/GDDictionaryKeyValueDeclaration.cs @@ -75,6 +75,11 @@ internal override void HandleNewLineChar(GDReadingState state) _form.AddBeforeActiveToken(new GDNewLine()); } + public override GDNode CreateEmptyInstance() + { + return new GDDictionaryKeyValueDeclaration(); + } + void IExpressionsReceiver.HandleReceivedToken(GDExpression token) { if (_form.State == State.Key) diff --git a/src/GDShrapt.Reader/Declarations/GDEnumDeclaration.cs b/src/GDShrapt.Reader/Declarations/GDEnumDeclaration.cs index 0548c82..55af97d 100644 --- a/src/GDShrapt.Reader/Declarations/GDEnumDeclaration.cs +++ b/src/GDShrapt.Reader/Declarations/GDEnumDeclaration.cs @@ -111,6 +111,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDEnumDeclaration(); + } + void IKeywordReceiver.HandleReceivedToken(GDEnumKeyword token) { if (_form.State == State.Enum) diff --git a/src/GDShrapt.Reader/Declarations/GDEnumValueDeclaration.cs b/src/GDShrapt.Reader/Declarations/GDEnumValueDeclaration.cs index 742a2fa..29bf285 100644 --- a/src/GDShrapt.Reader/Declarations/GDEnumValueDeclaration.cs +++ b/src/GDShrapt.Reader/Declarations/GDEnumValueDeclaration.cs @@ -78,6 +78,11 @@ internal override void HandleNewLineChar(GDReadingState state) _form.AddBeforeActiveToken(new GDNewLine()); } + public override GDNode CreateEmptyInstance() + { + return new GDEnumValueDeclaration(); + } + void IIdentifierReceiver.HandleReceivedToken(GDIdentifier token) { if (_form.State == State.Identifier) diff --git a/src/GDShrapt.Reader/Declarations/GDExportDeclaration.cs b/src/GDShrapt.Reader/Declarations/GDExportDeclaration.cs index 57e49a8..5e9dee7 100644 --- a/src/GDShrapt.Reader/Declarations/GDExportDeclaration.cs +++ b/src/GDShrapt.Reader/Declarations/GDExportDeclaration.cs @@ -79,6 +79,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDExportDeclaration(); + } + void IKeywordReceiver.HandleReceivedToken(GDExportKeyword token) { if (_form.State == State.Export) diff --git a/src/GDShrapt.Reader/Declarations/GDInnerClassDeclaration.cs b/src/GDShrapt.Reader/Declarations/GDInnerClassDeclaration.cs index d90b38a..693e6c0 100644 --- a/src/GDShrapt.Reader/Declarations/GDInnerClassDeclaration.cs +++ b/src/GDShrapt.Reader/Declarations/GDInnerClassDeclaration.cs @@ -99,6 +99,11 @@ internal override void HandleNewLineChar(GDReadingState state) } } + public override GDNode CreateEmptyInstance() + { + return new GDInnerClassDeclaration(); + } + void IKeywordReceiver.HandleReceivedToken(GDClassKeyword token) { if (_form.State == State.Class) diff --git a/src/GDShrapt.Reader/Declarations/GDMatchCaseDeclaration.cs b/src/GDShrapt.Reader/Declarations/GDMatchCaseDeclaration.cs index bb68121..c753952 100644 --- a/src/GDShrapt.Reader/Declarations/GDMatchCaseDeclaration.cs +++ b/src/GDShrapt.Reader/Declarations/GDMatchCaseDeclaration.cs @@ -74,6 +74,11 @@ internal override void HandleNewLineChar(GDReadingState state) } } + public override GDNode CreateEmptyInstance() + { + return new GDMatchCaseDeclaration(); + } + void ITokenReceiver.HandleReceivedToken(GDColon token) { if (_form.State == State.Colon) diff --git a/src/GDShrapt.Reader/Declarations/GDMethodDeclaration.cs b/src/GDShrapt.Reader/Declarations/GDMethodDeclaration.cs index 43147eb..f659d06 100644 --- a/src/GDShrapt.Reader/Declarations/GDMethodDeclaration.cs +++ b/src/GDShrapt.Reader/Declarations/GDMethodDeclaration.cs @@ -201,6 +201,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDMethodDeclaration(); + } + void IKeywordReceiver.HandleReceivedToken(GDStaticKeyword token) { if (_form.State == State.Static) diff --git a/src/GDShrapt.Reader/Declarations/GDParameterDeclaration.cs b/src/GDShrapt.Reader/Declarations/GDParameterDeclaration.cs index 282da89..0bb9a33 100644 --- a/src/GDShrapt.Reader/Declarations/GDParameterDeclaration.cs +++ b/src/GDShrapt.Reader/Declarations/GDParameterDeclaration.cs @@ -85,6 +85,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDParameterDeclaration(); + } + void IIdentifierReceiver.HandleReceivedToken(GDIdentifier token) { if(_form.State == State.Identifier) diff --git a/src/GDShrapt.Reader/Declarations/GDSignalDeclaration.cs b/src/GDShrapt.Reader/Declarations/GDSignalDeclaration.cs index 57d34dc..6713d1e 100644 --- a/src/GDShrapt.Reader/Declarations/GDSignalDeclaration.cs +++ b/src/GDShrapt.Reader/Declarations/GDSignalDeclaration.cs @@ -93,6 +93,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDSignalDeclaration(); + } + void IKeywordReceiver.HandleReceivedToken(GDSignalKeyword token) { if (_form.State == State.Signal) diff --git a/src/GDShrapt.Reader/Declarations/GDVariableDeclaration.cs b/src/GDShrapt.Reader/Declarations/GDVariableDeclaration.cs index 887bc7c..cdf178c 100644 --- a/src/GDShrapt.Reader/Declarations/GDVariableDeclaration.cs +++ b/src/GDShrapt.Reader/Declarations/GDVariableDeclaration.cs @@ -181,6 +181,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDVariableDeclaration(); + } + void IKeywordReceiver.HandleReceivedToken(GDConstKeyword token) { if (_form.State == State.Const) diff --git a/src/GDShrapt.Reader/Expressions/GDArrayInitializerExpression.cs b/src/GDShrapt.Reader/Expressions/GDArrayInitializerExpression.cs index eb70ebb..e79d34f 100644 --- a/src/GDShrapt.Reader/Expressions/GDArrayInitializerExpression.cs +++ b/src/GDShrapt.Reader/Expressions/GDArrayInitializerExpression.cs @@ -112,5 +112,10 @@ void ITokenReceiver.HandleReceivedTokenSkip() throw new GDInvalidReadingStateException(); } + + public override GDNode CreateEmptyInstance() + { + return new GDArrayInitializerExpression(); + } } } diff --git a/src/GDShrapt.Reader/Expressions/GDBoolExpression.cs b/src/GDShrapt.Reader/Expressions/GDBoolExpression.cs index aef2fe5..b2eb579 100644 --- a/src/GDShrapt.Reader/Expressions/GDBoolExpression.cs +++ b/src/GDShrapt.Reader/Expressions/GDBoolExpression.cs @@ -50,6 +50,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDBoolExpression(); + } + void IKeywordReceiver.HandleReceivedToken(GDTrueKeyword token) { if (_form.State != State.Completed) diff --git a/src/GDShrapt.Reader/Expressions/GDBracketExpression.cs b/src/GDShrapt.Reader/Expressions/GDBracketExpression.cs index 9592f9c..ae88378 100644 --- a/src/GDShrapt.Reader/Expressions/GDBracketExpression.cs +++ b/src/GDShrapt.Reader/Expressions/GDBracketExpression.cs @@ -77,6 +77,11 @@ internal override void HandleNewLineChar(GDReadingState state) } } + public override GDNode CreateEmptyInstance() + { + return new GDBracketExpression(); + } + void ITokenReceiver.HandleReceivedToken(GDOpenBracket token) { if (_form.State == State.OpenBracket) diff --git a/src/GDShrapt.Reader/Expressions/GDBreakExpression.cs b/src/GDShrapt.Reader/Expressions/GDBreakExpression.cs index 8c7c817..8734c31 100644 --- a/src/GDShrapt.Reader/Expressions/GDBreakExpression.cs +++ b/src/GDShrapt.Reader/Expressions/GDBreakExpression.cs @@ -40,6 +40,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDBreakExpression(); + } + void IKeywordReceiver.HandleReceivedToken(GDBreakKeyword token) { if (_form.State == State.Break) diff --git a/src/GDShrapt.Reader/Expressions/GDBreakPointExpression.cs b/src/GDShrapt.Reader/Expressions/GDBreakPointExpression.cs index 2a39b78..603c0fb 100644 --- a/src/GDShrapt.Reader/Expressions/GDBreakPointExpression.cs +++ b/src/GDShrapt.Reader/Expressions/GDBreakPointExpression.cs @@ -40,6 +40,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDBreakPointExpression(); + } + void IKeywordReceiver.HandleReceivedToken(GDBreakPointKeyword token) { if (_form.State == State.BreakPoint) diff --git a/src/GDShrapt.Reader/Expressions/GDCallExression.cs b/src/GDShrapt.Reader/Expressions/GDCallExpression.cs similarity index 95% rename from src/GDShrapt.Reader/Expressions/GDCallExression.cs rename to src/GDShrapt.Reader/Expressions/GDCallExpression.cs index b0744eb..df6bbb1 100644 --- a/src/GDShrapt.Reader/Expressions/GDCallExression.cs +++ b/src/GDShrapt.Reader/Expressions/GDCallExpression.cs @@ -1,6 +1,6 @@ namespace GDShrapt.Reader { - public sealed class GDCallExression : GDExpression, + public sealed class GDCallExpression : GDExpression, IExpressionsReceiver, ITokenReceiver, ITokenReceiver @@ -35,7 +35,7 @@ enum State readonly GDTokensForm _form; internal override GDTokensForm Form => _form; - public GDCallExression() + public GDCallExpression() { _form = new GDTokensForm(this); } @@ -78,6 +78,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDCallExpression(); + } + void IExpressionsReceiver.HandleReceivedToken(GDExpression token) { if (_form.State == State.Caller) diff --git a/src/GDShrapt.Reader/Expressions/GDContinueExpression.cs b/src/GDShrapt.Reader/Expressions/GDContinueExpression.cs index 1c31a6e..83d5cc1 100644 --- a/src/GDShrapt.Reader/Expressions/GDContinueExpression.cs +++ b/src/GDShrapt.Reader/Expressions/GDContinueExpression.cs @@ -41,6 +41,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDContinueExpression(); + } + void IKeywordReceiver.HandleReceivedToken(GDContinueKeyword token) { if (_form.State == State.Continue) diff --git a/src/GDShrapt.Reader/Expressions/GDDictionaryInitializerExpression.cs b/src/GDShrapt.Reader/Expressions/GDDictionaryInitializerExpression.cs index 16d996d..94946c8 100644 --- a/src/GDShrapt.Reader/Expressions/GDDictionaryInitializerExpression.cs +++ b/src/GDShrapt.Reader/Expressions/GDDictionaryInitializerExpression.cs @@ -67,6 +67,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDDictionaryInitializerExpression(); + } + void ITokenReceiver.HandleReceivedToken(GDFigureOpenBracket token) { if (_form.State == State.FigureOpenBracket) diff --git a/src/GDShrapt.Reader/Expressions/GDDualOperatorExression.cs b/src/GDShrapt.Reader/Expressions/GDDualOperatorExression.cs index 6a8e6a2..5fdba78 100644 --- a/src/GDShrapt.Reader/Expressions/GDDualOperatorExression.cs +++ b/src/GDShrapt.Reader/Expressions/GDDualOperatorExression.cs @@ -138,6 +138,11 @@ public override GDExpression SwapRight(GDExpression expression) return right; } + public override GDNode CreateEmptyInstance() + { + return new GDDualOperatorExression(); + } + void IExpressionsReceiver.HandleReceivedToken(GDExpression token) { if (_form.State == State.LeftExpression) diff --git a/src/GDShrapt.Reader/Expressions/GDGetNodeExpression.cs b/src/GDShrapt.Reader/Expressions/GDGetNodeExpression.cs index 7793a69..9dd086c 100644 --- a/src/GDShrapt.Reader/Expressions/GDGetNodeExpression.cs +++ b/src/GDShrapt.Reader/Expressions/GDGetNodeExpression.cs @@ -51,6 +51,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDGetNodeExpression(); + } + void ITokenReceiver.HandleReceivedToken(GDDollar token) { if (_form.State == State.Dollar) diff --git a/src/GDShrapt.Reader/Expressions/GDIdentifierExpression.cs b/src/GDShrapt.Reader/Expressions/GDIdentifierExpression.cs index f35f7fe..a2a0044 100644 --- a/src/GDShrapt.Reader/Expressions/GDIdentifierExpression.cs +++ b/src/GDShrapt.Reader/Expressions/GDIdentifierExpression.cs @@ -39,5 +39,10 @@ internal override void HandleNewLineChar(GDReadingState state) { state.PopAndPassNewLine(); } + + public override GDNode CreateEmptyInstance() + { + return new GDIdentifierExpression(); + } } } \ No newline at end of file diff --git a/src/GDShrapt.Reader/Expressions/GDIfExpression.cs b/src/GDShrapt.Reader/Expressions/GDIfExpression.cs index 1d45943..23c6731 100644 --- a/src/GDShrapt.Reader/Expressions/GDIfExpression.cs +++ b/src/GDShrapt.Reader/Expressions/GDIfExpression.cs @@ -131,6 +131,11 @@ public override void RebuildBranchesOfPriorityIfNeeded() FalseExpression = FalseExpression.RebuildRootOfPriorityIfNeeded(); } + public override GDNode CreateEmptyInstance() + { + return new GDIfExpression(); + } + void IExpressionsReceiver.HandleReceivedToken(GDExpression token) { if (_form.State == State.True) diff --git a/src/GDShrapt.Reader/Expressions/GDIndexerExression.cs b/src/GDShrapt.Reader/Expressions/GDIndexerExression.cs index e27ad91..c7ce1a1 100644 --- a/src/GDShrapt.Reader/Expressions/GDIndexerExression.cs +++ b/src/GDShrapt.Reader/Expressions/GDIndexerExression.cs @@ -107,9 +107,9 @@ public override void RebuildBranchesOfPriorityIfNeeded() CallerExpression = CallerExpression.RebuildRootOfPriorityIfNeeded(); } - public override string ToString() + public override GDNode CreateEmptyInstance() { - return $"{CallerExpression}[{InnerExpression}]"; + return new GDIndexerExression(); } void IExpressionsReceiver.HandleReceivedToken(GDExpression token) diff --git a/src/GDShrapt.Reader/Expressions/GDMatchCaseVariableExpression.cs b/src/GDShrapt.Reader/Expressions/GDMatchCaseVariableExpression.cs index ae1a6f2..d8ec58e 100644 --- a/src/GDShrapt.Reader/Expressions/GDMatchCaseVariableExpression.cs +++ b/src/GDShrapt.Reader/Expressions/GDMatchCaseVariableExpression.cs @@ -65,6 +65,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDMatchCaseVariableExpression(); + } + void IKeywordReceiver.HandleReceivedToken(GDVarKeyword token) { if (_form.State == State.Var) diff --git a/src/GDShrapt.Reader/Expressions/GDMatchDefaultOperatorExpression.cs b/src/GDShrapt.Reader/Expressions/GDMatchDefaultOperatorExpression.cs index 2d0539b..2e56dee 100644 --- a/src/GDShrapt.Reader/Expressions/GDMatchDefaultOperatorExpression.cs +++ b/src/GDShrapt.Reader/Expressions/GDMatchDefaultOperatorExpression.cs @@ -39,6 +39,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDMatchDefaultOperatorExpression(); + } + void ITokenReceiver.HandleReceivedToken(GDDefaultToken token) { if (_form.State == State.Default) diff --git a/src/GDShrapt.Reader/Expressions/GDMemberOperatorExpression.cs b/src/GDShrapt.Reader/Expressions/GDMemberOperatorExpression.cs index 476b69d..21b0d94 100644 --- a/src/GDShrapt.Reader/Expressions/GDMemberOperatorExpression.cs +++ b/src/GDShrapt.Reader/Expressions/GDMemberOperatorExpression.cs @@ -96,6 +96,11 @@ public override void RebuildBranchesOfPriorityIfNeeded() CallerExpression = CallerExpression.RebuildRootOfPriorityIfNeeded(); } + public override GDNode CreateEmptyInstance() + { + return new GDMemberOperatorExpression(); + } + void IExpressionsReceiver.HandleReceivedToken(GDExpression token) { if (_form.State == State.CallerExpression) diff --git a/src/GDShrapt.Reader/Expressions/GDNodePathExpression.cs b/src/GDShrapt.Reader/Expressions/GDNodePathExpression.cs index a0c074b..062530e 100644 --- a/src/GDShrapt.Reader/Expressions/GDNodePathExpression.cs +++ b/src/GDShrapt.Reader/Expressions/GDNodePathExpression.cs @@ -54,6 +54,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDNodePathExpression(); + } + void ITokenReceiver.HandleReceivedToken(GDAt token) { if (_form.State == State.At) diff --git a/src/GDShrapt.Reader/Expressions/GDNumberExpression.cs b/src/GDShrapt.Reader/Expressions/GDNumberExpression.cs index 2a16deb..f9ee883 100644 --- a/src/GDShrapt.Reader/Expressions/GDNumberExpression.cs +++ b/src/GDShrapt.Reader/Expressions/GDNumberExpression.cs @@ -47,5 +47,10 @@ internal override void HandleNewLineChar(GDReadingState state) { state.PopAndPassNewLine(); } + + public override GDNode CreateEmptyInstance() + { + return new GDNumberExpression(); + } } } diff --git a/src/GDShrapt.Reader/Expressions/GDPassExpression.cs b/src/GDShrapt.Reader/Expressions/GDPassExpression.cs index 6d85b00..004545b 100644 --- a/src/GDShrapt.Reader/Expressions/GDPassExpression.cs +++ b/src/GDShrapt.Reader/Expressions/GDPassExpression.cs @@ -39,6 +39,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDPassExpression(); + } + void IKeywordReceiver.HandleReceivedToken(GDPassKeyword token) { if (_form.State == State.Pass) diff --git a/src/GDShrapt.Reader/Expressions/GDReturnExpression.cs b/src/GDShrapt.Reader/Expressions/GDReturnExpression.cs index d6307cd..d4a8701 100644 --- a/src/GDShrapt.Reader/Expressions/GDReturnExpression.cs +++ b/src/GDShrapt.Reader/Expressions/GDReturnExpression.cs @@ -54,6 +54,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDReturnExpression(); + } + void IKeywordReceiver.HandleReceivedToken(GDReturnKeyword token) { if (_form.State == State.Return) diff --git a/src/GDShrapt.Reader/Expressions/GDSingleOperatorExpression.cs b/src/GDShrapt.Reader/Expressions/GDSingleOperatorExpression.cs index 61d9d44..003e7c0 100644 --- a/src/GDShrapt.Reader/Expressions/GDSingleOperatorExpression.cs +++ b/src/GDShrapt.Reader/Expressions/GDSingleOperatorExpression.cs @@ -94,6 +94,11 @@ public override void RebuildBranchesOfPriorityIfNeeded() TargetExpression = TargetExpression.RebuildRootOfPriorityIfNeeded(); } + public override GDNode CreateEmptyInstance() + { + return new GDSingleOperatorExpression(); + } + void ISingleOperatorReceiver.HandleReceivedToken(GDSingleOperator token) { if (_form.State == State.Operator) diff --git a/src/GDShrapt.Reader/Expressions/GDStringExpression.cs b/src/GDShrapt.Reader/Expressions/GDStringExpression.cs index 1880f5d..4d6d769 100644 --- a/src/GDShrapt.Reader/Expressions/GDStringExpression.cs +++ b/src/GDShrapt.Reader/Expressions/GDStringExpression.cs @@ -51,5 +51,10 @@ internal override void HandleNewLineChar(GDReadingState state) state.Pop(); state.PassNewLine(); } + + public override GDNode CreateEmptyInstance() + { + return new GDStringExpression(); + } } } \ No newline at end of file diff --git a/src/GDShrapt.Reader/Expressions/GDYieldExpression.cs b/src/GDShrapt.Reader/Expressions/GDYieldExpression.cs index 81f952f..d194e9c 100644 --- a/src/GDShrapt.Reader/Expressions/GDYieldExpression.cs +++ b/src/GDShrapt.Reader/Expressions/GDYieldExpression.cs @@ -76,6 +76,12 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDYieldExpression(); + } + + void IKeywordReceiver.HandleReceivedToken(GDYieldKeyword token) { if (_form.State == State.Yield) diff --git a/src/GDShrapt.Reader/GDTokensForm.cs b/src/GDShrapt.Reader/GDTokensForm.cs index a6fbd3b..b0df5b9 100644 --- a/src/GDShrapt.Reader/GDTokensForm.cs +++ b/src/GDShrapt.Reader/GDTokensForm.cs @@ -813,5 +813,35 @@ internal int CountTokensBetween(int start, int end) return counter; } + + internal void CloneFrom(GDTokensForm form) + { + if (_initialSize != form._initialSize) + throw new InvalidOperationException("Forms must have same size"); + + if (StateIndex > 0) + throw new InvalidOperationException("The form must be at initial state"); + + var node = form._list.First; + var point = form._statePoints[StateIndex]; + + while (true) + { + if (point == node) + { + Set(point.Value?.Clone(), StateIndex++); + point = form._statePoints[StateIndex]; + } + else + { + var clone = point.Value?.Clone(); + + if (clone != null) + AddBeforeActiveToken(clone); + } + + node = node.Next; + } + } } } diff --git a/src/GDShrapt.Reader/Lists/GDClassAtributesList.cs b/src/GDShrapt.Reader/Lists/GDClassAtributesList.cs index 9b7f4b5..fba2415 100644 --- a/src/GDShrapt.Reader/Lists/GDClassAtributesList.cs +++ b/src/GDShrapt.Reader/Lists/GDClassAtributesList.cs @@ -10,6 +10,10 @@ internal GDClassAtributesList(int lineIntendation) _lineIntendationThreshold = lineIntendation; } + public GDClassAtributesList() + { + } + internal override void HandleChar(char c, GDReadingState state) { if (!_completed) @@ -38,6 +42,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDClassAtributesList(); + } + void IClassAtributesReceiver.HandleReceivedToken(GDClassAtribute token) { ListForm.Add(token); diff --git a/src/GDShrapt.Reader/Lists/GDClassMembersList.cs b/src/GDShrapt.Reader/Lists/GDClassMembersList.cs index a0b0b56..680e01c 100644 --- a/src/GDShrapt.Reader/Lists/GDClassMembersList.cs +++ b/src/GDShrapt.Reader/Lists/GDClassMembersList.cs @@ -10,6 +10,10 @@ internal GDClassMembersList(int lineIntendation) _lineIntendationThreshold = lineIntendation; } + public GDClassMembersList() + { + } + internal override void HandleChar(char c, GDReadingState state) { if (!_completed) @@ -35,6 +39,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDClassMembersList(); + } + void IClassMembersReceiver.HandleReceivedToken(GDClassMember token) { ListForm.Add(token); diff --git a/src/GDShrapt.Reader/Lists/GDDictionaryKeyValueDeclarationList.cs b/src/GDShrapt.Reader/Lists/GDDictionaryKeyValueDeclarationList.cs index 5cc485d..64d2c6d 100644 --- a/src/GDShrapt.Reader/Lists/GDDictionaryKeyValueDeclarationList.cs +++ b/src/GDShrapt.Reader/Lists/GDDictionaryKeyValueDeclarationList.cs @@ -4,6 +4,10 @@ public sealed class GDDictionaryKeyValueDeclarationList : GDSeparatedList, ITokenReceiver { + public GDDictionaryKeyValueDeclarationList() + { + } + internal override void HandleChar(char c, GDReadingState state) { if (c == ',') @@ -25,6 +29,10 @@ internal override void HandleNewLineChar(GDReadingState state) { ListForm.Add(new GDNewLine()); } + public override GDNode CreateEmptyInstance() + { + return new GDDictionaryKeyValueDeclarationList(); + } void ITokenReceiver.HandleReceivedToken(GDDictionaryKeyValueDeclaration token) { diff --git a/src/GDShrapt.Reader/Lists/GDElifBranchesList.cs b/src/GDShrapt.Reader/Lists/GDElifBranchesList.cs index 1b5a50f..e50bbca 100644 --- a/src/GDShrapt.Reader/Lists/GDElifBranchesList.cs +++ b/src/GDShrapt.Reader/Lists/GDElifBranchesList.cs @@ -11,6 +11,11 @@ internal GDElifBranchesList(int lineIntendation) _lineIntendationThreshold = lineIntendation; } + public GDElifBranchesList() + { + + } + internal override void HandleChar(char c, GDReadingState state) { if (!_completed) @@ -35,6 +40,10 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDElifBranchesList(); + } void IElifBranchReceiver.HandleReceivedToken(GDElifBranch token) { diff --git a/src/GDShrapt.Reader/Lists/GDEnumValuesList.cs b/src/GDShrapt.Reader/Lists/GDEnumValuesList.cs index 27320db..6f00934 100644 --- a/src/GDShrapt.Reader/Lists/GDEnumValuesList.cs +++ b/src/GDShrapt.Reader/Lists/GDEnumValuesList.cs @@ -26,6 +26,11 @@ internal override void HandleNewLineChar(GDReadingState state) ListForm.Add(new GDNewLine()); } + public override GDNode CreateEmptyInstance() + { + return new GDEnumValuesList(); + } + void ITokenReceiver.HandleReceivedToken(GDEnumValueDeclaration token) { ListForm.Add(token); diff --git a/src/GDShrapt.Reader/Lists/GDExportParametersList.cs b/src/GDShrapt.Reader/Lists/GDExportParametersList.cs index 399fe07..861a8ab 100644 --- a/src/GDShrapt.Reader/Lists/GDExportParametersList.cs +++ b/src/GDShrapt.Reader/Lists/GDExportParametersList.cs @@ -19,6 +19,11 @@ internal override void HandleNewLineChar(GDReadingState state) ListForm.Add(new GDNewLine()); } + public override GDNode CreateEmptyInstance() + { + return new GDExportParametersList(); + } + void ITokenReceiver.HandleReceivedToken(GDComma token) { ListForm.Add(token); diff --git a/src/GDShrapt.Reader/Lists/GDExpressionsList.cs b/src/GDShrapt.Reader/Lists/GDExpressionsList.cs index a682c67..cd79719 100644 --- a/src/GDShrapt.Reader/Lists/GDExpressionsList.cs +++ b/src/GDShrapt.Reader/Lists/GDExpressionsList.cs @@ -12,6 +12,11 @@ internal override bool IsStopChar(char c) return c.IsExpressionStopChar(); } + public override GDNode CreateEmptyInstance() + { + return new GDExpressionsList(); + } + void IExpressionsReceiver.HandleReceivedToken(GDExpression token) { ListForm.Add(token); diff --git a/src/GDShrapt.Reader/Lists/GDMatchCasesList.cs b/src/GDShrapt.Reader/Lists/GDMatchCasesList.cs index 1c10f05..aaa03e6 100644 --- a/src/GDShrapt.Reader/Lists/GDMatchCasesList.cs +++ b/src/GDShrapt.Reader/Lists/GDMatchCasesList.cs @@ -38,6 +38,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDMatchCasesList(); + } + void IMatchCaseReceiver.HandleReceivedToken(GDMatchCaseDeclaration token) { ListForm.Add(token); diff --git a/src/GDShrapt.Reader/Lists/GDParametersList.cs b/src/GDShrapt.Reader/Lists/GDParametersList.cs index 8591760..dfc43a7 100644 --- a/src/GDShrapt.Reader/Lists/GDParametersList.cs +++ b/src/GDShrapt.Reader/Lists/GDParametersList.cs @@ -15,6 +15,11 @@ internal override GDReader ResolveNode() return node; } + public override GDNode CreateEmptyInstance() + { + return new GDParametersList(); + } + void ITokenReceiver.HandleReceivedToken(GDParameterDeclaration token) { ListForm.Add(token); diff --git a/src/GDShrapt.Reader/Lists/GDPathList.cs b/src/GDShrapt.Reader/Lists/GDPathList.cs index 3623340..eec432c 100644 --- a/src/GDShrapt.Reader/Lists/GDPathList.cs +++ b/src/GDShrapt.Reader/Lists/GDPathList.cs @@ -30,6 +30,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDPathList(); + } + void IIdentifierReceiver.HandleReceivedToken(GDIdentifier token) { _switch = !_switch; diff --git a/src/GDShrapt.Reader/Lists/GDStatementsList.cs b/src/GDShrapt.Reader/Lists/GDStatementsList.cs index 25139c4..84f0e46 100644 --- a/src/GDShrapt.Reader/Lists/GDStatementsList.cs +++ b/src/GDShrapt.Reader/Lists/GDStatementsList.cs @@ -40,6 +40,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDStatementsList(); + } + void IStatementsReceiver.HandleReceivedToken(GDStatement token) { ListForm.Add(token); diff --git a/src/GDShrapt.Reader/Resolvers/GDExpressionResolver.cs b/src/GDShrapt.Reader/Resolvers/GDExpressionResolver.cs index b8a0889..2cc0454 100644 --- a/src/GDShrapt.Reader/Resolvers/GDExpressionResolver.cs +++ b/src/GDShrapt.Reader/Resolvers/GDExpressionResolver.cs @@ -170,7 +170,7 @@ internal override void HandleChar(char c, GDReadingState state) if (c == '(') { - PushAndSwap(state, new GDCallExression()); + PushAndSwap(state, new GDCallExpression()); state.PassChar(c); return; } diff --git a/src/GDShrapt.Reader/SimpleTokens/GDAssign.cs b/src/GDShrapt.Reader/SimpleTokens/GDAssign.cs index 57a3159..e6d6538 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDAssign.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDAssign.cs @@ -3,5 +3,10 @@ public sealed class GDAssign : GDSingleCharToken, IGDStructureToken { public override char Char => '='; + + public override GDSyntaxToken Clone() + { + return new GDAssign(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/GDAt.cs b/src/GDShrapt.Reader/SimpleTokens/GDAt.cs index 58352c0..2787526 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDAt.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDAt.cs @@ -3,5 +3,10 @@ public sealed class GDAt : GDSingleCharToken { public override char Char => '@'; + + public override GDSyntaxToken Clone() + { + return new GDAt(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/GDCloseBracket.cs b/src/GDShrapt.Reader/SimpleTokens/GDCloseBracket.cs index 1d08b76..5798559 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDCloseBracket.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDCloseBracket.cs @@ -3,5 +3,10 @@ public sealed class GDCloseBracket : GDSingleCharToken, IGDStructureToken { public override char Char => ')'; + + public override GDSyntaxToken Clone() + { + return new GDCloseBracket(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/GDColon.cs b/src/GDShrapt.Reader/SimpleTokens/GDColon.cs index 9f5cc44..8ff3019 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDColon.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDColon.cs @@ -3,5 +3,10 @@ public sealed class GDColon : GDSingleCharToken, IGDStructureToken { public override char Char => ':'; + + public override GDSyntaxToken Clone() + { + return new GDColon(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/GDComma.cs b/src/GDShrapt.Reader/SimpleTokens/GDComma.cs index 13958bd..d781718 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDComma.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDComma.cs @@ -3,5 +3,10 @@ public sealed class GDOpenBracket : GDSingleCharToken, IGDStructureToken { public override char Char => '('; + + public override GDSyntaxToken Clone() + { + return new GDOpenBracket(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/GDComment.cs b/src/GDShrapt.Reader/SimpleTokens/GDComment.cs index 773ab33..3974575 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDComment.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDComment.cs @@ -22,6 +22,14 @@ internal override void HandleSharpChar(GDReadingState state) HandleChar('#', state); } + public override GDSyntaxToken Clone() + { + return new GDComment() + { + Sequence = Sequence + }; + } + public override string ToString() { return $"{Sequence}"; diff --git a/src/GDShrapt.Reader/SimpleTokens/GDCornerCloseBracket.cs b/src/GDShrapt.Reader/SimpleTokens/GDCornerCloseBracket.cs index 886633f..c6dad00 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDCornerCloseBracket.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDCornerCloseBracket.cs @@ -3,5 +3,10 @@ public class GDCornerCloseBracket : GDSingleCharToken, IGDStructureToken { public override char Char => '>'; + + public override GDSyntaxToken Clone() + { + return new GDCornerCloseBracket(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/GDCornerOpenBracket.cs b/src/GDShrapt.Reader/SimpleTokens/GDCornerOpenBracket.cs index bd997f7..0e5e49f 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDCornerOpenBracket.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDCornerOpenBracket.cs @@ -3,5 +3,10 @@ public class GDCornerOpenBracket : GDSingleCharToken, IGDStructureToken { public override char Char => '<'; + + public override GDSyntaxToken Clone() + { + return new GDCornerOpenBracket(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/GDDefaultToken.cs b/src/GDShrapt.Reader/SimpleTokens/GDDefaultToken.cs index caa5730..1064289 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDDefaultToken.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDDefaultToken.cs @@ -3,5 +3,10 @@ public sealed class GDDefaultToken : GDSingleCharToken { public override char Char => '_'; + + public override GDSyntaxToken Clone() + { + return new GDDefaultToken(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/GDDollar.cs b/src/GDShrapt.Reader/SimpleTokens/GDDollar.cs index 27f546e..0247607 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDDollar.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDDollar.cs @@ -3,5 +3,10 @@ public sealed class GDDollar : GDSingleCharToken { public override char Char => '$'; + + public override GDSyntaxToken Clone() + { + return new GDDollar(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/GDDualOperator.cs b/src/GDShrapt.Reader/SimpleTokens/GDDualOperator.cs index 8720f83..76df1b2 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDDualOperator.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDDualOperator.cs @@ -9,6 +9,13 @@ internal override void HandleChar(char c, GDReadingState state) state.Pop(); state.PassChar(c); } + public override GDSyntaxToken Clone() + { + return new GDDualOperator() + { + OperatorType = OperatorType + }; + } public override string ToString() { diff --git a/src/GDShrapt.Reader/SimpleTokens/GDFigureCloseBracket.cs b/src/GDShrapt.Reader/SimpleTokens/GDFigureCloseBracket.cs index e2a64a0..8491313 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDFigureCloseBracket.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDFigureCloseBracket.cs @@ -3,5 +3,10 @@ public class GDFigureCloseBracket : GDSingleCharToken, IGDStructureToken { public override char Char => '}'; + + public override GDSyntaxToken Clone() + { + return new GDFigureCloseBracket(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/GDFigureOpenBracket.cs b/src/GDShrapt.Reader/SimpleTokens/GDFigureOpenBracket.cs index 5ef193a..b5c1554 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDFigureOpenBracket.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDFigureOpenBracket.cs @@ -3,5 +3,10 @@ public class GDFigureOpenBracket : GDSingleCharToken, IGDStructureToken { public override char Char => '{'; + + public override GDSyntaxToken Clone() + { + return new GDFigureOpenBracket(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/GDIdentifier.cs b/src/GDShrapt.Reader/SimpleTokens/GDIdentifier.cs index 01edd55..2105e4c 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDIdentifier.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDIdentifier.cs @@ -67,6 +67,14 @@ internal override void ForceComplete(GDReadingState state) base.ForceComplete(state); } + public override GDSyntaxToken Clone() + { + return new GDIdentifier() + { + Sequence = Sequence + }; + } + public override string ToString() { return $"{Sequence}"; diff --git a/src/GDShrapt.Reader/SimpleTokens/GDIntendation.cs b/src/GDShrapt.Reader/SimpleTokens/GDIntendation.cs index 77c3409..ee7e9fc 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDIntendation.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDIntendation.cs @@ -46,6 +46,14 @@ internal override void HandleChar(char c, GDReadingState state) state.PopAndPass(c); } + public override GDSyntaxToken Clone() + { + return new GDIntendation() + { + Sequence = Sequence + }; + } + public override string ToString() { return $"{Sequence}"; diff --git a/src/GDShrapt.Reader/SimpleTokens/GDInvalidToken.cs b/src/GDShrapt.Reader/SimpleTokens/GDInvalidToken.cs index 84c1555..c08ea4d 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDInvalidToken.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDInvalidToken.cs @@ -24,5 +24,13 @@ internal override bool CanAppendChar(char c, GDReadingState state) return Array.IndexOf(_stopChars, c) == -1; } + + public override GDSyntaxToken Clone() + { + return new GDInvalidToken() + { + Sequence = Sequence + }; + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/GDNewLine.cs b/src/GDShrapt.Reader/SimpleTokens/GDNewLine.cs index 5bfbc7a..542357e 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDNewLine.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDNewLine.cs @@ -3,5 +3,10 @@ public sealed class GDNewLine : GDSingleCharToken { public override char Char => '\n'; + + public override GDSyntaxToken Clone() + { + return new GDNewLine(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/GDNumber.cs b/src/GDShrapt.Reader/SimpleTokens/GDNumber.cs index 46b4199..f929e75 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDNumber.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDNumber.cs @@ -271,6 +271,14 @@ private static string PrepareString(string value) return value.Replace("_", ""); } + public override GDSyntaxToken Clone() + { + return new GDNumber() + { + _literalValue = _literalValue + }; + } + public override string ToString() { return $"{_literalValue}"; diff --git a/src/GDShrapt.Reader/SimpleTokens/GDOpenBracket.cs b/src/GDShrapt.Reader/SimpleTokens/GDOpenBracket.cs index 364b2d3..54d257b 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDOpenBracket.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDOpenBracket.cs @@ -3,5 +3,10 @@ public sealed class GDComma : GDSingleCharToken, IGDStructureToken { public override char Char => ','; + + public override GDSyntaxToken Clone() + { + return new GDComma(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/GDPoint.cs b/src/GDShrapt.Reader/SimpleTokens/GDPoint.cs index 0042f06..cbf6c3a 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDPoint.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDPoint.cs @@ -3,5 +3,10 @@ public sealed class GDPoint : GDSingleCharToken, IGDStructureToken { public override char Char => '.'; + + public override GDSyntaxToken Clone() + { + return new GDPoint(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/GDRightSlash.cs b/src/GDShrapt.Reader/SimpleTokens/GDRightSlash.cs index 13b648f..64a96bf 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDRightSlash.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDRightSlash.cs @@ -3,5 +3,10 @@ public sealed class GDRightSlash : GDSingleCharToken { public override char Char => '/'; + + public override GDSyntaxToken Clone() + { + return new GDRightSlash(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/GDSemiColon.cs b/src/GDShrapt.Reader/SimpleTokens/GDSemiColon.cs index 27314ba..71dd18b 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDSemiColon.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDSemiColon.cs @@ -3,5 +3,10 @@ public sealed class GDSemiColon : GDSingleCharToken, IGDStructureToken { public override char Char => ';'; + + public override GDSyntaxToken Clone() + { + return new GDSemiColon(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/GDSingleOperator.cs b/src/GDShrapt.Reader/SimpleTokens/GDSingleOperator.cs index 95e3079..05169c3 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDSingleOperator.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDSingleOperator.cs @@ -10,6 +10,14 @@ internal override void HandleChar(char c, GDReadingState state) state.PassChar(c); } + public override GDSyntaxToken Clone() + { + return new GDSingleOperator() + { + OperatorType = OperatorType + }; + } + public override string ToString() { return OperatorType.Print(); diff --git a/src/GDShrapt.Reader/SimpleTokens/GDSpace.cs b/src/GDShrapt.Reader/SimpleTokens/GDSpace.cs index a50ef83..75c60ad 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDSpace.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDSpace.cs @@ -12,5 +12,13 @@ internal override bool CanAppendChar(char c, GDReadingState state) one.Sequence += other.Sequence; return one; } + + public override GDSyntaxToken Clone() + { + return new GDSpace() + { + Sequence = Sequence + }; + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/GDSquareCloseBracket.cs b/src/GDShrapt.Reader/SimpleTokens/GDSquareCloseBracket.cs index 74b1f72..58121b6 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDSquareCloseBracket.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDSquareCloseBracket.cs @@ -3,5 +3,10 @@ public class GDSquareCloseBracket : GDSingleCharToken, IGDStructureToken { public override char Char => ']'; + + public override GDSyntaxToken Clone() + { + return new GDSquareCloseBracket(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/GDSquareOpenBracket.cs b/src/GDShrapt.Reader/SimpleTokens/GDSquareOpenBracket.cs index 47d422e..d9e821a 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDSquareOpenBracket.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDSquareOpenBracket.cs @@ -3,5 +3,10 @@ public class GDSquareOpenBracket : GDSingleCharToken, IGDStructureToken { public override char Char => '['; + + public override GDSyntaxToken Clone() + { + return new GDSquareOpenBracket(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/GDString.cs b/src/GDShrapt.Reader/SimpleTokens/GDString.cs index 21a5a69..b45af8d 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDString.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDString.cs @@ -177,6 +177,16 @@ internal override void ForceComplete(GDReadingState state) base.ForceComplete(state); } + public override GDSyntaxToken Clone() + { + return new GDString() + { + Value = Value, + BoundingChar = BoundingChar, + Multiline = Multiline + }; + } + public override string ToString() { var c = GetBoundingChar(); diff --git a/src/GDShrapt.Reader/SimpleTokens/GDType.cs b/src/GDShrapt.Reader/SimpleTokens/GDType.cs index 56b9de3..e28b376 100644 --- a/src/GDShrapt.Reader/SimpleTokens/GDType.cs +++ b/src/GDShrapt.Reader/SimpleTokens/GDType.cs @@ -83,6 +83,14 @@ internal override void ForceComplete(GDReadingState state) base.ForceComplete(state); } + public override GDSyntaxToken Clone() + { + return new GDType() + { + Sequence = Sequence + }; + } + public override string ToString() { return $"{Sequence}"; diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDBreakKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDBreakKeyword.cs index f71b14f..0e0944c 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDBreakKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDBreakKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDBreakKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "break"; + + public override GDSyntaxToken Clone() + { + return new GDBreakKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDBreakPointKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDBreakPointKeyword.cs index 0e48088..2ed0594 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDBreakPointKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDBreakPointKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDBreakPointKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "breakpoint"; + + public override GDSyntaxToken Clone() + { + return new GDBreakPointKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDClassKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDClassKeyword.cs index 85d1f99..7bf4fbd 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDClassKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDClassKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDClassKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "class"; + + public override GDSyntaxToken Clone() + { + return new GDClassKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDClassNameKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDClassNameKeyword.cs index 115a713..67dedbd 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDClassNameKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDClassNameKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDClassNameKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "class_name"; + + public override GDSyntaxToken Clone() + { + return new GDClassNameKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDConstKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDConstKeyword.cs index 8a81a5a..18d1df8 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDConstKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDConstKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDConstKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "const"; + + public override GDSyntaxToken Clone() + { + return new GDConstKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDContinueKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDContinueKeyword.cs index aa96956..ae68a31 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDContinueKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDContinueKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDContinueKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "continue"; + + public override GDSyntaxToken Clone() + { + return new GDContinueKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDElifKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDElifKeyword.cs index 252a2a7..4d6bdec 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDElifKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDElifKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDElifKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "elif"; + + public override GDSyntaxToken Clone() + { + return new GDElifKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDElseKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDElseKeyword.cs index 457f2a2..c93f2a0 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDElseKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDElseKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDElseKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "else"; + + public override GDSyntaxToken Clone() + { + return new GDElseKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDEnumKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDEnumKeyword.cs index db97ada..3178996 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDEnumKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDEnumKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDEnumKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "enum"; + + public override GDSyntaxToken Clone() + { + return new GDEnumKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDExportKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDExportKeyword.cs index 38f4f9c..98a852d 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDExportKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDExportKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDExportKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "export"; + + public override GDSyntaxToken Clone() + { + return new GDExportKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDExtendsKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDExtendsKeyword.cs index 344e193..290bf80 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDExtendsKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDExtendsKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDExtendsKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "extends"; + + public override GDSyntaxToken Clone() + { + return new GDExtendsKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDFalseKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDFalseKeyword.cs index 59849e9..07adbd6 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDFalseKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDFalseKeyword.cs @@ -4,5 +4,10 @@ public sealed class GDFalseKeyword : GDBoolKeyword { public override string Sequence => "false"; public override bool Value => false; + + public override GDSyntaxToken Clone() + { + return new GDFalseKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDForKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDForKeyword.cs index 918d37d..1793e31 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDForKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDForKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDWhileKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "while"; + + public override GDSyntaxToken Clone() + { + return new GDWhileKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDFuncKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDFuncKeyword.cs index 29f763a..89bfb93 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDFuncKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDFuncKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDFuncKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "func"; + + public override GDSyntaxToken Clone() + { + return new GDFuncKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDIfKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDIfKeyword.cs index 99303f3..e1db716 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDIfKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDIfKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDForKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "for"; + + public override GDSyntaxToken Clone() + { + return new GDForKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDInKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDInKeyword.cs index 800592a..06aa3d2 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDInKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDInKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDInKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "in"; + + public override GDSyntaxToken Clone() + { + return new GDInKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDMatchKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDMatchKeyword.cs index 2467d8d..11a8cdf 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDMatchKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDMatchKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDMatchKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "match"; + + public override GDSyntaxToken Clone() + { + return new GDMatchKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDOnreadyKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDOnreadyKeyword.cs index 7be3adc..3d2d957 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDOnreadyKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDOnreadyKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDOnreadyKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "onready"; + + public override GDSyntaxToken Clone() + { + return new GDOnreadyKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDPassKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDPassKeyword.cs index 3385dc9..5db13a2 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDPassKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDPassKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDPassKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "pass"; + + public override GDSyntaxToken Clone() + { + return new GDPassKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDReturnKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDReturnKeyword.cs index ceed523..e72e80e 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDReturnKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDReturnKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDReturnKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "return"; + + public override GDSyntaxToken Clone() + { + return new GDReturnKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDReturnTypeKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDReturnTypeKeyword.cs index 6cab1a6..60a2b79 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDReturnTypeKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDReturnTypeKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDReturnTypeKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "->"; + + public override GDSyntaxToken Clone() + { + return new GDReturnTypeKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDSetGetKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDSetGetKeyword.cs index d4808c4..a6efc7f 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDSetGetKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDSetGetKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDSetGetKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "setget"; + + public override GDSyntaxToken Clone() + { + return new GDSetGetKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDSignalKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDSignalKeyword.cs index 4f6c4d4..229e546 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDSignalKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDSignalKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDSignalKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "signal"; + + public override GDSyntaxToken Clone() + { + return new GDSignalKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDStaticKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDStaticKeyword.cs index 0049a3a..2c2d255 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDStaticKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDStaticKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDStaticKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "static"; + + public override GDSyntaxToken Clone() + { + return new GDStaticKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDToolKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDToolKeyword.cs index 92c6ac2..be246e3 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDToolKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDToolKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDToolKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "tool"; + + public override GDSyntaxToken Clone() + { + return new GDToolKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDTrueKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDTrueKeyword.cs index 541867e..bf087b7 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDTrueKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDTrueKeyword.cs @@ -5,5 +5,10 @@ public sealed class GDTrueKeyword : GDBoolKeyword public override string Sequence => "true"; public override bool Value => true; + + public override GDSyntaxToken Clone() + { + return new GDTrueKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDVarKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDVarKeyword.cs index 4d60673..f54ae55 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDVarKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDVarKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDVarKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "var"; + + public override GDSyntaxToken Clone() + { + return new GDVarKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDWhileKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDWhileKeyword.cs index 9bd6e7e..70feb92 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDWhileKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDWhileKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDIfKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "if"; + + public override GDSyntaxToken Clone() + { + return new GDIfKeyword(); + } } } diff --git a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDYieldKeyword.cs b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDYieldKeyword.cs index 4d9297c..03630b7 100644 --- a/src/GDShrapt.Reader/SimpleTokens/Keywords/GDYieldKeyword.cs +++ b/src/GDShrapt.Reader/SimpleTokens/Keywords/GDYieldKeyword.cs @@ -3,5 +3,10 @@ public sealed class GDYieldKeyword : GDSequenceToken, IGDKeywordToken { public override string Sequence => "yield"; + + public override GDSyntaxToken Clone() + { + return new GDYieldKeyword(); + } } } diff --git a/src/GDShrapt.Reader/Statements/GDExpressionStatement.cs b/src/GDShrapt.Reader/Statements/GDExpressionStatement.cs index 3aa1325..32b1a9c 100644 --- a/src/GDShrapt.Reader/Statements/GDExpressionStatement.cs +++ b/src/GDShrapt.Reader/Statements/GDExpressionStatement.cs @@ -61,6 +61,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDExpressionStatement(); + } + void IExpressionsReceiver.HandleReceivedToken(GDExpression token) { if (_form.State == State.Expression) diff --git a/src/GDShrapt.Reader/Statements/GDForStatement.cs b/src/GDShrapt.Reader/Statements/GDForStatement.cs index 49dcd2b..08f7f89 100644 --- a/src/GDShrapt.Reader/Statements/GDForStatement.cs +++ b/src/GDShrapt.Reader/Statements/GDForStatement.cs @@ -124,6 +124,10 @@ internal override void HandleNewLineChar(GDReadingState state) } } + public override GDNode CreateEmptyInstance() + { + return new GDForStatement(); + } void IExpressionsReceiver.HandleReceivedToken(GDExpression token) { diff --git a/src/GDShrapt.Reader/Statements/GDIfStatement.cs b/src/GDShrapt.Reader/Statements/GDIfStatement.cs index 3633a71..5e61808 100644 --- a/src/GDShrapt.Reader/Statements/GDIfStatement.cs +++ b/src/GDShrapt.Reader/Statements/GDIfStatement.cs @@ -88,6 +88,11 @@ internal override void HandleNewLineChar(GDReadingState state) } } + public override GDNode CreateEmptyInstance() + { + return new GDIfStatement(); + } + void IKeywordReceiver.HandleReceivedToken(GDIfKeyword token) { if (_form.State == State.IfBranch) diff --git a/src/GDShrapt.Reader/Statements/GDMatchStatement.cs b/src/GDShrapt.Reader/Statements/GDMatchStatement.cs index 3dec5f0..d3233f5 100644 --- a/src/GDShrapt.Reader/Statements/GDMatchStatement.cs +++ b/src/GDShrapt.Reader/Statements/GDMatchStatement.cs @@ -93,6 +93,11 @@ internal override void HandleNewLineChar(GDReadingState state) } } + public override GDNode CreateEmptyInstance() + { + return new GDMatchStatement(); + } + void IKeywordReceiver.HandleReceivedToken(GDMatchKeyword token) { if (_form.State == State.Match) diff --git a/src/GDShrapt.Reader/Statements/GDVariableDeclarationStatement.cs b/src/GDShrapt.Reader/Statements/GDVariableDeclarationStatement.cs index 05f276b..6b3b11e 100644 --- a/src/GDShrapt.Reader/Statements/GDVariableDeclarationStatement.cs +++ b/src/GDShrapt.Reader/Statements/GDVariableDeclarationStatement.cs @@ -99,6 +99,11 @@ internal override void HandleNewLineChar(GDReadingState state) state.PopAndPassNewLine(); } + public override GDNode CreateEmptyInstance() + { + return new GDVariableDeclarationStatement(); + } + void IKeywordReceiver.HandleReceivedToken(GDVarKeyword token) { if (_form.State == State.Var) diff --git a/src/GDShrapt.Reader/Statements/GDWhileStatement.cs b/src/GDShrapt.Reader/Statements/GDWhileStatement.cs index 89c7d93..ba655e3 100644 --- a/src/GDShrapt.Reader/Statements/GDWhileStatement.cs +++ b/src/GDShrapt.Reader/Statements/GDWhileStatement.cs @@ -97,6 +97,11 @@ internal override void HandleNewLineChar(GDReadingState state) } } + public override GDNode CreateEmptyInstance() + { + return new GDWhileStatement(); + } + void IKeywordReceiver.HandleReceivedToken(GDWhileKeyword token) { if (_form.State == State.While) diff --git a/src/GDShrapt.Reader/Statements/IfStatement/GDElifBranch.cs b/src/GDShrapt.Reader/Statements/IfStatement/GDElifBranch.cs index 08e8421..00980cf 100644 --- a/src/GDShrapt.Reader/Statements/IfStatement/GDElifBranch.cs +++ b/src/GDShrapt.Reader/Statements/IfStatement/GDElifBranch.cs @@ -101,6 +101,11 @@ internal override void HandleNewLineChar(GDReadingState state) } } + public override GDNode CreateEmptyInstance() + { + return new GDElifBranch(); + } + void IKeywordReceiver.HandleReceivedToken(GDElifKeyword token) { if (_form.State == State.Elif) diff --git a/src/GDShrapt.Reader/Statements/IfStatement/GDElseBranch.cs b/src/GDShrapt.Reader/Statements/IfStatement/GDElseBranch.cs index 8cb896b..cb99c45 100644 --- a/src/GDShrapt.Reader/Statements/IfStatement/GDElseBranch.cs +++ b/src/GDShrapt.Reader/Statements/IfStatement/GDElseBranch.cs @@ -91,6 +91,11 @@ internal override void HandleNewLineChar(GDReadingState state) } } + public override GDNode CreateEmptyInstance() + { + return new GDElseBranch(); + } + void IKeywordReceiver.HandleReceivedToken(GDElseKeyword token) { if (_form.State == State.Else) diff --git a/src/GDShrapt.Reader/Statements/IfStatement/GDIfBranch.cs b/src/GDShrapt.Reader/Statements/IfStatement/GDIfBranch.cs index cbfdb3d..4ef99d8 100644 --- a/src/GDShrapt.Reader/Statements/IfStatement/GDIfBranch.cs +++ b/src/GDShrapt.Reader/Statements/IfStatement/GDIfBranch.cs @@ -100,6 +100,11 @@ internal override void HandleNewLineChar(GDReadingState state) } } + public override GDNode CreateEmptyInstance() + { + return new GDIfBranch(); + } + void IKeywordReceiver.HandleReceivedToken(GDIfKeyword token) { if (_form.State == State.If)