With the following comment:

 - Changes KEY to contain a KEY_PAIR* instead of a KEY_PAIR**
 - Changes the MAKE_KEY macro to work within an expression
 - Changes the MAKE_KEY macro to not return NULL if the value is 0 or
   NULL. This is needed because an enum_int_val key, for example, will
   quite often have the value zero, but that shouldn't mean the whole
   aggregate. I think we'll have to add another macro or a flag for
   keys with those semantics. But this patch is trying to be the
   minimum necessary to get PerlArrays working again.
 - Adds various *_keyed ops to core.ops. This is an incomplete set,
   because I thought someone might be thinking about autogenerating
   some of them. This is enough to access command-line parameters
   and use PerlArrays of PerlInts.
 - Adds back in the copying of the command-line parameters to P0.
 - Makes the rx_*group* opcodes work again (they use PerlArrays)
 - Fixes the array_resize logic. It was totally inconsistent about
   whether its size parameter was a size or an index, and could seg
   fault as a result.
 - Makes array_resize zero out newly allocated memory. This is the only
   way to tell whether an array slot has been initialized yet.
 - Sets the PMC GC flags for PerlArrays.
 - Automatically creates PerlStrings/PerlInts/PerlNums when assigning
   strings, integers, or numbers to uninitialized PerlArray slots.
 - Revives the t/pmc/array.t and t/pmc/perlarray.t tests.

And as a result, languages/regex is now usable (the test code, in
particular, needed key support.)

In case you're confused, this patch does *NOT*:

 - implement the assembler syntax set P0[3], P0[4]
   (this should be translated to set_keyed_p_kc_p_kc)
 - automatically generate the *_keyed variants of ops
   (instead, it explicitly adds a ton of set_keyed and get_keyed op
   variants in core.ops, and that's not even all that are needed.)
 - resolve the design gaps for composite keys and whole-PMC _keyed access.

Reply via email to