[svn:parrot] r36554 - trunk/languages/lua/src/pmc
fperrad at svn.parrot.org
fperrad at svn.parrot.org
Tue Feb 10 18:25:20 UTC 2009
Author: fperrad
Date: Tue Feb 10 18:25:20 2009
New Revision: 36554
URL: https://trac.parrot.org/parrot/changeset/36554
Log:
[Lua] metatable of LuaUserdata PMC is now an ATTR
Modified:
trunk/languages/lua/src/pmc/luatable.pmc
trunk/languages/lua/src/pmc/luauserdata.pmc
Modified: trunk/languages/lua/src/pmc/luatable.pmc
==============================================================================
--- trunk/languages/lua/src/pmc/luatable.pmc Tue Feb 10 18:02:28 2009 (r36553)
+++ trunk/languages/lua/src/pmc/luatable.pmc Tue Feb 10 18:25:20 2009 (r36554)
@@ -706,7 +706,7 @@
*/
METHOD PMC* get_metatable() {
- PMC *retval = _LuaUserdata_get_metatable(INTERP, SELF);
+ PMC *retval = _LuaTable_get_metatable(INTERP, SELF);
if (!retval)
retval = pmc_new(INTERP, dynpmc_LuaNil);
Modified: trunk/languages/lua/src/pmc/luauserdata.pmc
==============================================================================
--- trunk/languages/lua/src/pmc/luauserdata.pmc Tue Feb 10 18:02:28 2009 (r36553)
+++ trunk/languages/lua/src/pmc/luauserdata.pmc Tue Feb 10 18:25:20 2009 (r36554)
@@ -23,10 +23,11 @@
#define u_val(pmc) (PARROT_LUAUSERDATA(pmc))->val
#define u_env(pmc) (PARROT_LUAUSERDATA(pmc))->env
+#define u_mt(pmc) (PARROT_LUAUSERDATA(pmc))->mt
PMC *
_LuaUserdata_get_metatable(PARROT_INTERP, PMC *obj) {
- return PMC_metadata(obj);
+ return u_mt(obj);
}
static PMC* curr_func(PARROT_INTERP) {
@@ -46,12 +47,11 @@
}
static PMC* getcurrenv(PARROT_INTERP) {
- PMC *env = NULL;
- PMC *sub = curr_func(interp);
+ PMC * const sub = curr_func(interp);
if (sub) {
- env = PMC_metadata(sub);
+ return PMC_metadata(sub);
}
- return env;
+ return NULL;
}
@@ -65,6 +65,7 @@
ATTR PMC *val;
ATTR PMC *env;
+ ATTR PMC *mt;
/*
@@ -79,7 +80,6 @@
Parrot_LuaUserdata_attributes *u = mem_allocate_zeroed_typed(Parrot_LuaUserdata_attributes);
PMC_data(SELF) = u;
u_env(SELF) = getcurrenv(INTERP);
- PMC_metadata(SELF) = NULL;
PObj_custom_mark_destroy_SETALL(SELF);
}
@@ -97,8 +97,8 @@
pobject_lives(INTERP, (PObj *)u_val(SELF));
if (u_env(SELF))
pobject_lives(INTERP, (PObj *)u_env(SELF));
- if (PMC_metadata(SELF))
- pobject_lives(INTERP, (PObj *)PMC_metadata(SELF));
+ if (u_mt(SELF))
+ pobject_lives(INTERP, (PObj *)u_mt(SELF));
}
/*
@@ -167,9 +167,9 @@
*/
VTABLE void set_pmc(PMC *value) {
/* TODO: should be get_attr_str() and getfenv() */
- u_val(SELF) = u_val(value);
- u_env(SELF) = u_env(value);
- PMC_metadata(SELF) = PMC_metadata(value);
+ u_val(SELF) = u_val(value);
+ u_env(SELF) = u_env(value);
+ u_mt(SELF) = u_mt(value);
}
/*
@@ -212,8 +212,8 @@
MULTI INTVAL is_equal(LuaUserdata value) {
PMC * const meth = _LuaAny_find_meth(INTERP, SELF, "__eq");
if (meth) {
- PMC *retval = Parrot_runops_fromc_args(INTERP, meth, "PPP",
- SELF, value);
+ PMC * const retval = Parrot_runops_fromc_args(INTERP, meth, "PPP",
+ SELF, value);
if (PMC_IS_NULL(retval))
return (INTVAL)0;
@@ -366,9 +366,9 @@
*/
METHOD void set_metatable(PMC *meta) {
if (dynpmc_LuaNil == PMC_type(meta))
- PMC_metadata(SELF) = NULL;
+ u_mt(SELF) = NULL;
else
- PMC_metadata(SELF) = meta;
+ u_mt(SELF) = meta;
}
}
More information about the parrot-commits
mailing list