src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/HotSpotClassSubstitutions.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/HotSpotClassSubstitutions.java

Print this page




  22  */
  23 package org.graalvm.compiler.hotspot.replacements;
  24 
  25 import static org.graalvm.compiler.hotspot.GraalHotSpotVMConfig.INJECTED_VMCONFIG;
  26 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.ARRAY_KLASS_COMPONENT_MIRROR;
  27 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.KLASS_ACCESS_FLAGS_LOCATION;
  28 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.KLASS_MODIFIER_FLAGS_LOCATION;
  29 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.KLASS_SUPER_KLASS_LOCATION;
  30 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.arrayKlassComponentMirrorOffset;
  31 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.klassAccessFlagsOffset;
  32 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.klassIsArray;
  33 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.klassModifierFlagsOffset;
  34 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.klassSuperKlassOffset;
  35 
  36 import java.lang.reflect.Modifier;
  37 
  38 import org.graalvm.compiler.api.replacements.ClassSubstitution;
  39 import org.graalvm.compiler.api.replacements.MethodSubstitution;
  40 import org.graalvm.compiler.hotspot.word.KlassPointer;
  41 import org.graalvm.compiler.nodes.PiNode;

  42 
  43 // JaCoCo Exclude
  44 
  45 /**
  46  * Substitutions for {@link java.lang.Class} methods.
  47  */
  48 @ClassSubstitution(Class.class)
  49 public class HotSpotClassSubstitutions {
  50 
  51     @MethodSubstitution(isStatic = false)
  52     public static int getModifiers(final Class<?> thisObj) {
  53         KlassPointer klass = ClassGetHubNode.readClass(thisObj);
  54         if (klass.isNull()) {
  55             // Class for primitive type
  56             return Modifier.ABSTRACT | Modifier.FINAL | Modifier.PUBLIC;
  57         } else {
  58             return klass.readInt(klassModifierFlagsOffset(INJECTED_VMCONFIG), KLASS_MODIFIER_FLAGS_LOCATION);
  59         }
  60     }
  61 
  62     @MethodSubstitution(isStatic = false)
  63     public static boolean isInterface(final Class<?> thisObj) {
  64         KlassPointer klass = ClassGetHubNode.readClass(thisObj);
  65         if (klass.isNull()) {
  66             // Class for primitive type
  67             return false;
  68         } else {
  69             int accessFlags = klass.readInt(klassAccessFlagsOffset(INJECTED_VMCONFIG), KLASS_ACCESS_FLAGS_LOCATION);
  70             return (accessFlags & Modifier.INTERFACE) != 0;
  71         }
  72     }
  73 
  74     @MethodSubstitution(isStatic = false)
  75     public static boolean isArray(final Class<?> thisObj) {
  76         KlassPointer klass = ClassGetHubNode.readClass(thisObj);
  77         if (klass.isNull()) {
  78             // Class for primitive type
  79             return false;
  80         } else {
  81             return klassIsArray(klass);

  82         }
  83     }
  84 
  85     @MethodSubstitution(isStatic = false)
  86     public static boolean isPrimitive(final Class<?> thisObj) {
  87         KlassPointer klass = ClassGetHubNode.readClass(thisObj);
  88         return klass.isNull();
  89     }
  90 
  91     @MethodSubstitution(isStatic = false)
  92     public static Class<?> getSuperclass(final Class<?> thisObj) {
  93         KlassPointer klass = ClassGetHubNode.readClass(thisObj);
  94         if (!klass.isNull()) {
  95             int accessFlags = klass.readInt(klassAccessFlagsOffset(INJECTED_VMCONFIG), KLASS_ACCESS_FLAGS_LOCATION);

  96             if ((accessFlags & Modifier.INTERFACE) == 0) {
  97                 if (klassIsArray(klass)) {
  98                     return Object.class;
  99                 } else {
 100                     KlassPointer superKlass = klass.readKlassPointer(klassSuperKlassOffset(INJECTED_VMCONFIG), KLASS_SUPER_KLASS_LOCATION);
 101                     if (superKlass.isNull()) {
 102                         return null;
 103                     } else {
 104                         return readJavaMirror(superKlass);

 105                     }
 106                 }
 107             }
 108         } else {
 109             // Class for primitive type
 110         }
 111         return null;
 112     }
 113 
 114     public static Class<?> readJavaMirror(KlassPointer klass) {
 115         return PiNode.asNonNullClass(HubGetClassNode.readClass(klass));
 116     }
 117 
 118     @MethodSubstitution(isStatic = false)
 119     public static Class<?> getComponentType(final Class<?> thisObj) {
 120         KlassPointer klass = ClassGetHubNode.readClass(thisObj);
 121         if (!klass.isNull()) {
 122             if (klassIsArray(klass)) {
 123                 return PiNode.asNonNullClass(klass.readObject(arrayKlassComponentMirrorOffset(INJECTED_VMCONFIG), ARRAY_KLASS_COMPONENT_MIRROR));

 124             }
 125         } else {
 126             // Class for primitive type
 127         }
 128         return null;
 129     }
 130 }


  22  */
  23 package org.graalvm.compiler.hotspot.replacements;
  24 
  25 import static org.graalvm.compiler.hotspot.GraalHotSpotVMConfig.INJECTED_VMCONFIG;
  26 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.ARRAY_KLASS_COMPONENT_MIRROR;
  27 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.KLASS_ACCESS_FLAGS_LOCATION;
  28 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.KLASS_MODIFIER_FLAGS_LOCATION;
  29 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.KLASS_SUPER_KLASS_LOCATION;
  30 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.arrayKlassComponentMirrorOffset;
  31 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.klassAccessFlagsOffset;
  32 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.klassIsArray;
  33 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.klassModifierFlagsOffset;
  34 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.klassSuperKlassOffset;
  35 
  36 import java.lang.reflect.Modifier;
  37 
  38 import org.graalvm.compiler.api.replacements.ClassSubstitution;
  39 import org.graalvm.compiler.api.replacements.MethodSubstitution;
  40 import org.graalvm.compiler.hotspot.word.KlassPointer;
  41 import org.graalvm.compiler.nodes.PiNode;
  42 import org.graalvm.compiler.nodes.SnippetAnchorNode;
  43 
  44 // JaCoCo Exclude
  45 
  46 /**
  47  * Substitutions for {@link java.lang.Class} methods.
  48  */
  49 @ClassSubstitution(Class.class)
  50 public class HotSpotClassSubstitutions {
  51 
  52     @MethodSubstitution(isStatic = false)
  53     public static int getModifiers(final Class<?> thisObj) {
  54         KlassPointer klass = ClassGetHubNode.readClass(thisObj);
  55         if (klass.isNull()) {
  56             // Class for primitive type
  57             return Modifier.ABSTRACT | Modifier.FINAL | Modifier.PUBLIC;
  58         } else {
  59             return klass.readInt(klassModifierFlagsOffset(INJECTED_VMCONFIG), KLASS_MODIFIER_FLAGS_LOCATION);
  60         }
  61     }
  62 
  63     @MethodSubstitution(isStatic = false)
  64     public static boolean isInterface(final Class<?> thisObj) {
  65         KlassPointer klass = ClassGetHubNode.readClass(thisObj);
  66         if (klass.isNull()) {
  67             // Class for primitive type
  68             return false;
  69         } else {
  70             int accessFlags = klass.readInt(klassAccessFlagsOffset(INJECTED_VMCONFIG), KLASS_ACCESS_FLAGS_LOCATION);
  71             return (accessFlags & Modifier.INTERFACE) != 0;
  72         }
  73     }
  74 
  75     @MethodSubstitution(isStatic = false)
  76     public static boolean isArray(final Class<?> thisObj) {
  77         KlassPointer klass = ClassGetHubNode.readClass(thisObj);
  78         if (klass.isNull()) {
  79             // Class for primitive type
  80             return false;
  81         } else {
  82             KlassPointer klassNonNull = ClassGetHubNode.piCastNonNull(klass, SnippetAnchorNode.anchor());
  83             return klassIsArray(klassNonNull);
  84         }
  85     }
  86 
  87     @MethodSubstitution(isStatic = false)
  88     public static boolean isPrimitive(final Class<?> thisObj) {
  89         KlassPointer klass = ClassGetHubNode.readClass(thisObj);
  90         return klass.isNull();
  91     }
  92 
  93     @MethodSubstitution(isStatic = false)
  94     public static Class<?> getSuperclass(final Class<?> thisObj) {
  95         KlassPointer klass = ClassGetHubNode.readClass(thisObj);
  96         if (!klass.isNull()) {
  97             KlassPointer klassNonNull = ClassGetHubNode.piCastNonNull(klass, SnippetAnchorNode.anchor());
  98             int accessFlags = klassNonNull.readInt(klassAccessFlagsOffset(INJECTED_VMCONFIG), KLASS_ACCESS_FLAGS_LOCATION);
  99             if ((accessFlags & Modifier.INTERFACE) == 0) {
 100                 if (klassIsArray(klassNonNull)) {
 101                     return Object.class;
 102                 } else {
 103                     KlassPointer superKlass = klassNonNull.readKlassPointer(klassSuperKlassOffset(INJECTED_VMCONFIG), KLASS_SUPER_KLASS_LOCATION);
 104                     if (superKlass.isNull()) {
 105                         return null;
 106                     } else {
 107                         KlassPointer superKlassNonNull = ClassGetHubNode.piCastNonNull(superKlass, SnippetAnchorNode.anchor());
 108                         return HubGetClassNode.readClass(superKlassNonNull);
 109                     }
 110                 }
 111             }
 112         } else {
 113             // Class for primitive type
 114         }
 115         return null;
 116     }
 117 




 118     @MethodSubstitution(isStatic = false)
 119     public static Class<?> getComponentType(final Class<?> thisObj) {
 120         KlassPointer klass = ClassGetHubNode.readClass(thisObj);
 121         if (!klass.isNull()) {
 122             KlassPointer klassNonNull = ClassGetHubNode.piCastNonNull(klass, SnippetAnchorNode.anchor());
 123             if (klassIsArray(klassNonNull)) {
 124                 return PiNode.asNonNullClass(klassNonNull.readObject(arrayKlassComponentMirrorOffset(INJECTED_VMCONFIG), ARRAY_KLASS_COMPONENT_MIRROR));
 125             }
 126         } else {
 127             // Class for primitive type
 128         }
 129         return null;
 130     }
 131 }
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/HotSpotClassSubstitutions.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File