I haven’t mentioned bytecodes that are using CONSTANT_Class_info indirectly, all the get/put and invoke bytecodes which are using CONSTANT_Class_info through CONSTANT_Methodref_info and CONSTANT_Fieldref_info. Anyway, they don’t need ReferenceType either.
Fred > On Apr 3, 2020, at 13:08, Frederic Parain <frederic.par...@oracle.com> wrote: > > Hi, > > This is a good question. > > The ReferenceType descriptor was added to make the distinction between the > two VM-level > type sharing the same class name. The CONSTANT_Class_info is used by the > following bytecodes: > - ldc > - new > - defaultvalue > - anewarray > - multianewarray > - checkcast > - instanceof > > I’m not seeing any case now where a ReferenceType would be needed. All these > bytecodes can > work properly with the old fashioned CONSTANT_Class_info. For bytecodes like > new, defaultvalue, > anewarray, multianewarray, the class is loaded, so verifications are > performed at runtime > (for instance, new can throw an InstantiationError if the loaded type is an > inline type), > and layout information are available to allocate structures likes arrays. > > The Q-signature is used as a marker for inline types > (null-free/immutable/identity-free), > but also as a pre-loading and eager-loading signal. The places where it is > used as such a > signal are the descriptors in field_info and method_info, which point > directly to an > Utf8 entry. > > CONSTANT_Class_info is also used for the this_class and super_class fields at > the classfile > top-level structure. In both cases, there’s no need to have a ReferenceType: > no distinction > is needed, and these types are loaded anyway, so verification is performed on > loaded types. > > Unless I’ve missed something, I would say that we are clear to return > CONSTANT_Class_info > to its pre-LW2 format, supporting only "binary class or interface name”. > > Fred > > >> On Apr 2, 2020, at 12:26, Brian Goetz <brian.go...@oracle.com> wrote: >> >> Hi Tobi; >> >> I don't have an answer for you offhand, but the current "eclair" model >> eliminates one of the reasons we needed the new syntax for C_Class -- that a >> class name could refer to two VM-level types. This is no longer the case; >> each VM type corresponds to exactly one classfile. >> >> The reason I can't give you an unqualified yes at this point is that I am >> not sure whether we still need to include a "Q" somewhere as a preload >> signal. When Q descriptors appear in certain places (e.g., field >> declarations), they generate load order constraints, and in other places, >> they generate nullity assumptions. >> >> I will leave it to Frederic to answer whether we have run out of reasons to >> need anything other than binary class names in C_Class structures. (It >> would be nice if we have!) >> >> On 4/1/2020 10:19 AM, Tobi Ajila wrote: >>> Hi Brian >>> >>> Thanks for the updated SoV docs. In section 4, it mentions: >>> >>>> In most cases, such as field descriptors and method descriptors, uses of >>>> C.ref is translated as LC$ref;, uses of C.val is translated as QC$val;, >>> >>> In the LW2 spec the `name_index` in `CONSTANT_Class_info` structures could >>> refer to "binary class or interface name" as well as "ReferenceType >>> descriptors" which referenced UTF8s with 'Q' descriptors. In LW2 >>> inline-types were both nullable and null-free so it was necessary to have >>> ReferenceType descriptors in order make a distinction in >>> CONSTANT_Class_info structures for things like allocating arrays. With the >>> new model inline-types can only be null-free, so will the >>> CONSTANT_Class_info structures be limited to binary class or interface >>> names? or will ReferenceType descriptors be used for inline-types? >>> >>> --Tobi >>> >>> "valhalla-spec-experts" <valhalla-spec-experts-boun...@openjdk.java.net> >>> wrote on 2020/03/27 03:59:38 PM: >>> >>>> From: Brian Goetz <brian.go...@oracle.com> >>>> To: valhalla-spec-experts <valhalla-spec-experts@openjdk.java.net> >>>> Date: 2020/03/27 03:59 PM >>>> Subject: [EXTERNAL] Updated SoV documents >>>> Sent by: "valhalla-spec-experts" <valhalla-spec-experts- >>>> boun...@openjdk.java.net> >>>> >>>> I've updated the SoV documents, including the new sections on VM >>>> model and translation: >>>> >>>> http://cr.openjdk.java.net/~briangoetz/valhalla/sov/01-background.html >>>> >>> >>> >> >