changeset 21461:2e6ce8d1d067

Warn about null arguments to snippets and allow recursive calls in snippets
author Tom Rodriguez <tom.rodriguez@oracle.com>
date Mon, 18 May 2015 16:51:01 -0700
parents 877d718f3ab2
children ac2694c465db
files graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java
diffstat 1 files changed, 9 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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;