Review request for JDK-8147558: Add support for ES6 collections
Hannes Wallnöfer
hannesw at gmail.com
Fri Feb 5 10:17:56 UTC 2016
Please review JDK-8147558: Add support for ES6 collections:
http://cr.openjdk.java.net/~hannesw/8147558/
The patch is rather large so here are a few things to point out:
- The Map and Set collections use a custom linked map implementation
(objects/LinkedMap) instead of using a standard Java collection such as
java.util.LinkedHashMap. The reason is that the forEach method in those
objects allows arbitrary modifications to the base collection during
iteration by the callback function. The way this is done is that
additions and deletions are reflected in visited nodes except for
deletion of elements that have already been visited.
See the note in
http://www.ecma-international.org/ecma-262/6.0/#sec-map.prototype.foreach
LinkedMap is implemented as a linked list that uses a HashMap for
hashing (or, in other words, a HashMap with linked-list nodes as
values). While the hash map methods are synchronized, iteration does not
use any locking. I think it is safe for concurrent use, but please do
have a look.
- There are now a IS_ACCESSOR_PROPERTY flag and a isAccessorProperty()
in runtime/Property. This is because ECMA6 defines several native
properties as accessor properties (as opposed to data properties). In
ECMA5, accessor properties always meant properties with user-provided
get and set functions. The difference between data and accessor
properties of course is that when accessed over the prototype chain
accessor is called with the object at the start of the prototype chain
as receiver instead of the object owning the property. That's just to
explain these changes. The gist of it is that it is now possible to
define accessor properties through nasgen and they should behave just
like user user-defined accessor properties.
- Finally, there are several small issues left in this patch that I know
of, and probably more that I don't know of. I could have continued
writing tests for at least another week, but I think it's good enough to
push it.
Thanks!
Hannes
More information about the nashorn-dev
mailing list