Author: chromatic
Date: Thu Feb 21 17:03:59 2008
New Revision: 25962
Modified:
trunk/languages/lua/pmc/luauserdata.pmc
Log:
[Lua] Cleaned up LuaUserdata PMC.
Modified: trunk/languages/lua/pmc/luauserdata.pmc
==============================================================================
--- trunk/languages/lua/pmc/luauserdata.pmc (original)
+++ trunk/languages/lua/pmc/luauserdata.pmc Thu Feb 21 17:03:59 2008
@@ -47,8 +47,8 @@
*/
void init() {
- userdata_t *u = mem_allocate_zeroed_typed(userdata_t);
- PMC_data(SELF) = u;
+ userdata_t *u = mem_allocate_zeroed_typed(userdata_t);
+ PMC_data(SELF) = u;
PMC_metadata(SELF) = NULL;
PObj_custom_mark_destroy_SETALL(SELF);
}
@@ -81,11 +81,12 @@
*/
void destroy() {
- userdata_t *u = PMC_data_typed(SELF, userdata_t *);
- PMC* meth = find_meth(INTERP, SELF, "__gc");
- if (meth != NULL) {
+ userdata_t *u = PMC_data_typed(SELF, userdata_t *);
+ PMC *meth = find_meth(INTERP, SELF, "__gc");
+
+ if (meth)
(void)Parrot_runops_fromc_args(INTERP, meth, "vP", SELF);
- }
+
if (u) {
mem_sys_free(u);
PMC_data(SELF) = NULL;
@@ -135,8 +136,9 @@
*/
void set_pmc(PMC *value) {
- u_val(SELF) = u_val(value);
- u_env(SELF) = u_env(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);
}
@@ -147,18 +149,18 @@
=cut
*/
- PMC* get_attr_str(STRING* key) {
+ PMC* get_attr_str(STRING *key) {
return u_val(SELF);
}
/*
-=item C<void set_attr_str(STRING* key, PMC* value)>
+=item C<void set_attr_str(STRING *key, PMC *value)>
=cut
*/
- void set_attr_str(STRING* key, PMC* value) {
+ void set_attr_str(STRING *key, PMC *value) {
u_val(SELF) = value;
}
@@ -170,7 +172,7 @@
=over 4
-=item C<INTVAL is_equal(PMC* value)>
+=item C<INTVAL is_equal(PMC *value)>
The C<==> operation. Compares reference (not in depth).
@@ -180,14 +182,15 @@
INTVAL is_equal(PMC* value) {
MMD_LuaUserdata: {
PMC *meth = find_meth(INTERP, SELF, "__eq");
- if (meth != NULL) {
+ if (meth) {
PMC *retval = Parrot_runops_fromc_args(INTERP, meth, "PPP",
SELF, value);
- if (PMC_IS_NULL(retval)) {
+ if (PMC_IS_NULL(retval))
return (INTVAL)0;
- }
+
return VTABLE_get_bool(INTERP, retval);
}
+
if (SELF == value)
return (INTVAL)1;
else
@@ -205,17 +208,15 @@
=cut
*/
- INTVAL cmp(PMC* value) {
+ INTVAL cmp(PMC *value) {
MMD_LuaUserdata: {
real_exception(INTERP, NULL, ILL_INHERIT,
"attempt to compare two userdata values");
- return (INTVAL)0;
}
MMD_DEFAULT: {
real_exception(INTERP, NULL, ILL_INHERIT,
- "attempt to compare userdata with %s",
- string_to_cstring(INTERP, VTABLE_name(INTERP, value)));
- return (INTVAL)0;
+ "attempt to compare userdata with %Ss",
+ VTABLE_name(INTERP, value));
}
}
@@ -234,10 +235,11 @@
*/
METHOD PMC* getfenv() {
PMC *retval = u_env(SELF);
- if (retval != NULL)
+
+ if (retval)
return retval;
- else
- return pmc_new(INTERP, dynpmc_LuaNil);
+
+ return pmc_new(INTERP, dynpmc_LuaNil);
}
/*
@@ -249,26 +251,30 @@
*/
METHOD PMC* get_metatable() {
PMC *retval = PMC_metadata(SELF);
- if (NULL == retval)
- retval = pmc_new(INTERP, dynpmc_LuaNil);
- return retval;
+
+ if (retval)
+ return retval;
+
+ return pmc_new(INTERP, dynpmc_LuaNil);
}
/*
-=item C<PMC* rawequal(PMC* value)>
+=item C<PMC* rawequal(PMC *value)>
=cut
*/
- METHOD PMC* rawequal(PMC* value) {
- PMC* retval = pmc_new(INTERP, dynpmc_LuaBoolean);
+ METHOD PMC* rawequal(PMC *value) {
+ PMC *retval = pmc_new(INTERP, dynpmc_LuaBoolean);
+
if (PMC_type(SELF) == PMC_type(value)
- && u_val(SELF) == u_val(value)
- && u_env(SELF) == u_env(value))
- PMC_int_val(retval) = 1;
+ && u_val(SELF) == u_val(value)
+ && u_env(SELF) == u_env(value))
+ VTABLE_set_integer_native(INTERP, retval, 1);
else
- PMC_int_val(retval) = 0;
+ VTABLE_set_integer_native(INTERP, retval, 0);
+
return retval;
}
@@ -291,12 +297,10 @@
*/
METHOD void set_metatable(PMC *meta) {
- if (dynpmc_LuaNil == PMC_type(meta)) {
+ if (dynpmc_LuaNil == PMC_type(meta))
PMC_metadata(SELF) = NULL;
- }
- else {
+ else
PMC_metadata(SELF) = meta;
- }
}
}