diff truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/ForeignObjectAccessHeadNode.java @ 22135:e70b20f4bb00

Implementing API for Java/Truffle interop. Based around JavaInterop.asJavaObject and JavaInterop.asTruffleObject methods. Connected to TruffleVM via Symbol.as(Class) wrapper. Verified by extended TCK.
author Jaroslav Tulach <jaroslav.tulach@oracle.com>
date Mon, 07 Sep 2015 17:07:20 +0200
parents 9c8c0937da41
children dc83cc1f94f2
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/ForeignObjectAccessHeadNode.java	Fri Sep 04 16:41:38 2015 +0200
+++ b/truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/ForeignObjectAccessHeadNode.java	Mon Sep 07 17:07:20 2015 +0200
@@ -48,7 +48,25 @@
     }
 
     public Object executeForeign(VirtualFrame frame, TruffleObject receiver, Object... arguments) {
-        return first.executeWith(frame, receiver, arguments);
+        Object ret = first.executeWith(frame, receiver, arguments);
+        assert assertReturnValue(ret) : "Only primitive values or TruffleObject expected: " + ret;
+        return ret;
+    }
+
+    private static boolean assertReturnValue(Object ret) {
+        if (ret instanceof Number) {
+            return true;
+        }
+        if (ret instanceof String) {
+            return true;
+        }
+        if (ret instanceof Character) {
+            return true;
+        }
+        if (ret instanceof Boolean) {
+            return true;
+        }
+        return ret instanceof TruffleObject;
     }
 
 }