Skip to content

Commit

Permalink
Fixed lambda intendation parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
elamaunt committed Jan 19, 2024
1 parent a666d26 commit 924c23d
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 7 deletions.
58 changes: 56 additions & 2 deletions src/GDShrapt.Reader.Tests/ParsingTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -599,7 +599,7 @@ public void MatchStatementWildcardPatternTest()
AssertHelper.CompareCodeStrings(code, statement.ToString());
AssertHelper.NoInvalidTokens(statement);
}

[TestMethod]
public void MatchStatementArrayPatternTest()
{
Expand Down Expand Up @@ -1343,7 +1343,7 @@ public void NumberTest4(string code)
"**",
"**=",
"<<=",
">>=",
">>=",
"^=",
"%=")]
public void DualOperatorsTest(params string[] operators)
Expand Down Expand Up @@ -2566,5 +2566,59 @@ class_name Helper
AssertHelper.CompareCodeStrings(code, @class.ToString());
AssertHelper.NoInvalidTokens(@class);
}

[TestMethod]
public void ParseCurryingTest2()
{
var reader = new GDScriptReader();

var code = @"
class_name Helper
func curry_test(f):
var sum_all = func(x, y, z):
return x + y + z
var curry = func(f):
return func(x):
return func(y):
return func(z):
return f.call(x, y, z)
var curried_sum = curry.call(sum_all)
var partial_sum_x = curried_sum.call(1)
var partial_sum_y = partial_sum_x.call(2)
print(partial_sum_y.call(3))
print(curried_sum.call(1).call(2).call(3))";

var @class = reader.ParseFileContent(code);

var method = @class.Methods.First();

var statements = method.Statements.ToArray();
var second = statements[1];

Assert.AreEqual(7, statements.Length);

var declaration = (GDVariableDeclarationStatement)second;

var methodExpr = (GDMethodExpression)declaration.Initializer;

var returnExpr = (GDReturnExpression)((GDExpressionStatement)methodExpr.Statements.First()).Expression;
var method2Expr = (GDMethodExpression)returnExpr.Expression;

var return2Expr = (GDReturnExpression)((GDExpressionStatement)method2Expr.Statements.First()).Expression;
var method3Expr = (GDMethodExpression)return2Expr.Expression;

var return3Expr = (GDReturnExpression)((GDExpressionStatement)method3Expr.Statements.First()).Expression;
var method4Expr = (GDMethodExpression)return3Expr.Expression;

Assert.AreEqual(1, method4Expr.Statements.Count);
Assert.AreEqual("\n return f.call(x, y, z)", method4Expr.Statements.ToString());

AssertHelper.CompareCodeStrings(code, @class.ToString());
AssertHelper.NoInvalidTokens(@class);
}
}
}
6 changes: 3 additions & 3 deletions src/GDShrapt.Reader/GDShrapt.Reader.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<Version>4.1.1-alpha</Version>
<Version>4.1.2-alpha</Version>
<Authors>elamaunt</Authors>
<Product>GDShrapt</Product>
<Description>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.
Expand All @@ -16,8 +16,8 @@ Usage: Just create a GDScriptReader instance and call methods from it.</Descript
<RepositoryUrl>https://github.com/elamaunt/GDShrapt</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PackageTags>GDShrapt GDScript reader parser codegeneration Godot lexical analyzer</PackageTags>
<AssemblyVersion>4.1.1</AssemblyVersion>
<FileVersion>4.1.1</FileVersion>
<AssemblyVersion>4.1.2</AssemblyVersion>
<FileVersion>4.1.2</FileVersion>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>

Expand Down
4 changes: 2 additions & 2 deletions src/GDShrapt.Reader/Resolvers/GDStatementsResolver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ internal override void HandleCharAfterIntendation(char c, GDReadingState state)
}

// Resolving multiple expressions on the same string
var statement = new GDExpressionStatement();
var statement = new GDExpressionStatement(LineIntendationThreshold);
Owner.HandleReceivedToken(statement);
state.PushAndPass(statement, c);
}
Expand Down Expand Up @@ -211,7 +211,7 @@ private GDStatement CompleteAsStatement(GDReadingState state, string sequence)

private GDExpressionStatement CompleteAsExpressionStatement(GDReadingState state)
{
var statement = new GDExpressionStatement();
var statement = new GDExpressionStatement(LineIntendationThreshold);

SendIntendationTokensToOwner();
Owner.HandleReceivedToken(statement);
Expand Down

0 comments on commit 924c23d

Please sign in to comment.