# HG changeset patch # User Doug Simon # Date 1428485056 -7200 # Node ID a74c785068e0a34534da98219c58f0bbf8222942 # Parent 1f7ef92cb660baf27db97f8c4a96fa57ff236c1a converted @MethodSubstitutions for jString.equals to MethodSubstitutionPlugins diff -r 1f7ef92cb660 -r a74c785068e0 graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/MethodSubstitutionPlugin.java --- a/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/MethodSubstitutionPlugin.java Wed Apr 08 11:06:07 2015 +0200 +++ b/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/MethodSubstitutionPlugin.java Wed Apr 08 11:24:16 2015 +0200 @@ -149,7 +149,20 @@ @Override public boolean execute(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode[] argsIncludingReceiver) { ResolvedJavaMethod subst = getSubstitute(b.getMetaAccess()); + if (receiver != null) { + receiver.get(); + } b.intrinsify(targetMethod, subst, argsIncludingReceiver); return true; } + + public StackTraceElement getApplySourceLocation(MetaAccessProvider metaAccess) { + Class c = getClass(); + for (Method m : c.getDeclaredMethods()) { + if (m.getName().equals("execute")) { + return metaAccess.lookupJavaMethod(m).asStackTraceElement(0); + } + } + throw new GraalInternalError("could not find method named \"execute\" in " + c.getName()); + } } diff -r 1f7ef92cb660 -r a74c785068e0 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraalMethodSubstitutions.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraalMethodSubstitutions.java Wed Apr 08 11:06:07 2015 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraalMethodSubstitutions.java Wed Apr 08 11:24:16 2015 +0200 @@ -38,7 +38,6 @@ public void registerReplacements(MetaAccessProvider metaAccess, LoweringProvider loweringProvider, SnippetReflectionProvider snippetReflection, Replacements replacements, TargetDescription target) { if (Intrinsify.getValue()) { - replacements.registerSubstitutions(String.class, StringSubstitutions.class); replacements.registerSubstitutions(Math.class, MathSubstitutionsX86.class); } } diff -r 1f7ef92cb660 -r a74c785068e0 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/StandardGraphBuilderPlugins.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/StandardGraphBuilderPlugins.java Wed Apr 08 11:06:07 2015 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/StandardGraphBuilderPlugins.java Wed Apr 08 11:24:16 2015 +0200 @@ -96,7 +96,10 @@ } private static void registerStringPlugins(InvocationPlugins plugins) { - Registration r = new Registration(plugins, StringSubstitutions.class); + Registration r = new Registration(plugins, String.class); + r.registerMethodSubstitution(StringSubstitutions.class, "equals", Receiver.class, Object.class); + + r = new Registration(plugins, StringSubstitutions.class); r.register1("getValue", String.class, new InvocationPlugin() { public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode value) { ResolvedJavaField field = b.getMetaAccess().lookupJavaField(STRING_VALUE_FIELD); diff -r 1f7ef92cb660 -r a74c785068e0 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/StringSubstitutions.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/StringSubstitutions.java Wed Apr 08 11:06:07 2015 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/StringSubstitutions.java Wed Apr 08 11:24:16 2015 +0200 @@ -22,7 +22,6 @@ */ package com.oracle.graal.replacements; -import com.oracle.graal.api.replacements.*; import com.oracle.graal.graphbuilderconf.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.replacements.nodes.*; @@ -32,10 +31,8 @@ /** * Substitutions for {@link java.lang.String} methods. */ -@ClassSubstitution(value = java.lang.String.class) public class StringSubstitutions { - @MethodSubstitution(isStatic = false) @SuppressFBWarnings(value = "ES_COMPARING_PARAMETER_STRING_WITH_EQ", justification = "reference equality on the receiver is what we want") public static boolean equals(final String thisString, Object obj) { if (thisString == obj) {