# HG changeset patch # User Doug Simon # Date 1423575396 -3600 # Node ID 5b75ec42c975bee797579c5703f38b6af6a335c9 # Parent c75f5c9c8b6b082f6f1ffa57aa7cf10155f84116 added graph builder plugin for Class.cast() diff -r c75f5c9c8b6b -r 5b75ec42c975 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotGraphBuilderPluginsProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotGraphBuilderPluginsProvider.java Tue Feb 10 14:14:53 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotGraphBuilderPluginsProvider.java Tue Feb 10 14:36:36 2015 +0100 @@ -61,6 +61,20 @@ } }); + // Class.class + r = new Registration(plugins, metaAccess, Class.class); + r.register2("cast", Receiver.class, Object.class, new InvocationPlugin() { + public boolean apply(GraphBuilderContext builder, ValueNode rcvr, ValueNode object) { + if (rcvr.isConstant() && !rcvr.isNullConstant() && object.isConstant()) { + ResolvedJavaType type = builder.getConstantReflection().asJavaType(rcvr.asConstant()); + if (type != null && !type.isPrimitive() && type.isInstance(object.asJavaConstant())) { + builder.push(Kind.Object, object); + return true; + } + } + return false; + } + }); // StableOptionValue.class r = new Registration(plugins, metaAccess, StableOptionValue.class); r.register1("getValue", Receiver.class, new InvocationPlugin() {