@@ -1409,7 +1409,7 @@ PyUnicode_New(Py_ssize_t size, Py_UCS4 maxchar)
1409
1409
data = unicode + 1 ;
1410
1410
_PyUnicode_LENGTH (unicode ) = size ;
1411
1411
_PyUnicode_HASH (unicode ) = -1 ;
1412
- _PyUnicode_STATE (unicode ). interned = 0 ;
1412
+ _PyASCIIObject_CAST (unicode )-> interned = 0 ;
1413
1413
_PyUnicode_STATE (unicode ).kind = kind ;
1414
1414
_PyUnicode_STATE (unicode ).compact = 1 ;
1415
1415
_PyUnicode_STATE (unicode ).ascii = is_ascii ;
@@ -1711,7 +1711,7 @@ unicode_dealloc(PyObject *unicode)
1711
1711
57AE
_Py_SetImmortal (unicode );
1712
1712
return ;
1713
1713
}
1714
- switch (_PyUnicode_STATE (unicode ). interned ) {
1714
+ switch (_PyASCIIObject_CAST (unicode )-> interned ) {
1715
1715
case SSTATE_NOT_INTERNED :
1716
1716
break ;
1717
1717
case SSTATE_INTERNED_MORTAL :
@@ -1739,7 +1739,7 @@ unicode_dealloc(PyObject *unicode)
1739
1739
// so it can't cause trouble (except wasted memory)
1740
1740
// - if it wasn't popped, it'll remain interned
1741
1741
_Py_SetImmortal (unicode );
1742
- _PyUnicode_STATE (unicode ). interned = SSTATE_INTERNED_IMMORTAL ;
1742
+ _PyASCIIObject_CAST (unicode )-> interned = SSTATE_INTERNED_IMMORTAL ;
1743
1743
return ;
1744
1744
}
1745
1745
if (r == 0 ) {
@@ -15470,7 +15470,7 @@ unicode_subtype_new(PyTypeObject *type, PyObject *unicode)
15470
15470
#else
15471
15471
_PyUnicode_HASH (self ) = _PyUnicode_HASH (unicode );
15472
15472
#endif
15473
- _PyUnicode_STATE (self ). interned = 0 ;
15473
+ _PyASCIIObject_CAST (self )-> interned = 0 ;
15474
15474
_PyUnicode_STATE (self ).kind = kind ;
15475
15475
_PyUnicode_STATE (self ).compact = 0 ;
15476
15476
_PyUnicode_STATE (self ).ascii = _PyUnicode_STATE (unicode ).ascii ;
@@ -15689,7 +15689,7 @@ intern_static(PyInterpreterState *interp, PyObject *s /* stolen */)
15689
15689
assert (r == NULL );
15690
15690
/* but just in case (for the non-debug build), handle this */
15691
15691
if (r != NULL && r != s ) {
15692
- assert (_PyUnicode_STATE (r ). interned == SSTATE_INTERNED_IMMORTAL_STATIC );
15692
+ assert (_PyASCIIObject_CAST (r )-> interned == SSTATE_INTERNED_IMMORTAL_STATIC );
15693
15693
assert (_PyUnicode_CHECK (r ));
15694
15694
Py_DECREF (s );
15695
15695
return Py_NewRef (r );
@@ -15699,7 +15699,7 @@ intern_static(PyInterpreterState *interp, PyObject *s /* stolen */)
15699
15699
Py_FatalError ("failed to intern static string" );
15700
15700
}
15701
15701
15702
- _PyUnicode_STATE (s ). interned = SSTATE_INTERNED_IMMORTAL_STATIC ;
15702
+ _PyASCIIObject_CAST (s )-> interned = SSTATE_INTERNED_IMMORTAL_STATIC ;
15703
15703
return s ;
15704
15704
}
15705
15705
@@ -15726,7 +15726,7 @@ immortalize_interned(PyObject *s)
15726
15726
_Py_DecRefTotal (_PyThreadState_GET ());
15727
15727
}
15728
15728
#endif
15729
- _PyUnicode_STATE ( s ). interned = SSTATE_INTERNED_IMMORTAL ;
15729
+ FT_ATOMIC_STORE_UINT16_RELAXED ( _PyASCIIObject_CAST ( s ) -> interned , SSTATE_INTERNED_IMMORTAL ) ;
15730
15730
_Py_SetImmortal (s );
15731
15731
}
15732
15732
@@ -15833,7 +15833,7 @@ intern_common(PyInterpreterState *interp, PyObject *s /* stolen */,
15833
15833
15834
15834
/* NOT_INTERNED -> INTERNED_MORTAL */
15835
15835
15836
- assert (_PyUnicode_STATE (s ). interned == SSTATE_NOT_INTERNED );
15836
+ assert (_PyASCIIObject_CAST (s )-> interned == SSTATE_NOT_INTERNED );
15837
15837
15838
15838
if (!_Py_IsImmortal (s )) {
15839
15839
/* The two references in interned dict (key and value) are not counted.
@@ -15845,7 +15845,7 @@ intern_common(PyInterpreterState *interp, PyObject *s /* stolen */,
15845
15845
_Py_DecRefTotal (_PyThreadState_GET ());
15846
15846
#endif
15847
15847
}
15848
- _PyUnicode_STATE ( s ). interned = SSTATE_INTERNED_MORTAL ;
15848
+ FT_ATOMIC_STORE_UINT16_RELAXED ( _PyASCIIObject_CAST ( s ) -> interned , SSTATE_INTERNED_MORTAL ) ;
15849
15849
15850
15850
/* INTERNED_MORTAL -> INTERNED_IMMORTAL (if needed) */
15851
15851
@@ -15981,7 +15981,7 @@ _PyUnicode_ClearInterned(PyInterpreterState *interp)
15981
15981
Py_UNREACHABLE ();
15982
15982
}
15983
15983
if (!shared ) {
15984
- _PyUnicode_STATE ( s ). interned = SSTATE_NOT_INTERNED ;
15984
+ FT_ATOMIC_STORE_UINT16_RELAXED ( _PyASCIIObject_CAST ( s ) -> interned , SSTATE_NOT_INTERNED ) ;
15985
15985
}
15986
15986
}
15987
15987
#ifdef INTERNED_STATS
0 commit comments