]> granicus.if.org Git - python/commitdiff
Checkpoint. Manipulated things so that string literals are always
authorGuido van Rossum <guido@python.org>
Fri, 27 Apr 2007 23:53:51 +0000 (23:53 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 27 Apr 2007 23:53:51 +0000 (23:53 +0000)
unicode, and a few other compensating changes, e.g. str <- unicode,
chr <- unichr, and repr() of a unicode string no longer starts
with 'u'.  Lots of unit tests are broken, but some basic things
work, in particular distutils works so the extensions can be built,
and test_builtin.py works.

28 files changed:
Include/pydebug.h
Lib/distutils/ccompiler.py
Lib/distutils/cmd.py
Lib/distutils/command/build_clib.py
Lib/distutils/command/build_ext.py
Lib/distutils/command/build_py.py
Lib/distutils/command/config.py
Lib/distutils/command/install.py
Lib/distutils/command/install_data.py
Lib/distutils/dir_util.py
Lib/distutils/dist.py
Lib/distutils/extension.py
Lib/distutils/fancy_getopt.py
Lib/distutils/filelist.py
Lib/distutils/unixccompiler.py
Lib/locale.py
Lib/os.py
Lib/sre_compile.py
Lib/test/test_builtin.py
Modules/posixmodule.c
Objects/moduleobject.c
Objects/unicodeobject.c
Python/ast.c
Python/bltinmodule.c
Python/ceval.c
Python/getargs.c
Python/import.c
Python/pythonrun.c

index 3c0fbc2b3afa6b52a48f337c2f2fdf2f946c3265..3b5e34d04e74dc67863198a1af4f1d3dc8b0f8e3 100644 (file)
@@ -14,7 +14,6 @@ PyAPI_DATA(int) Py_NoSiteFlag;
 PyAPI_DATA(int) Py_UseClassExceptionsFlag;
 PyAPI_DATA(int) Py_FrozenFlag;
 PyAPI_DATA(int) Py_TabcheckFlag;
-PyAPI_DATA(int) Py_UnicodeFlag;
 PyAPI_DATA(int) Py_IgnoreEnvironmentFlag;
 PyAPI_DATA(int) Py_DivisionWarningFlag;
 
index 25d90c8a9a33a7eae4e26e68afa9c2e5bec9094f..50905c1d44ca98b1b436c784ffb89a5a4e0d3ec0 100644 (file)
@@ -168,7 +168,7 @@ class CCompiler:
     # set_executables ()
 
     def set_executable(self, key, value):
-        if type(value) is StringType:
+        if isinstance(value, basestring):
             setattr(self, key, split_quoted(value))
         else:
             setattr(self, key, value)
@@ -193,8 +193,8 @@ class CCompiler:
             if not (type (defn) is TupleType and
                     (len (defn) == 1 or
                      (len (defn) == 2 and
-                      (type (defn[1]) is StringType or defn[1] is None))) and
-                    type (defn[0]) is StringType):
+                      (isinstance (defn[1], basestring) or defn[1] is None))) and
+                    isinstance (defn[0], basestring)):
                 raise TypeError, \
                       ("invalid macro definition '%s': " % defn) + \
                       "must be tuple (string,), (string, string), or " + \
@@ -344,7 +344,7 @@ class CCompiler:
         """
         if outdir is None:
             outdir = self.output_dir
-        elif type(outdir) is not StringType:
+        elif not isinstance(outdir, basestring):
             raise TypeError, "'output_dir' must be a string or None"
 
         if macros is None:
@@ -442,7 +442,7 @@ class CCompiler:
         """
         if output_dir is None:
             output_dir = self.output_dir
-        elif type (output_dir) is not StringType:
+        elif not isinstance(output_dir, basestring):
             raise TypeError, "'output_dir' must be a string or None"
 
         if macros is None:
@@ -527,7 +527,7 @@ class CCompiler:
 
         if output_dir is None:
             output_dir = self.output_dir
-        elif type (output_dir) is not StringType:
+        elif not isinstance(output_dir, basestring):
             raise TypeError, "'output_dir' must be a string or None"
 
         return (objects, output_dir)
index ebd99310ea7e1d5b09781464431a08a9527cb138..ea3799af16f65519f756028b982873236d4bcdff 100644 (file)
@@ -222,7 +222,7 @@ class Command:
         if val is None:
             setattr(self, option, default)
             return default
