What Sundar said. It's admittedly weird, however for 8u40 Nashorn has seriously 
revamped internals, including a fairly decent[*] type inference engine, so 
looks like that took care of this issue too. 

Attila.

--
[*] IMHO, but I'm biased being the one who wrote it.

On Sep 23, 2014, at 7:06 PM, A. Sundararajan 
<[email protected]> wrote:

> Hi,
> 
> The latest 8u-dev code @ http://hg.openjdk.java.net/jdk8u/jdk8u-dev/nashorn 
> prints this:
> 
> eval = 0
> eval2 = 1
> eval.getClass() = class java.lang.Integer
> eval2.getClass() = class java.lang.Integer
> 
> That said it is better to avoid depending on Java side value to be a specific 
> subtype of Number (like Integer, Double, Long). It is better to expect and 
> handle Numbar and call intValue(), doubleValue() on it. That gives maximum 
> freedom for Nashorn implementation. Nashorn tries to represent 
> int/long/double as appropriate for the specific cases.
> 
> -Sundar
> 
> On Tuesday 23 September 2014 06:47 PM, David P. Caldwell wrote:
>> Asked by a StackOverflow user; I've produced a clearer reproduction case 
>> below.
>> 
>> Original question is
>> http://stackoverflow.com/questions/25989642/why-does-java-8-nashorn-javascript-modulo-returns-0-0-double-instead-of-0-i/25991982
>> 
>> It confused the asker and I confess it makes no sense to me:
>> 
>> public class Tester {
>>   public static void main( String[] args ) throws Exception {
>>       javax.script.ScriptEngine se = new
>> javax.script.ScriptEngineManager().getEngineByName( "nashorn" );
>> 
>>       Object eval = se.eval( "5%5" );
>>       Object eval2 = se.eval( "5%2" );
>> 
>>       System.out.println( "eval = " + eval );
>>       System.out.println( "eval2 = " + eval2 );
>>       System.out.println( "eval.getClass() = " + eval.getClass() );
>>       System.out.println( "eval2.getClass() = " + eval2.getClass() );
>>   }
>> }
>> 
>> Result:
>> 
>> $ java -version && javac Tester.java && java Tester
>> java version "1.8.0_20"
>> Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
>> Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)
>> eval = 0.0
>> eval2 = 1
>> eval.getClass() = class java.lang.Double
>> eval2.getClass() = class java.lang.Integer
> 

Reply via email to