At 10:33 PM +0100 8/8/02, Tom Hughes wrote:
>In message <a05111b5bb9786eae041d@[63.120.19.221]>
> Dan Sugalski <[EMAIL PROTECTED]> wrote:
>
>> At 6:58 PM +0100 8/8/02, Tom Hughes wrote:
>>
>> >Presumably with all keys being PMCs we will just encode the key
>> >arguments in the opcode name as a k, and kc for constant keys.
>>
>> Yep.
>>
>> >Likewise, the constant keys will presumably be encoded in the byte
>> >code much as specified in the PDD and then turned into PMC structures
>> >in the constant table when the byte code is loaded.
>>
>> Yep.
>
>One thing I just realised is that we still have a problem of how to
>tell what a P register used as an key means - it can either mean that
>the register contains a key, or that it contains an integer or string
>that is to be used as a key.
Nope. That's easy. P regs as keys mean they are real keys. Period.
Integer lookups need I registers, string lookups aren't done--they
need keys.
>If we're going to say that a P register is always taken to be a key
>then does that mean that you can't do this:
>
> set P0, "foo"
> set P2, P1[P0]
Right, you can't do that.
>Obviously that is manufactured, as you could do it with a constant
>index or an S register but in general terms if you have perl indexing
>an array or hash by a scalar then then it is likely to be indexing
>one PMC by another.
>
>If the above code was banned then you would have to build the key
>dynamically instead:
>
> new_key P0
> size_key P0, 1
> ke_set_value P0, 1, "foo"
> set P2, P1[P0]
Yup. or set the key value to be a PMC which you can then manipulate
outside the key struct. (Since we're just storing pointers, and thus
can twiddle things without having to store them back in things again)
--
Dan
--------------------------------------"it's like this"-------------------
Dan Sugalski even samurai
[EMAIL PROTECTED] have teddy bears and even
teddy bears get drunk