|
40 | 40 | */ |
41 | 41 | package com.oracle.graal.python.nodes.expression; |
42 | 42 |
|
| 43 | +import com.oracle.graal.python.builtins.objects.PNone; |
43 | 44 | import com.oracle.graal.python.builtins.objects.cext.CExtNodes; |
44 | 45 | import com.oracle.graal.python.builtins.objects.cext.PythonNativeObject; |
45 | 46 | import com.oracle.graal.python.builtins.objects.ints.PInt; |
46 | 47 | import com.oracle.graal.python.nodes.PNode; |
47 | 48 | import com.oracle.truffle.api.dsl.Cached; |
48 | 49 | import com.oracle.truffle.api.dsl.Fallback; |
| 50 | +import com.oracle.truffle.api.dsl.ImportStatic; |
49 | 51 | import com.oracle.truffle.api.dsl.Specialization; |
| 52 | +import com.oracle.truffle.api.interop.ForeignAccess; |
| 53 | +import com.oracle.truffle.api.interop.Message; |
| 54 | +import com.oracle.truffle.api.interop.TruffleObject; |
| 55 | +import com.oracle.truffle.api.nodes.Node; |
50 | 56 |
|
| 57 | +@ImportStatic(Message.class) |
51 | 58 | public abstract class IsNode extends BinaryOpNode { |
52 | 59 | public static IsNode create(PNode left, PNode right) { |
53 | 60 | return IsNodeGen.create(left, right); |
@@ -171,6 +178,12 @@ boolean doNative(PythonNativeObject left, PythonNativeObject right, |
171 | 178 | return isNode.execute(left, right); |
172 | 179 | } |
173 | 180 |
|
| 181 | + @Specialization(guards = "isForeignObject(left)") |
| 182 | + boolean doForeignObject(TruffleObject left, @SuppressWarnings("unused") PNone none, |
| 183 | + @Cached("IS_NULL.createNode()") Node isNullNode) { |
| 184 | + return ForeignAccess.sendIsNull(isNullNode, left); |
| 185 | + } |
| 186 | + |
174 | 187 | @Fallback |
175 | 188 | boolean doGeneric(Object left, Object right) { |
176 | 189 | return left == right; |
|
0 commit comments