From 5aa88f097f43ae8ebb648f6e1ca57f227a3adc93 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Fri, 10 Mar 2000 23:01:36 +0000 Subject: [PATCH] Marc-Andre Lemburg: support for Unicode string literals (u"...", ur"..."). --- Python/compile.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/Python/compile.c b/Python/compile.c index 37cdfc9b9be..72848fae363 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -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;