Browse Source

Fix: parse expression+table access

AnnulusGames 1 year ago
parent
commit
fad11520e6
1 changed files with 16 additions and 5 deletions
  1. 16 5
      src/Lua/CodeAnalysis/Syntax/Parser.cs

+ 16 - 5
src/Lua/CodeAnalysis/Syntax/Parser.cs

@@ -565,15 +565,26 @@ public ref struct Parser
 
         if (result == null) return false;
 
-        while (true)
+        // table access
+        enumerator.SkipEoL();
+        
+        var nextType = enumerator.GetNext().Type;
+        if (nextType is SyntaxTokenType.LSquare or SyntaxTokenType.Dot or SyntaxTokenType.Colon)
         {
-            enumerator.SkipEoL();
+            MoveNextWithValidation(ref enumerator);
+            result = ParseTableAccessExpression(ref enumerator, result);
+        }
 
+        // binary expression
+        while (true)
+        {
             var opPrecedence = GetPrecedence(enumerator.GetNext().Type);
             if (precedence >= opPrecedence) break;
 
             MoveNextWithValidation(ref enumerator);
             result = ParseBinaryExpression(ref enumerator, opPrecedence, result);
+
+            enumerator.SkipEoL();
         }
 
         return true;
@@ -877,10 +888,10 @@ public ref struct Parser
 
             MoveNextWithValidation(ref enumerator);
             enumerator.SkipEoL();
-        }
 
-        // check ')'
-        CheckCurrent(ref enumerator, SyntaxTokenType.RParen);
+            // check ')'
+            CheckCurrent(ref enumerator, SyntaxTokenType.RParen);
+        }
 
         return arguments;
     }