compact string is the first two kinds
ASCII:
PyASCIIObject(kind=PyUnicode_1BYTE_KIND) char[length]
non-ASCII(n):
PyASCIIObject(kind=PyUnicode_nBYTE_KIND) 0 NULL UCSn[length]
| |
+-+-------------------------------------------+
|
PyCompactUnicodeObject
non-compat (legacy): (created by subclasses of Unicode)
PyCompactUnicodeObject UCSn*
Both the non-ascii compat Object and non-compat can be reperent in PyUnicodeObject
PyUnicode_DATA
gets the last UCSn arrary/ptr as void*