Skip to content

Commit ef09009

Browse files
committed
[GR-62465] Add sq_contains slot
PullRequest: graalpython/3700
2 parents b6763d1 + 9cde923 commit ef09009

File tree

24 files changed

+299
-371
lines changed

24 files changed

+299
-371
lines changed

graalpython/com.oracle.graal.python.annotations/src/com/oracle/graal/python/annotations/Slot.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,8 @@ enum SlotKind {
177177
sq_inplace_concat("__iadd__"),
178178
/** seq *= seq */
179179
sq_inplace_repeat("__imul__"),
180+
/** item in seq **/
181+
sq_contains("__contains__"),
180182
/** mapping length */
181183
mp_length("__len__"),
182184
/** mapping subscript, e.g. o[key], o[i:j] */

graalpython/com.oracle.graal.python.processor/src/com/oracle/graal/python/processor/SlotsMapping.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ static String getSlotBaseClass(Slot s) {
6767
case sq_length, mp_length -> "TpSlotLen.TpSlotLenBuiltin" + getSuffix(s.isComplex());
6868
case sq_item, sq_repeat, sq_inplace_repeat -> "TpSlotSizeArgFun.TpSlotSizeArgFunBuiltin";
6969
case sq_ass_item -> "TpSlotSqAssItem.TpSlotSqAssItemBuiltin";
70+
case sq_contains -> "TpSlotSqContains.TpSlotSqContainsBuiltin";
7071
case mp_subscript -> "TpSlotBinaryFunc.TpSlotMpSubscript";
7172
case mp_ass_subscript -> "TpSlotMpAssSubscript.TpSlotMpAssSubscriptBuiltin";
7273
case tp_getattro -> "TpSlotGetAttr.TpSlotGetAttrBuiltin";
@@ -95,6 +96,7 @@ static String getSlotNodeBaseClass(Slot s) {
9596
case sq_item -> "com.oracle.graal.python.builtins.objects.type.slots.TpSlotSizeArgFun.SqItemBuiltinNode";
9697
case sq_ass_item -> "com.oracle.graal.python.builtins.objects.type.slots.TpSlotSqAssItem.SqAssItemBuiltinNode";
9798
case sq_repeat, sq_inplace_repeat -> "com.oracle.graal.python.builtins.objects.type.slots.TpSlotSizeArgFun.SqRepeatBuiltinNode";
99+
case sq_contains -> "com.oracle.graal.python.builtins.objects.type.slots.TpSlotSqContains.SqContainsBuiltinNode";
98100
case mp_subscript -> "com.oracle.graal.python.builtins.objects.type.slots.TpSlotBinaryFunc.MpSubscriptBuiltinNode";
99101
case mp_ass_subscript -> "com.oracle.graal.python.builtins.objects.type.slots.TpSlotMpAssSubscript.MpAssSubscriptBuiltinNode";
100102
case tp_getattro -> "com.oracle.graal.python.builtins.objects.type.slots.TpSlotGetAttr.GetAttrBuiltinNode";

graalpython/com.oracle.graal.python.test/src/tests/cpyext/test_tp_slots.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1336,9 +1336,8 @@ def __contains__(self, item):
13361336
for obj in [NativeSqSlotProxy([1]), NativeSqSlotProxy(PureSlotProxy([1]))]:
13371337
assert len(obj) == 1
13381338
assert bool(obj)
1339-
# TODO fix on graalpy
1340-
# assert 1 in obj
1341-
# assert 2 not in obj
1339+
assert 1 in obj
1340+
assert 2 not in obj
13421341

13431342
assert obj[0] == 1
13441343
assert_raises(IndexError, operator.getitem, obj, 1)

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/array/ArrayBuiltins.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import static com.oracle.graal.python.nodes.BuiltinNames.T_ARRAY;
4141
import static com.oracle.graal.python.nodes.ErrorMessages.BAD_ARG_TYPE_FOR_BUILTIN_OP;
4242
import static com.oracle.graal.python.nodes.SpecialAttributeNames.T___DICT__;
43-
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___CONTAINS__;
4443
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___EQ__;
4544
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___GE__;
4645
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___GT__;
@@ -92,6 +91,7 @@
9291
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSizeArgFun.SqItemBuiltinNode;
9392
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSizeArgFun.SqRepeatBuiltinNode;
9493
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSqAssItem.SqAssItemBuiltinNode;
94+
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSqContains.SqContainsBuiltinNode;
9595
import com.oracle.graal.python.lib.GetNextNode;
9696
import com.oracle.graal.python.lib.PyIndexCheckNode;
9797
import com.oracle.graal.python.lib.PyNumberAsSizeNode;
@@ -487,9 +487,9 @@ static Object cmp(VirtualFrame frame, Object left, Object right,
487487
}
488488
}
489489

490-
@Builtin(name = J___CONTAINS__, minNumOfPositionalArgs = 2)
490+
@Slot(value = SlotKind.sq_contains, isComplex = true)
491491
@GenerateNodeFactory
492-
abstract static class ContainsNode extends PythonBinaryBuiltinNode {
492+
abstract static class ContainsNode extends SqContainsBuiltinNode {
493493
@Specialization
494494
static boolean contains(VirtualFrame frame, PArray self, Object value,
495495
@Bind("this") Node inliningTarget,

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/bytes/BytesCommonBuiltins.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
import static com.oracle.graal.python.nodes.ErrorMessages.METHOD_REQUIRES_A_BYTES_OBJECT_GOT_P;
4444
import static com.oracle.graal.python.nodes.ErrorMessages.SEP_MUST_BE_ASCII;
4545
import static com.oracle.graal.python.nodes.ErrorMessages.SEP_MUST_BE_LENGTH_1;
46-
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___CONTAINS__;
4746
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___GETNEWARGS__;
4847
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___HASH__;
4948
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___ITER__;
@@ -105,6 +104,7 @@
105104
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotBinaryOp.BinaryOpBuiltinNode;
106105
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotLen.LenBuiltinNode;
107106
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSizeArgFun.SqRepeatBuiltinNode;
107+
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSqContains.SqContainsBuiltinNode;
108108
import com.oracle.graal.python.lib.PyNumberAsSizeNode;
109109
import com.oracle.graal.python.lib.PyNumberIndexNode;
110110
import com.oracle.graal.python.nodes.ErrorMessages;
@@ -415,9 +415,9 @@ public static int len(Object self,
415415
}
416416
}
417417

418-
@Builtin(name = J___CONTAINS__, minNumOfPositionalArgs = 2)
418+
@Slot(value = SlotKind.sq_contains, isComplex = true)
419419
@GenerateNodeFactory
420-
abstract static class ContainsNode extends PythonBinaryBuiltinNode {
420+
abstract static class ContainsNode extends SqContainsBuiltinNode {
421421

422422
@Specialization
423423
boolean contains(VirtualFrame frame, Object self, Object other,

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/PyProcsWrapper.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSetAttr.CallManagedSlotSetAttrNode;
7171
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSizeArgFun.CallSlotSizeArgFun;
7272
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSqAssItem.CallSlotSqAssItemNode;
73+
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSqContains.CallSlotSqContainsNode;
7374
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotUnaryFunc.CallSlotUnaryNode;
7475
import com.oracle.graal.python.lib.PyObjectHashNode;
7576
import com.oracle.graal.python.nodes.ErrorMessages;
@@ -548,6 +549,47 @@ public TpSlotWrapper cloneWith(TpSlotManaged slot) {
548549
}
549550
}
550551

552+
@ExportLibrary(InteropLibrary.class)
553+
public static final class SqContainsWrapper extends TpSlotWrapper {
554+
public SqContainsWrapper(TpSlotManaged delegate) {
555+
super(delegate);
556+
}
557+
558+
@ExportMessage
559+
Object execute(Object[] arguments,
560+
@Bind("$node") Node inliningTarget,
561+
@Cached CallSlotSqContainsNode callSlotNode,
562+
@Cached NativeToPythonNode toJavaNode,
563+
@Cached TransformExceptionToNativeNode transformExceptionToNativeNode,
564+
@Exclusive @Cached GilNode gil) {
565+
boolean mustRelease = gil.acquire();
566+
CApiTiming.enter();
567+
try {
568+
try {
569+
return callSlotNode.execute(null, inliningTarget, getSlot(), toJavaNode.execute(arguments[0]), toJavaNode.execute(arguments[1]));
570+
} catch (Throwable t) {
571+
throw checkThrowableBeforeNative(t, "SqContainsWrapper", getDelegate());
572+
}
573+
} catch (PException e) {
574+
transformExceptionToNativeNode.execute(inliningTarget, e);
575+
return -1;
576+
} finally {
577+
CApiTiming.exit(timing);
578+
gil.release(mustRelease);
579+
}
580+
}
581+
582+
@Override
583+
protected String getSignature() {
584+
return "(POINTER,POINTER):SINT32";
585+
}
586+
587+
@Override
588+
public TpSlotWrapper cloneWith(TpSlotManaged slot) {
589+
return new SqContainsWrapper(slot);
590+
}
591+
}
592+
551593
@ExportLibrary(InteropLibrary.class)
552594
public static final class ObjobjargWrapper extends TpSlotWrapper {
553595

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/contextvars/ContextBuiltins.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
package com.oracle.graal.python.builtins.objects.contextvars;
4242

4343
import static com.oracle.graal.python.nodes.PGuards.isNoValue;
44-
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___CONTAINS__;
4544
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___ITER__;
4645

4746
import java.util.List;
@@ -58,6 +57,7 @@
5857
import com.oracle.graal.python.builtins.objects.type.TpSlots;
5958
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotBinaryFunc.MpSubscriptBuiltinNode;
6059
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotLen.LenBuiltinNode;
60+
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSqContains.SqContainsBuiltinNode;
6161
import com.oracle.graal.python.nodes.ErrorMessages;
6262
import com.oracle.graal.python.nodes.PRaiseNode;
6363
import com.oracle.graal.python.nodes.call.CallNode;
@@ -192,9 +192,9 @@ Object doGetDefault(PContextVarsContext self, Object key, Object def,
192192

193193
}
194194

195-
@Builtin(name = J___CONTAINS__, minNumOfPositionalArgs = 2)
195+
@Slot(value = SlotKind.sq_contains, isComplex = true)
196196
@GenerateNodeFactory
197-
public abstract static class Contains extends PythonBuiltinNode {
197+
public abstract static class Contains extends SqContainsBuiltinNode {
198198
@Specialization
199199
boolean doIn(PContextVarsContext self, Object key,
200200
@Bind("this") Node inliningTarget,

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/deque/DequeBuiltins.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@
5252
import static com.oracle.graal.python.nodes.ErrorMessages.DEQUE_MUTATED_DURING_REMOVE;
5353
import static com.oracle.graal.python.nodes.ErrorMessages.DEQUE_REMOVE_X_NOT_IN_DEQUE;
5454
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___CLASS_GETITEM__;
55-
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___CONTAINS__;
5655
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___COPY__;
5756
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___EQ__;
5857
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___GE__;
@@ -100,6 +99,7 @@
10099
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSizeArgFun.SqItemBuiltinNode;
101100
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSizeArgFun.SqRepeatBuiltinNode;
102101
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSqAssItem.SqAssItemBuiltinNode;
102+
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSqContains.SqContainsBuiltinNode;
103103
import com.oracle.graal.python.lib.GetNextNode;
104104
import com.oracle.graal.python.lib.PyNumberAsSizeNode;
105105
import com.oracle.graal.python.lib.PyObjectGetIter;
@@ -792,9 +792,9 @@ PDeque doGeneric(PDeque self, int n) {
792792
}
793793
}
794794

795-
@Builtin(name = J___CONTAINS__, minNumOfPositionalArgs = 2)
795+
@Slot(value = SlotKind.sq_contains, isComplex = true)
796796
@GenerateNodeFactory
797-
public abstract static class DequeContainsNode extends PythonBinaryBuiltinNode {
797+
public abstract static class DequeContainsNode extends SqContainsBuiltinNode {
798798

799799
@Specialization
800800
@TruffleBoundary

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/dict/DictBuiltins.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import static com.oracle.graal.python.nodes.SpecialMethodNames.J_KEYS;
3131
import static com.oracle.graal.python.nodes.SpecialMethodNames.J_VALUES;
3232
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___CLASS_GETITEM__;
33-
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___CONTAINS__;
3433
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___EQ__;
3534
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___INIT__;
3635
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___ITER__;
@@ -74,6 +73,7 @@
7473
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotBinaryOp.BinaryOpBuiltinNode;
7574
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotLen.LenBuiltinNode;
7675
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotMpAssSubscript.MpAssSubscriptBuiltinNode;
76+
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSqContains.SqContainsBuiltinNode;
7777
import com.oracle.graal.python.lib.GetNextNode;
7878
import com.oracle.graal.python.lib.PyDictCheckNode;
7979
import com.oracle.graal.python.lib.PyDictSetDefault;
@@ -430,9 +430,9 @@ static Object doGeneric(VirtualFrame frame, Object self, Object other,
430430
}
431431
}
432432

433-
@Builtin(name = J___CONTAINS__, minNumOfPositionalArgs = 2)
433+
@Slot(value = SlotKind.sq_contains, isComplex = true)
434434
@GenerateNodeFactory
435-
public abstract static class ContainsNode extends PythonBinaryBuiltinNode {
435+
public abstract static class ContainsNode extends SqContainsBuiltinNode {
436436

437437
@Specialization
438438
static boolean run(VirtualFrame frame, Object self, Object key,

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/dict/DictViewBuiltins.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
package com.oracle.graal.python.builtins.objects.dict;
4242

4343
import static com.oracle.graal.python.nodes.SpecialMethodNames.J_ISDISJOINT;
44-
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___CONTAINS__;
4544
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___EQ__;
4645
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___GE__;
4746
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___GT__;
@@ -83,6 +82,7 @@
8382
import com.oracle.graal.python.builtins.objects.type.TpSlots;
8483
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotBinaryOp.BinaryOpBuiltinNode;
8584
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotLen.LenBuiltinNode;
85+
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSqContains.SqContainsBuiltinNode;
8686
import com.oracle.graal.python.lib.GetNextNode;
8787
import com.oracle.graal.python.lib.PyObjectGetIter;
8888
import com.oracle.graal.python.lib.PyObjectIsTrueNode;
@@ -197,9 +197,9 @@ static Object getReversedItemsViewIter(PDictItemsView self,
197197
}
198198
}
199199

200-
@Builtin(name = J___CONTAINS__, minNumOfPositionalArgs = 2)
200+
@Slot(value = SlotKind.sq_contains, isComplex = true)
201201
@GenerateNodeFactory
202-
public abstract static class ContainsNode extends PythonBinaryBuiltinNode {
202+
public abstract static class ContainsNode extends SqContainsBuiltinNode {
203203
@SuppressWarnings("unused")
204204
@Specialization(guards = "len.execute(inliningTarget, self.getWrappedStorage()) == 0", limit = "1")
205205
static boolean containsEmpty(PDictView self, Object key,

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/list/ListBuiltins.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import static com.oracle.graal.python.nodes.BuiltinNames.J_EXTEND;
3030
import static com.oracle.graal.python.nodes.SpecialMethodNames.J_SORT;
3131
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___CLASS_GETITEM__;
32-
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___CONTAINS__;
3332
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___EQ__;
3433
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___GE__;
3534
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___GT__;
@@ -87,6 +86,7 @@
8786
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSizeArgFun.SqItemBuiltinNode;
8887
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSizeArgFun.SqRepeatBuiltinNode;
8988
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSqAssItem.SqAssItemBuiltinNode;
89+
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSqContains.SqContainsBuiltinNode;
9090
import com.oracle.graal.python.lib.PyIndexCheckNode;
9191
import com.oracle.graal.python.lib.PyListCheckNode;
9292
import com.oracle.graal.python.lib.PyObjectGetIter;
@@ -1011,9 +1011,9 @@ static Object doOther(VirtualFrame frame, Object left, Object right,
10111011
}
10121012
}
10131013

1014-
@Builtin(name = J___CONTAINS__, minNumOfPositionalArgs = 2)
1014+
@Slot(value = SlotKind.sq_contains, isComplex = true)
10151015
@GenerateNodeFactory
1016-
abstract static class ContainsNode extends PythonBinaryBuiltinNode {
1016+
abstract static class ContainsNode extends SqContainsBuiltinNode {
10171017
@Specialization
10181018
boolean contains(VirtualFrame frame, Object self, Object other,
10191019
@Bind("this") Node inliningTarget,

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/mappingproxy/MappingproxyBuiltins.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import static com.oracle.graal.python.nodes.SpecialMethodNames.J_KEYS;
3333
import static com.oracle.graal.python.nodes.SpecialMethodNames.J_VALUES;
3434
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___CLASS_GETITEM__;
35-
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___CONTAINS__;
3635
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___EQ__;
3736
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___INIT__;
3837
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___ITER__;
@@ -61,6 +60,7 @@
6160
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotBinaryFunc.MpSubscriptBuiltinNode;
6261
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotBinaryOp.BinaryOpBuiltinNode;
6362
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotLen.LenBuiltinNode;
63+
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSqContains.SqContainsBuiltinNode;
6464
import com.oracle.graal.python.lib.PyNumberOrNode;
6565
import com.oracle.graal.python.lib.PyObjectCallMethodObjArgs;
6666
import com.oracle.graal.python.lib.PyObjectGetItem;
@@ -69,6 +69,7 @@
6969
import com.oracle.graal.python.lib.PyObjectRichCompareBool;
7070
import com.oracle.graal.python.lib.PyObjectSizeNode;
7171
import com.oracle.graal.python.lib.PyObjectStrAsObjectNode;
72+
import com.oracle.graal.python.lib.PySequenceContainsNode;
7273
import com.oracle.graal.python.nodes.ErrorMessages;
7374
import com.oracle.graal.python.nodes.PRaiseNode;
7475
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
@@ -184,13 +185,14 @@ Object getItem(VirtualFrame frame, PMappingproxy self, Object key,
184185
}
185186
}
186187

187-
@Builtin(name = J___CONTAINS__, minNumOfPositionalArgs = 2)
188+
@Slot(value = SlotKind.sq_contains, isComplex = true)
188189
@GenerateNodeFactory
189-
public abstract static class ContainsNode extends PythonBuiltinNode {
190+
public abstract static class ContainsNode extends SqContainsBuiltinNode {
190191
@Specialization
191-
Object run(VirtualFrame frame, PMappingproxy self, Object key,
192-
@Cached com.oracle.graal.python.nodes.expression.ContainsNode containsNode) {
193-
return containsNode.execute(frame, key, self.getMapping());
192+
boolean run(VirtualFrame frame, PMappingproxy self, Object key,
193+
@Bind Node inliningTarget,
194+
@Cached PySequenceContainsNode containsNode) {
195+
return containsNode.execute(frame, inliningTarget, self.getMapping(), key);
194196
}
195197
}
196198

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/range/RangeBuiltins.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.ValueError;
3131
import static com.oracle.graal.python.builtins.objects.common.IndexNodes.checkBounds;
3232
import static com.oracle.graal.python.nodes.ErrorMessages.RANGE_OUT_OF_BOUNDS;
33-
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___CONTAINS__;
3433
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___EQ__;
3534
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___HASH__;
3635
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___ITER__;
@@ -71,6 +70,7 @@
7170
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotInquiry.NbBoolBuiltinNode;
7271
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotLen.LenBuiltinNode;
7372
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSizeArgFun.SqItemBuiltinNode;
73+
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotSqContains.SqContainsBuiltinNode;
7474
import com.oracle.graal.python.lib.GetNextNode;
7575
import com.oracle.graal.python.lib.PyIndexCheckNode;
7676
import com.oracle.graal.python.lib.PyLongCheckExactNode;
@@ -628,11 +628,11 @@ public static GetItemNode getUncached() {
628628
}
629629
}
630630

631-
@Builtin(name = J___CONTAINS__, minNumOfPositionalArgs = 2)
631+
@Slot(value = SlotKind.sq_contains, isComplex = true)
632632
@GenerateNodeFactory
633633
@ImportStatic(PGuards.class)
634634
@TypeSystemReference(PythonIntegerTypes.class)
635-
abstract static class ContainsNode extends PythonBinaryBuiltinNode {
635+
abstract static class ContainsNode extends SqContainsBuiltinNode {
636636
private static final BigInteger MINUS_ONE = BigInteger.ONE.negate();
637637

638638
public abstract boolean execute(VirtualFrame frame, PRange self, Object value);

0 commit comments

Comments
 (0)