# HG changeset patch # User Matthias Grimmer # Date 1449235926 -3600 # Node ID 6c8f146710d1baf8a691a3329e4fde2d9e3b55ec # Parent 0ca502f898ec4cb5e4d810d23320d2426d3700f5 Fix cross-langauge invoke/execute of SL functions diff -r 0ca502f898ec -r 6c8f146710d1 truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLObjectType.java --- 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 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 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; } }