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);
}