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.