Mercurial > hg > truffle
changeset 22438:6c8f146710d1
Fix cross-langauge invoke/execute of SL functions
author | Matthias Grimmer <grimmer@ssw.jku.at> |
---|---|
date | Fri, 04 Dec 2015 14:32:06 +0100 |
parents | 0ca502f898ec |
children | 50baaa7da8e8 |
files | truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLObjectType.java |
diffstat | 1 files changed, 12 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLObjectType.java Fri Dec 04 11:33:08 2015 +0100 +++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLObjectType.java Fri Dec 04 14:32:06 2015 +0100 @@ -147,14 +147,19 @@ public Object execute(VirtualFrame frame) { DynamicObject receiver = (DynamicObject) ForeignAccess.getReceiver(frame); String name = (String) ForeignAccess.getArguments(frame).get(0); - SLFunction function = (SLFunction) receiver.get(name); - List<Object> args = ForeignAccess.getArguments(frame); - Object[] arr = new Object[args.size() - 1]; - for (int i = 1; i < args.size(); i++) { - arr[i - 1] = fromForeignValue(args.get(i)); + Object property = receiver.get(name); + if (property instanceof SLFunction) { + SLFunction function = (SLFunction) property; + List<Object> args = ForeignAccess.getArguments(frame); + Object[] arr = new Object[args.size() - 1]; + for (int i = 1; i < args.size(); i++) { + arr[i - 1] = fromForeignValue(args.get(i)); + } + Object result = dispatch.executeDispatch(frame, function, arr); + return result; + } else { + throw new IllegalArgumentException(); } - Object result = dispatch.executeDispatch(frame, function, arr); - return result; } }