From b15e4a7dff1c6a0934d6786dd2188b05b37dd207 Mon Sep 17 00:00:00 2001 From: Semenov Dmitry Date: Sat, 20 Jan 2024 13:33:22 +0400 Subject: [PATCH] Fixed static parsing --- src/GDShrapt.Reader.Tests/ParsingTests.cs | 30 +++++++++++++++++++ .../Declarations/GDVariableDeclaration.cs | 4 +-- src/GDShrapt.Reader/GDShrapt.Reader.csproj | 6 ++-- .../Resolvers/GDClassMembersResolver.cs | 2 ++ 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/src/GDShrapt.Reader.Tests/ParsingTests.cs b/src/GDShrapt.Reader.Tests/ParsingTests.cs index aa11a1a..c770f8d 100644 --- a/src/GDShrapt.Reader.Tests/ParsingTests.cs +++ b/src/GDShrapt.Reader.Tests/ParsingTests.cs @@ -2620,5 +2620,35 @@ func curry_test(f): AssertHelper.CompareCodeStrings(code, @class.ToString()); AssertHelper.NoInvalidTokens(@class); } + + [TestMethod] + public void ParseStaticsTest() + { + var reader = new GDScriptReader(); + + var code = @" +class_name A + +static var a = ""Hello"" + +static func my_int_function() -> int: + return 0"; + + var @class = reader.ParseFileContent(code); + + Assert.AreEqual(2, @class.Members.Count); + + var variable = (GDVariableDeclaration)@class.Members[0]; + var method = (GDMethodDeclaration)@class.Members[1]; + + Assert.AreEqual(true, variable.IsStatic); + Assert.AreEqual(true, method.IsStatic); + + Assert.AreEqual("static var a = \"Hello\"", variable.ToString()); + Assert.AreEqual("my_int_function", method.Identifier.Sequence); + + AssertHelper.CompareCodeStrings(code, @class.ToString()); + AssertHelper.NoInvalidTokens(@class); + } } } \ No newline at end of file diff --git a/src/GDShrapt.Reader/Declarations/GDVariableDeclaration.cs b/src/GDShrapt.Reader/Declarations/GDVariableDeclaration.cs index dbffd62..0230206 100644 --- a/src/GDShrapt.Reader/Declarations/GDVariableDeclaration.cs +++ b/src/GDShrapt.Reader/Declarations/GDVariableDeclaration.cs @@ -87,7 +87,7 @@ public GDAccessorDeclaration SecondAccessorDeclarationNode } public bool IsConstant => ConstKeyword != null; - public override bool IsStatic => false; + public override bool IsStatic => StaticKeyword != null; public enum State { @@ -226,7 +226,7 @@ void ITokenSkipReceiver.HandleReceivedTokenSkip() { if (_form.IsOrLowerState(State.Const)) { - _form.State = State.Var; + _form.State = State.Static; return; } diff --git a/src/GDShrapt.Reader/GDShrapt.Reader.csproj b/src/GDShrapt.Reader/GDShrapt.Reader.csproj index c1ee5e7..8fe681c 100644 --- a/src/GDShrapt.Reader/GDShrapt.Reader.csproj +++ b/src/GDShrapt.Reader/GDShrapt.Reader.csproj @@ -3,7 +3,7 @@ netstandard2.0 true - 4.1.2-alpha + 4.1.3-alpha elamaunt GDShrapt GDShrapt.Reader is .Net library and object-oriented one-pass parser of GDScript. It can build a lexical tree of GDScript code or generate a new code from scratch. @@ -16,8 +16,8 @@ Usage: Just create a GDScriptReader instance and call methods from it.https://github.com/elamaunt/GDShrapt git GDShrapt GDScript reader parser codegeneration Godot lexical analyzer - 4.1.2 - 4.1.2 + 4.1.3 + 4.1.3 true diff --git a/src/GDShrapt.Reader/Resolvers/GDClassMembersResolver.cs b/src/GDShrapt.Reader/Resolvers/GDClassMembersResolver.cs index 3d5eaf0..f82f368 100644 --- a/src/GDShrapt.Reader/Resolvers/GDClassMembersResolver.cs +++ b/src/GDShrapt.Reader/Resolvers/GDClassMembersResolver.cs @@ -185,6 +185,8 @@ void HandleStaticIfMet(ITokenReceiver spaceReceiver, Action push, bool _spaceAfterStatic = null; } } + + _staticMet = false; } switch (sequence)