Objects with more than 256 keys cause all associated values to become undefined

Mark Elliot mark.elliot at gmail.com
Mon May 4 03:47:54 UTC 2015

I ran across this while trying to get the TypeScript compiler to run
natively on Nashorn. The compiler includes a large mapping of keys to
diagnostic descriptions in ts.Diagnostics.

After bumping from 1.8.0_05 to 1.8.0_45, the values in the ts.Diagnostics
map became undefied. I've boiled the issue down to a simple repro, and it
appears that objects of the form:

var foo = {
    field_1: { code: 1 },
    field_2: { code: 2 },
    field_256: { code: 256 },
    field_257: { code: 257 }

Cause all values associated with keys to become undefined, even though the
keys themselves exist. That is, attempting to access any value, e.g.
foo.field_1, will return undefined, instead of the expected object.

The problem appears to occur when more than 256 keys are specified, as
running these two gists through jjs would easily show:
256 keys: https://gist.github.com/markelliot/359810cdd27c90f0e13d
257 keys: https://gist.github.com/markelliot/cf6268b0627b54921583

Notably, I don't observe the issue when the values are not objects, so this
object would behave as one would expect:

var bar = {
    field_1: 1,
    field_2: 2,
    field_256: 256,
    field_257: 257

More information about the nashorn-dev mailing list