# HG changeset patch # User Tom Rodriguez # Date 1431993061 25200 # Node ID 2e6ce8d1d067664c4fb73da8049e181c4027f6ab # Parent 877d718f3ab2ed1f0e06081b652b65bb3b8c1854 Warn about null arguments to snippets and allow recursive calls in snippets diff -r 877d718f3ab2 -r 2e6ce8d1d067 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java Mon May 18 14:57:05 2015 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java Mon May 18 16:51:01 2015 -0700 @@ -87,6 +87,7 @@ public abstract static class SnippetInfo { protected final ResolvedJavaMethod method; + protected ResolvedJavaMethod original; protected final LocationIdentity[] privateLocations; /** @@ -175,6 +176,10 @@ return lazy().constantParameters.length; } + public void setOriginalMethod(ResolvedJavaMethod original) { + this.original = original; + } + public boolean isConstantParameter(int paramIdx) { return lazy().constantParameters[paramIdx]; } @@ -263,6 +268,7 @@ } public Arguments addConst(String name, Object value) { + assert value != null; return addConst(name, value, null); } @@ -560,7 +566,7 @@ this.info = args.info; Object[] constantArgs = getConstantArgs(args); - StructuredGraph snippetGraph = providers.getReplacements().getSnippet(args.info.method, constantArgs); + StructuredGraph snippetGraph = providers.getReplacements().getSnippet(args.info.method, args.info.original, constantArgs); instantiationTimer = Debug.timer("SnippetTemplateInstantiationTime[%#s]", args); instantiationCounter = Debug.metric("SnippetTemplateInstantiationCount[%#s]", args); @@ -781,6 +787,8 @@ for (int i = 0; i < args.info.getParameterCount(); i++) { if (!args.info.isConstantParameter(i)) { constantArgs[i] = null; + } else { + assert constantArgs[i] != null : "Can't pass raw null through as argument"; } } return constantArgs;