cvsuser 03/07/05 02:49:09
Modified: classes sarray.pmc
Log:
create PMC result if necessary
Revision Changes Path
1.4 +20 -3 parrot/classes/sarray.pmc
Index: sarray.pmc
===================================================================
RCS file: /cvs/public/parrot/classes/sarray.pmc,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -w -r1.3 -r1.4
--- sarray.pmc 4 Jul 2003 18:20:27 -0000 1.3
+++ sarray.pmc 5 Jul 2003 09:49:09 -0000 1.4
@@ -1,7 +1,7 @@
/* sarray.pmc
* Copyright: (When this is determined...it will go here)
* CVS Info
- * $Id: sarray.pmc,v 1.3 2003/07/04 18:20:27 leo Exp $
+ * $Id: sarray.pmc,v 1.4 2003/07/05 09:49:09 leo Exp $
* Overview:
* These are the vtable functions for the SArray base class
* Data Structure and Algorithms:
@@ -214,6 +214,7 @@
PMC* get_pmc_keyed_int (INTVAL* key) {
HASH_ENTRY *e = (HASH_ENTRY *) PMC_data(SELF);
+ PMC *ret;
if (*key < 0) {
*key += e[1].val.int_val;
@@ -221,9 +222,25 @@
if (*key < e[0].val.int_val || *key >= e[1].val.int_val)
internal_exception(OUT_OF_BOUNDS, "SArray index out of bounds!\n");
e = (HASH_ENTRY *) PMC_data(SELF) + (2 + *key);
- if (e->type != enum_hash_pmc)
- internal_exception(OUT_OF_BOUNDS, "SArray: Not a pmc!\n");
+ switch (e->type) {
+ case enum_hash_int:
+ ret = pmc_new(INTERP, enum_class_PerlUndef);
+ VTABLE_set_integer_native(INTERP, ret, e->val.int_val);
+ return ret;
+ case enum_hash_num:
+ ret = pmc_new(INTERP, enum_class_PerlUndef);
+ VTABLE_set_number_native(INTERP, ret, e->val.num_val);
+ return ret;
+ case enum_hash_string:
+ ret = pmc_new(INTERP, enum_class_PerlUndef);
+ VTABLE_set_string_native(INTERP, ret, e->val.string_val);
+ return ret;
+ case enum_hash_pmc:
return e->val.pmc_val;
+ default:
+ internal_exception(OUT_OF_BOUNDS, "SArray: Not a pmc!\n");
+ }
+ return NULL;
}
PMC* get_pmc_keyed(PMC* key) {