Browse Source

Fix: function overwrite

Akeit0 1 year ago
parent
commit
a3ff39287f
1 changed files with 12 additions and 4 deletions
  1. 12 4
      src/Lua/CodeAnalysis/Compilation/LuaCompiler.cs

+ 12 - 4
src/Lua/CodeAnalysis/Compilation/LuaCompiler.cs

@@ -615,10 +615,18 @@ public sealed class LuaCompiler : ISyntaxNodeVisitor<ScopeCompilationContext, bo
 
         // push closure instruction
         context.PushInstruction(Instruction.Closure(context.StackPosition, funcIndex), node.Position, true);
-
-        // assign global variable
-        context.PushInstruction(Instruction.SetTabUp(0, (ushort)(index + 256), (ushort)(context.StackPosition - 1)), node.Position);
-
+        
+        if(context.TryGetLocalVariableInThisScope(node.Name, out var variable))
+        {
+            // assign local variable
+            context.PushInstruction(Instruction.Move(variable.RegisterIndex, (ushort)(context.StackPosition - 1)), node.Position, true);
+        }
+        else
+        {
+            // assign global variable
+            context.PushInstruction(Instruction.SetTabUp(0, (ushort)(index + 256), (ushort)(context.StackPosition - 1)), node.Position);
+        }
+        
         return true;
     }