[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