< prev index next >

test/compiler/jvmci/compilerToVM/ConstantPoolTestsHelper.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 21,137 **** * questions. * */ package compiler.jvmci.compilerToVM; import compiler.jvmci.common.testcases.MultipleImplementer2; import compiler.jvmci.common.testcases.MultipleImplementersInterface; import java.util.HashMap; import java.util.Map; /** * Class contains hard-coded constant pool tables for dummy classes used for * jdk.vm.ci.hotspot.CompilerToVM constant pool methods */ public class ConstantPoolTestsHelper { ! public enum ConstantTypes { ! CONSTANT_CLASS, ! CONSTANT_FIELDREF, ! CONSTANT_METHODREF, ! CONSTANT_INTERFACEMETHODREF, ! CONSTANT_STRING, ! CONSTANT_INTEGER, ! CONSTANT_FLOAT, ! CONSTANT_LONG, ! CONSTANT_DOUBLE, ! CONSTANT_NAMEANDTYPE, ! CONSTANT_UTF8, ! CONSTANT_METHODHANDLE, ! CONSTANT_METHODTYPE, ! CONSTANT_INVOKEDYNAMIC; ! } public enum DummyClasses { DUMMY_CLASS(MultipleImplementer2.class, CP_MAP_FOR_CLASS), DUMMY_INTERFACE(MultipleImplementersInterface.class, CP_MAP_FOR_INTERFACE); public final Class<?> klass; ! public final Map<Integer, ConstantPoolEntry> cp; ! DummyClasses(Class<?> klass, Map<Integer, ConstantPoolEntry> cp) { this.klass = klass; ! this.cp = cp; ! } } ! public static class ConstantPoolEntry { ! ! public final ConstantTypes type; ! public final Object value; ! public ConstantPoolEntry(ConstantTypes type, Object value) { ! this.type = type; ! this.value = value; } } ! private static final Map<Integer, ConstantPoolEntry> CP_MAP_FOR_CLASS = new HashMap<>(); static { ! CP_MAP_FOR_CLASS.put(1, new ConstantPoolEntry(ConstantTypes.CONSTANT_METHODREF, new int[]{22, 68})); ! CP_MAP_FOR_CLASS.put(2, new ConstantPoolEntry(ConstantTypes.CONSTANT_CLASS, 69)); ! CP_MAP_FOR_CLASS.put(3, new ConstantPoolEntry(ConstantTypes.CONSTANT_INTEGER, 2147483647)); ! CP_MAP_FOR_CLASS.put(4, new ConstantPoolEntry(ConstantTypes.CONSTANT_FIELDREF, new int[]{35, 70})); ! CP_MAP_FOR_CLASS.put(5, new ConstantPoolEntry(ConstantTypes.CONSTANT_LONG, 9223372036854775807L)); ! CP_MAP_FOR_CLASS.put(8, new ConstantPoolEntry(ConstantTypes.CONSTANT_FLOAT, 3.4028235E38F)); ! CP_MAP_FOR_CLASS.put(10, new ConstantPoolEntry(ConstantTypes.CONSTANT_DOUBLE, 1.7976931348623157E308D)); ! CP_MAP_FOR_CLASS.put(13, new ConstantPoolEntry(ConstantTypes.CONSTANT_STRING, 74)); ! CP_MAP_FOR_CLASS.put(22, new ConstantPoolEntry(ConstantTypes.CONSTANT_CLASS, 83)); ! CP_MAP_FOR_CLASS.put(23, new ConstantPoolEntry(ConstantTypes.CONSTANT_METHODREF, new int[]{22, 84})); ! CP_MAP_FOR_CLASS.put(24, new ConstantPoolEntry(ConstantTypes.CONSTANT_INTERFACEMETHODREF, new int[]{2, 85})); ! CP_MAP_FOR_CLASS.put(26, new ConstantPoolEntry(ConstantTypes.CONSTANT_INVOKEDYNAMIC, new int[]{0, 91})); ! CP_MAP_FOR_CLASS.put(29, new ConstantPoolEntry(ConstantTypes.CONSTANT_FIELDREF, new int[]{35, 94})); ! CP_MAP_FOR_CLASS.put(35, new ConstantPoolEntry(ConstantTypes.CONSTANT_CLASS, 100)); ! CP_MAP_FOR_CLASS.put(68, new ConstantPoolEntry(ConstantTypes.CONSTANT_NAMEANDTYPE, new int[]{54, 55})); ! CP_MAP_FOR_CLASS.put(70, new ConstantPoolEntry(ConstantTypes.CONSTANT_NAMEANDTYPE, new int[]{48, 37})); ! CP_MAP_FOR_CLASS.put(84, new ConstantPoolEntry(ConstantTypes.CONSTANT_NAMEANDTYPE, new int[]{59, 55})); ! CP_MAP_FOR_CLASS.put(85, new ConstantPoolEntry(ConstantTypes.CONSTANT_NAMEANDTYPE, new int[]{103, 63})); ! CP_MAP_FOR_CLASS.put(91, new ConstantPoolEntry(ConstantTypes.CONSTANT_NAMEANDTYPE, new int[]{106, 107})); ! CP_MAP_FOR_CLASS.put(94, new ConstantPoolEntry(ConstantTypes.CONSTANT_NAMEANDTYPE, new int[]{36, 37})); ! CP_MAP_FOR_CLASS.put(104, new ConstantPoolEntry(ConstantTypes.CONSTANT_METHODREF, new int[]{110, 111})); ! CP_MAP_FOR_CLASS.put(105, new ConstantPoolEntry(ConstantTypes.CONSTANT_METHODREF, new int[]{35, 112})); ! CP_MAP_FOR_CLASS.put(110, new ConstantPoolEntry(ConstantTypes.CONSTANT_CLASS, 113)); ! CP_MAP_FOR_CLASS.put(111, new ConstantPoolEntry(ConstantTypes.CONSTANT_NAMEANDTYPE, new int[]{114, 118})); ! CP_MAP_FOR_CLASS.put(112, new ConstantPoolEntry(ConstantTypes.CONSTANT_NAMEANDTYPE, new int[]{58, 55})); } ! private static final Map<Integer, ConstantPoolEntry> CP_MAP_FOR_INTERFACE = new HashMap<>(); static { ! CP_MAP_FOR_INTERFACE.put(1, new ConstantPoolEntry(ConstantTypes.CONSTANT_CLASS, 48)); ! CP_MAP_FOR_INTERFACE.put(5, new ConstantPoolEntry(ConstantTypes.CONSTANT_INTERFACEMETHODREF, new int[]{13, 52})); ! CP_MAP_FOR_INTERFACE.put(6, new ConstantPoolEntry(ConstantTypes.CONSTANT_CLASS, 53)); ! CP_MAP_FOR_INTERFACE.put(7, new ConstantPoolEntry(ConstantTypes.CONSTANT_INVOKEDYNAMIC, new int[]{0, 58})); ! CP_MAP_FOR_INTERFACE.put(8, new ConstantPoolEntry(ConstantTypes.CONSTANT_METHODREF, new int[]{6, 59})); ! CP_MAP_FOR_INTERFACE.put(9, new ConstantPoolEntry(ConstantTypes.CONSTANT_METHODREF, new int[]{6, 60})); ! CP_MAP_FOR_INTERFACE.put(12, new ConstantPoolEntry(ConstantTypes.CONSTANT_FIELDREF, new int[]{13, 63})); ! CP_MAP_FOR_INTERFACE.put(13, new ConstantPoolEntry(ConstantTypes.CONSTANT_CLASS, 64)); ! CP_MAP_FOR_INTERFACE.put(17, new ConstantPoolEntry(ConstantTypes.CONSTANT_INTEGER, 2147483647)); ! CP_MAP_FOR_INTERFACE.put(20, new ConstantPoolEntry(ConstantTypes.CONSTANT_LONG, 9223372036854775807l)); ! CP_MAP_FOR_INTERFACE.put(24, new ConstantPoolEntry(ConstantTypes.CONSTANT_FLOAT, 3.4028235E38f)); ! CP_MAP_FOR_INTERFACE.put(27, new ConstantPoolEntry(ConstantTypes.CONSTANT_DOUBLE, 1.7976931348623157E308d)); ! CP_MAP_FOR_INTERFACE.put(31, new ConstantPoolEntry(ConstantTypes.CONSTANT_STRING, 65)); ! CP_MAP_FOR_INTERFACE.put(52, new ConstantPoolEntry(ConstantTypes.CONSTANT_NAMEANDTYPE, new int[]{34, 35})); ! CP_MAP_FOR_INTERFACE.put(55, new ConstantPoolEntry(ConstantTypes.CONSTANT_METHODHANDLE, new int[]{6, 67})); ! CP_MAP_FOR_INTERFACE.put(56, new ConstantPoolEntry(ConstantTypes.CONSTANT_METHODTYPE, 35)); ! CP_MAP_FOR_INTERFACE.put(57, new ConstantPoolEntry(ConstantTypes.CONSTANT_METHODHANDLE, new int[]{9, 5})); ! CP_MAP_FOR_INTERFACE.put(58, new ConstantPoolEntry(ConstantTypes.CONSTANT_NAMEANDTYPE, new int[]{68, 69})); ! CP_MAP_FOR_INTERFACE.put(59, new ConstantPoolEntry(ConstantTypes.CONSTANT_NAMEANDTYPE, new int[]{70, 71})); ! CP_MAP_FOR_INTERFACE.put(60, new ConstantPoolEntry(ConstantTypes.CONSTANT_NAMEANDTYPE, new int[]{72, 35})); ! CP_MAP_FOR_INTERFACE.put(63, new ConstantPoolEntry(ConstantTypes.CONSTANT_NAMEANDTYPE, new int[]{32, 33})); ! CP_MAP_FOR_INTERFACE.put(67, new ConstantPoolEntry(ConstantTypes.CONSTANT_METHODREF, new int[]{73, 74})); ! CP_MAP_FOR_INTERFACE.put(73, new ConstantPoolEntry(ConstantTypes.CONSTANT_CLASS, 75)); ! CP_MAP_FOR_INTERFACE.put(74, new ConstantPoolEntry(ConstantTypes.CONSTANT_NAMEANDTYPE, new int[]{76, 80})); ! CP_MAP_FOR_INTERFACE.put(77, new ConstantPoolEntry(ConstantTypes.CONSTANT_CLASS, 82)); } } --- 21,479 ---- * questions. * */ package compiler.jvmci.compilerToVM; + import compiler.jvmci.common.testcases.MultipleAbstractImplementer; import compiler.jvmci.common.testcases.MultipleImplementer2; import compiler.jvmci.common.testcases.MultipleImplementersInterface; + import compiler.jvmci.compilerToVM.ConstantPoolTestCase.ConstantTypes; + import static compiler.jvmci.compilerToVM.ConstantPoolTestCase.ConstantTypes.*; + import compiler.jvmci.compilerToVM.ConstantPoolTestCase.TestedCPEntry; import java.util.HashMap; import java.util.Map; + import jdk.internal.misc.SharedSecrets; + import jdk.internal.org.objectweb.asm.Opcodes; + import sun.hotspot.WhiteBox; + import sun.reflect.ConstantPool; + import sun.reflect.ConstantPool.Tag; /** * Class contains hard-coded constant pool tables for dummy classes used for * jdk.vm.ci.hotspot.CompilerToVM constant pool methods */ public class ConstantPoolTestsHelper { ! public static final int NO_CP_CACHE_PRESENT = Integer.MAX_VALUE; public enum DummyClasses { DUMMY_CLASS(MultipleImplementer2.class, CP_MAP_FOR_CLASS), + DUMMY_ABS_CLASS(MultipleAbstractImplementer.class, CP_MAP_FOR_ABS_CLASS), DUMMY_INTERFACE(MultipleImplementersInterface.class, CP_MAP_FOR_INTERFACE); + private static final WhiteBox WB = WhiteBox.getWhiteBox(); public final Class<?> klass; ! public final ConstantPool constantPoolSS; ! public final Map<ConstantTypes, TestedCPEntry[]> testedCP; ! DummyClasses(Class<?> klass, Map<ConstantTypes, TestedCPEntry[]> testedCP) { this.klass = klass; ! this.constantPoolSS = SharedSecrets.getJavaLangAccess().getConstantPool(klass); ! this.testedCP = testedCP; } ! public int getCPCacheIndex(int cpi) { ! int cacheLength = WB.getConstantPoolCacheLength(this.klass); ! int indexTag = WB.getConstantPoolCacheIndexTag(); ! for (int cpci = indexTag; cpci < cacheLength + indexTag; cpci++) { ! if (WB.remapInstructionOperandFromCPCache(this.klass, cpci) == cpi) { ! if (constantPoolSS.getTagAt(cpi).equals(Tag.INVOKEDYNAMIC)) { ! return WB.encodeConstantPoolIndyIndex(cpci) + indexTag; ! } ! return cpci; ! } ! } ! return NO_CP_CACHE_PRESENT; ! } ! } ! private static final Map<ConstantTypes, TestedCPEntry[]> CP_MAP_FOR_CLASS = new HashMap<>(); ! static { ! CP_MAP_FOR_CLASS.put(CONSTANT_CLASS, ! new TestedCPEntry[] { ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleImplementersInterface", null, null), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleImplementer2", null, null), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleImplementer2$1", null, null), ! new TestedCPEntry("java/lang/invoke/MethodHandles$Lookup", null, null), ! } ! ); ! CP_MAP_FOR_CLASS.put(CONSTANT_FIELDREF, ! new TestedCPEntry[] { ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleImplementer2", ! "intStaticField", ! "I", ! new byte[] {(byte) Opcodes.PUTSTATIC, (byte) Opcodes.GETSTATIC}, ! Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleImplementer2", ! "longStaticField", ! "J", ! new byte[] {(byte) Opcodes.PUTSTATIC, (byte) Opcodes.GETSTATIC}, ! Opcodes.ACC_FINAL | Opcodes.ACC_STATIC), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleImplementer2", ! "floatStaticField", ! "F", ! new byte[] {(byte) Opcodes.PUTSTATIC, (byte) Opcodes.GETSTATIC}, ! Opcodes.ACC_VOLATILE | Opcodes.ACC_STATIC), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleImplementer2", ! "doubleStaticField", ! "D", ! new byte[] {(byte) Opcodes.PUTSTATIC, (byte) Opcodes.GETSTATIC}, ! Opcodes.ACC_STATIC), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleImplementer2", ! "stringStaticField", ! "Ljava/lang/String;", ! new byte[] {(byte) Opcodes.PUTSTATIC, (byte) Opcodes.GETSTATIC}, ! Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleImplementer2", ! "objectStaticField", ! "Ljava/lang/Object;", ! new byte[] {(byte) Opcodes.PUTSTATIC, (byte) Opcodes.GETSTATIC}, ! Opcodes.ACC_PROTECTED | Opcodes.ACC_STATIC), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleImplementer2", ! "intField", ! "I", ! new byte[] {(byte) Opcodes.PUTFIELD | (byte) Opcodes.GETFIELD}, ! Opcodes.ACC_PUBLIC), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleImplementer2", ! "longField", ! "J", ! new byte[] {(byte) Opcodes.PUTFIELD | (byte) Opcodes.GETFIELD}, ! Opcodes.ACC_PRIVATE), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleImplementer2", ! "floatField", ! "F", ! new byte[] {(byte) Opcodes.PUTFIELD | (byte) Opcodes.GETFIELD}, ! Opcodes.ACC_PROTECTED), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleImplementer2", ! "doubleField", ! "D", ! new byte[] {(byte) Opcodes.PUTFIELD | (byte) Opcodes.GETFIELD}, ! Opcodes.ACC_TRANSIENT), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleImplementer2", ! "objectField", ! "Ljava/lang/Object;", ! new byte[] {(byte) Opcodes.PUTFIELD | (byte) Opcodes.GETFIELD}, ! Opcodes.ACC_FINAL), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleImplementer2", ! "stringField", ! "Ljava/lang/String;", ! new byte[] {(byte) Opcodes.PUTFIELD | (byte) Opcodes.GETFIELD}, ! Opcodes.ACC_VOLATILE), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleImplementer2", ! "stringFieldEmpty", ! "Ljava/lang/String;", ! new byte[] {(byte) Opcodes.PUTFIELD | (byte) Opcodes.GETFIELD}, ! 0L), ! } ! ); ! CP_MAP_FOR_CLASS.put(CONSTANT_METHODREF, ! new TestedCPEntry[] { ! new TestedCPEntry("java/lang/System", ! "getProperties", ! "()Ljava/util/Properties;", ! new byte[] {(byte) Opcodes.INVOKESTATIC}), ! new TestedCPEntry("java/util/HashMap", ! "<init>", ! "()V", ! new byte[] {(byte) Opcodes.INVOKESPECIAL}), ! new TestedCPEntry("java/lang/Object", ! "toString", ! "()Ljava/lang/String;", ! new byte[] {(byte) Opcodes.INVOKESPECIAL, ! (byte) Opcodes.INVOKEVIRTUAL}), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleImplementer2$1", ! "<init>", ! "(Lcompiler/jvmci/common/testcases/MultipleImplementer2;)V", ! new byte[0]), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleAbstractImplementer$1", ! "run", ! "()V", ! new byte[0]), ! } ! ); ! CP_MAP_FOR_CLASS.put(CONSTANT_INTERFACEMETHODREF, ! new TestedCPEntry[] { ! new TestedCPEntry("java/util/Map", ! "put", ! "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", ! new byte[] {(byte) Opcodes.INVOKEINTERFACE}), ! new TestedCPEntry("java/util/Map", ! "remove", ! "(Ljava/lang/Object;)Ljava/lang/Object;", ! new byte[] {(byte) Opcodes.INVOKEINTERFACE}), ! } ! ); ! CP_MAP_FOR_CLASS.put(CONSTANT_STRING, ! new TestedCPEntry[] { ! new TestedCPEntry(null, "Message", null), ! new TestedCPEntry(null, "", null), ! } ! ); ! CP_MAP_FOR_CLASS.put(CONSTANT_METHODHANDLE, ! new TestedCPEntry[] { ! new TestedCPEntry("java/lang/invoke/LambdaMetafactory", ! "metafactory", ! "(Ljava/lang/invoke/MethodHandles$Lookup;" ! + "Ljava/lang/String;" ! + "Ljava/lang/invoke/MethodType;" ! + "Ljava/lang/invoke/MethodType;" ! + "Ljava/lang/invoke/MethodHandle;" ! + "Ljava/lang/invoke/MethodType;)" ! + "Ljava/lang/invoke/CallSite;", ! null), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleImplementer2", ! "testMethod", ! "()V"), ! } ! ); ! CP_MAP_FOR_CLASS.put(CONSTANT_METHODTYPE, ! new TestedCPEntry[] { ! new TestedCPEntry(null, null, "()V"), ! } ! ); ! CP_MAP_FOR_CLASS.put(CONSTANT_INVOKEDYNAMIC, ! new TestedCPEntry[] { ! new TestedCPEntry(null, ! "run", ! "(Lcompiler/jvmci/common/testcases/MultipleImplementer2;)" ! + "Ljava/lang/Runnable;"), } + ); } ! private static final Map<ConstantTypes, TestedCPEntry[]> CP_MAP_FOR_ABS_CLASS = new HashMap<>(); static { ! CP_MAP_FOR_ABS_CLASS.put(CONSTANT_CLASS, ! new TestedCPEntry[] { ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleImplementersInterface", null, null), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleAbstractImplementer", null, null), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleAbstractImplementer$1", null, null), ! new TestedCPEntry("java/lang/invoke/MethodHandles$Lookup", null, null), ! } ! ); ! CP_MAP_FOR_ABS_CLASS.put(CONSTANT_FIELDREF, ! new TestedCPEntry[] { ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleAbstractImplementer", ! "intStaticField", ! "I", ! new byte[] {(byte) Opcodes.PUTSTATIC, (byte) Opcodes.GETSTATIC}, ! Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleAbstractImplementer", ! "longStaticField", ! "J", ! new byte[] {(byte) Opcodes.PUTSTATIC, (byte) Opcodes.GETSTATIC}, ! Opcodes.ACC_FINAL | Opcodes.ACC_STATIC), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleAbstractImplementer", ! "floatStaticField", ! "F", ! new byte[] {(byte) Opcodes.PUTSTATIC, (byte) Opcodes.GETSTATIC}, ! Opcodes.ACC_VOLATILE | Opcodes.ACC_STATIC), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleAbstractImplementer", ! "doubleStaticField", ! "D", ! new byte[] {(byte) Opcodes.PUTSTATIC, (byte) Opcodes.GETSTATIC}, ! Opcodes.ACC_STATIC), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleAbstractImplementer", ! "stringStaticField", ! "Ljava/lang/String;", ! new byte[] {(byte) Opcodes.PUTSTATIC, (byte) Opcodes.GETSTATIC}, ! Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleAbstractImplementer", ! "objectStaticField", ! "Ljava/lang/Object;", ! new byte[] {(byte) Opcodes.PUTSTATIC, (byte) Opcodes.GETSTATIC}, ! Opcodes.ACC_PROTECTED | Opcodes.ACC_STATIC), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleAbstractImplementer", ! "intField", ! "I", ! new byte[] {(byte) Opcodes.PUTFIELD | (byte) Opcodes.GETFIELD}, ! Opcodes.ACC_PUBLIC), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleAbstractImplementer", ! "longField", ! "J", ! new byte[] {(byte) Opcodes.PUTFIELD | (byte) Opcodes.GETFIELD}, ! Opcodes.ACC_PRIVATE), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleAbstractImplementer", ! "floatField", ! "F", ! new byte[] {(byte) Opcodes.PUTFIELD | (byte) Opcodes.GETFIELD}, ! Opcodes.ACC_PROTECTED), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleAbstractImplementer", ! "doubleField", ! "D", ! new byte[] {(byte) Opcodes.PUTFIELD | (byte) Opcodes.GETFIELD}, ! Opcodes.ACC_TRANSIENT), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleAbstractImplementer", ! "objectField", ! "Ljava/lang/Object;", ! new byte[] {(byte) Opcodes.PUTFIELD | (byte) Opcodes.GETFIELD}, ! Opcodes.ACC_FINAL), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleAbstractImplementer", ! "stringField", ! "Ljava/lang/String;", ! new byte[] {(byte) Opcodes.PUTFIELD | (byte) Opcodes.GETFIELD}, ! Opcodes.ACC_VOLATILE), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleAbstractImplementer", ! "stringFieldEmpty", ! "Ljava/lang/String;", ! new byte[] {(byte) Opcodes.PUTFIELD | (byte) Opcodes.GETFIELD}, ! 0L), ! } ! ); ! CP_MAP_FOR_ABS_CLASS.put(CONSTANT_METHODREF, ! new TestedCPEntry[] { ! new TestedCPEntry("java/lang/System", ! "getProperties", ! "()Ljava/util/Properties;", ! new byte[] {(byte) Opcodes.INVOKESTATIC}), ! new TestedCPEntry("java/util/HashMap", ! "<init>", ! "()V", ! new byte[] {(byte) Opcodes.INVOKESPECIAL}), ! new TestedCPEntry("java/lang/Object", ! "toString", ! "()Ljava/lang/String;", ! new byte[] {(byte) Opcodes.INVOKESPECIAL, ! (byte) Opcodes.INVOKEVIRTUAL}), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleAbstractImplementer$1", ! "<init>", ! "(Lcompiler/jvmci/common/testcases/MultipleAbstractImplementer;)V", ! new byte[0]), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleAbstractImplementer$1", ! "run", ! "()V", ! new byte[0]), ! } ! ); ! CP_MAP_FOR_ABS_CLASS.put(CONSTANT_INTERFACEMETHODREF, ! new TestedCPEntry[] { ! new TestedCPEntry("java/util/Map", ! "put", ! "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", ! new byte[] {(byte) Opcodes.INVOKEINTERFACE}), ! new TestedCPEntry("java/util/Map", ! "remove", ! "(Ljava/lang/Object;)Ljava/lang/Object;", ! new byte[] {(byte) Opcodes.INVOKEINTERFACE}), ! } ! ); ! CP_MAP_FOR_ABS_CLASS.put(CONSTANT_STRING, ! new TestedCPEntry[] { ! new TestedCPEntry(null, "Message", null), ! new TestedCPEntry(null, "", null), ! } ! ); ! CP_MAP_FOR_ABS_CLASS.put(CONSTANT_METHODHANDLE, ! new TestedCPEntry[] { ! new TestedCPEntry("java/lang/invoke/LambdaMetafactory", ! "metafactory", ! "(Ljava/lang/invoke/MethodHandles$Lookup;" ! + "Ljava/lang/String;" ! + "Ljava/lang/invoke/MethodType;" ! + "Ljava/lang/invoke/MethodType;" ! + "Ljava/lang/invoke/MethodHandle;" ! + "Ljava/lang/invoke/MethodType;)" ! + "Ljava/lang/invoke/CallSite;", ! null), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleAbstractImplementer", ! "testMethod", ! "()V"), ! } ! ); ! CP_MAP_FOR_ABS_CLASS.put(CONSTANT_METHODTYPE, ! new TestedCPEntry[] { ! new TestedCPEntry(null, null, "()V"), ! } ! ); ! CP_MAP_FOR_ABS_CLASS.put(CONSTANT_INVOKEDYNAMIC, ! new TestedCPEntry[] { ! new TestedCPEntry(null, ! "run", ! "(Lcompiler/jvmci/common/testcases/MultipleAbstractImplementer;)" ! + "Ljava/lang/Runnable;"), ! } ! ); } ! private static final Map<ConstantTypes, TestedCPEntry[]> CP_MAP_FOR_INTERFACE = new HashMap<>(); static { ! CP_MAP_FOR_INTERFACE.put(CONSTANT_CLASS, ! new TestedCPEntry[] { ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleImplementersInterface", null, null), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleImplementersInterface$1", null, null), ! new TestedCPEntry("java/lang/Object", null, null), ! new TestedCPEntry("java/lang/invoke/MethodHandles$Lookup", null, null), ! } ! ); ! CP_MAP_FOR_INTERFACE.put(CONSTANT_FIELDREF, ! new TestedCPEntry[] { ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleImplementersInterface", ! "OBJECT_CONSTANT", ! "Ljava/lang/Object;", ! new byte[] {(byte) Opcodes.PUTSTATIC, (byte) Opcodes.GETSTATIC}, ! Opcodes.ACC_STATIC | Opcodes.ACC_FINAL | Opcodes.ACC_PUBLIC), ! } ! ); ! CP_MAP_FOR_INTERFACE.put(CONSTANT_METHODREF, ! new TestedCPEntry[] { ! new TestedCPEntry("java/lang/System", ! "getProperties", ! "()Ljava/util/Properties;", ! new byte[] {(byte) Opcodes.INVOKESTATIC}), ! new TestedCPEntry("java/util/HashMap", ! "<init>", ! "()V", ! new byte[] {(byte) Opcodes.INVOKESPECIAL}), ! new TestedCPEntry("java/lang/Object", ! "toString", ! "()Ljava/lang/String;", ! new byte[] {(byte) Opcodes.INVOKEVIRTUAL}), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleAbstractImplementer$1", ! "<init>", ! "(Lcompiler/jvmci/common/testcases/MultipleAbstractImplementer;)V", ! new byte[0]), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleAbstractImplementer$1", ! "run", ! "()V", ! new byte[0]), ! } ! ); ! CP_MAP_FOR_INTERFACE.put(CONSTANT_INTERFACEMETHODREF, ! new TestedCPEntry[] { ! new TestedCPEntry("java/util/Map", ! "put", ! "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", ! new byte[] {(byte) Opcodes.INVOKEINTERFACE}), ! new TestedCPEntry("java/util/Map", ! "remove", ! "(Ljava/lang/Object;)Ljava/lang/Object;", ! new byte[] {(byte) Opcodes.INVOKEINTERFACE}), ! } ! ); ! CP_MAP_FOR_INTERFACE.put(CONSTANT_STRING, ! new TestedCPEntry[] { ! new TestedCPEntry(null, "Hello", null), ! new TestedCPEntry(null, "", null), ! } ! ); ! CP_MAP_FOR_INTERFACE.put(CONSTANT_METHODHANDLE, ! new TestedCPEntry[] { ! new TestedCPEntry("java/lang/invoke/LambdaMetafactory", ! "metafactory", ! "(Ljava/lang/invoke/MethodHandles$Lookup;" ! + "Ljava/lang/String;Ljava/lang/invoke/MethodType;" ! + "Ljava/lang/invoke/MethodType;" ! + "Ljava/lang/invoke/MethodHandle;" ! + "Ljava/lang/invoke/MethodType;)" ! + "Ljava/lang/invoke/CallSite;"), ! new TestedCPEntry("compiler/jvmci/common/testcases/MultipleImplementersInterface", ! "defaultMethod", ! "()V"), ! } ! ); ! CP_MAP_FOR_INTERFACE.put(CONSTANT_METHODTYPE, ! new TestedCPEntry[] { ! new TestedCPEntry(null, null, "()V"), ! } ! ); ! CP_MAP_FOR_INTERFACE.put(CONSTANT_INVOKEDYNAMIC, ! new TestedCPEntry[] { ! new TestedCPEntry(null, ! "run", ! "(Lcompiler/jvmci/common/testcases/MultipleImplementersInterface;)" ! + "Ljava/lang/Runnable;"), ! } ! ); } }
< prev index next >