Files
RustPython/crates
Jeong, YunWon d474353be5 Address slot members by byte offset (#8811)
* Keep slot values freelist-eligible

Member cells now sit in the object allocation ahead of the extension
header, so a slot read is one pointer instead of a boxed slice. A
value stored in a slot is not marked published. With threading, only
the value that leaves the slot is, so its free can wait out a reader.
Without threading a slot read is a single incref.

Assisted-by: Grok:4.7

* Address slot members by byte offset

A slot member's offset is the byte distance from the object to its
inline pointer cell. Loads and stores, including the specialized
instructions, use that address. A relative C offset is resolved by
adding the object header and the type's basic size.

Assisted-by: Grok:4.7

* Keep base slot offsets stable on subclasses

Cell 0 sits directly in front of the extension header. Further slots
extend away from the object, so a member offset computed for a base
class still addresses the same cell on a subclass.

Assisted-by: Grok:4.7

* Pack slot cells flush against the extension header

On 32-bit targets an odd slot count is not a multiple of ObjExt's
alignment. The padding now sits in front of the cells, so cell 0
stays immediately before the header. The non-threading slot load is
also the function's return value.

Assisted-by: Grok:4.7

* Place weakref lists in front of slot cells

A subclass that adds a weakref list no longer inserts it between
ObjExt and the object, so inherited member offsets stay valid.

Assisted-by: Grok:4.7
2026-09-25 08:16:50 +09:00
..
2026-03-31 21:05:08 +09:00