|
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