|
79 | 79 | import com.oracle.graal.python.builtins.modules.BuiltinFunctions.OctNode;
|
80 | 80 | import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiBinaryBuiltinNode;
|
81 | 81 | import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiBuiltin;
|
| 82 | +import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiQuaternaryBuiltinNode; |
82 | 83 | import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiTernaryBuiltinNode;
|
83 | 84 | import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiUnaryBuiltinNode;
|
84 | 85 | import com.oracle.graal.python.builtins.modules.cext.PythonCextErrBuiltins.PyErr_Restore;
|
|
112 | 113 | import com.oracle.graal.python.lib.PyObjectLookupAttr;
|
113 | 114 | import com.oracle.graal.python.lib.PyObjectSizeNode;
|
114 | 115 | import com.oracle.graal.python.lib.PySequenceCheckNode;
|
| 116 | +import com.oracle.graal.python.lib.PySequenceContainsNode; |
| 117 | +import com.oracle.graal.python.lib.PySequenceIterSearchNode; |
115 | 118 | import com.oracle.graal.python.lib.PySliceNew;
|
116 | 119 | import com.oracle.graal.python.nodes.ErrorMessages;
|
117 | 120 | import com.oracle.graal.python.nodes.attributes.WriteAttributeToDynamicObjectNode;
|
118 | 121 | import com.oracle.graal.python.nodes.attributes.WriteAttributeToObjectNode;
|
119 | 122 | import com.oracle.graal.python.nodes.builtins.ListNodes.ConstructListNode;
|
120 | 123 | import com.oracle.graal.python.nodes.call.CallNode;
|
| 124 | +import com.oracle.graal.python.nodes.call.special.LookupAndCallBinaryNode; |
121 | 125 | import com.oracle.graal.python.nodes.call.special.LookupAndCallTernaryNode;
|
122 | 126 | import com.oracle.graal.python.nodes.expression.BinaryArithmetic;
|
123 | 127 | import com.oracle.graal.python.nodes.expression.BinaryArithmetic.MulNode;
|
@@ -536,8 +540,8 @@ abstract static class PySequence_Contains extends CApiBinaryBuiltinNode {
|
536 | 540 |
|
537 | 541 | @Specialization
|
538 | 542 | static int contains(Object haystack, Object needle,
|
539 |
| - @Cached ContainsNode containsNode) { |
540 |
| - return PInt.intValue((boolean) containsNode.executeObject(null, needle, haystack)); |
| 543 | + @Cached PySequenceContainsNode containsNode) { |
| 544 | + return PInt.intValue(containsNode.execute(haystack, needle)); |
541 | 545 | }
|
542 | 546 | }
|
543 | 547 |
|
@@ -703,6 +707,48 @@ Object doNative(Object obj,
|
703 | 707 | }
|
704 | 708 | }
|
705 | 709 |
|
| 710 | + @CApiBuiltin(ret = Int, args = {PyObject, Py_ssize_t, Py_ssize_t, PyObject}, call = Direct) |
| 711 | + abstract static class PySequence_SetSlice extends CApiQuaternaryBuiltinNode { |
| 712 | + @Specialization |
| 713 | + static int setSlice(Object sequence, Object iLow, Object iHigh, Object s, |
| 714 | + @Cached("create(SetItem)") LookupAndCallTernaryNode setItemNode, |
| 715 | + @Cached PySliceNew sliceNode) { |
| 716 | + setItemNode.execute(null, sequence, sliceNode.execute(iLow, iHigh, PNone.NONE), s); |
| 717 | + return 0; |
| 718 | + } |
| 719 | + } |
| 720 | + |
| 721 | + @CApiBuiltin(ret = Int, args = {PyObject, Py_ssize_t, Py_ssize_t}, call = Direct) |
| 722 | + abstract static class PySequence_DelSlice extends CApiTernaryBuiltinNode { |
| 723 | + @Specialization |
| 724 | + static int setSlice(Object sequence, Object iLow, Object iHigh, |
| 725 | + @Cached("create(DelItem)") LookupAndCallBinaryNode delItemNode, |
| 726 | + @Cached PySliceNew sliceNode) { |
| 727 | + delItemNode.executeObject(null, sequence, sliceNode.execute(iLow, iHigh, PNone.NONE)); |
| 728 | + return 0; |
| 729 | + } |
| 730 | + } |
| 731 | + |
| 732 | + @CApiBuiltin(ret = Py_ssize_t, args = {PyObject, PyObject}, call = Direct) |
| 733 | + abstract static class PySequence_Count extends CApiBinaryBuiltinNode { |
| 734 | + |
| 735 | + @Specialization |
| 736 | + static int contains(Object haystack, Object needle, |
| 737 | + @Cached PySequenceIterSearchNode searchNode) { |
| 738 | + return searchNode.execute(haystack, needle, PySequenceIterSearchNode.PY_ITERSEARCH_COUNT); |
| 739 | + } |
| 740 | + } |
| 741 | + |
| 742 | + @CApiBuiltin(ret = Py_ssize_t, args = {PyObject, PyObject}, call = Direct) |
| 743 | + abstract static class PySequence_Index extends CApiBinaryBuiltinNode { |
| 744 | + |
| 745 | + @Specialization |
| 746 | + static int contains(Object haystack, Object needle, |
| 747 | + @Cached PySequenceIterSearchNode searchNode) { |
| 748 | + return searchNode.execute(haystack, needle, PySequenceIterSearchNode.PY_ITERSEARCH_INDEX); |
| 749 | + } |
| 750 | + } |
| 751 | + |
706 | 752 | /////// PyObject ///////
|
707 | 753 |
|
708 | 754 | @CApiBuiltin(ret = PyObjectTransfer, args = {PyObject, PyObject}, call = Direct)
|
|
0 commit comments