Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions graalpython/com.oracle.graal.python.cext/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,26 @@ C headers and native code implementing CPython C-API compatibility plus adapted
- Follow CPython invariants in headers (examples: do not nest `Py_BEGIN_ALLOW_THREADS`; “never mix allocators” warnings).
- Large unicode databases/headers are often generated (e.g., `unicodename_db.h`, `unicodedata_db.h`): avoid hand edits.

## CPYTHON SOURCE CONVENTION

In files derived from CPython under `src/`, `include/`, and `modules/`, all content
is verbatim CPython source unless explicitly marked with a `// GraalPy change:`
comment. This includes comments, whitespace, declarations, and generated Clinic
wrappers, not just executable statements.

- When restoring upstream code, copy the complete snippet exactly, including its
comments and blank lines. Preserve upstream function order where possible.
- Mark every intentional deviation with `// GraalPy change:` immediately before
the changed code, and briefly explain why GraalPy needs it. Make the scope clear;
use an end marker for a multi-function block. For a wholly custom implementation
in a CPython-derived file, explicitly state that the marker covers the whole file.
- Mark disabled upstream code and replacement stubs on their preprocessor guards,
for example `#if 0 // GraalPy change: ...` and `#endif // GraalPy change: ...`.
- When restoring upstream behavior, remove obsolete change markers only where the
resulting content is verbatim upstream. Keep markers for remaining adaptations.
- Apply this convention to CPython-derived files; GraalPy-only build configuration
and Java implementations do not need CPython change markers.

## ANTI-PATTERNS
- **NEVER** nest `Py_BEGIN_ALLOW_THREADS` blocks (see `include/ceval.h`).
- Never mix `PyMem_*` / `PyObject_*` allocators with platform `malloc` family.
17 changes: 15 additions & 2 deletions graalpython/com.oracle.graal.python.cext/src/unicodeobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -1440,6 +1440,11 @@ _PyUnicode_Dump(PyObject *op)
PyObject *
PyUnicode_New(Py_ssize_t size, Py_UCS4 maxchar)
{
/* Optimization for empty strings */
if (size == 0) {
return unicode_get_empty();
}

// GraalPy change: different implementation
int kind;
int is_ascii;
Expand Down Expand Up @@ -2148,8 +2153,16 @@ PyUnicode_FromStringAndSize(const char *u, Py_ssize_t size)
"Negative size passed to PyUnicode_FromStringAndSize");
return NULL;
}
// GraalPy change
return GraalPyPrivate_Unicode_FromUTF((void*) u, size, 1);
if (u != NULL) {
// GraalPy change: decode through the managed Unicode implementation.
return GraalPyPrivate_Unicode_FromUTF((void*) u, size, 1);
}
if (size > 0) {
PyErr_SetString(PyExc_SystemError,
"NULL string with positive size with NULL passed to PyUnicode_FromStringAndSize");
return NULL;
}
return unicode_get_empty();
}

