Author: fperrad
Date: Fri Feb 22 00:37:22 2008
New Revision: 25978

Modified:
   trunk/languages/lua/lib/luaio.pir
   trunk/languages/lua/pmc/luauserdata.pmc

Log:
[Lua]
- put environment initialization in LuaUserdata constructor

Modified: trunk/languages/lua/lib/luaio.pir
==============================================================================
--- trunk/languages/lua/lib/luaio.pir   (original)
+++ trunk/languages/lua/lib/luaio.pir   Fri Feb 22 00:37:22 2008
@@ -245,11 +245,6 @@
 .sub 'newfile' :anon
     .local pmc file
     new file, 'LuaUserdata'
-    $P0 = getinterp
-    $P1 = $P0['sub'; 1]
-    .local pmc env
-    env = $P1.'getfenv'()
-    file.'setfenv'(env)
     .local pmc _lua__REGISTRY
     _lua__REGISTRY = get_hll_global '_REGISTRY'
     .const .LuaString key = 'ParrotIO'

Modified: trunk/languages/lua/pmc/luauserdata.pmc
==============================================================================
--- trunk/languages/lua/pmc/luauserdata.pmc     (original)
+++ trunk/languages/lua/pmc/luauserdata.pmc     Fri Feb 22 00:37:22 2008
@@ -29,6 +29,25 @@
 #define u_val(pmc) (PMC_data_typed((pmc), userdata_t *))->val
 #define u_env(pmc) (PMC_data_typed((pmc), userdata_t *))->env
 
+static PMC* curr_func(PARROT_INTERP) {
+    parrot_context_t *ctx = CONTEXT(interp->ctx);
+    PMC *sub = ctx->current_sub;
+    PMC *cont = ctx->current_cont;
+    ctx = PMC_cont(cont)->to_ctx;
+    sub = ctx->current_sub;
+    return sub;
+}
+
+static PMC* getcurrenv(PARROT_INTERP) {
+    PMC *env = NULL;
+    PMC *sub = curr_func(interp);
+    if (sub) {
+        env = PMC_metadata(sub);
+    }
+    return env;
+}
+
+
 pmclass LuaUserdata
     extends LuaAny
     does scalar
@@ -49,6 +68,7 @@
     void init() {
         userdata_t *u      = mem_allocate_zeroed_typed(userdata_t);
         PMC_data(SELF)     = u;
+        u_env(SELF) = getcurrenv(INTERP);
         PMC_metadata(SELF) = NULL;
         PObj_custom_mark_destroy_SETALL(SELF);
     }

Reply via email to