Experimented with jasm
(https://wiki.openjdk.java.net/display/CodeTools/asmtools):
super public class HelloWorld
version 50:0
{
public Method "<init>":"()V"
stack 1 locals 1
{
aload_0;
invokespecial Method java/lang/Object."<init>":"()V";
return;
}
public static Method func:"(I)Z"
stack 1 locals 1
{
iload 0;
ireturn;
}
public static Method main:"([Ljava/lang/String;)V"
stack 2 locals 1
{
getstatic Field
java/lang/System.out:"Ljava/io/PrintStream;";
bipush 0;
invokestatic Method HelloWorld.func:"(I)Z";
invokevirtual Method java/io/PrintStream.println:"(Z)V";
getstatic Field
java/lang/System.out:"Ljava/io/PrintStream;";
bipush 13;
invokestatic Method HelloWorld.func:"(I)Z";
invokevirtual Method java/io/PrintStream.println:"(Z)V";
getstatic Field
java/lang/System.out:"Ljava/io/PrintStream;";
bipush 22;
invokestatic Method HelloWorld.func:"(I)Z";
invokevirtual Method java/io/PrintStream.println:"(Z)V";
return;
}
} // end Class HelloWorld
prints false, true, false.
-Sundar
On 13/11/17, 1:42 PM, Sundararajan Athijegannathan wrote:
+1
Yep. 0 and 1 are only allowed.
-Sundar
On 13/11/17, 1:27 PM, Attila Szegedi wrote:
+1. Nice catch. Feels like an implementation detail, but the JVM
specification is indeed unclear on the behavior in case there's a
bytecode
method doing this:
public static func(I)Z
0 iload 0
1 ireturn
I went spelunking in the JVM spec, and the closest I could find is in
section 2.3.4 says "The Java Virtual Machine encodes boolean array
components using 1 to represent true and 0 to represent false. Where
Java
programming language boolean values are mapped by compilers to values of
Java Virtual Machine type int, the compilers must use the same
encoding."
So I guess we better stick to that.
Attila.
On Mon, Nov 13, 2017 at 7:21 AM, Priya Lakshmi Muthuswamy<
priya.lakshmi.muthusw...@oracle.com> wrote:
Hi,
Please review JDK-8190391 : nashorn: "!!" of nonzero even integer var
becomes false when returned
JBS : https://bugs.openjdk.java.net/browse/JDK-8190391
webrev : http://cr.openjdk.java.net/~pmuthuswamy/8190391/webrev.00/
Thanks,
Priya