#if 0 // GraalPy change
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ test.test_array.ByteTest.test_iterationcontains @ darwin-arm64,linux-aarch64,lin
test.test_array.ByteTest.test_iterator_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.ByteTest.test_len @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.ByteTest.test_mul @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.ByteTest.test_obsolete_write_lock @ linux-x86_64
test.test_array.ByteTest.test_overflow @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.ByteTest.test_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.ByteTest.test_pickle_for_empty_array @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
Expand Down Expand Up @@ -95,6 +96,7 @@ test.test_array.DoubleTest.test_iterator_pickle @ darwin-arm64,linux-aarch64,lin
test.test_array.DoubleTest.test_len @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.DoubleTest.test_mul @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.DoubleTest.test_nan @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.DoubleTest.test_obsolete_write_lock @ linux-x86_64
test.test_array.DoubleTest.test_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.DoubleTest.test_pickle_for_empty_array @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.DoubleTest.test_pop @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
Expand Down Expand Up @@ -149,6 +151,7 @@ test.test_array.FloatTest.test_iterator_pickle @ darwin-arm64,linux-aarch64,linu
test.test_array.FloatTest.test_len @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.FloatTest.test_mul @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.FloatTest.test_nan @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.FloatTest.test_obsolete_write_lock @ linux-x86_64
test.test_array.FloatTest.test_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.FloatTest.test_pickle_for_empty_array @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.FloatTest.test_pop @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
Expand Down Expand Up @@ -202,6 +205,7 @@ test.test_array.IntTest.test_iterationcontains @ darwin-arm64,linux-aarch64,linu
test.test_array.IntTest.test_iterator_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.IntTest.test_len @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.IntTest.test_mul @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.IntTest.test_obsolete_write_lock @ linux-x86_64
test.test_array.IntTest.test_overflow @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.IntTest.test_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.IntTest.test_pickle_for_empty_array @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
Expand Down Expand Up @@ -272,6 +276,7 @@ test.test_array.LongLongTest.test_iterationcontains @ darwin-arm64,linux-aarch64
test.test_array.LongLongTest.test_iterator_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.LongLongTest.test_len @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.LongLongTest.test_mul @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.LongLongTest.test_obsolete_write_lock @ linux-x86_64
test.test_array.LongLongTest.test_overflow @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.LongLongTest.test_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.LongLongTest.test_pickle_for_empty_array @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
Expand Down Expand Up @@ -327,6 +332,7 @@ test.test_array.LongTest.test_iterationcontains @ darwin-arm64,linux-aarch64,lin
test.test_array.LongTest.test_iterator_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.LongTest.test_len @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.LongTest.test_mul @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.LongTest.test_obsolete_write_lock @ linux-x86_64
test.test_array.LongTest.test_overflow @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.LongTest.test_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.LongTest.test_pickle_for_empty_array @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
Expand Down Expand Up @@ -385,6 +391,7 @@ test.test_array.ShortTest.test_iterationcontains @ darwin-arm64,linux-aarch64,li
test.test_array.ShortTest.test_iterator_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.ShortTest.test_len @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.ShortTest.test_mul @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.ShortTest.test_obsolete_write_lock @ linux-x86_64
test.test_array.ShortTest.test_overflow @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.ShortTest.test_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.ShortTest.test_pickle_for_empty_array @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
Expand Down Expand Up @@ -437,6 +444,7 @@ test.test_array.UCS4Test.test_issue17223 @ darwin-arm64,linux-aarch64,linux-aarc
test.test_array.UCS4Test.test_iterator_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UCS4Test.test_len @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UCS4Test.test_mul @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UCS4Test.test_obsolete_write_lock @ linux-x86_64
test.test_array.UCS4Test.test_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UCS4Test.test_pickle_for_empty_array @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UCS4Test.test_pop @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
Expand Down Expand Up @@ -488,6 +496,7 @@ test.test_array.UnicodeTest.test_issue17223 @ darwin-arm64,linux-aarch64,linux-a
test.test_array.UnicodeTest.test_iterator_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnicodeTest.test_len @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnicodeTest.test_mul @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnicodeTest.test_obsolete_write_lock @ linux-x86_64
test.test_array.UnicodeTest.test_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnicodeTest.test_pickle_for_empty_array @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnicodeTest.test_pop @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
Expand Down Expand Up @@ -543,6 +552,7 @@ test.test_array.UnsignedByteTest.test_iterationcontains @ darwin-arm64,linux-aar
test.test_array.UnsignedByteTest.test_iterator_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedByteTest.test_len @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedByteTest.test_mul @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedByteTest.test_obsolete_write_lock @ linux-x86_64
test.test_array.UnsignedByteTest.test_overflow @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedByteTest.test_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedByteTest.test_pickle_for_empty_array @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
Expand Down Expand Up @@ -599,6 +609,7 @@ test.test_array.UnsignedIntTest.test_iterationcontains @ darwin-arm64,linux-aarc
test.test_array.UnsignedIntTest.test_iterator_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedIntTest.test_len @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedIntTest.test_mul @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedIntTest.test_obsolete_write_lock @ linux-x86_64
test.test_array.UnsignedIntTest.test_overflow @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedIntTest.test_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedIntTest.test_pickle_for_empty_array @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
Expand Down Expand Up @@ -655,6 +666,7 @@ test.test_array.UnsignedLongLongTest.test_iterationcontains @ darwin-arm64,linux
test.test_array.UnsignedLongLongTest.test_iterator_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedLongLongTest.test_len @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedLongLongTest.test_mul @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedLongLongTest.test_obsolete_write_lock @ linux-x86_64
test.test_array.UnsignedLongLongTest.test_overflow @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedLongLongTest.test_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedLongLongTest.test_pickle_for_empty_array @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
Expand Down Expand Up @@ -711,6 +723,7 @@ test.test_array.UnsignedLongTest.test_iterationcontains @ darwin-arm64,linux-aar
test.test_array.UnsignedLongTest.test_iterator_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedLongTest.test_len @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedLongTest.test_mul @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedLongTest.test_obsolete_write_lock @ linux-x86_64
test.test_array.UnsignedLongTest.test_overflow @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedLongTest.test_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedLongTest.test_pickle_for_empty_array @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
Expand Down Expand Up @@ -767,6 +780,7 @@ test.test_array.UnsignedShortTest.test_iterationcontains @ darwin-arm64,linux-aa
test.test_array.UnsignedShortTest.test_iterator_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedShortTest.test_len @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedShortTest.test_mul @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedShortTest.test_obsolete_write_lock @ linux-x86_64
test.test_array.UnsignedShortTest.test_overflow @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedShortTest.test_pickle @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
test.test_array.UnsignedShortTest.test_pickle_for_empty_array @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github
Expand Down
Loading
Loading