Marc-Andre Lemburg: support for Unicode string literals (u"...", ur"...").
authorGuido van Rossum <guido@python.org>
Fri, 10 Mar 2000 23:01:36 +0000 (23:01 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 10 Mar 2000 23:01:36 +0000 (23:01 +0000)
Python/compile.c

index 37cdfc9b9bed4b837b259cbfd63a18aad70ed160..72848fae363935e4fe3a53521cc674f37cd34181 100644 (file)
@@ -875,8 +875,18 @@ parsestr(s)
        int c;
        int first = *s;
        int quote = first;
-       if (isalpha(quote) || quote == '_')
-               quote = *++s;
+       int rawmode = 0;
+       int unicode = 0;
+       if (isalpha(quote) || quote == '_') {
+               if (quote == 'u' || quote == 'U') {
+                       quote = *++s;
+                       unicode = 1;
+               }
+               if (quote == 'r' || quote == 'R') {
+                       quote = *++s;
+                       rawmode = 1;
+               }
+       }
        if (quote != '\'' && quote != '\"') {
                PyErr_BadInternalCall();
                return NULL;
@@ -895,8 +905,17 @@ parsestr(s)
                        return NULL;
                }
        }
-       if (first != quote || strchr(s, '\\') == NULL)
+       if (unicode) {
+               if (rawmode)
+                       return PyUnicode_DecodeRawUnicodeEscape(
+                               s, len, NULL);
+               else
+                       return PyUnicode_DecodeUnicodeEscape(
+                               s, len, NULL);
+       }
+       else if (rawmode || strchr(s, '\\') == NULL) {
                return PyString_FromStringAndSize(s, len);
+       }
        v = PyString_FromStringAndSize((char *)NULL, len);
        p = buf = PyString_AsString(v);
        end = s + len;