diff graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLFunctionForeignAccess.java @ 21689:ed234a3178af

Behavior of null-like values is now part of the TCK
author Jaroslav Tulach <jaroslav.tulach@oracle.com>
date Wed, 03 Jun 2015 10:17:19 +0200
parents 3286fb5fea4a
children c76742cc2c6f
line wrap: on
line diff
--- a/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLFunctionForeignAccess.java	Tue Jun 02 21:15:59 2015 -0700
+++ b/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLFunctionForeignAccess.java	Wed Jun 03 10:17:19 2015 +0200
@@ -32,6 +32,7 @@
 import com.oracle.truffle.api.nodes.RootNode;
 import com.oracle.truffle.interop.ForeignAccessArguments;
 import com.oracle.truffle.interop.messages.Execute;
+import com.oracle.truffle.interop.messages.IsNull;
 import com.oracle.truffle.interop.messages.Receiver;
 import com.oracle.truffle.sl.nodes.call.SLDispatchNode;
 import com.oracle.truffle.sl.nodes.call.SLDispatchNodeGen;
@@ -55,6 +56,8 @@
     public CallTarget getAccess(Message tree) {
         if (Execute.create(Receiver.create(), 0).matchStructure(tree)) {
             return Truffle.getRuntime().createCallTarget(new SLForeignCallerRootNode());
+        } else if (IsNull.create(Receiver.create()).matchStructure(tree)) {
+            return Truffle.getRuntime().createCallTarget(new SLForeignNullCheckNode());
         } else {
             throw new UnsupportedMessageException(tree.toString() + " not supported");
         }
@@ -87,4 +90,11 @@
 
     }
 
+    private static class SLForeignNullCheckNode extends RootNode {
+        @Override
+        public Object execute(VirtualFrame frame) {
+            Object receiver = ForeignAccessArguments.getReceiver(frame.getArguments());
+            return SLNull.SINGLETON == receiver;
+        }
+    }
 }