-        elif type(val) is not StringType:
+        elif not isinstance(val, basestring):
             raise DistutilsOptionError, \
                   "'%s' must be a %s (got `%s`)" % (option, what, val)
         return val
@@ -242,12 +242,11 @@ class Command:
         val = getattr(self, option)
         if val is None:
             return
-        elif type(val) is StringType:
+        elif isinstance(val, basestring):
             setattr(self, option, re.split(r',\s*|\s+', val))
         else:
             if type(val) is ListType:
-                types = map(type, val)
-                ok = (types == [StringType] * len(val))
+                ok = all(isinstance(v, basestring) for v in val)
             else:
                 ok = 0
 
@@ -421,7 +420,7 @@ class Command:
 
 
         # Allow 'infiles' to be a single string
-        if type(infiles) is StringType:
+        if isinstance(infiles, basestring):
             infiles = (infiles,)
         elif type(infiles) not in (ListType, TupleType):
             raise TypeError, \
index 07f58179862b680896fd7fddfd8a056dcca47604..5434e86c86f2d3276557899166df92055b764713 100644 (file)
@@ -92,7 +92,7 @@ class build_clib (Command):
 
         if self.include_dirs is None:
             self.include_dirs = self.distribution.include_dirs or []
-        if type(self.include_dirs) is StringType:
+        if isinstance(self.include_dirs, basestring):
             self.include_dirs = self.include_dirs.split(os.pathsep)
 
         # XXX same as for build_ext -- what about 'self.define' and
@@ -147,7 +147,7 @@ class build_clib (Command):
                 raise DistutilsSetupError, \
                       "each element of 'libraries' must a 2-tuple"
 
-            if type(lib[0]) is not StringType:
+            if isinstance(lib[0], basestring) StringType:
                 raise DistutilsSetupError, \
                       "first element of each tuple in 'libraries' " + \
                       "must be a string (the library name)"
index 2832d5717b077e455b9316a3e605498e179ff25c..0236a2683574c0837c2405ed6ae6e0de4f392fe9 100644 (file)
@@ -137,7 +137,7 @@ class build_ext (Command):
         plat_py_include = sysconfig.get_python_inc(plat_specific=1)
         if self.include_dirs is None:
             self.include_dirs = self.distribution.include_dirs or []
-        if type(self.include_dirs) is StringType:
+        if isinstance(self.include_dirs, basestring):
             self.include_dirs = self.include_dirs.split(os.pathsep)
 
         # Put the Python "system" include dir at the end, so that
@@ -146,7 +146,7 @@ class build_ext (Command):
         if plat_py_include != py_include:
             self.include_dirs.append(plat_py_include)
 
-        if type(self.libraries) is StringType:
+        if isinstance(self.libraries, basestring):
             self.libraries = [self.libraries]
 
         # Life is easier if we're not forever checking for None, so
@@ -155,12 +155,12 @@ class build_ext (Command):
             self.libraries = []
         if self.library_dirs is None:
             self.library_dirs = []
-        elif type(self.library_dirs) is StringType:
+        elif isinstance(self.library_dirs, basestring):
             self.library_dirs = self.library_dirs.split(os.pathsep)
 
         if self.rpath is None:
             self.rpath = []
-        elif type(self.rpath) is StringType:
+        elif isinstance(self.rpath, basestring):
             self.rpath = self.rpath.split(os.pathsep)
 
         # for extensions under windows use different directories
@@ -321,7 +321,7 @@ class build_ext (Command):
                       ("each element of 'ext_modules' option must be an "
                        "Extension instance or 2-tuple")
 
