@@ -590,10 +590,14 @@ Py_DEPRECATED(3.3) PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicodeAndSize(
590
590
/* Fast access macros */
591
591
592
592
Py_DEPRECATED (3.3 )
593
- static inline Py_ssize_t PyUnicode_WSTR_LENGTH(PyObject *op) {
594
- return PyUnicode_IS_COMPACT_ASCII (op) ?
595
- _PyASCIIObject_CAST (op)->length :
596
- _PyCompactUnicodeObject_CAST (op)->wstr_length ;
593
+ static inline Py_ssize_t PyUnicode_WSTR_LENGTH(PyObject *op)
594
+ {
595
+ if (PyUnicode_IS_COMPACT_ASCII (op)) {
596
+ return _PyASCIIObject_CAST (op)->length ;
597
+ }
598
+ else {
599
+ return _PyCompactUnicodeObject_CAST (op)->wstr_length ;
600
+ }
597
601
}
598
602
#define PyUnicode_WSTR_LENGTH (op ) PyUnicode_WSTR_LENGTH(_PyObject_CAST(op))
599
603
@@ -603,30 +607,52 @@ static inline Py_ssize_t PyUnicode_WSTR_LENGTH(PyObject *op) {
603
607
on request. Use PyUnicode_GET_LENGTH() for the length in code points. */
604
608
605
609
/* Py_DEPRECATED(3.3) */
606
- #define PyUnicode_GET_SIZE (op ) \
607
- (_PyASCIIObject_CAST(op)->wstr ? \
608
- PyUnicode_WSTR_LENGTH (op) : \
609
- ((void )PyUnicode_AsUnicode(_PyObject_CAST(op)),\
610
- assert(_PyASCIIObject_CAST(op)->wstr), \
611
- PyUnicode_WSTR_LENGTH(op)))
610
+ static inline Py_ssize_t PyUnicode_GET_SIZE (PyObject *op)
611
+ {
612
+ _Py_COMP_DIAG_PUSH
613
+ _Py_COMP_DIAG_IGNORE_DEPR_DECLS
614
+ if (_PyASCIIObject_CAST (op)->wstr == NULL ) {
615
+ (void )PyUnicode_AsUnicode (op);
616
+ assert (_PyASCIIObject_CAST (op)->wstr != NULL );
617
+ }
618
+ return PyUnicode_WSTR_LENGTH (op);
619
+ _Py_COMP_DIAG_POP
620
+ }
621
+ #define PyUnicode_GET_SIZE (op ) PyUnicode_GET_SIZE(_PyObject_CAST(op))
612
622
613
- /* Py_DEPRECATED(3.3) */
614
- #define PyUnicode_GET_DATA_SIZE (op ) \
615
- (PyUnicode_GET_SIZE(op) * Py_UNICODE_SIZE)
623
+ /* Py_DEPRECATED(3.3) */
624
+ static inline Py_ssize_t PyUnicode_GET_DATA_SIZE (PyObject *op)
625
+ {
626
+ return PyUnicode_GET_SIZE (op) * Py_UNICODE_SIZE;
627
+ }
628
+ #define PyUnicode_GET_DATA_SIZE (op ) PyUnicode_GET_DATA_SIZE(_PyObject_CAST(op))
616
629
617
630
/* Alias for PyUnicode_AsUnicode(). This will create a wchar_t/Py_UNICODE
618
631
representation on demand. Using this macro is very inefficient now,
619
632
try to port your code to use the new PyUnicode_*BYTE_DATA() macros or
620
633
use PyUnicode_WRITE() and PyUnicode_READ(). */
621
634
622
635
/* Py_DEPRECATED(3.3) */
623
- #define PyUnicode_AS_UNICODE (op ) \
624
- (_PyASCIIObject_CAST(op)->wstr ? _PyASCIIObject_CAST(op)->wstr : \
625
- PyUnicode_AsUnicode (_PyObject_CAST(op)))
636
+ static inline Py_UNICODE* PyUnicode_AS_UNICODE (PyObject *op)
637
+ {
638
+ wchar_t *wstr = _PyASCIIObject_CAST (op)->wstr ;
639
+ if (wstr != NULL ) {
640
+ return wstr;
641
+ }
642
+
643
+ _Py_COMP_DIAG_PUSH
644
+ _Py_COMP_DIAG_IGNORE_DEPR_DECLS
645
+ return PyUnicode_AsUnicode (op);
646
+ _Py_COMP_DIAG_POP
647
+ }
648
+ #define PyUnicode_AS_UNICODE (op ) PyUnicode_AS_UNICODE(_PyObject_CAST(op))
626
649
627
650
/* Py_DEPRECATED(3.3) */
628
- #define PyUnicode_AS_DATA (op ) \
629
- ((const char *)(PyUnicode_AS_UNICODE(op)))
651
+ static inline const char * PyUnicode_AS_DATA (PyObject *op)
652
+ {
653
+ return (const char *)PyUnicode_AS_UNICODE (op);
654
+ }
655
+ #define PyUnicode_AS_DATA (op ) PyUnicode_AS_DATA(_PyObject_CAST(op))
630
656
631
657
632
658
/* --- _PyUnicodeWriter API ----------------------------------------------- */
0 commit comments