Is this a bug? Inconsistent Java type for modulo operator
Attila Szegedi
attila.szegedi at oracle.com
Thu Oct 2 14:44:38 UTC 2014
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 <sundararajan.athijegannathan at oracle.com> 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
>
More information about the nashorn-dev
mailing list