RFR: 8159589: ScriptObjectMirror.clear() should remove all enumerable properties
Sundararajan Athijegannathan
sundararajan.athijegannathan at oracle.com
Mon Jun 20 06:35:24 UTC 2016
Few questions:
1) So, we are allowing delete on non-configurable properties. Is this
fine from optimization PoV? i.e., we can't assume that a
non-configurable property can not be deleted.
2) ScriptObject.clear - it appears previously, it deleted inherited
properties too. Now only immediate properties. Intended? do we have
tests to cover these cases?
3) Global's clear method clears lexicalScope. Do we need a test for ES6
lexical scope clear?
-Sundar
On 6/17/2016 7:24 PM, Hannes Wallnöfer wrote:
> Please review JDK-8159589: ScriptObjectMirror.clear() should remove all enumerable properties:
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8159589
> Webrev: http://cr.openjdk.java.net/~hannesw/8159589/webrev.00/
>
> In our current implementation, ScriptObjectMirror.clear() observes JS semantics by not clearing properties that are non-configurable, and even throwing type error when invoking clear() on an object that contains such properties.
>
> IMO, there’s no need to follow JS semantics since we’re calling the method from outside of JS. With this change, clear() will remove all enumerable properties. This also makes the method consistent with size() and isEmpty(), which previously could return values > 0 and false after calling clear().
>
> On a practical note, this is really convenient with global objects as it can be used to return globals to their initial state after an eval, removing all declared vars and functions but leaving the (non-enumerable) built-ins.
>
> Hannes
More information about the nashorn-dev
mailing list