hg: valhalla/valhalla/langtools: Enhanced support for BytecodeMapping attribute

Remi Forax forax at univ-mlv.fr
Fri Aug 8 21:46:53 UTC 2014


On 08/08/2014 11:09 PM, Maurizio Cimadamore wrote:
>
> On 08/08/14 21:49, Remi Forax wrote:
>> Hi Maurizio,
>> why invokestatic (and invokedynamic) are not supported ?
> For now the implementation tags the invokeXYZ opcodes that could point 
> to 'stale' descriptors in the CP - i.e. method descriptors whose 
> 'owner' is bound to change after class specialization. Under this 
> assumption, I believe that calling a static method should not require 
> any mangling - i.e. class statics should probably continue to live in 
> the main unspecialized class (handwaving).

even if it's a generics static method:
class A<any T> {
   T t;
   void foo() {
     bar(t);
   }
   static <any T> void bar(T t) {
     ...
   }
}

>
> A bit of the same holds for indy - the descriptor generated for an 
> indy does not have a direct correspondence with the source code - i.e. 
> it is a synthetic descriptor that is only used for the purpose of 
> describing the types of the dynamic arguments. It is possible that, if 
> we decide to implement specialized generic methods with indy, that 
> might change in the future.

I don't think that javac can currently generate a code that use indy and 
need to be specialized but
the descriptor of indy is verified by the verifier like any other 
descriptors so it's not something that comes from the vacuum.
Currently, indy is used by lambda/method ref, if we one day support 
lambda with a generics signature or wunderbar '_' in method reference,
both will require to be able to specialized indy.

>
> Maurizio

Rémi

>>
>> Rémi
>>
>> On 08/08/2014 06:20 PM, maurizio.cimadamore at oracle.com wrote:
>>> Changeset: 7904f37d7d98
>>> Author:    mcimadamore
>>> Date:      2014-08-08 17:16 +0100
>>> URL: 
>>> http://hg.openjdk.java.net/valhalla/valhalla/langtools/rev/7904f37d7d98
>>>
>>> Enhanced support for BytecodeMapping attribute
>>> *) new opcodes supported: 
>>> putfield/getfield/invokespecial/invokevirtual/invokeinterface
>>> *) Add test harness to check correctness of BytecodeMapping attributes
>>> *) Add javap support for BytecodeMapping and TypeVariablesMap
>>> *) Fix bug in SpecializeTypes where super symbol was not being 
>>> replaced correctly
>>> *) Fix missing call to 'synthetizeIfMissing' in SymTab (for 
>>> VarHandle related classes)
>>>
>>> ! src/share/classes/com/sun/tools/classfile/Attribute.java
>>> + 
>>> src/share/classes/com/sun/tools/classfile/BytecodeMapping_attribute.java 
>>>
>>> ! src/share/classes/com/sun/tools/classfile/ClassWriter.java
>>> + 
>>> src/share/classes/com/sun/tools/classfile/TypeVariablesMap_attribute.java
>>> ! src/share/classes/com/sun/tools/javac/code/Symtab.java
>>> ! src/share/classes/com/sun/tools/javac/comp/SpecializeTypes.java
>>> ! src/share/classes/com/sun/tools/javac/jvm/Gen.java
>>> ! src/share/classes/com/sun/tools/javac/jvm/Items.java
>>> ! src/share/classes/com/sun/tools/javap/AttributeWriter.java
>>> ! test/tools/javac/MethodParameters/AttributeVisitor.java
>>> + test/tools/javac/valhalla/typespec/items/BytecodeMapping.java
>>> + test/tools/javac/valhalla/typespec/items/BytecodeMappingHarness.java
>>> + test/tools/javac/valhalla/typespec/items/Opcodes.java
>>> + test/tools/javac/valhalla/typespec/items/tests/TestAnyMembers.java
>>> + 
>>> test/tools/javac/valhalla/typespec/items/tests/TestArrayLoadAndStore.java
>>> + test/tools/javac/valhalla/typespec/items/tests/TestCmp.java
>>> + test/tools/javac/valhalla/typespec/items/tests/TestDup.java
>>> + test/tools/javac/valhalla/typespec/items/tests/TestLoadAndStore.java
>>> + test/tools/javac/valhalla/typespec/items/tests/TestPop.java
>>> + test/tools/javac/valhalla/typespec/items/tests/TestSuper.java
>>>
>>
>



More information about the valhalla-dev mailing list