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