changeset 22162:b5b0f3621f05

Sending invoke message first to give a chance to object oriented languages to properly dispatch this/self
author Jaroslav Tulach <jaroslav.tulach@oracle.com>
date Thu, 17 Sep 2015 11:12:45 +0200
parents e3c6cca3ef53
children 7a6719b66a74
files truffle/com.oracle.truffle.api.interop.java/src/com/oracle/truffle/api/interop/java/JavaInterop.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLObjectType.java
diffstat 2 files changed, 13 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api.interop.java/src/com/oracle/truffle/api/interop/java/JavaInterop.java	Wed Sep 16 21:32:52 2015 +0200
+++ b/truffle/com.oracle.truffle.api.interop.java/src/com/oracle/truffle/api/interop/java/JavaInterop.java	Thu Sep 17 11:12:45 2015 +0200
@@ -346,10 +346,18 @@
                     }
                     throw new IllegalStateException(attr + " cannot be invoked with " + args.length + " parameters");
                 }
-                List<Object> callArgs = new ArrayList<>(args.length + 1);
-                // callArgs.add(attr);
-                callArgs.addAll(Arrays.asList(args));
-                Object ret = message(Message.createExecute(callArgs.size()), attr, callArgs.toArray());
+                Object ret;
+                try {
+                    List<Object> callArgs = new ArrayList<>(args.length);
+                    callArgs.add(name);
+                    callArgs.addAll(Arrays.asList(args));
+                    ret = message(Message.createInvoke(callArgs.size()), obj, callArgs.toArray());
+                } catch (IllegalArgumentException ex) {
+                    List<Object> callArgs = new ArrayList<>(args.length + 1);
+                    // callArgs.add(attr);
+                    callArgs.addAll(Arrays.asList(args));
+                    ret = message(Message.createExecute(callArgs.size()), attr, callArgs.toArray());
+                }
                 return toJava(ret, method);
             }
             throw new IllegalStateException("Unknown message: " + message);
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLObjectType.java	Wed Sep 16 21:32:52 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLObjectType.java	Thu Sep 17 11:12:45 2015 +0200
@@ -111,7 +111,7 @@
 
     @Override
     public CallTarget accessInvoke(int argumentsLength) {
-        throw new UnsupportedOperationException();
+        return null;
     }
 
     @Override