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();
}
########################################