Here the simple method:

at: index
        <primitive: 60 error: x >
        ^ x

And its bytecode:

<primitive: 60 error: x>
13 <81 41> storeIntoTemp: 1
15 <11> pushTemp: 1
16 <7C> returnTop


Now, if i add this:

at: index
        <primitive: 60 error: x >
        [:foo | 5].
        ^ x

I get following bytecode:

<primitive: 60 error: x>
17 <81 42> storeIntoTemp: 2
19 <8F 01 00 02> closureNumCopied: 0 numArgs: 1 bytes 23 to 24
23      <20> pushConstant: 5
24      <7D> blockReturn
25 <87> pop
26 <12> pushTemp: 2
27 <7C> returnTop

so, if we ignore the block closure bytecodes, we have:

<primitive: 60 error: x>
17 <81 42> storeIntoTemp: 2
26 <12> pushTemp: 2
27 <7C> returnTop


The problem is that for method context there are only 2 temps
(argument + error code) .. but not 3 (index is zero-based).

The fix should be simple.. in code which calculates the temp index for
'error code' temp.

-- 
Best regards,
Igor Stasenko.

Reply via email to