For a B3 class, .ref *is* indicated by an L type:
void m(Point p) { } // (QPoint;)V
void m(Point.ref p) { } // (LPoint;)V
On 1/6/2022 5:08 PM, fo...@univ-mlv.fr wrote:
Let me re-phrase my question because i've asked the wrong question.
My question is not why do we need .ref in the language but why .ref
can not be represented by a L-type in the bytecode instead of a full
reified interface/abstract class.
Asking for a .ref is something similar to a boxing, but using
checkcast to convert from a QComplex; to a LComplex;
One reason may be that this is not a subtyping relationship but a
boxing relationship so it may not work when well we will have fully
reified generics.
Rémi
------------------------------------------------------------------------
*From: *"Brian Goetz" <brian.go...@oracle.com>
*To: *"Remi Forax" <fo...@univ-mlv.fr>, "valhalla-spec-experts"
<valhalla-spec-experts@openjdk.java.net>
*Sent: *Thursday, January 6, 2022 9:12:21 PM
*Subject: *Re: Why do we need .ref class for primtive class ?
Because the Q is what permits the tearing.
On 1/6/2022 1:50 PM, Remi Forax wrote:
It just occurs to me that while ACC_VALUE is a bit that change the
runtime semantics,
something the VM should take care of, ACC_PRIMITIVE is not a bit that
change the
runtime semantics, only the javac translation strategy,
javac emits Q-types instead of L-type + the Preload attribute.
If value classes and primitive classes are equivalent at runtime, why
do we need to generate the .ref interface/abstract class ?
We can use L-type instead.
Rémi