]> granicus.if.org Git - python/commitdiff
PyUnicode_IS_ASCII() macro ensures that the string is ready
authorVictor Stinner <victor.stinner@haypocalc.com>
Mon, 12 Dec 2011 00:24:20 +0000 (01:24 +0100)
committerVictor Stinner <victor.stinner@haypocalc.com>
Mon, 12 Dec 2011 00:24:20 +0000 (01:24 +0100)
It has no sense to check if a not ready string is ASCII or not.

Include/unicodeobject.h

index 836bafb527c7d7d2ab70a81540d5482a34a1518a..ecf83866b6a62eeb7fc8c2e0d009e67303eb0ec2 100644 (file)
@@ -424,10 +424,12 @@ PyAPI_DATA(PyTypeObject) PyUnicodeIter_Type;
 #define SSTATE_INTERNED_IMMORTAL 2
 
 /* Return true if the string contains only ASCII characters, or 0 if not. The
-   string may be compact (PyUnicode_IS_COMPACT_ASCII) or not. No type checks
-   or Ready calls are performed. */
-#define PyUnicode_IS_ASCII(op)                 \
-    (((PyASCIIObject*)op)->state.ascii)
+   string may be compact (PyUnicode_IS_COMPACT_ASCII) or not, but must be
+   ready. */
+#define PyUnicode_IS_ASCII(op)                   \
+    (assert(PyUnicode_Check(op)),                \
+     assert(PyUnicode_IS_READY(op)),             \
+     ((PyASCIIObject*)op)->state.ascii)
 
 /* Return true if the string is compact or 0 if not.
    No type checks or Ready calls are performed. */
@@ -437,7 +439,7 @@ PyAPI_DATA(PyTypeObject) PyUnicodeIter_Type;
 /* Return true if the string is a compact ASCII string (use PyASCIIObject
    structure), or 0 if not.  No type checks or Ready calls are performed. */
 #define PyUnicode_IS_COMPACT_ASCII(op)                 \
-    (PyUnicode_IS_ASCII(op) && PyUnicode_IS_COMPACT(op))
+    (((PyASCIIObject*)op)->state.ascii && PyUnicode_IS_COMPACT(op))
 
 enum PyUnicode_Kind {
 /* String contains only wstr byte characters.  This is only possible