I guess shift is just not a very common operation on sparse arrays. It’s almost 
like mutually exclusive use cases. Still good to have them fixed.

Thanks for the reviews!
Hannes


> Am 15.12.2016 um 13:47 schrieb Attila Szegedi <szege...@gmail.com>:
> 
> +1
> 
> Wow, this is lots of fixes. Some of these bugs are so glaring I’m astonished 
> they we did not spot them earlier, like failing to set a new length in 
> shiftLeft. It’s great you fixed these.
> 
> Attila.
> 
>> On 15 Dec 2016, at 11:48, Hannes Wallnöfer <hannes.wallnoe...@oracle.com> 
>> wrote:
>> 
>> Please review:
>> 
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8171219
>> Webrev: http://cr.openjdk.java.net/~hannesw/8171219/webrev/
>> 
>> This fixes a number of bugs around the Array.prototype.shift on sparse array 
>> data (and its underlying dense data). Unlikely as it may seem, all these 
>> issues where exposed by the short test script included in this webrev:
>> 
>> - UntouchedArrayData did not convert to a real ArrayData instance when 
>> ensuring place for first element (index 0)
>> - Dense array data did not check their size before trying System.arraycopy 
>> in shiftLeft
>> - Dense array data did not set the new length in shiftLeft, thereby leaving 
>> empty slots
>> - Sparse array data did not ensure space in the underlying dense array when 
>> moving elements from sparse to dense in shiftLeft
>> - Sparse array data did not delete new in-between elements when moving 
>> elements from sparse to dense in shiftLeft
>> - Sparse array data did not set the length after shrinking underlying dense 
>> data in shiftRight, thereby creating new empty slots
>> - DeletedRangeArrayData could not return the underlying data if it turned 
>> empty in shiftLeft, causing problems later on.
>> 
>> I also moved the invocation of ensure() on the underlying dense array from 
>> SparseArrayData.ensure() to where it is actually required, which is cleaner 
>> and safe since underlying is a private field.
>> 
>> Thanks,
>> Hannes
> 

Reply via email to