Mercurial > hg > truffle
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; + } + } }