Skip to content

Commit 22a5f66

Browse files
committed
[GR-34613][GR-34599][GR-34603][GR-34607] Compatibility fixes
PullRequest: graalpython/2054
2 parents 5484ad7 + 158484f commit 22a5f66

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+421
-74
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ language runtime. The main focus is on user-observable behavior of the engine.
66
## Version 22.0.0
77
* Added support for `pyexpat` module.
88
* Added partial support for `PYTHONHASHSEED` environment variable (also available via `HashSeed` context option), currently only affecting hashing in `pyexpat` module.
9+
* Improved compatibility with PyPI packages `wheel` and `click`
910

1011
## Version 21.3.0
1112

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ declare_type(PyMethodDescr_Type, method_descriptor, PyMethodDescrObject);
187187
declare_type(PyGetSetDescr_Type, getset_descriptor, PyGetSetDescrObject);
188188
declare_type(PyMemberDescr_Type, member_descriptor, PyMemberDescrObject);
189189
declare_type(_PyExc_BaseException, BaseException, PyBaseExceptionObject);
190+
declare_type(_PyExc_StopIteration, StopIteration, PyStopIterationObject);
190191
declare_type(PyBuffer_Type, buffer, PyBufferDecorator);
191192
declare_type(PyFunction_Type, function, PyFunctionObject);
192193
declare_type(PyMethod_Type, method, PyMethodObject);

graalpython/com.oracle.graal.python.cext/src/capi.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ typedef struct {
8686

8787
PyAPI_DATA(PyTypeObject) PyBuffer_Type;
8888
PyAPI_DATA(PyTypeObject) _PyExc_BaseException;
89+
PyAPI_DATA(PyTypeObject) _PyExc_StopIteration;
8990

9091
typedef void (*init_upcall)();
9192

@@ -331,6 +332,7 @@ void initialize_hashes();
331332
#define JWRAPPER_OBJOBJPROC 39
332333
#define JWRAPPER_OBJOBJARGPROC 40
333334
#define JWRAPPER_NEW 41
335+
#define JWRAPPER_MP_DELITEM 42
334336

335337
#define TDEBUG __builtin_debugtrap()
336338
#define get_method_flags_wrapper(flags) \

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ PyObject* PyErr_SetFromErrnoWithFilenameObjects(PyObject* exc, PyObject* filenam
223223
char *s = strerror(i);
224224
// TODO(fa): use PyUnicode_DecodeLocale once available
225225
// message = PyUnicode_DecodeLocale(s, "surrogateescape");
226-
message = polyglot_from_string(s, SRC_CS);
226+
message = PyUnicode_FromString(s);
227227
}
228228
else {
229229
/* Sometimes errno didn't get set */

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
#include <pyerrors.h>
4444

4545
PyTypeObject _PyExc_BaseException = PY_TRUFFLE_TYPE("BaseException", &PyType_Type, Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_BASE_EXC_SUBCLASS, sizeof(PyBaseExceptionObject));
46+
PyTypeObject _PyExc_StopIteration = PY_TRUFFLE_TYPE("StopIteration", &PyType_Type, Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_BASE_EXC_SUBCLASS, sizeof(PyStopIterationObject));
4647

4748
#define PY_EXCEPTION(__EXC_NAME__) (UPCALL_CEXT_O(polyglot_from_string("PyTruffle_Type", SRC_CS), polyglot_from_string(__EXC_NAME__, SRC_CS)))
4849

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,3 +106,8 @@ UPCALL_ID(PyList_Insert);
106106
int PyList_Insert(PyObject *op, Py_ssize_t where, PyObject *newitem) {
107107
return UPCALL_CEXT_I(_jls_PyList_Insert, native_to_java(op), where, native_to_java(newitem));
108108
}
109+
110+
UPCALL_ID(PyList_Reverse);
111+
PyAPI_FUNC(int) PyList_Reverse(PyObject *self) {
112+
return UPCALL_CEXT_I(_jls_PyList_Reverse, native_to_java(self));
113+
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,3 +92,8 @@ UPCALL_ID(PySet_Discard);
9292
int PySet_Discard(PyObject *set, PyObject *key) {
9393
return UPCALL_CEXT_I(_jls_PySet_Discard, native_to_java(set), native_to_java(key));
9494
}
95+
96+
UPCALL_ID(PySet_Clear);
97+
int PySet_Clear(PyObject *set) {
98+
return UPCALL_CEXT_I(_jls_PySet_Clear, native_to_java(set));
99+
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -680,6 +680,7 @@ int PyType_Ready(PyTypeObject* cls) {
680680
ADD_SLOT_CONV("__len__", mappings->mp_length, -1, JWRAPPER_LENFUNC);
681681
ADD_SLOT_CONV("__getitem__", mappings->mp_subscript, -2, JWRAPPER_BINARYFUNC);
682682
ADD_SLOT_CONV("__setitem__", mappings->mp_ass_subscript, -3, JWRAPPER_OBJOBJARGPROC);
683+
ADD_SLOT_CONV("__delitem__", mappings->mp_ass_subscript, -3, JWRAPPER_MP_DELITEM);
683684
}
684685

685686
PyAsyncMethods* async = cls->tp_as_async;

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.test/src/tests/cpyext/test_list.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,11 @@ def _reference_setitem(args):
6868
return listObj
6969

7070

71+
def _reference_reverse(args):
72+
args[0].reverse()
73+
return args[0]
74+
75+
7176
def _reference_SET_ITEM(args):
7277
listObj = args[0]
7378
pos = args[1]
@@ -323,3 +328,25 @@ def compile_module(self, name):
323328
arguments=["PyObject* o"],
324329
cmpfunc=unhandled_error_compare
325330
)
331+
332+
test_PyList_Reverse = CPyExtFunction(
333+
_reference_reverse,
334+
lambda: (
335+
([],),
336+
([1, 2, 3],),
337+
([1, "a", 0.1],),
338+
),
339+
code='''PyObject* wrap_PyList_Reverse(PyObject* list) {
340+
if (PyList_Reverse(list)) {
341+
return NULL;
342+
}
343+
Py_INCREF(list);
344+
return list;
345+
}
346+
''',
347+
resultspec="O",
348+
argspec='O',
349+
arguments=["PyObject* list"],
350+
callfunction="wrap_PyList_Reverse",
351+
cmpfunc=unhandled_error_compare
352+
)

0 commit comments

Comments
 (0)