@@ -111,47 +111,80 @@ NOTE: In the interpreter's initialization phase, some globals are currently
111111#  define  _PyUnicode_CHECK (op ) PyUnicode_Check(op)
112112#endif 
113113
114- #define  _PyUnicode_UTF8 (op )                             \
115-     (_PyCompactUnicodeObject_CAST(op)->utf8)
116- #define  PyUnicode_UTF8 (op )                              \
117-     (assert(_PyUnicode_CHECK(op)),                      \
118-      PyUnicode_IS_COMPACT_ASCII(op) ?                   \
119-          ((char*)(_PyASCIIObject_CAST(op) + 1)) :       \
120-          _PyUnicode_UTF8(op))
121- #define  _PyUnicode_UTF8_LENGTH (op )                      \
122-     (_PyCompactUnicodeObject_CAST(op)->utf8_length)
123- #define  PyUnicode_UTF8_LENGTH (op )                       \
124-     (assert(_PyUnicode_CHECK(op)),                      \
125-      PyUnicode_IS_COMPACT_ASCII(op) ?                   \
126-          _PyASCIIObject_CAST(op)->length :              \
127-          _PyUnicode_UTF8_LENGTH(op))
114+ static  inline  char *  _PyUnicode_UTF8 (PyObject  * op )
115+ {
116+     return  (_PyCompactUnicodeObject_CAST (op )-> utf8 );
117+ }
118+ 
119+ static  inline  char *  PyUnicode_UTF8 (PyObject  * op )
120+ {
121+     assert (_PyUnicode_CHECK (op ));
122+     if  (PyUnicode_IS_COMPACT_ASCII (op )) {
123+         return  ((char * )(_PyASCIIObject_CAST (op ) +  1 ));
124+     }
125+     else  {
126+          return  _PyUnicode_UTF8 (op );
127+     }
128+ }
129+ 
130+ static  inline  void  PyUnicode_SET_UTF8 (PyObject  * op , char  * utf8 )
131+ {
132+     _PyCompactUnicodeObject_CAST (op )-> utf8  =  utf8 ;
133+ }
134+ 
135+ static  inline  Py_ssize_t  PyUnicode_UTF8_LENGTH (PyObject  * op )
136+ {
137+     assert (_PyUnicode_CHECK (op ));
138+     if  (PyUnicode_IS_COMPACT_ASCII (op )) {
139+          return  _PyASCIIObject_CAST (op )-> length ;
140+     }
141+     else  {
142+          return  _PyCompactUnicodeObject_CAST (op )-> utf8_length ;
143+     }
144+ }
145+ 
146+ static  inline  void  PyUnicode_SET_UTF8_LENGTH (PyObject  * op , Py_ssize_t  length )
147+ {
148+     _PyCompactUnicodeObject_CAST (op )-> utf8_length  =  length ;
149+ }
128150
129151#define  _PyUnicode_LENGTH (op )                           \
130152    (_PyASCIIObject_CAST(op)->length)
131153#define  _PyUnicode_STATE (op )                            \
132154    (_PyASCIIObject_CAST(op)->state)
133155#define  _PyUnicode_HASH (op )                             \
134156    (_PyASCIIObject_CAST(op)->hash)
135- #define  _PyUnicode_KIND (op )                             \
136-     (assert(_PyUnicode_CHECK(op)),                      \
137-      _PyASCIIObject_CAST(op)->state.kind)
138- #define  _PyUnicode_GET_LENGTH (op )                       \
139-     (assert(_PyUnicode_CHECK(op)),                      \
140-      _PyASCIIObject_CAST(op)->length)
157+ 
158+ static  inline  Py_hash_t  PyUnicode_HASH (PyObject  * op )
159+ {
160+     assert (_PyUnicode_CHECK (op ));
161+     return  FT_ATOMIC_LOAD_SSIZE_RELAXED (_PyASCIIObject_CAST (op )-> hash );
162+ }
163+ 
164+ static  inline  void  PyUnicode_SET_HASH (PyObject  * op , Py_hash_t  hash )
165+ {
166+     FT_ATOMIC_STORE_SSIZE_RELAXED (_PyASCIIObject_CAST (op )-> hash , hash );
167+ }
168+ 
141169#define  _PyUnicode_DATA_ANY (op )                         \
142170    (_PyUnicodeObject_CAST(op)->data.any)
143171
144- #define  _PyUnicode_SHARE_UTF8 (op )                       \
145-     (assert(_PyUnicode_CHECK(op)),                      \
146-      assert(!PyUnicode_IS_COMPACT_ASCII(op)),           \
147-      (_PyUnicode_UTF8(op) == PyUnicode_DATA(op)))
172+ static  inline  int  _PyUnicode_SHARE_UTF8 (PyObject  * op )
173+ {
174+     assert (_PyUnicode_CHECK (op ));
175+     assert (!PyUnicode_IS_COMPACT_ASCII (op ));
176+     return  (_PyUnicode_UTF8 (op ) ==  PyUnicode_DATA (op ));
177+ }
148178
149179/* true if the Unicode object has an allocated UTF-8 memory block 
150180   (not shared with other data) */ 
151- #define  _PyUnicode_HAS_UTF8_MEMORY (op )                  \
152-     ((!PyUnicode_IS_COMPACT_ASCII(op)                   \
153-       && _PyUnicode_UTF8(op)                            \
154-       && _PyUnicode_UTF8(op) != PyUnicode_DATA(op)))
181+ static  inline  int  _PyUnicode_HAS_UTF8_MEMORY (PyObject  * op )
182+ {
183+     return  (!PyUnicode_IS_COMPACT_ASCII (op )
184+             &&  _PyUnicode_UTF8 (op ) !=  NULL 
185+             &&  _PyUnicode_UTF8 (op ) !=  PyUnicode_DATA (op ));
186+ }
187+ 
155188
156189/* Generic helper macro to convert characters of different types. 
157190   from_type and to_type have to be valid type names, begin and end 
@@ -1115,8 +1148,8 @@ resize_compact(PyObject *unicode, Py_ssize_t length)
11151148
11161149    if  (_PyUnicode_HAS_UTF8_MEMORY (unicode )) {
11171150        PyMem_Free (_PyUnicode_UTF8 (unicode ));
1118-         _PyUnicode_UTF8 (unicode )  =   NULL ;
1119-         _PyUnicode_UTF8_LENGTH (unicode )  =   0 ;
1151+         PyUnicode_SET_UTF8 (unicode ,  NULL ) ;
1152+         PyUnicode_SET_UTF8_LENGTH (unicode ,  0 ) ;
11201153    }
11211154#ifdef  Py_TRACE_REFS 
11221155    _Py_ForgetReference (unicode );
@@ -1169,8 +1202,8 @@ resize_inplace(PyObject *unicode, Py_ssize_t length)
11691202    if  (!share_utf8  &&  _PyUnicode_HAS_UTF8_MEMORY (unicode ))
11701203    {
11711204        PyMem_Free (_PyUnicode_UTF8 (unicode ));
1172-         _PyUnicode_UTF8 (unicode )  =   NULL ;
1173-         _PyUnicode_UTF8_LENGTH (unicode )  =   0 ;
1205+         PyUnicode_SET_UTF8 (unicode ,  NULL ) ;
1206+         PyUnicode_SET_UTF8_LENGTH (unicode ,  0 ) ;
11741207    }
11751208
11761209    data  =  (PyObject  * )PyObject_Realloc (data , new_size );
@@ -1180,8 +1213,8 @@ resize_inplace(PyObject *unicode, Py_ssize_t length)
11801213    }
11811214    _PyUnicode_DATA_ANY (unicode ) =  data ;
11821215    if  (share_utf8 ) {
1183-         _PyUnicode_UTF8 (unicode )  =   data ;
1184-         _PyUnicode_UTF8_LENGTH (unicode )  =   length ;
1216+         PyUnicode_SET_UTF8 (unicode ,  data ) ;
1217+         PyUnicode_SET_UTF8_LENGTH (unicode ,  length ) ;
11851218    }
11861219    _PyUnicode_LENGTH (unicode ) =  length ;
11871220    PyUnicode_WRITE (PyUnicode_KIND (unicode ), data , length , 0 );
@@ -1801,7 +1834,7 @@ unicode_modifiable(PyObject *unicode)
18011834    assert (_PyUnicode_CHECK (unicode ));
18021835    if  (Py_REFCNT (unicode ) !=  1 )
18031836        return  0 ;
1804-     if  (FT_ATOMIC_LOAD_SSIZE_RELAXED ( _PyUnicode_HASH ( unicode ) ) !=  -1 )
1837+     if  (PyUnicode_HASH ( unicode ) !=  -1 )
18051838        return  0 ;
18061839    if  (PyUnicode_CHECK_INTERNED (unicode ))
18071840        return  0 ;
@@ -5442,8 +5475,8 @@ unicode_fill_utf8(PyObject *unicode)
54425475        PyErr_NoMemory ();
54435476        return  -1 ;
54445477    }
5445-     _PyUnicode_UTF8 (unicode )  =   cache ;
5446-     _PyUnicode_UTF8_LENGTH (unicode )  =   len ;
5478+     PyUnicode_SET_UTF8 (unicode ,  cache ) ;
5479+     PyUnicode_SET_UTF8_LENGTH (unicode ,  len ) ;
54475480    memcpy (cache , start , len );
54485481    cache [len ] =  '\0' ;
54495482    _PyBytesWriter_Dealloc (& writer );
@@ -10996,9 +11029,9 @@ _PyUnicode_EqualToASCIIId(PyObject *left, _Py_Identifier *right)
1099611029        return  0 ;
1099711030    }
1099811031
10999-     Py_hash_t  right_hash  =  FT_ATOMIC_LOAD_SSIZE_RELAXED ( _PyUnicode_HASH ( right_uni ) );
11032+     Py_hash_t  right_hash  =  PyUnicode_HASH ( right_uni );
1100011033    assert (right_hash  !=  -1 );
11001-     Py_hash_t  hash  =  FT_ATOMIC_LOAD_SSIZE_RELAXED ( _PyUnicode_HASH ( left ) );
11034+     Py_hash_t  hash  =  PyUnicode_HASH ( left );
1100211035    if  (hash  !=  -1  &&  hash  !=  right_hash ) {
1100311036        return  0 ;
1100411037    }
@@ -11484,14 +11517,14 @@ unicode_hash(PyObject *self)
1148411517#ifdef  Py_DEBUG 
1148511518    assert (_Py_HashSecret_Initialized );
1148611519#endif 
11487-     Py_hash_t  hash  =  FT_ATOMIC_LOAD_SSIZE_RELAXED ( _PyUnicode_HASH ( self ) );
11520+     Py_hash_t  hash  =  PyUnicode_HASH ( self );
1148811521    if  (hash  !=  -1 ) {
1148911522        return  hash ;
1149011523    }
1149111524    x  =  _Py_HashBytes (PyUnicode_DATA (self ),
1149211525                      PyUnicode_GET_LENGTH (self ) *  PyUnicode_KIND (self ));
1149311526
11494-     FT_ATOMIC_STORE_SSIZE_RELAXED ( _PyUnicode_HASH ( self ) , x );
11527+     PyUnicode_SET_HASH ( self , x );
1149511528    return  x ;
1149611529}
1149711530
@@ -14888,8 +14921,8 @@ unicode_subtype_new(PyTypeObject *type, PyObject *unicode)
1488814921    _PyUnicode_STATE (self ).compact  =  0 ;
1488914922    _PyUnicode_STATE (self ).ascii  =  _PyUnicode_STATE (unicode ).ascii ;
1489014923    _PyUnicode_STATE (self ).statically_allocated  =  0 ;
14891-     _PyUnicode_UTF8_LENGTH (self )  =   0 ;
14892-     _PyUnicode_UTF8 (self )  =   NULL ;
14924+     PyUnicode_SET_UTF8_LENGTH (self ,  0 ) ;
14925+     PyUnicode_SET_UTF8 (self ,  NULL ) ;
1489314926    _PyUnicode_DATA_ANY (self ) =  NULL ;
1489414927
1489514928    share_utf8  =  0 ;
@@ -14919,8 +14952,8 @@ unicode_subtype_new(PyTypeObject *type, PyObject *unicode)
1491914952
1492014953    _PyUnicode_DATA_ANY (self ) =  data ;
1492114954    if  (share_utf8 ) {
14922-         _PyUnicode_UTF8_LENGTH (self )  =   length ;
14923-         _PyUnicode_UTF8 (self )  =   data ;
14955+         PyUnicode_SET_UTF8_LENGTH (self ,  length ) ;
14956+         PyUnicode_SET_UTF8 (self ,  data ) ;
1492414957    }
1492514958
1492614959    memcpy (data , PyUnicode_DATA (unicode ), kind  *  (length  +  1 ));
0 commit comments