On Fri, Apr 04, 2008 at 02:15:26PM -0700, Christoph Otto (Volt) wrote:
> When running the following PIR code, Parrot does the Perlish thing 
> and implicitly converts s to an int.  This violates the principle 
> of least surprise and makes it unnecessarily difficult to test 
> whether an element exists within an array.  
>
> It would be much more logical if the array-like PMCs threw an 
> exception in this circumstance.
> 
> .sub _main
>     .local pmc a
>     .local string s
>     a = new 'ResizablePMCArray'
>     a['foo'] = 'stuff'
>     s = a['bar']
>     print s #prints 'stuff'
>     s = a[0]
>     print s #prints 'stuff'
>     print "\n"
> .end

What about the case of ... ?

.sub _main
    .local pmc a
    .local pmc s
    s = new 'String'
    s = 'foo'

    a = new 'ResizablePMCArray'
    a[s] = 'stuff'

    $S0 = a[0]
    say $S0              # prints "stuff\n"
.end

It seems to me that whatever we do with String PMCs as keys
we should also do with string registers.  In this case it means
numifying the string (just as we would any PMC key).

As far as testing for existence of an element, that should
probably be some special behavior attached to the exists_p_s
opcode as opposed to a set_* opcode.

Pm

Reply via email to