Bläddra i källkod

Merge pull request #248 from nuskey8/feature-get-current-env

Add: GetCurrentEnvironment  to get _ENV in C#
Akito Inoue 1 vecka sedan
förälder
incheckning
c09ef8858e
1 ändrade filer med 23 tillägg och 0 borttagningar
  1. 23 0
      src/Lua/LuaState.cs

+ 23 - 0
src/Lua/LuaState.cs

@@ -315,6 +315,29 @@ public class LuaState : IDisposable
         callStack.PopUntil(top);
         callStack.PopUntil(top);
     }
     }
 
 
+    public LuaTable GetCurrentEnvironment()
+    {
+        var callStack = GetCallStackFrames();
+        for (int i = callStack.Length - 1; i >= 0; i--)
+        {
+            var function = callStack[i].Function;
+            if (function is not LuaClosure closure || closure.Proto.UpValues.Length == 0)
+            {
+                continue;
+            }
+
+            if (closure.Proto.UpValues[0].Name != "_ENV")
+            {
+                continue;
+            }
+
+            var upValue = closure.UpValues[0];
+            return upValue.GetValue().Read<LuaTable>();
+        }
+
+        return Environment;
+    }
+
     public void SetHook(LuaFunction? hook, string mask, int count = 0)
     public void SetHook(LuaFunction? hook, string mask, int count = 0)
     {
     {
         if (hook is null)
         if (hook is null)