src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/D
author dlong
Tue, 24 Apr 2018 09:04:57 -0700
changeset 49873 26ebfe8ce852
permissions -rw-r--r--
8199755: Update Graal Reviewed-by: kvn
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
49873
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
     1
diff --git a/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileBytecodeProvider.java b/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileBytecodeProvider.java
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
     2
index 88403c3..728297d 100644
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
     3
--- a/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileBytecodeProvider.java
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
     4
+++ b/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileBytecodeProvider.java
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
     5
@@ -138,7 +138,11 @@ public final class ClassfileBytecodeProvider implements BytecodeProvider {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
     6
         return classfile;
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
     7
     }
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
     8
 
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
     9
-    synchronized Class<?> resolveToClass(String descriptor) {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    10
+    Class<?> resolveToClass(String descriptor) {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    11
+        return resolveToClass(descriptor, false);
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    12
+    }
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    13
+
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    14
+    synchronized Class<?> resolveToClass(String descriptor, boolean initialize) {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    15
         Class<?> c = classes.get(descriptor);
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    16
         if (c == null) {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    17
             if (descriptor.length() == 1) {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    18
@@ -155,7 +159,7 @@ public final class ClassfileBytecodeProvider implements BytecodeProvider {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    19
                     name = descriptor.replace('/', '.');
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    20
                 }
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    21
                 try {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    22
-                    c = Class.forName(name, true, loader);
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    23
+                    c = Class.forName(name, initialize, loader);
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    24
                     classes.put(descriptor, c);
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    25
                 } catch (ClassNotFoundException e) {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    26
                     throw new NoClassDefFoundError(descriptor);
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    27
diff --git a/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileConstant.java b/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileConstant.java
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    28
index 087f78b..bde2dd4 100644
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    29
--- a/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileConstant.java
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    30
+++ b/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileConstant.java
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    31
@@ -70,8 +70,9 @@ abstract class ClassfileConstant {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    32
      * @param cp
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    33
      * @param index
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    34
      * @param opcode
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    35
+     * @param initialize
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    36
      */
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    37
-    public void loadReferencedType(ClassfileConstantPool cp, int index, int opcode) {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    38
+    public void loadReferencedType(ClassfileConstantPool cp, int index, int opcode, boolean initialize) {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    39
     }
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    40
 
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    41
     @Override
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    42
@@ -90,15 +91,19 @@ abstract class ClassfileConstant {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    43
         }
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    44
 
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    45
         @Override
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    46
-        public void loadReferencedType(ClassfileConstantPool cp, int index, int opcode) {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    47
-            resolve(cp);
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    48
+        public void loadReferencedType(ClassfileConstantPool cp, int index, int opcode, boolean initialize) {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    49
+            resolve(cp, initialize);
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    50
         }
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    51
 
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    52
         public ResolvedJavaType resolve(ClassfileConstantPool cp) throws GraalError {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    53
+            return resolve(cp, false /* initialize */);
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    54
+        }
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    55
+
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    56
+        public ResolvedJavaType resolve(ClassfileConstantPool cp, boolean initialize) throws GraalError {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    57
             if (type == null) {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    58
                 String typeDescriptor = cp.get(Utf8.class, nameIndex).value;
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    59
                 ClassfileBytecodeProvider context = cp.context;
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    60
-                type = context.metaAccess.lookupJavaType(context.resolveToClass(typeDescriptor));
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    61
+                type = context.metaAccess.lookupJavaType(context.resolveToClass(typeDescriptor, initialize));
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    62
             }
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    63
             return type;
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    64
         }
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    65
@@ -116,8 +121,8 @@ abstract class ClassfileConstant {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    66
         }
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    67
 
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    68
         @Override
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    69
-        public void loadReferencedType(ClassfileConstantPool cp, int index, int opcode) {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    70
-            cp.get(ClassRef.class, classIndex).loadReferencedType(cp, classIndex, opcode);
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    71
+        public void loadReferencedType(ClassfileConstantPool cp, int index, int opcode, boolean initialize) {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    72
+            cp.get(ClassRef.class, classIndex).loadReferencedType(cp, classIndex, opcode, initialize);
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    73
         }
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    74
     }
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    75
 
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    76
@@ -269,7 +274,7 @@ abstract class ClassfileConstant {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    77
         }
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    78
 
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    79
         @Override
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    80
-        public void loadReferencedType(ClassfileConstantPool cp, int index, int opcode) {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    81
+        public void loadReferencedType(ClassfileConstantPool cp, int index, int opcode, boolean initialize) {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    82
             throw new GraalError("Resolution of " + name + " constant pool entries not supported by " + ClassfileBytecodeProvider.class.getSimpleName());
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    83
         }
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    84
     }
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    85
diff --git a/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileConstantPool.java b/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileConstantPool.java
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    86
index 218df10..a54779b 100644
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    87
--- a/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileConstantPool.java
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    88
+++ b/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileConstantPool.java
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    89
@@ -133,11 +133,11 @@ class ClassfileConstantPool implements ConstantPool {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    90
     }
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    91
 
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    92
     @Override
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    93
-    public void loadReferencedType(int index, int opcode) {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    94
+    public void loadReferencedType(int index, int opcode, boolean initialize) {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    95
         if (opcode == Bytecodes.INVOKEDYNAMIC) {
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    96
             throw new GraalError("INVOKEDYNAMIC not supported by " + ClassfileBytecodeProvider.class.getSimpleName());
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    97
         }
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    98
-        entries[index].loadReferencedType(this, index, opcode);
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
    99
+        entries[index].loadReferencedType(this, index, opcode, initialize);
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
   100
     }
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
   101
 
26ebfe8ce852 8199755: Update Graal
dlong
parents:
diff changeset
   102
     @Override