From 5397039504fa45f7a41b8afe5f0cb485ad4dbcf1 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 12 Jun 2007 00:28:30 +0000 Subject: [PATCH] Minimal changes to make the "freeze" tool work again. There are other issues left, but these were basics (e.g. keys().sort()). --- Objects/fileobject.c | 29 ++++++++++++----------------- Python/ast.c | 3 +++ Tools/freeze/bkfile.py | 5 ++++- Tools/freeze/freeze.py | 3 +-- Tools/freeze/makefreeze.py | 7 +++---- Tools/freeze/makemakefile.py | 3 +-- Tools/freeze/parsesetup.py | 3 +-- runtests.sh | 7 ++++++- 8 files changed, 31 insertions(+), 29 deletions(-) diff --git a/Objects/fileobject.c b/Objects/fileobject.c index 469eacd2f21..2d9fcf9b17d 100644 --- a/Objects/fileobject.c +++ b/Objects/fileobject.c @@ -265,24 +265,19 @@ open_the_file(PyFileObject *f, char *name, char *mode) PyObject * PyFile_FromFile(FILE *fp, char *name, char *mode, int (*close)(FILE *)) { - PyErr_SetString(PyExc_SystemError, - "attempt to create old file from FILE *"); - return NULL; -#if 0 - PyFileObject *f = (PyFileObject *)PyFile_Type.tp_new(&PyFile_Type, - NULL, NULL); - if (f != NULL) { - PyObject *o_name = PyString_FromString(name); - if (o_name == NULL) - return NULL; - if (fill_file_fields(f, fp, o_name, mode, close) == NULL) { - Py_DECREF(f); - f = NULL; - } - Py_DECREF(o_name); + PyObject *io = NULL, *stream = NULL; + + io = PyImport_ImportModule("io"); + if (io == NULL) + return NULL; + stream = PyObject_CallMethod(io, "open", "ss", name, mode); + if (stream == NULL) { + Py_XDECREF(io); + return NULL; } - return (PyObject *) f; -#endif + if (close != NULL) + close(fp); + return stream; } PyObject * diff --git a/Python/ast.c b/Python/ast.c index b34411ba41f..b313ef2aa45 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -193,8 +193,11 @@ PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename, if (flags && flags->cf_flags & PyCF_SOURCE_IS_UTF8) { c.c_encoding = "utf-8"; if (TYPE(n) == encoding_decl) { +#if 0 ast_error(n, "encoding declaration in Unicode string"); goto error; +#endif + n = CHILD(n, 0); } } else if (TYPE(n) == encoding_decl) { c.c_encoding = STR(n); diff --git a/Tools/freeze/bkfile.py b/Tools/freeze/bkfile.py index c67a6c415aa..0e895f28169 100644 --- a/Tools/freeze/bkfile.py +++ b/Tools/freeze/bkfile.py @@ -21,7 +21,10 @@ def __init__(self, file, mode, bufsize): self.mode = self.__file.mode self.name = self.__file.name self.read = self.__file.read - self.readinto = self.__file.readinto + try: + self.readinto = self.__file.readinto + except AttributeError: + pass self.readline = self.__file.readline self.readlines = self.__file.readlines self.seek = self.__file.seek diff --git a/Tools/freeze/freeze.py b/Tools/freeze/freeze.py index 93b1abc3b74..80db69ea1d6 100755 --- a/Tools/freeze/freeze.py +++ b/Tools/freeze/freeze.py @@ -386,8 +386,7 @@ def main(): # look for unfrozen modules (builtin and of unknown origin) builtins = [] unknown = [] - mods = dict.keys() - mods.sort() + mods = sorted(dict.keys()) for mod in mods: if dict[mod].__code__: continue diff --git a/Tools/freeze/makefreeze.py b/Tools/freeze/makefreeze.py index e359db95d25..4cd1e96990d 100644 --- a/Tools/freeze/makefreeze.py +++ b/Tools/freeze/makefreeze.py @@ -33,8 +33,7 @@ def makefreeze(base, dict, debug=0, entry_point=None, fail_import=()): if entry_point is None: entry_point = default_entry_point done = [] files = [] - mods = dict.keys() - mods.sort() + mods = sorted(dict.keys()) for mod in mods: m = dict[mod] mangled = "__".join(mod.split(".")) @@ -81,8 +80,8 @@ def writecode(outfp, mod, str): outfp.write('unsigned char M_%s[] = {' % mod) for i in range(0, len(str), 16): outfp.write('\n\t') - for c in str[i:i+16]: - outfp.write('%d,' % ord(c)) + for c in bytes(str[i:i+16]): + outfp.write('%d,' % c) outfp.write('\n};\n') ## def writecode(outfp, mod, str): diff --git a/Tools/freeze/makemakefile.py b/Tools/freeze/makemakefile.py index ff8b15a1995..32e804c551e 100644 --- a/Tools/freeze/makemakefile.py +++ b/Tools/freeze/makemakefile.py @@ -5,8 +5,7 @@ def makemakefile(outfp, makevars, files, target): outfp.write("# Makefile generated by freeze.py script\n\n") - keys = makevars.keys() - keys.sort() + keys = sorted(makevars.keys()) for key in keys: outfp.write("%s=%s\n" % (key, makevars[key])) outfp.write("\nall: %s\n\n" % target) diff --git a/Tools/freeze/parsesetup.py b/Tools/freeze/parsesetup.py index ae0bc43d579..158847614dc 100644 --- a/Tools/freeze/parsesetup.py +++ b/Tools/freeze/parsesetup.py @@ -102,8 +102,7 @@ def test(): print('(name must begin with "Makefile" or "Setup")') def prdict(d): - keys = d.keys() - keys.sort() + keys = sorted(d.keys()) for key in keys: value = d[key] print("%-15s" % key, str(value)) diff --git a/runtests.sh b/runtests.sh index c90460e2fa5..7372d8ee20c 100755 --- a/runtests.sh +++ b/runtests.sh @@ -24,6 +24,9 @@ mkdir -p OUT >BAD >SKIPPED +# The -uall flag (edit this file to change). +UALL="-uall" + # Compute the list of tests to run. case $# in 0) @@ -38,7 +41,7 @@ esac for T in $TESTS do echo -n $T - if $PYTHON Lib/test/regrtest.py -uall $T >OUT/$T.out 2>&1 + if $PYTHON Lib/test/regrtest.py $UALL $T >OUT/$T.out 2>&1 then if grep -q "1 test skipped:" OUT/$T.out then @@ -51,5 +54,7 @@ do else echo " BAD" echo $T >>BAD + echo "---------- Re-running test in verbose mode ----------" >>OUT/$T + $PYTHON Lib/test/regrtest.py -v $UALL $T >>OUT/$T.out 2>&1 fi done