Please review JDK-8072426 at 
<http://cr.openjdk.java.net/~attila/8072426/webrev.00> for 
<https://bugs.openjdk.java.net/browse/JDK-8072426>

This is what basically became an epic yak shaving exercise after we determined 
that POJOs aren't subjected to ToPrimitive (earlier known as 
java.math.RoundingMode.UP != "UP" problem). While we originally advocated for 
throwing TypeError for POJOs [[DefaultValue]] that would've prevented their 
implicit toString() in string concatenation too. Instead, I opted to fix this 
once and forever but it turned out that the biggest issue with it is the fact 
that JSObject was also not handled correctly for ToPrimitive; fixing that 
turned out to be the most challenging part, introducing a new 
JSObject.getDefaultValue() method and deprecating JSObject.toNumber() (which 
isn't used anymore at all).

As an unexpected boon, JSObjectLinker no longer needs to do any conversions, so 
its GuardingTypeConverterFactory functionality has been entirely removed. 
NashornPrimitiveLinker will now automatically take care of converting JSObject 
instances to various primitive types, as per specification behavior.

Finally, the ScriptRuntime changes to the equals() and equalDifferentType() are 
purely refactoring of some common type testing subexpressions and conversions, 
as well as short-circuiting of some comparisons. They aren't strictly necessary 
for this issue, but just for clear understanding of what's happening it seemed 
like a good idea to make them more concise (ScriptRuntime.EQ and .NE, of which 
the two affected methods are sub-parts are also not invoked terribly often, and 
I'll soon make them be invoked even less frequently.)

Thanks,
  Attila.

Reply via email to