diff graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/examples/RubyCall.java @ 20940:476374f3fe9a

Truffle-DSL: generate better polymorphic execute signatures
author Christian Humer <christian.humer@gmail.com>
date Tue, 14 Apr 2015 15:12:48 +0200
parents a79a3e467245
children
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/examples/RubyCall.java	Tue Apr 14 15:12:48 2015 +0200
+++ b/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/examples/RubyCall.java	Tue Apr 14 15:12:48 2015 +0200
@@ -96,12 +96,12 @@
 
     public static class RubyHeadNode extends ExampleNode {
 
-        @Child private RubyLookupNode lookup = RubyLookupNodeGen.create(null);
-        @Child private RubyDispatchNode dispatch = RubyDispatchNodeGen.create(null);
+        @Child private RubyLookupNode lookup = RubyLookupNodeGen.create();
+        @Child private RubyDispatchNode dispatch = RubyDispatchNodeGen.create();
 
         @Specialization
-        public Object doCall(VirtualFrame frame, Object receiverObject, Object methodName, Object blockObject, Object... argumentsObjects) {
-            InternalMethod method = lookup.executeLookup(frame, receiverObject, methodName);
+        public Object doCall(VirtualFrame frame, RubyObject receiverObject, Object methodName, Object blockObject, Object... argumentsObjects) {
+            InternalMethod method = lookup.executeLookup(receiverObject, methodName);
 
             Object[] packedArguments = new Object[argumentsObjects.length + 3];
             packedArguments[0] = method;
@@ -113,9 +113,9 @@
         }
     }
 
-    public abstract static class RubyLookupNode extends ExampleNode {
+    public abstract static class RubyLookupNode extends Node {
 
-        public abstract InternalMethod executeLookup(VirtualFrame frame, Object receiverObject, Object methodName);
+        public abstract InternalMethod executeLookup(RubyObject receiver, Object method);
 
         @Specialization(guards = "receiver.getRubyClass() == cachedClass", assumptions = "cachedClass.getDependentAssumptions()")
         protected static InternalMethod cachedLookup(RubyObject receiver, Object name, //
@@ -132,7 +132,7 @@
     }
 
     @ImportStatic(InternalMethod.class)
-    public abstract static class RubyDispatchNode extends ExampleNode {
+    public abstract static class RubyDispatchNode extends Node {
 
         public abstract Object executeDispatch(VirtualFrame frame, InternalMethod function, Object[] packedArguments);