Skip to content

Mypyc Object Representation

Jukka Lehtosalo edited this page Oct 24, 2022 · 2 revisions

Mypyc uses a tagged pointer representation for values of type int (CPyTagged), char for booleans, and C structs for tuples. For most other objects mypyc uses the CPython PyObject *.

Python integers that fit in 31/63 bits (depending on whether we are on a 32-bit or 64-bit platform) are represented as C integers (CPyTagged) shifted left by 1. Integers that don't fit in this representation are represented as pointers to a PyObject * (this is always a Python int object) with the least significant bit set. Tagged integer operations are defined in mypyc/lib-rt/int_ops.c and mypyc/lib-rt/CPy.h.

There are also low-level integer types, such as int32 (see mypyc.ir.rtypes), that don't use the tagged representation. These types are not exposed to users, but they are used in generated code.

Clone this wiki locally