Steve Fink <[EMAIL PROTECTED]> writes:

> On Mon, Apr 22, 2002 at 05:40:09PM +0100, Piers Cawley wrote:
>> Does anyone have an idea of when we're going to see these? Or hashes
>> of PMCs, I don't really care which...
>
> Well, we don't have hashes of anything. We already have arrays of
> PMCs. You just can't get the PMCs out, only their integer or numeric
> values. :-)
>
> True arrays of PMCs should probably be blocked on the whole keyed
> thing. Keyed access is partially implemented, but there's way too much
> manual code repetition at the moment, and the assembly syntax is
> wrong:
>
> EVENTUAL              CURRENT
> set I0, P0[7]         get_keyed I0, P0, 7
> set P0[7], I0           set_keyed P0, 7, I0
> set P0[0], P1[1]        not possible
> set I0, P0[P1]          not possible -- I'm not even sure what this will do
> set P1, P0[7]           get_keyed P1, P0, 7 (requires the recently
                          committed patch)
> set P0[7], P1           set_keyed P0, 7, P1 (requires the recently
                          committed patch)

The last two are the only ones I need, and the first 'impossible' one
can be worked 'round with:

      get_keyed P2, P1, 1
      set_keyed P0, 0, P2

Which is vaguely annoying, but at least workable.

> So far, I've just kind of thrown in more and more [sg]et_keyed
> variants as they were needed. To continue in this grand tradition,
> I've just committed a patch to allow getting and setting of the PMCs
> in arrays. However, I'm not really sure how 'set P0[7], P1' is
> supposed to behave. I just overwrite the whole P0[7] array slot,
> discarding the previously held PMC. 

That's good enough for me in the short term. I doubt it's good enough
long term though...

> I don't remember the whole 'set P0, P1' discussion well enough to
> venture an opinion on whether the previous occupant gets to have a
> say in what happens.

Nor me.

> This code now works:
>
> # P0 is initialized to an array containing the command-line arguments
> new P1, PerlArray
> set_keyed P1, 0, P0      # set P1[0], P0
> get_keyed P31, P1, 0     # set P31, P1[0]
> get_keyed S0, P31, 0     # set S0, P31[0]
> print "Command name: "
> print S0
> print "\n"
> end

Nice.

-- 
Piers

   "It is a truth universally acknowledged that a language in
    possession of a rich syntax must be in need of a rewrite."
         -- Jane Austen?

Reply via email to