Skip to content

Commit dbffe19

Browse files
committed
Add PyUnicode_Contains
1 parent bb1adf1 commit dbffe19

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

graalpython/com.oracle.graal.python.cext/src/unicodeobject.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -665,3 +665,8 @@ UPCALL_ID(PyUnicode_ReadChar);
665665
Py_UCS4 PyUnicode_ReadChar(PyObject *unicode, Py_ssize_t index) {
666666
return UPCALL_CEXT_I(_jls_PyUnicode_ReadChar, native_to_java(unicode), index);
667667
}
668+
669+
UPCALL_ID(PyUnicode_Contains)
670+
int PyUnicode_Contains(PyObject *str, PyObject *substr) {
671+
return UPCALL_CEXT_I(_jls_PyUnicode_Contains, native_to_java(str), native_to_java(substr));
672+
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/PythonCextBuiltins.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@
226226
import com.oracle.graal.python.builtins.objects.set.PSet;
227227
import com.oracle.graal.python.builtins.objects.str.NativeCharSequence;
228228
import com.oracle.graal.python.builtins.objects.str.PString;
229+
import com.oracle.graal.python.builtins.objects.str.StringBuiltins;
229230
import com.oracle.graal.python.builtins.objects.traceback.GetTracebackNode;
230231
import com.oracle.graal.python.builtins.objects.traceback.LazyTraceback;
231232
import com.oracle.graal.python.builtins.objects.traceback.PTraceback;
@@ -1634,6 +1635,22 @@ PString run(PString str) {
16341635
}
16351636
}
16361637

1638+
@Builtin(name = "PyUnicode_Contains", minNumOfPositionalArgs = 2)
1639+
@GenerateNodeFactory
1640+
abstract static class PyUnicodeContains extends PythonBinaryBuiltinNode {
1641+
@Specialization
1642+
int contains(VirtualFrame frame, Object haystack, Object needle,
1643+
@Cached StringBuiltins.ContainsNode containsNode,
1644+
@Cached TransformExceptionToNativeNode transformExceptionToNativeNode) {
1645+
try {
1646+
return containsNode.executeBool(haystack, needle) ? 1 : 0;
1647+
} catch (PException e) {
1648+
transformExceptionToNativeNode.execute(frame, e);
1649+
return -1;
1650+
}
1651+
}
1652+
}
1653+
16371654
@Builtin(name = "do_richcompare", minNumOfPositionalArgs = 3)
16381655
@GenerateNodeFactory
16391656
abstract static class RichCompareNode extends PythonTernaryBuiltinNode {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/str/StringBuiltins.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,9 @@ boolean operator(String self, String other) {
391391

392392
@Builtin(name = __CONTAINS__, minNumOfPositionalArgs = 2)
393393
@GenerateNodeFactory
394-
abstract static class ContainsNode extends PythonBinaryBuiltinNode {
394+
public abstract static class ContainsNode extends PythonBinaryBuiltinNode {
395+
public abstract boolean executeBool(Object self, Object left);
396+
395397
@Specialization
396398
boolean doit(Object self, Object other,
397399
@Cached CastToJavaStringNode castStr) {

0 commit comments

Comments
 (0)