Please review JDK-8068872: Nashorn JSON.parse drops numeric keys:
http://cr.openjdk.java.net/~hannesw/8068872/
The main issue here was that ArrayData.ensure should only update the
length if the new index is greater or equal to the old length.
I also fixed two other related issues:
- ScriptObject.defineProperty(int, Object) must call
doesNotHaveEnsureDelete (which marks new unused slots as deleted) after
having called ensure.
- There's no need to call ensure(length - 1) on a newly created
ArrayData(length). I've removed two such cases.
Thanks,
Hannes