-            if not (type(ext_name) is StringType and
+            if not (isinstance(ext_name, basestring) and
                     extension_name_re.match(ext_name)):
                 raise DistutilsSetupError, \
                       ("first element of each tuple in 'ext_modules' "
index 990824bdff788a96a904f9dcd17fa9becd78adbd..52534bdb475c53600fa99ac7be06ea318c0bef32 100644 (file)
@@ -361,7 +361,7 @@ class build_py (Command):
 
 
     def build_module (self, module, module_file, package):
-        if type(package) is StringType:
+        if isinstance(package, basestring):
             package = package.split('.')
         elif type(package) not in (ListType, TupleType):
             raise TypeError, \
index 3374db9e66fb7ff3bd06e6f9d2880971cc5bbc97..04cfcde736706edf47f83f7806ae3549020d019c 100644 (file)
@@ -73,17 +73,17 @@ class config (Command):
     def finalize_options (self):
         if self.include_dirs is None:
             self.include_dirs = self.distribution.include_dirs or []
-        elif type(self.include_dirs) is StringType:
+        elif isinstance(self.include_dirs, basestring):
             self.include_dirs = self.include_dirs.split(os.pathsep)
 
         if self.libraries is None:
             self.libraries = []
-        elif type(self.libraries) is StringType:
+        elif isinstance(self.libraries, basestring):
             self.libraries = [self.libraries]
 
         if self.library_dirs is None:
             self.library_dirs = []
-        elif type(self.library_dirs) is StringType:
+        elif isinstance(self.library_dirs, basestring):
             self.library_dirs = self.library_dirs.split(os.pathsep)
 
 
@@ -212,7 +212,7 @@ class config (Command):
         self._check_compiler()
         (src, out) = self._preprocess(body, headers, include_dirs, lang)
 
-        if type(pattern) is StringType:
+        if isinstance(pattern, basestring):
             pattern = re.compile(pattern)
 
         file = open(out)
index c03a90e82c27d7834ebac6e2c94be223059cc95f..cc92e96368101ebdf19f4e84e383cf0e60cfd33f 100644 (file)
@@ -463,7 +463,7 @@ class install (Command):
             self.extra_path = self.distribution.extra_path
 
         if self.extra_path is not None:
-            if type(self.extra_path) is StringType:
+            if isinstance(self.extra_path, basestring):
                 self.extra_path = self.extra_path.split(',')
 
             if len(self.extra_path) == 1:
index 1069830fb3168e9c54a595eae3dbc251a4da61e7..a95194426b39274cc5f1aca51f3d9dfd62d29ad3 100644 (file)
@@ -10,7 +10,6 @@ platform-independent data files."""
 __revision__ = "$Id$"
 
 import os
-from types import StringType
 from distutils.core import Command
 from distutils.util import change_root, convert_path
 
@@ -48,7 +47,7 @@ class install_data (Command):
     def run (self):
         self.mkpath(self.install_dir)
         for f in self.data_files:
-            if type(f) is StringType:
+            if isinstance(f, basestring):
                 # it's a simple file, so copy it
                 f = convert_path(f)
                 if self.warn_dir:
index 398f242974b031281dd7e422f975b6c0547dd93d..c6f014b2609bd7f89297285637c7f929e08a68e8 100644 (file)
@@ -31,7 +31,7 @@ def mkpath (name, mode=0777, verbose=0, dry_run=0):
     global _path_created
 
     # Detect a common bug -- name is None
-    if not isinstance(name, StringTypes):
+    if not isinstance(name, basestring):
         raise DistutilsInternalError, \
               "mkpath: 'name' must be a string (got %r)" % (name,)
 
index 7ed1b5cf2c67cdf67a203039b848e9c58e1aac1b..89390fb2c51f243fa792c30ac3928a502ed8f658 100644 (file)
@@ -598,13 +598,13 @@ Common commands: (see '--help-commands' for more)
 
         keywords = self.metadata.keywords
         if keywords is not None:
-            if type(keywords) is StringType:
+            if isinstance(keywords, basestring):
                 keywordlist = keywords.split(',')
                 self.metadata.keywords = [x.strip() for x in keywordlist]
 
         platforms = self.metadata.platforms
         if platforms is not None:
-            if type(platforms) is StringType:
+            if isinstance(platforms, basestring):
                 platformlist = platforms.split(',')
                 self.metadata.platforms = [x.strip() for x in platformlist]
 
@@ -906,7 +906,7 @@ Common commands: (see '--help-commands' for more)
                 neg_opt = {}
 
             try:
-                is_string = type(value) is StringType
+                is_string = isinstance(value, basestring)
                 if option in neg_opt and is_string:
                     setattr(command_obj, neg_opt[option], not strtobool(value))
                 elif option in bool_opts and is_string:
index 0fcbcc141afaca17c28e0db51f9723ccce8d7f24..7fe846b8a86d6fc0d03ea406a387bb346d3ff3d3 100644 (file)
@@ -103,9 +103,9 @@ class Extension:
                   language=None,
                   **kw                      # To catch unknown keywords
                  ):
-        assert type(name) is StringType, "'name' must be a string"
+        assert isinstance(name, basestring), "'name' must be a string"
         assert (type(sources) is ListType and
-                map(type, sources) == [StringType]*len(sources)), \
+                all(isinstance(v, basestring) for v in sources)), \
                 "'sources' must be a list of strings"
 
         self.name = name
index 317a3a4860d3dc45860f90894be3482b0100065e..82e1f4d1dcf1dd80667a1e992f528911da52717e 100644 (file)
@@ -166,13 +166,13 @@ class FancyGetopt:
                 raise ValueError, "invalid option tuple: %r" % (option,)
 
             # Type- and value-check the option names
-            if type(long) is not StringType or len(long) < 2:
+            if not isinstance(long, basestring) or len(long) < 2:
                 raise DistutilsGetoptError, \
                       ("invalid long option '%s': "
                        "must be a string of length >= 2") % long
 
             if (not ((short is None) or
-                     (type(short) is StringType and len(short) == 1))):
+                     (isinstance(short, basestring) and len(short) == 1))):
                 raise DistutilsGetoptError, \
                       ("invalid short option '%s': "
                        "must a single character or None") % short
index bc668cfad348a4b2659a948b440912bbdf824ba5..a0523531c78a505efbf2f663e7dcccab6ed2cfe0 100644 (file)
@@ -333,7 +333,7 @@ def translate_pattern (pattern, anchor=1, prefix=None, is_regex=0):
     or just returned as-is (assumes it's a regex object).
     """
     if is_regex:
-        if type(pattern) is StringType:
+        if isinstance(pattern, basestring):
             return re.compile(pattern)
         else:
             return pattern
index 0795f1206de91cfcb3964289d79e33a304637f57..a42ab5ed4240b0bea9805ce2d9d2982a7172b4a7 100644 (file)
@@ -16,7 +16,7 @@ the "typical" Unix-style command-line C compiler:
 __revision__ = "$Id$"
 
 import os, sys
-from types import StringType, NoneType
+from types import NoneType
 from copy import copy
 
 from distutils import sysconfig
@@ -212,7 +212,7 @@ class UnixCCompiler(CCompiler):
 
         lib_opts = gen_lib_options(self, library_dirs, runtime_library_dirs,
                                    libraries)
-        if type(output_dir) not in (StringType, NoneType):
+        if not isinstance(output_dir, (basestring, NoneType)):
             raise TypeError, "'output_dir' must be a string or None"
         if output_dir is not None:
             output_filename = os.path.join(output_dir, output_filename)
index d3294ce663681dbf21b1fc97c3a52d0e4a3b4995..35f4a7953e2df48501436747f4c8b91b0d1d0f56 100644 (file)
@@ -470,7 +470,7 @@ def setlocale(category, locale=None):
         category may be given as one of the LC_* values.
 
     """
-    if locale and type(locale) is not type(""):
+    if locale and not isinstance(locale, basestring):
         # convert to string
         locale = normalize(_build_localename(locale))
     return _setlocale(category, locale)
index fdb3bed8529b0e5823d1c98e1f5989ef4977a95c..34359c183d3d36d18bb6d72fbcb76f90d8b7bb27 100644 (file)
--- a/Lib/os.py
+++ b/Lib/os.py
@@ -733,8 +733,8 @@ if not _exists("urandom"):
             _urandomfd = open("/dev/urandom", O_RDONLY)
         except (OSError, IOError):
             raise NotImplementedError("/dev/urandom (or equivalent) not found")
-        bytes = ""
-        while len(bytes) < n:
-            bytes += read(_urandomfd, n - len(bytes))
+        bs = b""
+        while len(bs) < n:
+            bs += read(_urandomfd, n - len(bs))
         close(_urandomfd)
-        return bytes
+        return bs
index f6cbd7bc8ea23057a56535a35b8a517e130ef60c..4f2fb0461279874ab1cdf6b337bd9e72d0400d4c 100644 (file)
@@ -470,18 +470,8 @@ def _compile_info(code, pattern, flags):
         _compile_charset(charset, flags, code)
     code[skip] = len(code) - skip
 
-try:
-    unicode
-except NameError:
-    STRING_TYPES = (type(""),)
-else:
-    STRING_TYPES = (type(""), type(unicode("")))
-
 def isstring(obj):
-    for tp in STRING_TYPES:
-        if isinstance(obj, tp):
-            return 1
-    return 0
+    return isinstance(obj, basestring)
 
 def _code(p, flags):
 
index ffa74afa4def614d719bb4750a8c64108b40b7a6..acb0d458119439e2c7d5e677f192a4f650acabbe 100644 (file)
@@ -82,7 +82,7 @@ if have_unicode:
         (unicode('100'), 100),
         (unicode('314'), 314),
         (unicode(' 314'), 314),
-        (unicode('\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
+        (unicode(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
         (unicode('  \t\t  314  \t\t  '), 314),
         (unicode('  1x'), ValueError),
         (unicode('  1  '), 1),
@@ -185,7 +185,7 @@ class BuiltinTest(unittest.TestCase):
         self.assertEqual(chr(65), 'A')
         self.assertEqual(chr(97), 'a')
         self.assertEqual(chr(0xff), '\xff')
-        self.assertRaises(ValueError, chr, 256)
+        self.assertRaises(ValueError, chr, 1<<24)
         self.assertRaises(TypeError, chr)
 
     def XXX_test_cmp(self):
@@ -209,7 +209,7 @@ class BuiltinTest(unittest.TestCase):
     def test_compile(self):
         compile('print(1)\n', '', 'exec')
         bom = '\xef\xbb\xbf'
-        compile(bom + 'print(1)\n', '', 'exec')
+        compile((bom + 'print(1)\n').encode("latin-1"), '', 'exec')
         compile(source='pass', filename='?', mode='exec')
         compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
         compile('pass', '?', dont_inherit=1, mode='exec')
@@ -220,7 +220,7 @@ class BuiltinTest(unittest.TestCase):
         self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
                           mode='eval', source='0', filename='tmp')
         if have_unicode:
-            compile(unicode('print(u"\xc3\xa5")\n', 'utf8'), '', 'exec')
+            compile(unicode(b'print(u"\xc3\xa5")\n', 'utf8'), '', 'exec')
             self.assertRaises(TypeError, compile, unichr(0), 'f', 'exec')
             self.assertRaises(ValueError, compile, unicode('a = 1'), 'f', 'bad')
 
@@ -339,9 +339,9 @@ class BuiltinTest(unittest.TestCase):
             self.assertEqual(eval(unicode('b'), globals, locals), 200)
             self.assertEqual(eval(unicode('c'), globals, locals), 300)
             bom = '\xef\xbb\xbf'
-            self.assertEqual(eval(bom + 'a', globals, locals), 1)
-            self.assertEqual(eval(unicode('u"\xc3\xa5"', 'utf8'), globals),
-                             unicode('\xc3\xa5', 'utf8'))
+            self.assertEqual(eval((bom + 'a').encode("latin-1"), globals, locals), 1)
+            self.assertEqual(eval(unicode(b'u"\xc3\xa5"', 'utf8'), globals),
+                             unicode(b'\xc3\xa5', 'utf8'))
         self.assertRaises(TypeError, eval)
         self.assertRaises(TypeError, eval, ())
 
@@ -608,7 +608,7 @@ class BuiltinTest(unittest.TestCase):
         self.assertRaises(ValueError, float, "  -0x3.p-1  ")
         if have_unicode:
             self.assertEqual(float(unicode("  3.14  ")), 3.14)
-            self.assertEqual(float(unicode("  \u0663.\u0661\u0664  ",'raw-unicode-escape')), 3.14)
+            self.assertEqual(float(unicode(b"  \u0663.\u0661\u0664  ",'raw-unicode-escape')), 3.14)
             # Implementation limitation in PyFloat_FromString()
             self.assertRaises(ValueError, float, unicode("1"*10000))
 
@@ -1673,7 +1673,7 @@ class BuiltinTest(unittest.TestCase):
             self.assertEqual(unichr(97), unicode('a'))
             self.assertEqual(
                 unichr(sys.maxunicode),
-                unicode('\\U%08x' % (sys.maxunicode), 'unicode-escape')
+                unicode(('\\U%08x' % (sys.maxunicode)).encode("ascii"), 'unicode-escape')
             )
             self.assertRaises(ValueError, unichr, sys.maxunicode+1)
             self.assertRaises(TypeError, unichr)
index 12b34726c2185baeafd336862e3530b63440563a..3922a506ca2f9b3b9f6dbbc99dc3b44a7ab5f6ec 100644 (file)
@@ -6163,7 +6163,8 @@ Read a file descriptor.");
 static PyObject *
 posix_read(PyObject *self, PyObject *args)
 {
-       int fd, size, n;
+       int fd, size;
+        Py_ssize_t n;
        PyObject *buffer;
        if (!PyArg_ParseTuple(args, "ii:read", &fd, &size))
                return NULL;
@@ -6171,18 +6172,18 @@ posix_read(PyObject *self, PyObject *args)
                errno = EINVAL;
                return posix_error();
        }
-       buffer = PyString_FromStringAndSize((char *)NULL, size);
+       buffer = PyBytes_FromStringAndSize((char *)NULL, size);
        if (buffer == NULL)
                return NULL;
        Py_BEGIN_ALLOW_THREADS
-       n = read(fd, PyString_AsString(buffer), size);
+       n = read(fd, PyBytes_AsString(buffer), size);
        Py_END_ALLOW_THREADS
        if (n < 0) {
                Py_DECREF(buffer);
                return posix_error();
        }
        if (n != size)
-               _PyString_Resize(&buffer, n);
+               PyBytes_Resize(buffer, n);
        return buffer;
 }
 
@@ -8841,5 +8842,3 @@ INITFUNC(void)
 #ifdef __cplusplus
 }
 #endif
-
-
index e454fcf3210d80b4cddaebe78643e3aabfa27e62..18914d8f50561ae4c16d4e29a0a3278c6e008a25 100644 (file)
@@ -59,6 +59,7 @@ PyModule_GetName(PyObject *m)
 {
        PyObject *d;
        PyObject *nameobj;
+       char *s;
        if (!PyModule_Check(m)) {
                PyErr_BadArgument();
                return NULL;
@@ -66,11 +67,13 @@ PyModule_GetName(PyObject *m)
        d = ((PyModuleObject *)m)->md_dict;
        if (d == NULL ||
            (nameobj = PyDict_GetItemString(d, "__name__")) == NULL ||
-           !PyString_Check(nameobj))
+           !(PyString_Check(nameobj) || PyUnicode_Check(nameobj)))
        {
                PyErr_SetString(PyExc_SystemError, "nameless module");
                return NULL;
        }
+        if (PyUnicode_Check(nameobj))
+               nameobj = _PyUnicode_AsDefaultEncodedString(nameobj, "replace");
        return PyString_AsString(nameobj);
 }
 
index ce28692d7b37fc3748b87f2c9541a6ecf1e8b6e4..e2f1b2fd2063af933b0499a05991201015dbf4c9 100644 (file)
@@ -2072,7 +2072,6 @@ PyObject *unicodeescape_string(const Py_UNICODE *s,
     p = PyString_AS_STRING(repr);
 
     if (quotes) {
-        *p++ = 'u';
         *p++ = (findchar(s, size, '\'') &&
                 !findchar(s, size, '"')) ? '"' : '\'';
     }
@@ -2081,7 +2080,7 @@ PyObject *unicodeescape_string(const Py_UNICODE *s,
 
         /* Escape quotes and backslashes */
         if ((quotes &&
-            ch == (Py_UNICODE) PyString_AS_STRING(repr)[1]) || ch == '\\') {
+            ch == (Py_UNICODE) PyString_AS_STRING(repr)[0]) || ch == '\\') {
             *p++ = '\\';
             *p++ = (char) ch;
            continue;
@@ -2167,7 +2166,7 @@ PyObject *unicodeescape_string(const Py_UNICODE *s,
             *p++ = (char) ch;
     }
     if (quotes)
-        *p++ = PyString_AS_STRING(repr)[1];
+        *p++ = PyString_AS_STRING(repr)[0];
 
     *p = '\0';
     _PyString_Resize(&repr, p - PyString_AS_STRING(repr));
index 8b91894889c0725952943e21b98f355124b78ffa..d7e3b360479a4d9c96f4c2951fa3bcbf7f58697d 100644 (file)
@@ -3187,7 +3187,7 @@ parsestr(const node *n, const char *encoding, int *bytesmode)
         }
     }
 #ifdef Py_USING_UNICODE
-    if (unicode || Py_UnicodeFlag) {
+    if (!*bytesmode) {
         return decode_unicode(s, len, rawmode, encoding);
     }
 #endif
index 17cdb92c31d1da4cc7943ea907c4e5e0c32958d0..fef001d051c1a38fdee5d88977c6aa798d46da5a 100644 (file)
@@ -2270,7 +2270,7 @@ static PyMethodDef builtin_methods[] = {
        {"all",         builtin_all,        METH_O, all_doc},
        {"any",         builtin_any,        METH_O, any_doc},
        {"callable",    builtin_callable,   METH_O, callable_doc},
-       {"chr",         builtin_chr,        METH_VARARGS, chr_doc},
+       {"chr",         builtin_unichr,     METH_VARARGS, chr_doc},
        {"cmp",         builtin_cmp,        METH_VARARGS, cmp_doc},
        {"compile",     (PyCFunction)builtin_compile,    METH_VARARGS | METH_KEYWORDS, compile_doc},
        {"delattr",     builtin_delattr,    METH_VARARGS, delattr_doc},
@@ -2375,7 +2375,7 @@ _PyBuiltin_Init(void)
        SETBUILTIN("set",               &PySet_Type);
        SETBUILTIN("slice",             &PySlice_Type);
        SETBUILTIN("staticmethod",      &PyStaticMethod_Type);
-       SETBUILTIN("str",               &PyString_Type);
+       SETBUILTIN("str",               &PyUnicode_Type);
        SETBUILTIN("super",             &PySuper_Type);
        SETBUILTIN("tuple",             &PyTuple_Type);
        SETBUILTIN("type",              &PyType_Type);
index fdee13d30a553c3bfeaacd56cb3e9dfb012ba71e..00fc05011f7e7e43e1bb14772dae97a48737fc06 100644 (file)
@@ -2633,7 +2633,7 @@ PyEval_EvalCodeEx(PyCodeObject *co, PyObject *globals, PyObject *locals,
                        PyObject *keyword = kws[2*i];
                        PyObject *value = kws[2*i + 1];
                        int j;
-                       if (keyword == NULL || !PyString_Check(keyword)) {
+                       if (keyword == NULL || !(PyString_Check(keyword) || PyUnicode_Check(keyword))) {
                                PyErr_Format(PyExc_TypeError,
                                    "%.200s() keywords must be strings",
                                    PyString_AsString(co->co_name));
index 91d9b47aaf59b00afb35b4d708f0de7d144b5373..3b58c98295d8b719a5bacf554bb9195c8018e09e 100644 (file)
@@ -1081,7 +1081,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
 
        case 'S': { /* string object */
                PyObject **p = va_arg(*p_va, PyObject **);
-               if (PyString_Check(arg))
+               if (PyString_Check(arg) || PyUnicode_Check(arg))
                        *p = arg;
                else
                        return converterr("string", arg, msgbuf, bufsize);
@@ -1531,7 +1531,7 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format,
                while (PyDict_Next(keywords, &pos, &key, &value)) {
                        int match = 0;
                        char *ks;
-                       if (!PyString_Check(key)) {
+                       if (!PyString_Check(key) && !PyUnicode_Check(key)) {
                                PyErr_SetString(PyExc_TypeError, 
                                                "keywords must be strings");
                                return cleanreturn(0, freelist);
index 23508008a1d0e865dd7fb11f7f127b0e53623774..6d742b9b41ed9e647b5d35b04009b3d677f51ae0 100644 (file)
@@ -154,7 +154,7 @@ _PyImport_Init(void)
                }
        }
 
-       if (Py_UnicodeFlag) {
+       {
                /* Fix the pyc_magic so that byte compiled code created
                   using the all-Unicode method doesn't interfere with
                   code created in normal operation mode. */
index 8ff36295110da5383530d76aa3bddf66d2308986..3d16ba5b665876618a29eebe469a4ad81faaad09 100644 (file)
@@ -76,7 +76,6 @@ int Py_InspectFlag; /* Needed to determine whether to exit at SystemError */
 int Py_NoSiteFlag; /* Suppress 'import site' */
 int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */
 int Py_FrozenFlag; /* Needed by getpath.c */
-int Py_UnicodeFlag = 0; /* Needed by compile.c */
 int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */
 
 /* Reference to 'warnings' module, to avoid importing it