On Wed, Mar 27, 2002 at 11:15:22AM -0800, Steve Fink wrote:
> I'll send a followup patch that updates the .ops files (mainly rx.ops)
> to define and use the working MAKE_KEY.

And here it is.

Index: core.ops
===================================================================
RCS file: /home/perlcvs/parrot/core.ops,v
retrieving revision 1.113
diff -u -r1.113 core.ops
--- core.ops    22 Mar 2002 20:24:02 -0000      1.113
+++ core.ops    27 Mar 2002 19:18:58 -0000
@@ -2,15 +2,16 @@
 ** core.ops
 */
 
-/* This convoluted mess avoids costly runtime creation of KEY
-and KEY_PAIR structures. */
-
-#define MAKE_KEY(k,k_p,v,c,t) if (v) {\
-        k_p.type = c;\
-        k_p.cache.t = v;\
-        k.size = 1;\
-        k.keys[0] = &k_p;\
-    }
+/* This (now even more) convoluted mess avoids costly runtime creation
+ * of KEY and KEY_PAIR structures, and can be used in an expression.
+ */
+
+#define MAKE_KEY(k,k_p,v,c,t) (v?(\
+        k_p.type = c,\
+        k_p.cache.t = v,\
+        k.size = 1,\
+        k.keys = &k_p,\
+        &k):NULL)
 
 VERSION = PARROT_VERSION;
 
Index: rx.ops
===================================================================
RCS file: /home/perlcvs/parrot/rx.ops,v
retrieving revision 1.16
diff -u -r1.16 rx.ops
--- rx.ops      15 Feb 2002 02:30:02 -0000      1.16
+++ rx.ops      27 Mar 2002 19:18:51 -0000
@@ -372,12 +372,14 @@
 =cut
 
 op rx_info_getgroup(in pmc, out int, out int, in int) {
+        KEY_PAIR key_p;
+        KEY key;
        RX_dUNPACK($1);
 
-    /* Delayed XXX
-       $2=rx->groupstart->vtable->get_integer_index(interpreter, rx->groupstart, $4);
-       $3=rx->groupend->vtable->get_integer_index(interpreter, rx->groupend, $4);
-    */
+        /* Temporary XXX */
+        MAKE_KEY(key, key_p, $4, enum_key_int, int_val);
+       $2=rx->groupstart->vtable->get_integer_keyed(interpreter, rx->groupstart, 
+&key);
+       $3=rx->groupend->vtable->get_integer_keyed(interpreter, rx->groupend, &key);
        
        goto NEXT();
 }
@@ -635,11 +637,13 @@
 =cut
 
 op rx_startgroup(in pmc, in int) {
+        KEY_PAIR key_p;
+        KEY key;
        RX_dUNPACK($1);
        
-    /* XXX Delayed
-       rx->groupstart->vtable->set_integer_index(interpreter, rx->groupstart, 
rx->index, $2);
-    */
+        /* XXX Temporary */
+        MAKE_KEY(key, key_p, $2, enum_key_int, int_val);
+       rx->groupstart->vtable->set_integer_keyed(interpreter, rx->groupstart, &key, 
+rx->index);
        
        goto NEXT();
 }
@@ -654,13 +658,15 @@
 =cut
 
 op rx_endgroup(in pmc, in int) {
-       RX_dUNPACK($1);
-       
-    /* XXX Delayed
-       rx->groupend->vtable->set_integer_index(interpreter, rx->groupend, rx->index, 
$2);
-    */
+    KEY_PAIR key_p;
+    KEY key;
+    RX_dUNPACK($1);
+       
+    /* XXX Temporary */
+    MAKE_KEY(key, key_p, $2, enum_key_int, int_val);        
+    rx->groupend->vtable->set_integer_keyed(interpreter, rx->groupend, &key, 
+rx->index);
        
-       goto NEXT();
+    goto NEXT();
 }
 
 ########################################

Reply via email to