[svn:parrot] r36244 - in trunk: languages/pipp/src/pmc src/pmc
cotto at svn.parrot.org
cotto at svn.parrot.org
Sun Feb 1 13:03:59 UTC 2009
Author: cotto
Date: Sun Feb 1 13:03:58 2009
New Revision: 36244
URL: https://trac.parrot.org/parrot/changeset/36244
Log:
[pmc] update PhpArray to avoid UnionVal macros
Modified:
trunk/languages/pipp/src/pmc/phparray.pmc
trunk/src/pmc/iterator.pmc
Modified: trunk/languages/pipp/src/pmc/phparray.pmc
==============================================================================
--- trunk/languages/pipp/src/pmc/phparray.pmc Sun Feb 1 12:50:25 2009 (r36243)
+++ trunk/languages/pipp/src/pmc/phparray.pmc Sun Feb 1 13:03:58 2009 (r36244)
@@ -1438,17 +1438,20 @@
PippHashTable *ht;
PippBucket *bkt;
+ STRING *get_key = CONST_STRING(INTERP, "get_key");
PMC *iter = pmc_new_init(INTERP, enum_class_Iterator, SELF);
- PMC *key = (PMC *)PMC_struct_val(iter);
+ PMC *key;
GET_ATTR_hash_table(INTERP, SELF, ht);
- ht->iter = iter;
- PMC_int_val(key) = ht->elementCount ? 0 : -1;
+ /* yup, only one iterator per PhpArray */
+ ht->iter = iter;
+
+ Parrot_PCCINVOKE(INTERP, iter, get_key, "->P", &key);
/* set the key's flags so get_x_keyed() knows when it's being called
* from an Iterator. */
- PObj_get_FLAGS(key) |= KEY_pipp_iterator_FLAG;
+ PObj_get_FLAGS(key) = KEY_pipp_iterator_FLAG;
/* Get the Iterator and ht->internalPointer in sync. */
bkt = ht->tableHead;
@@ -1869,7 +1872,10 @@
if (ht->internalPointer != NULL) {
if (ht->iter) {
- PMC *key = (PMC *)PMC_struct_val(ht->iter);
+ STRING *get_key = CONST_STRING(INTERP, "get_key");
+ PMC *key;
+
+ Parrot_PCCINVOKE(INTERP, ht->iter, get_key, "->P", &key);
VTABLE_nextkey_keyed(INTERP, key, SELF, ITERATE_GET_NEXT);
}
ht->internalPointer = ht->internalPointer->tableNext;
@@ -1895,7 +1901,10 @@
if (ht->internalPointer != NULL) {
if (ht->iter) {
- PMC *key = (PMC *)PMC_struct_val(ht->iter);
+ PMC *key;
+ STRING *get_key = CONST_STRING(INTERP, "get_key");
+
+ Parrot_PCCINVOKE(INTERP, ht->iter, get_key, "->P", &key);
VTABLE_nextkey_keyed(INTERP, key, SELF, ITERATE_GET_PREV);
}
ht->internalPointer = ht->internalPointer->tablePrev;
@@ -1922,7 +1931,10 @@
ht->internalPointer = ht->tableHead;
if (ht->iter) {
- PMC *key = (PMC *)PMC_struct_val(ht->iter);
+ PMC *key;
+ STRING *get_key = CONST_STRING(INTERP, "get_key");
+
+ Parrot_PCCINVOKE(INTERP, ht->iter, get_key, "->P", &key);
VTABLE_nextkey_keyed(INTERP, key, SELF, ITERATE_FROM_START);
}
RETURN(void);
@@ -1946,7 +1958,10 @@
ht->internalPointer = ht->tableTail;
if (ht->iter) {
- PMC *key = (PMC *)PMC_struct_val(ht->iter);
+ PMC *key;
+ STRING *get_key = CONST_STRING(INTERP, "get_key");
+
+ Parrot_PCCINVOKE(INTERP, ht->iter, get_key, "->P", &key);
VTABLE_nextkey_keyed(INTERP, key, SELF, ITERATE_FROM_END);
}
RETURN(void);
@@ -2058,7 +2073,10 @@
ht->internalPointer = ht->internalPointer->tableNext;
if (ht->iter) {
- PMC *key = (PMC *)PMC_struct_val(ht->iter);
+ PMC *key;
+ STRING *get_key = CONST_STRING(INTERP, "get_key");
+
+ Parrot_PCCINVOKE(INTERP, ht->iter, get_key, "->P", &key);
VTABLE_nextkey_keyed(INTERP, key, SELF, ITERATE_GET_NEXT);
}
Modified: trunk/src/pmc/iterator.pmc
==============================================================================
--- trunk/src/pmc/iterator.pmc Sun Feb 1 12:50:25 2009 (r36243)
+++ trunk/src/pmc/iterator.pmc Sun Feb 1 13:03:58 2009 (r36244)
@@ -662,6 +662,12 @@
METHOD set_key(PMC *key) {
PMC_struct_val(SELF) = key;
}
+
+ METHOD get_key() {
+ PMC *key = PMC_struct_val(SELF);
+ RETURN(PMC *key);
+ }
+
}
/*
More information about the parrot-commits
mailing list