hg: valhalla/valhalla/langtools: values do not support == or !=

Paul Govereau paul.govereau at oracle.com
Thu Jul 31 23:23:40 UTC 2014


You are right, the prototype is almost certainly wrong on this count.
My interpretation of the specification:

   http://cr.openjdk.java.net/~jrose/values/values-0.html

is that, either:

   v1 == v2  ==> v1.equals(v2)

or

   v1 == v2 ==> forall (f1,f2) in fields of (v1,v2), f1 == f2

The first one could be implemented trivially in javac, but it raises 
some questions about when the programmer/compiler is required to 
implement equals. The second one could also be implemented in javac, or 
at the JVM level by expanding the definition, or perhaps with vcmp. We 
don't have a vcmp yet, so this last option will have to wait a bit.

At the moment, == would generate an acmp, which will work fine, but is 
hiding a compatibility issue. I thought making == illegal was a better 
choice until we decide what should happen. Of course, it is easy to 
change if we prefer an acmp for now.

Paul

On 07/31/2014 05:16 PM, Remi Forax wrote:
>
> On 07/31/2014 10:18 PM, paul.govereau at oracle.com wrote:
>> Changeset: 532af9586535
>> Author:    pgovereau
>> Date:      2014-07-31 16:16 -0400
>> URL:
>> http://hg.openjdk.java.net/valhalla/valhalla/langtools/rev/532af9586535
>>
>> values do not support == or !=
>>
>> ! src/share/classes/com/sun/tools/javac/comp/TransValues.java
>> ! test/tools/javac/valhalla/values/CheckClone.java
>> + test/tools/javac/valhalla/values/CheckEquals.java
>> + test/tools/javac/valhalla/values/CheckEquals.out
>>
>
> Hi Paul,
> Are you sure about this one ?
> for me a == on a value type is allowed and emit a vcmp.
>
> Rémi
>


More information about the valhalla-dev mailing list