# HG changeset patch # User Doug Simon # Date 1415276365 -3600 # Node ID c7e0405a35d83e256c63f306fef45d8e2e743cec # Parent 46e10fe1ade16aa76ba0d2845926b0b18b9099d4 added HotSpotObjectConstant.getClassLoader() diff -r 46e10fe1ade1 -r c7e0405a35d8 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java Thu Nov 06 13:18:23 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java Thu Nov 06 13:19:25 2014 +0100 @@ -34,4 +34,11 @@ JavaConstant uncompress(); + /** + * Gets the result of {@link Class#getClassLoader()} for the {@link Class} object represented by + * this constant. + * + * @return {@code null} if this constant does not represent a {@link Class} object + */ + JavaConstant getClassLoader(); } diff -r 46e10fe1ade1 -r c7e0405a35d8 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstantImpl.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstantImpl.java Thu Nov 06 13:18:23 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstantImpl.java Thu Nov 06 13:19:25 2014 +0100 @@ -94,6 +94,17 @@ return new HotSpotObjectConstantImpl(object, false); } + public JavaConstant getClassLoader() { + if (object instanceof Class) { + /* + * This is an intrinsic for getClassLoader0, which occurs after any security checks. We + * can't call that directly so just call getClassLoader. + */ + return HotSpotObjectConstantImpl.forObject(((Class) object).getClassLoader()); + } + return null; + } + @Override public boolean isNull() { return false; diff -r 46e10fe1ade1 -r c7e0405a35d8 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetClassLoader0Node.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetClassLoader0Node.java Thu Nov 06 13:18:23 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetClassLoader0Node.java Thu Nov 06 13:19:25 2014 +0100 @@ -22,6 +22,7 @@ */ package com.oracle.graal.hotspot.nodes; +import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.hotspot.meta.*; @@ -55,14 +56,10 @@ public Node canonical(CanonicalizerTool tool) { ValueNode javaClass = getJavaClass(); if (javaClass.isConstant()) { - Class c = (Class) HotSpotObjectConstantImpl.asObject(javaClass.asJavaConstant()); - if (c != null) { - /* - * This is an intrinsic for getClassLoader0, which occurs after any security checks. - * We can't call that directly so just call getClassLoader. - */ - ClassLoader classLoader = c.getClassLoader(); - return ConstantNode.forConstant(HotSpotObjectConstantImpl.forObject(classLoader), tool.getMetaAccess()); + HotSpotObjectConstant c = (HotSpotObjectConstant) javaClass.asJavaConstant(); + JavaConstant classLoader = c.getClassLoader(); + if (classLoader != null) { + return ConstantNode.forConstant(classLoader, tool.getMetaAccess()); } } return this;