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;
         }
     }