cvsuser 04/04/27 05:00:43
Modified: src objects.c
Log:
classoffset speed up
* classoffset_hash is a plain PerlHash now
* disabled some duplicate code in class creation or subclassing
Revision Changes Path
1.90 +15 -6 parrot/src/objects.c
Index: objects.c
===================================================================
RCS file: /cvs/public/parrot/src/objects.c,v
retrieving revision 1.89
retrieving revision 1.90
diff -u -w -r1.89 -r1.90
--- objects.c 27 Apr 2004 06:32:06 -0000 1.89
+++ objects.c 27 Apr 2004 12:00:43 -0000 1.90
@@ -1,6 +1,6 @@
/*
Copyright: 2001-2003 The Perl Foundation. All Rights Reserved.
-$Id: objects.c,v 1.89 2004/04/27 06:32:06 leo Exp $
+$Id: objects.c,v 1.90 2004/04/27 12:00:43 leo Exp $
=head1 NAME
@@ -130,7 +130,7 @@
class_slots = PMC_data(class);
attr_offset_hash = pmc_new(interpreter, enum_class_OrderedHash);
- class_offset_hash = pmc_new(interpreter, enum_class_OrderedHash);
+ class_offset_hash = pmc_new(interpreter, enum_class_PerlHash);
parent_array = get_attrib_num(class_slots, PCD_ALL_PARENTS);
parent_class_count = VTABLE_elements(interpreter, parent_array);
@@ -296,6 +296,11 @@
VTABLE_unshift_pmc(interpreter, temp_pmc, base_class);
set_attrib_num(child_class_array, PCD_ALL_PARENTS, temp_pmc);
+#if 0
+ /*
+ * recreated in rebuild_attrib_stuff
+ * -leo
+ */
/* Our attribute list is our parent's attribute list */
temp_pmc = clone_array(interpreter,
get_attrib_num((SLOTTYPE *)PMC_data(base_class),
@@ -307,6 +312,7 @@
get_attrib_num((SLOTTYPE *)PMC_data(base_class),
PCD_ATTRIBUTES));
set_attrib_num(child_class_array, PCD_ATTRIBUTES, temp_pmc);
+#endif
/* But we have no attributes of our own. Yet */
temp_pmc = pmc_new(interpreter, enum_class_Array);
@@ -349,15 +355,19 @@
pmc_new(interpreter, enum_class_Array));
set_attrib_num(class_array, PCD_ALL_PARENTS,
pmc_new(interpreter, enum_class_Array));
+#if 0
+ /* these two are created in rebuild_attrib_stuf
+ * -leo
+ */
set_attrib_num(class_array, PCD_ATTRIB_OFFS,
pmc_new(interpreter, enum_class_OrderedHash));
set_attrib_num(class_array, PCD_ATTRIBUTES,
pmc_new(interpreter, enum_class_OrderedHash));
+#endif
set_attrib_num(class_array, PCD_CLASS_ATTRIBUTES,
pmc_new(interpreter, enum_class_Array));
-
/* Set the classname, if we have one */
classname_pmc = pmc_new(interpreter, enum_class_PerlString);
VTABLE_set_string_native(interpreter, classname_pmc, class_name);
@@ -1279,15 +1289,14 @@
}
#else
/*
- * cheat a bit--the offset_hash is an OrderedHash PMC
+ * cheat a bit--the offset_hash is a PerlHash PMC
*/
b = hash_get_bucket(interpreter,
(Hash*) PMC_struct_val(offset_hash), class);
if (!b)
offset = -1;
else {
- offset = VTABLE_get_integer_keyed_int(interpreter, offset_hash,
- PMC_int_val((PMC*)b->value));
+ return PMC_int_val((PMC*)b->value);
}
#endif
return offset;