Mercurial > hg > truffle
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