Hello,

You are changing the “literal array” itself. The #(0 0 0 0) creates an array as 
part of the compiledMethod
and you are changing this. (Yes, many people think that all literals should be 
immutable…).

If you add a #copy it will work.

        bitArray1 := #(0 0 0 0) copy

or create the array at runtime with {0.0.0.0}

As for bit array (bit field), I wanted to answer your original question which I 
will do later…

        Marcus


> On 19 Nov 2015, at 16:12, abdelghani ALIDRA <alidran...@yahoo.fr> wrote:
> 
> Hi everybody,
> 
> I am experiencing a very weird behavior with Arrays :
> 
> I writed a test case as follows ;
> 
> testChange
>       | bitArray1 |
>       
>       
>       bitArray1 := #(0 0 0 0).
> 
>       (1 to: bitArray1 size)
>               do: [ :index ||temp|
>                       temp := (bitArray1 at: index) + 1.
>                       bitArray1 at: index put: (temp).
>                        ].
>       self assert: bitArray1 = #(1 1 1 1)
> 
> 
> The thing is that the test succedes the first time but if I run it again it 
> fails.
> Moreover, if  I change the testChange arbitrarily (just add a space and save) 
> the test succeeds the first time then it fails.....etc.
> 
> Actually bitArray1 := #(0 0 0 0) changes the value of bitArray1 in the first 
> run but then bitArray1 does not change any more in the next runs.
> 
> The problem does not occur if  I replace bitArray1 := #(0 0 0 0). with 
> bitArray1 := Array new:4 withAll: 0 .
> 
> Any idea where the problem can be?
> Should I open a bug entry? where?
> 
> Abdelghani
> 


Reply via email to