[Stackless-checkins] r52348 - in stackless/trunk: Doc/Makefile Doc/api/abstract.tex Doc/api/concrete.tex Doc/api/intro.tex Doc/api/newtypes.tex Doc/commontex/boilerplate.tex Doc/ext/extending.tex Doc/howto/functional.rst Doc/lib/libbsddb.tex Doc/lib/libcsv.tex Doc/lib/libdatetime.tex Doc/lib/libdecimal.tex Doc/lib/libetree.tex Doc/lib/libfpectl.tex Doc/lib/libfuncs.tex Doc/lib/libhashlib.tex Doc/lib/libimp.tex Doc/lib/liblogging.tex Doc/lib/libpyexpat.tex Doc/lib/libsqlite3.tex Doc/lib/libstdtypes.tex Doc/lib/libunittest.tex Doc/lib/liburlparse.tex Doc/lib/libuuid.tex Doc/lib/sqlite3/executescript.py Doc/perl/python.perl Doc/ref/ref3.tex Doc/tut/tut.tex Doc/whatsnew/whatsnew25.tex Doc/whatsnew/whatsnew26.tex Grammar/Grammar Include/code.h Include/import.h Include/parsetok.h Include/patchlevel.h Include/pyport.h Lib/SimpleXMLRPCServer.py Lib/_strptime.py Lib/bsddb/test/test_basics.py Lib/cgi.py Lib/colorsys.py Lib/ctypes/__init__.py Lib/ctypes/test/test_bitfields.py Lib/ctypes/test/test_! cast.py Lib/ctypes/test/test_win32.py Lib/decimal.py Lib/distutils/command/register.py Lib/distutils/command/wininst-8.exe Lib/distutils/sysconfig.py Lib/distutils/unixccompiler.py Lib/doctest.py Lib/email/utils.py Lib/encodings/__init__.py Lib/genericpath.py Lib/idlelib/NEWS.txt Lib/idlelib/PyShell.py Lib/idlelib/ScriptBinding.py Lib/idlelib/idlever.py Lib/inspect.py Lib/logging/__init__.py Lib/logging/config.py Lib/macpath.py Lib/ntpath.py Lib/os2emxpath.py Lib/pdb.py Lib/plat-mac/aetools.py Lib/plat-mac/lib-scriptpackages/StdSuites/AppleScript_Suite.py Lib/plat-sunos5/STROPTS.py Lib/posixpath.py Lib/pyclbr.py Lib/sgmllib.py Lib/subprocess.py Lib/tarfile.py Lib/test/crashers/bogus_sre_bytecode.py Lib/test/crashers/infinite_loop_re.py Lib/test/crashers/loosing_mro_ref.py Lib/test/list_tests.py Lib/test/output/test_tokenize Lib/test/sgml_input.html Lib/test/string_tests.py Lib/test/test_StringIO.py Lib/test/test_array.py Lib/test/test_builtin.py Lib/test/test_codecencodings! _cn.py Lib/test/test_complex_args.py Lib/test/test_contextlib.py Lib/test/test_datetime.py Lib/test/test_decimal.py Lib/test/test_descr.py Lib/test/test_exceptions.py Lib/test/test_fcntl.py Lib/test/test_future.py Lib/test/test_genericpath.py Lib/test/test_grammar.py Lib/test/test_imp.py Lib/test/test_import.py Lib/test/test
richard.tew
python-checkins at python.org
Sun Oct 15 16:43:01 CEST 2006
Author: richard.tew
Date: Sun Oct 15 16:42:33 2006
New Revision: 52348
Added:
stackless/trunk/Doc/howto/functional.rst
- copied unchanged from r52345, python/trunk/Doc/howto/functional.rst
stackless/trunk/Doc/whatsnew/whatsnew26.tex
- copied unchanged from r52345, python/trunk/Doc/whatsnew/whatsnew26.tex
stackless/trunk/Lib/distutils/command/wininst-8.exe
- copied unchanged from r52345, python/trunk/Lib/distutils/command/wininst-8.exe
stackless/trunk/Lib/genericpath.py
- copied unchanged from r52345, python/trunk/Lib/genericpath.py
stackless/trunk/Lib/test/crashers/bogus_sre_bytecode.py
- copied unchanged from r52345, python/trunk/Lib/test/crashers/bogus_sre_bytecode.py
stackless/trunk/Lib/test/crashers/infinite_loop_re.py
- copied unchanged from r52345, python/trunk/Lib/test/crashers/infinite_loop_re.py
stackless/trunk/Lib/test/crashers/loosing_mro_ref.py
- copied unchanged from r52345, python/trunk/Lib/test/crashers/loosing_mro_ref.py
stackless/trunk/Lib/test/sgml_input.html
- copied unchanged from r52345, python/trunk/Lib/test/sgml_input.html
stackless/trunk/Lib/test/test_complex_args.py
- copied unchanged from r52345, python/trunk/Lib/test/test_complex_args.py
stackless/trunk/Lib/test/test_genericpath.py
- copied unchanged from r52345, python/trunk/Lib/test/test_genericpath.py
stackless/trunk/Misc/RPM/python-2.6.spec
- copied unchanged from r52345, python/trunk/Misc/RPM/python-2.6.spec
stackless/trunk/Modules/_ctypes/libffi_msvc/win64.asm
- copied unchanged from r52345, python/trunk/Modules/_ctypes/libffi_msvc/win64.asm
stackless/trunk/PC/VC6/_ctypes.dsp
- copied unchanged from r52345, python/trunk/PC/VC6/_ctypes.dsp
stackless/trunk/PC/VC6/_ctypes_test.dsp
- copied unchanged from r52345, python/trunk/PC/VC6/_ctypes_test.dsp
stackless/trunk/PC/VC6/_elementtree.dsp
- copied unchanged from r52345, python/trunk/PC/VC6/_elementtree.dsp
stackless/trunk/PC/bdist_wininst/wininst-8.sln
- copied unchanged from r52345, python/trunk/PC/bdist_wininst/wininst-8.sln
stackless/trunk/PC/bdist_wininst/wininst-8.vcproj
- copied unchanged from r52345, python/trunk/PC/bdist_wininst/wininst-8.vcproj
stackless/trunk/PCbuild/amd64_ml64.bat
- copied unchanged from r52345, python/trunk/PCbuild/amd64_ml64.bat
stackless/trunk/Python/peephole.c
- copied unchanged from r52345, python/trunk/Python/peephole.c
Removed:
stackless/trunk/Misc/RPM/python-2.5.spec
stackless/trunk/PCbuild8/pythoncore_pgo.vcproj
stackless/trunk/PCbuild8/pythoncore_pgo_link.txt
Modified:
stackless/trunk/Doc/Makefile
stackless/trunk/Doc/api/abstract.tex
stackless/trunk/Doc/api/concrete.tex
stackless/trunk/Doc/api/intro.tex
stackless/trunk/Doc/api/newtypes.tex
stackless/trunk/Doc/commontex/boilerplate.tex
stackless/trunk/Doc/ext/extending.tex
stackless/trunk/Doc/lib/libbsddb.tex
stackless/trunk/Doc/lib/libcsv.tex
stackless/trunk/Doc/lib/libdatetime.tex
stackless/trunk/Doc/lib/libdecimal.tex
stackless/trunk/Doc/lib/libetree.tex
stackless/trunk/Doc/lib/libfpectl.tex
stackless/trunk/Doc/lib/libfuncs.tex
stackless/trunk/Doc/lib/libhashlib.tex
stackless/trunk/Doc/lib/libimp.tex
stackless/trunk/Doc/lib/liblogging.tex
stackless/trunk/Doc/lib/libpyexpat.tex
stackless/trunk/Doc/lib/libsqlite3.tex
stackless/trunk/Doc/lib/libstdtypes.tex
stackless/trunk/Doc/lib/libunittest.tex
stackless/trunk/Doc/lib/liburlparse.tex
stackless/trunk/Doc/lib/libuuid.tex
stackless/trunk/Doc/lib/sqlite3/executescript.py
stackless/trunk/Doc/perl/python.perl
stackless/trunk/Doc/ref/ref3.tex
stackless/trunk/Doc/tut/tut.tex
stackless/trunk/Doc/whatsnew/whatsnew25.tex
stackless/trunk/Grammar/Grammar
stackless/trunk/Include/code.h
stackless/trunk/Include/import.h
stackless/trunk/Include/parsetok.h
stackless/trunk/Include/patchlevel.h
stackless/trunk/Include/pyport.h
stackless/trunk/Lib/SimpleXMLRPCServer.py
stackless/trunk/Lib/_strptime.py
stackless/trunk/Lib/bsddb/test/test_basics.py
stackless/trunk/Lib/cgi.py
stackless/trunk/Lib/colorsys.py
stackless/trunk/Lib/ctypes/__init__.py
stackless/trunk/Lib/ctypes/test/test_bitfields.py
stackless/trunk/Lib/ctypes/test/test_cast.py
stackless/trunk/Lib/ctypes/test/test_win32.py
stackless/trunk/Lib/decimal.py
stackless/trunk/Lib/distutils/command/register.py
stackless/trunk/Lib/distutils/sysconfig.py
stackless/trunk/Lib/distutils/unixccompiler.py
stackless/trunk/Lib/doctest.py
stackless/trunk/Lib/email/utils.py
stackless/trunk/Lib/encodings/__init__.py
stackless/trunk/Lib/idlelib/NEWS.txt
stackless/trunk/Lib/idlelib/PyShell.py
stackless/trunk/Lib/idlelib/ScriptBinding.py
stackless/trunk/Lib/idlelib/idlever.py
stackless/trunk/Lib/inspect.py
stackless/trunk/Lib/logging/__init__.py
stackless/trunk/Lib/logging/config.py
stackless/trunk/Lib/macpath.py
stackless/trunk/Lib/ntpath.py
stackless/trunk/Lib/os2emxpath.py
stackless/trunk/Lib/pdb.py
stackless/trunk/Lib/plat-mac/aetools.py
stackless/trunk/Lib/plat-mac/lib-scriptpackages/StdSuites/AppleScript_Suite.py
stackless/trunk/Lib/plat-sunos5/STROPTS.py
stackless/trunk/Lib/posixpath.py
stackless/trunk/Lib/pyclbr.py
stackless/trunk/Lib/sgmllib.py
stackless/trunk/Lib/subprocess.py
stackless/trunk/Lib/tarfile.py
stackless/trunk/Lib/test/list_tests.py
stackless/trunk/Lib/test/output/test_tokenize
stackless/trunk/Lib/test/string_tests.py
stackless/trunk/Lib/test/test_StringIO.py
stackless/trunk/Lib/test/test_array.py
stackless/trunk/Lib/test/test_builtin.py
stackless/trunk/Lib/test/test_codecencodings_cn.py
stackless/trunk/Lib/test/test_contextlib.py
stackless/trunk/Lib/test/test_datetime.py
stackless/trunk/Lib/test/test_decimal.py
stackless/trunk/Lib/test/test_descr.py
stackless/trunk/Lib/test/test_exceptions.py
stackless/trunk/Lib/test/test_fcntl.py
stackless/trunk/Lib/test/test_future.py
stackless/trunk/Lib/test/test_grammar.py
stackless/trunk/Lib/test/test_imp.py
stackless/trunk/Lib/test/test_import.py
stackless/trunk/Lib/test/test_inspect.py
stackless/trunk/Lib/test/test_itertools.py
stackless/trunk/Lib/test/test_long.py
stackless/trunk/Lib/test/test_multibytecodec.py
stackless/trunk/Lib/test/test_mutants.py
stackless/trunk/Lib/test/test_new.py
stackless/trunk/Lib/test/test_os.py
stackless/trunk/Lib/test/test_parser.py
stackless/trunk/Lib/test/test_peepholer.py
stackless/trunk/Lib/test/test_pep352.py
stackless/trunk/Lib/test/test_pyclbr.py
stackless/trunk/Lib/test/test_sgmllib.py
stackless/trunk/Lib/test/test_subprocess.py
stackless/trunk/Lib/test/test_syntax.py
stackless/trunk/Lib/test/test_tarfile.py
stackless/trunk/Lib/test/test_tempfile.py
stackless/trunk/Lib/test/test_time.py
stackless/trunk/Lib/test/test_tokenize.py
stackless/trunk/Lib/test/test_traceback.py
stackless/trunk/Lib/test/test_unicode.py
stackless/trunk/Lib/test/test_urllib2.py
stackless/trunk/Lib/test/test_uuid.py
stackless/trunk/Lib/tokenize.py
stackless/trunk/Lib/traceback.py
stackless/trunk/Lib/urllib2.py
stackless/trunk/Lib/uuid.py
stackless/trunk/Lib/webbrowser.py
stackless/trunk/Mac/BuildScript/build-installer.py
stackless/trunk/Mac/BuildScript/scripts/postflight.documentation
stackless/trunk/Mac/BuildScript/scripts/postflight.patch-profile
stackless/trunk/Mac/Makefile.in
stackless/trunk/Mac/PythonLauncher/FileSettings.m
stackless/trunk/Mac/README
stackless/trunk/Mac/Tools/fixapplepython23.py
stackless/trunk/Makefile.pre.in
stackless/trunk/Misc/ACKS
stackless/trunk/Misc/HISTORY
stackless/trunk/Misc/NEWS
stackless/trunk/Misc/Vim/python.vim
stackless/trunk/Misc/Vim/vim_syntax.py
stackless/trunk/Misc/Vim/vimrc
stackless/trunk/Misc/build.sh
stackless/trunk/Modules/_bsddb.c
stackless/trunk/Modules/_ctypes/_ctypes.c
stackless/trunk/Modules/_ctypes/_ctypes_test.c
stackless/trunk/Modules/_ctypes/callbacks.c
stackless/trunk/Modules/_ctypes/callproc.c
stackless/trunk/Modules/_ctypes/cfield.c
stackless/trunk/Modules/_ctypes/libffi_msvc/ffi.c
stackless/trunk/Modules/_ctypes/libffi_msvc/ffi.h
stackless/trunk/Modules/_ctypes/libffi_msvc/ffitarget.h
stackless/trunk/Modules/_ctypes/stgdict.c
stackless/trunk/Modules/_cursesmodule.c
stackless/trunk/Modules/_sre.c
stackless/trunk/Modules/almodule.c
stackless/trunk/Modules/arraymodule.c
stackless/trunk/Modules/bz2module.c
stackless/trunk/Modules/cPickle.c
stackless/trunk/Modules/cStringIO.c
stackless/trunk/Modules/cjkcodecs/_codecs_cn.c
stackless/trunk/Modules/cjkcodecs/_codecs_iso2022.c
stackless/trunk/Modules/cjkcodecs/cjkcodecs.h
stackless/trunk/Modules/datetimemodule.c
stackless/trunk/Modules/gcmodule.c
stackless/trunk/Modules/itertoolsmodule.c
stackless/trunk/Modules/linuxaudiodev.c
stackless/trunk/Modules/main.c
stackless/trunk/Modules/mmapmodule.c
stackless/trunk/Modules/ossaudiodev.c
stackless/trunk/Modules/parsermodule.c
stackless/trunk/Modules/posixmodule.c
stackless/trunk/Modules/readline.c
stackless/trunk/Modules/resource.c
stackless/trunk/Objects/abstract.c
stackless/trunk/Objects/classobject.c
stackless/trunk/Objects/dictobject.c
stackless/trunk/Objects/exceptions.c
stackless/trunk/Objects/fileobject.c
stackless/trunk/Objects/intobject.c
stackless/trunk/Objects/listobject.c
stackless/trunk/Objects/longobject.c
stackless/trunk/Objects/setobject.c
stackless/trunk/Objects/stringlib/partition.h
stackless/trunk/Objects/stringobject.c
stackless/trunk/Objects/typeobject.c
stackless/trunk/Objects/unicodeobject.c
stackless/trunk/PC/VC6/_bsddb.dsp (props changed)
stackless/trunk/PC/VC6/_socket.dsp (props changed)
stackless/trunk/PC/VC6/_ssl.dsp (props changed)
stackless/trunk/PC/VC6/_testcapi.dsp (props changed)
stackless/trunk/PC/VC6/_tkinter.dsp (props changed)
stackless/trunk/PC/VC6/bz2.dsp (props changed)
stackless/trunk/PC/VC6/make_versioninfo.dsp (props changed)
stackless/trunk/PC/VC6/pcbuild.dsw (contents, props changed)
stackless/trunk/PC/VC6/pyexpat.dsp (props changed)
stackless/trunk/PC/VC6/python.dsp (props changed)
stackless/trunk/PC/VC6/pythoncore.dsp (contents, props changed)
stackless/trunk/PC/VC6/pythonw.dsp (props changed)
stackless/trunk/PC/VC6/select.dsp (props changed)
stackless/trunk/PC/VC6/unicodedata.dsp (props changed)
stackless/trunk/PC/VC6/w9xpopen.dsp (props changed)
stackless/trunk/PC/VC6/winsound.dsp (props changed)
stackless/trunk/PC/VC6/zlib.dsp (props changed)
stackless/trunk/PC/_msi.c
stackless/trunk/PC/example_nt/example.vcproj
stackless/trunk/PC/pyconfig.h
stackless/trunk/PCbuild/_ctypes.vcproj
stackless/trunk/PCbuild/build_ssl.py
stackless/trunk/PCbuild/pythoncore.vcproj
stackless/trunk/PCbuild/readme.txt
stackless/trunk/PCbuild8/_ctypes.vcproj
stackless/trunk/PCbuild8/_ctypes_test.vcproj
stackless/trunk/PCbuild8/_elementtree.vcproj
stackless/trunk/PCbuild8/_msi.vcproj
stackless/trunk/PCbuild8/_sqlite3.vcproj
stackless/trunk/PCbuild8/make_buildinfo.c
stackless/trunk/PCbuild8/make_buildinfo.vcproj
stackless/trunk/PCbuild8/pcbuild.sln
stackless/trunk/PCbuild8/python.vcproj
stackless/trunk/PCbuild8/pythoncore.vcproj
stackless/trunk/PCbuild8/pythonw.vcproj
stackless/trunk/PCbuild8/readme.txt
stackless/trunk/PCbuild8/select.vcproj
stackless/trunk/PCbuild8/unicodedata.vcproj
stackless/trunk/PCbuild8/w9xpopen.vcproj
stackless/trunk/PCbuild8/winsound.vcproj
stackless/trunk/Parser/parser.c
stackless/trunk/Parser/parsetok.c
stackless/trunk/Parser/tokenizer.c
stackless/trunk/Python/ast.c
stackless/trunk/Python/bltinmodule.c
stackless/trunk/Python/compile.c
stackless/trunk/Python/errors.c
stackless/trunk/Python/getargs.c
stackless/trunk/Python/graminit.c
stackless/trunk/Python/import.c
stackless/trunk/Python/marshal.c
stackless/trunk/Python/modsupport.c
stackless/trunk/Python/mystrtoul.c
stackless/trunk/Python/pystate.c
stackless/trunk/Python/pythonrun.c
stackless/trunk/Python/symtable.c
stackless/trunk/Python/sysmodule.c
stackless/trunk/Tools/buildbot/external.bat
stackless/trunk/Tools/msi/msi.py
stackless/trunk/Tools/msi/uuids.py
stackless/trunk/Tools/pybench/pybench.py
stackless/trunk/Tools/scripts/byext.py (props changed)
stackless/trunk/Tools/scripts/findnocoding.py
stackless/trunk/Tools/scripts/pysource.py
stackless/trunk/configure
stackless/trunk/configure.in
stackless/trunk/pyconfig.h.in
Log:
Merged in changes to the Python trunk from r51332-52344.
Both Python tests and Stackless ones pass on Windows.
Modified: stackless/trunk/Doc/Makefile
==============================================================================
--- stackless/trunk/Doc/Makefile (original)
+++ stackless/trunk/Doc/Makefile Sun Oct 15 16:42:33 2006
@@ -122,7 +122,7 @@
# The end of this should reflect the major/minor version numbers of
# the release:
-WHATSNEW=whatsnew25
+WHATSNEW=whatsnew26
# what's what
MANDVIFILES= paper-$(PAPER)/api.dvi paper-$(PAPER)/ext.dvi \
Modified: stackless/trunk/Doc/api/abstract.tex
==============================================================================
--- stackless/trunk/Doc/api/abstract.tex (original)
+++ stackless/trunk/Doc/api/abstract.tex Sun Oct 15 16:42:33 2006
@@ -5,6 +5,10 @@
numerical types, or all sequence types). When used on object types
for which they do not apply, they will raise a Python exception.
+It is not possible to use these functions on objects that are not properly
+initialized, such as a list object that has been created by
+\cfunction{PyList_New()}, but whose items have not been set to some
+non-\code{NULL} value yet.
\section{Object Protocol \label{object}}
Modified: stackless/trunk/Doc/api/concrete.tex
==============================================================================
--- stackless/trunk/Doc/api/concrete.tex (original)
+++ stackless/trunk/Doc/api/concrete.tex Sun Oct 15 16:42:33 2006
@@ -602,15 +602,15 @@
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject*}{PyString_FromString}{const char *v}
- Return a new string object with the value \var{v} on success, and
- \NULL{} on failure. The parameter \var{v} must not be \NULL{}; it
- will not be checked.
+ Return a new string object with a copy of the string \var{v} as value
+ on success, and \NULL{} on failure. The parameter \var{v} must not be
+ \NULL{}; it will not be checked.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject*}{PyString_FromStringAndSize}{const char *v,
Py_ssize_t len}
- Return a new string object with the value \var{v} and length
- \var{len} on success, and \NULL{} on failure. If \var{v} is
+ Return a new string object with a copy of the string \var{v} as value
+ and length \var{len} on success, and \NULL{} on failure. If \var{v} is
\NULL{}, the contents of the string are uninitialized.
\end{cfuncdesc}
@@ -1840,6 +1840,11 @@
\begin{cfuncdesc}{PyObject*}{PyList_New}{Py_ssize_t len}
Return a new list of length \var{len} on success, or \NULL{} on
failure.
+ \note{If \var{length} is greater than zero, the returned list object's
+ items are set to \code{NULL}. Thus you cannot use abstract
+ API functions such as \cfunction{PySequence_SetItem()}
+ or expose the object to Python code before setting all items to a
+ real object with \cfunction{PyList_SetItem()}.}
\end{cfuncdesc}
\begin{cfuncdesc}{Py_ssize_t}{PyList_Size}{PyObject *list}
Modified: stackless/trunk/Doc/api/intro.tex
==============================================================================
--- stackless/trunk/Doc/api/intro.tex (original)
+++ stackless/trunk/Doc/api/intro.tex Sun Oct 15 16:42:33 2006
@@ -225,25 +225,10 @@
\cfunction{PyTuple_SetItem()} for tuples that you are creating
yourself.
-Equivalent code for populating a list can be written using
-\cfunction{PyList_New()} and \cfunction{PyList_SetItem()}. Such code
-can also use \cfunction{PySequence_SetItem()}; this illustrates the
-difference between the two (the extra \cfunction{Py_DECREF()} calls):
+Equivalent code for populating a list can be written using
+\cfunction{PyList_New()} and \cfunction{PyList_SetItem()}.
-\begin{verbatim}
-PyObject *l, *x;
-
-l = PyList_New(3);
-x = PyInt_FromLong(1L);
-PySequence_SetItem(l, 0, x); Py_DECREF(x);
-x = PyInt_FromLong(2L);
-PySequence_SetItem(l, 1, x); Py_DECREF(x);
-x = PyString_FromString("three");
-PySequence_SetItem(l, 2, x); Py_DECREF(x);
-\end{verbatim}
-
-You might find it strange that the ``recommended'' approach takes more
-code. However, in practice, you will rarely use these ways of
+However, in practice, you will rarely use these ways of
creating and populating a tuple or list. There's a generic function,
\cfunction{Py_BuildValue()}, that can create most common objects from
C values, directed by a \dfn{format string}. For example, the
@@ -251,10 +236,10 @@
also takes care of the error checking):
\begin{verbatim}
-PyObject *t, *l;
+PyObject *tuple, *list;
-t = Py_BuildValue("(iis)", 1, 2, "three");
-l = Py_BuildValue("[iis]", 1, 2, "three");
+tuple = Py_BuildValue("(iis)", 1, 2, "three");
+list = Py_BuildValue("[iis]", 1, 2, "three");
\end{verbatim}
It is much more common to use \cfunction{PyObject_SetItem()} and
@@ -276,8 +261,12 @@
if (n < 0)
return -1;
for (i = 0; i < n; i++) {
- if (PyObject_SetItem(target, i, item) < 0)
+ PyObject *index = PyInt_FromLong(i);
+ if (!index)
+ return -1;
+ if (PyObject_SetItem(target, index, item) < 0)
return -1;
+ Py_DECREF(index);
}
return 0;
}
Modified: stackless/trunk/Doc/api/newtypes.tex
==============================================================================
--- stackless/trunk/Doc/api/newtypes.tex (original)
+++ stackless/trunk/Doc/api/newtypes.tex Sun Oct 15 16:42:33 2006
@@ -979,7 +979,7 @@
More information about Python's garbage collection
scheme can be found in section \ref{supporting-cycle-detection}.
- This field is inherited by subtypes together with \member{tp_clear}
+ This field is inherited by subtypes together with \member{tp_traverse}
and the \constant{Py_TPFLAGS_HAVE_GC} flag bit: the flag bit,
\member{tp_traverse}, and \member{tp_clear} are all inherited from
the base type if they are all zero in the subtype \emph{and} the
Modified: stackless/trunk/Doc/commontex/boilerplate.tex
==============================================================================
--- stackless/trunk/Doc/commontex/boilerplate.tex (original)
+++ stackless/trunk/Doc/commontex/boilerplate.tex Sun Oct 15 16:42:33 2006
@@ -5,5 +5,5 @@
Email: \email{docs at python.org}
}
-\date{17th August, 2006} % XXX update before final release!
+\date{\today} % XXX update before final release!
\input{patchlevel} % include Python version information
Modified: stackless/trunk/Doc/ext/extending.tex
==============================================================================
--- stackless/trunk/Doc/ext/extending.tex (original)
+++ stackless/trunk/Doc/ext/extending.tex Sun Oct 15 16:42:33 2006
@@ -221,6 +221,8 @@
PyObject *m;
m = Py_InitModule("spam", SpamMethods);
+ if (m == NULL)
+ return;
SpamError = PyErr_NewException("spam.error", NULL, NULL);
Py_INCREF(SpamError);
@@ -365,9 +367,9 @@
created module based upon the table (an array of \ctype{PyMethodDef}
structures) that was passed as its second argument.
\cfunction{Py_InitModule()} returns a pointer to the module object
-that it creates (which is unused here). It aborts with a fatal error
-if the module could not be initialized satisfactorily, so the caller
-doesn't need to check for errors.
+that it creates (which is unused here). It may abort with a fatal error
+for certain errors, or return \NULL{} if the module could not be
+initialized satisfactorily.
When embedding Python, the \cfunction{initspam()} function is not
called automatically unless there's an entry in the
@@ -1276,6 +1278,8 @@
PyObject *c_api_object;
m = Py_InitModule("spam", SpamMethods);
+ if (m == NULL)
+ return;
/* Initialize the C API pointer array */
PySpam_API[PySpam_System_NUM] = (void *)PySpam_System;
@@ -1362,7 +1366,9 @@
{
PyObject *m;
- Py_InitModule("client", ClientMethods);
+ m = Py_InitModule("client", ClientMethods);
+ if (m == NULL)
+ return;
if (import_spam() < 0)
return;
/* additional initialization can happen here */
Modified: stackless/trunk/Doc/lib/libbsddb.tex
==============================================================================
--- stackless/trunk/Doc/lib/libbsddb.tex (original)
+++ stackless/trunk/Doc/lib/libbsddb.tex Sun Oct 15 16:42:33 2006
@@ -19,21 +19,23 @@
3.3 thru 4.4.
\begin{seealso}
- \seeurl{http://pybsddb.sourceforge.net/}{The website with documentation
- for the \module{bsddb.db} python Berkeley DB interface that closely mirrors
- the Sleepycat object oriented interface provided in Berkeley DB 3 and 4.}
- \seeurl{http://www.sleepycat.com/}{Sleepycat Software produces the
- Berkeley DB library.}
+ \seeurl{http://pybsddb.sourceforge.net/}
+ {The website with documentation for the \module{bsddb.db}
+ Python Berkeley DB interface that closely mirrors the object
+ oriented interface provided in Berkeley DB 3 and 4.}
+
+ \seeurl{http://www.oracle.com/database/berkeley-db/}
+ {The Berkeley DB library.}
\end{seealso}
A more modern DB, DBEnv and DBSequence object interface is available in the
-\module{bsddb.db} module which closely matches the Sleepycat Berkeley DB C API
+\module{bsddb.db} module which closely matches the Berkeley DB C API
documented at the above URLs. Additional features provided by the
\module{bsddb.db} API include fine tuning, transactions, logging, and
multiprocess concurrent database access.
The following is a description of the legacy \module{bsddb} interface
-compatible with the old python bsddb module. Starting in Python 2.5 this
+compatible with the old Python bsddb module. Starting in Python 2.5 this
interface should be safe for multithreaded access. The \module{bsddb.db}
API is recommended for threading users as it provides better control.
Modified: stackless/trunk/Doc/lib/libcsv.tex
==============================================================================
--- stackless/trunk/Doc/lib/libcsv.tex (original)
+++ stackless/trunk/Doc/lib/libcsv.tex Sun Oct 15 16:42:33 2006
@@ -64,9 +64,9 @@
class or one of the strings returned by the \function{list_dialects}
function. The other optional {}\var{fmtparam} keyword arguments can be
given to override individual formatting parameters in the current
-dialect. For more information about the dialect and formatting
+dialect. For full details about the dialect and formatting
parameters, see section~\ref{csv-fmt-params}, ``Dialects and Formatting
-Parameters'' for details of these parameters.
+Parameters''.
All data read are returned as strings. No automatic data type
conversion is performed.
@@ -96,10 +96,10 @@
of a subclass of the \class{Dialect} class or one of the strings
returned by the \function{list_dialects} function. The other optional
{}\var{fmtparam} keyword arguments can be given to override individual
-formatting parameters in the current dialect. For more information
+formatting parameters in the current dialect. For full details
about the dialect and formatting parameters, see
-section~\ref{csv-fmt-params}, ``Dialects and Formatting Parameters'' for
-details of these parameters. To make it as easy as possible to
+section~\ref{csv-fmt-params}, ``Dialects and Formatting Parameters''.
+To make it as easy as possible to
interface with modules which implement the DB API, the value
\constant{None} is written as the empty string. While this isn't a
reversible transformation, it makes it easier to dump SQL NULL data values
@@ -113,9 +113,8 @@
or Unicode object. The dialect can be specified either by passing a
sub-class of \class{Dialect}, or by \var{fmtparam} keyword arguments,
or both, with keyword arguments overriding parameters of the dialect.
-For more information about the dialect and formatting parameters, see
-section~\ref{csv-fmt-params}, ``Dialects and Formatting Parameters''
-for details of these parameters.
+For full details about the dialect and formatting parameters, see
+section~\ref{csv-fmt-params}, ``Dialects and Formatting Parameters''.
\end{funcdesc}
\begin{funcdesc}{unregister_dialect}{name}
@@ -197,12 +196,13 @@
\begin{classdesc}{excel}{}
The \class{excel} class defines the usual properties of an Excel-generated
-CSV file.
+CSV file. It is registered with the dialect name \code{'excel'}.
\end{classdesc}
\begin{classdesc}{excel_tab}{}
The \class{excel_tab} class defines the usual properties of an
-Excel-generated TAB-delimited file.
+Excel-generated TAB-delimited file. It is registered with the dialect name
+\code{'excel-tab'}.
\end{classdesc}
\begin{classdesc}{Sniffer}{}
Modified: stackless/trunk/Doc/lib/libdatetime.tex
==============================================================================
--- stackless/trunk/Doc/lib/libdatetime.tex (original)
+++ stackless/trunk/Doc/lib/libdatetime.tex Sun Oct 15 16:42:33 2006
@@ -1421,19 +1421,21 @@
varies across platforms. Regardless of platform, years before 1900
cannot be used.
-\subsection{Examples}
-
-\subsubsection{Creating Datetime Objects from Formatted Strings}
-
-The \class{datetime} class does not directly support parsing formatted time
-strings. You can use \function{time.strptime} to do the parsing and create
-a \class{datetime} object from the tuple it returns:
-
-\begin{verbatim}
->>> s = "2005-12-06T12:13:14"
->>> from datetime import datetime
->>> from time import strptime
->>> datetime(*strptime(s, "%Y-%m-%dT%H:%M:%S")[0:6])
-datetime.datetime(2005, 12, 6, 12, 13, 14)
-\end{verbatim}
-
+%%% This example is obsolete, since strptime is now supported by datetime.
+%
+% \subsection{Examples}
+%
+% \subsubsection{Creating Datetime Objects from Formatted Strings}
+%
+% The \class{datetime} class does not directly support parsing formatted time
+% strings. You can use \function{time.strptime} to do the parsing and create
+% a \class{datetime} object from the tuple it returns:
+%
+% \begin{verbatim}
+% >>> s = "2005-12-06T12:13:14"
+% >>> from datetime import datetime
+% >>> from time import strptime
+% >>> datetime(*strptime(s, "%Y-%m-%dT%H:%M:%S")[0:6])
+% datetime.datetime(2005, 12, 6, 12, 13, 14)
+% \end{verbatim}
+%
Modified: stackless/trunk/Doc/lib/libdecimal.tex
==============================================================================
--- stackless/trunk/Doc/lib/libdecimal.tex (original)
+++ stackless/trunk/Doc/lib/libdecimal.tex Sun Oct 15 16:42:33 2006
@@ -435,36 +435,37 @@
the \function{getcontext()} and \function{setcontext()} functions:
\begin{funcdesc}{getcontext}{}
- Return the current context for the active thread.
+ Return the current context for the active thread.
\end{funcdesc}
\begin{funcdesc}{setcontext}{c}
- Set the current context for the active thread to \var{c}.
+ Set the current context for the active thread to \var{c}.
\end{funcdesc}
Beginning with Python 2.5, you can also use the \keyword{with} statement
-to temporarily change the active context. For example the following code
-increases the current decimal precision by 2 places, performs a
-calculation, and then automatically restores the previous context:
+and the \function{localcontext()} function to temporarily change the
+active context.
-\begin{verbatim}
-from __future__ import with_statement
-import decimal
-
-with decimal.getcontext() as ctx:
- ctx.prec += 2 # add 2 more digits of precision
- calculate_something()
+\begin{funcdesc}{localcontext}{\optional{c}}
+ Return a context manager that will set the current context for
+ the active thread to a copy of \var{c} on entry to the with-statement
+ and restore the previous context when exiting the with-statement. If
+ no context is specified, a copy of the current context is used.
+ \versionadded{2.5}
+
+ For example, the following code sets the current decimal precision
+ to 42 places, performs a calculation, and then automatically restores
+ the previous context:
+\begin{verbatim}
+ from __future__ import with_statement
+ from decimal import localcontext
+
+ with localcontext() as ctx:
+ ctx.prec = 42 # Perform a high precision calculation
+ s = calculate_something()
+ s = +s # Round the final result back to the default precision
\end{verbatim}
-
-The context that's active in the body of the \keyword{with} statement is
-a \emph{copy} of the context you provided to the \keyword{with}
-statement, so modifying its attributes doesn't affect anything except
-that temporary copy.
-
-You can use any decimal context in a \keyword{with} statement, but if
-you just want to make a temporary change to some aspect of the current
-context, it's easiest to just use \function{getcontext()} as shown
-above.
+\end{funcdesc}
New contexts can also be created using the \class{Context} constructor
described below. In addition, the module provides three pre-made
Modified: stackless/trunk/Doc/lib/libetree.tex
==============================================================================
--- stackless/trunk/Doc/lib/libetree.tex (original)
+++ stackless/trunk/Doc/lib/libetree.tex Sun Oct 15 16:42:33 2006
@@ -1,45 +1,34 @@
-\section{\module{elementtree} --- The xml.etree.ElementTree Module}
-\declaremodule{standard}{elementtree}
+\section{\module{xml.etree.ElementTree} --- The ElementTree XML API}
+\declaremodule{standard}{xml.etree.ElementTree}
\moduleauthor{Fredrik Lundh}{fredrik at pythonware.com}
-\modulesynopsis{This module provides implementations
-of the Element and ElementTree types, plus support classes.
+\modulesynopsis{Implementation of the ElementTree API.}
-A C version of this API is available as xml.etree.cElementTree.}
\versionadded{2.5}
-
-\subsection{Overview\label{elementtree-overview}}
-
The Element type is a flexible container object, designed to store
hierarchical data structures in memory. The type can be described as a
cross between a list and a dictionary.
Each element has a number of properties associated with it:
-\begin{itemize}
-\item {}
-a tag which is a string identifying what kind of data
-this element represents (the element type, in other words).
-
-\item {}
-a number of attributes, stored in a Python dictionary.
-
-\item {}
-a text string.
-
-\item {}
-an optional tail string.
-
-\item {}
-a number of child elements, stored in a Python sequence
+\begin{itemize}
+ \item a tag which is a string identifying what kind of data
+ this element represents (the element type, in other words).
+ \item a number of attributes, stored in a Python dictionary.
+ \item a text string.
+ \item an optional tail string.
+ \item a number of child elements, stored in a Python sequence
\end{itemize}
To create an element instance, use the Element or SubElement factory
functions.
-The ElementTree class can be used to wrap an element
+The \class{ElementTree} class can be used to wrap an element
structure, and convert it from and to XML.
+A C implementation of this API is available as
+\module{xml.etree.cElementTree}.
+
\subsection{Functions\label{elementtree-functions}}
Modified: stackless/trunk/Doc/lib/libfpectl.tex
==============================================================================
--- stackless/trunk/Doc/lib/libfpectl.tex (original)
+++ stackless/trunk/Doc/lib/libfpectl.tex Sun Oct 15 16:42:33 2006
@@ -7,6 +7,11 @@
\sectionauthor{Lee Busby}{busby1 at llnl.gov}
\modulesynopsis{Provide control for floating point exception handling.}
+\note{The \module{fpectl} module is not built by default, and its usage
+ is discouraged and may be dangerous except in the hands of
+ experts. See also the section \ref{fpectl-limitations} on
+ limitations for more details.}
+
Most computers carry out floating point operations\index{IEEE-754}
in conformance with the so-called IEEE-754 standard.
On any real computer,
@@ -95,7 +100,7 @@
\end{verbatim}
-\subsection{Limitations and other considerations}
+\subsection{Limitations and other considerations \label{fpectl-limitations}}
Setting up a given processor to trap IEEE-754 floating point
errors currently requires custom code on a per-architecture basis.
Modified: stackless/trunk/Doc/lib/libfuncs.tex
==============================================================================
--- stackless/trunk/Doc/lib/libfuncs.tex (original)
+++ stackless/trunk/Doc/lib/libfuncs.tex Sun Oct 15 16:42:33 2006
@@ -791,7 +791,7 @@
\begin{verbatim}
class C(object):
- def __init__(self): self.__x = None
+ def __init__(self): self._x = None
def getx(self): return self._x
def setx(self, value): self._x = value
def delx(self): del self._x
Modified: stackless/trunk/Doc/lib/libhashlib.tex
==============================================================================
--- stackless/trunk/Doc/lib/libhashlib.tex (original)
+++ stackless/trunk/Doc/lib/libhashlib.tex Sun Oct 15 16:42:33 2006
@@ -86,8 +86,8 @@
\begin{methoddesc}[hash]{digest}{}
Return the digest of the strings passed to the \method{update()}
-method so far. This is a 16-byte string which may contain
-non-\ASCII{} characters, including null bytes.
+method so far. This is a string of \member{digest_size} bytes which may
+contain non-\ASCII{} characters, including null bytes.
\end{methoddesc}
\begin{methoddesc}[hash]{hexdigest}{}
Modified: stackless/trunk/Doc/lib/libimp.tex
==============================================================================
--- stackless/trunk/Doc/lib/libimp.tex (original)
+++ stackless/trunk/Doc/lib/libimp.tex Sun Oct 15 16:42:33 2006
@@ -161,10 +161,10 @@
\begin{funcdesc}{init_builtin}{name}
Initialize the built-in module called \var{name} and return its module
-object. If the module was already initialized, it will be initialized
-\emph{again}. A few modules cannot be initialized twice --- attempting
-to initialize these again will raise an \exception{ImportError}
-exception. If there is no
+object along with storing it in \code{sys.modules}. If the module was already
+initialized, it will be initialized \emph{again}. Re-initialization involves
+the copying of the built-in module's \code{__dict__} from the cached
+module over the module's entry in \code{sys.modules}. If there is no
built-in module called \var{name}, \code{None} is returned.
\end{funcdesc}
@@ -208,14 +208,15 @@
\begin{funcdesc}{load_dynamic}{name, pathname\optional{, file}}
Load and initialize a module implemented as a dynamically loadable
shared library and return its module object. If the module was
-already initialized, it will be initialized \emph{again}. Some modules
-don't like that and may raise an exception. The \var{pathname}
-argument must point to the shared library. The \var{name} argument is
-used to construct the name of the initialization function: an external
-C function called \samp{init\var{name}()} in the shared library is
-called. The optional \var{file} argument is ignored. (Note: using
-shared libraries is highly system dependent, and not all systems
-support it.)
+already initialized, it will be initialized \emph{again}.
+Re-initialization involves copying the \code{__dict__} attribute of the cached
+instance of the module over the value used in the module cached in
+\code{sys.modules}. The \var{pathname} argument must point to the shared
+library. The \var{name} argument is used to construct the name of the
+initialization function: an external C function called
+\samp{init\var{name}()} in the shared library is called. The optional
+\var{file} argument is ignored. (Note: using shared libraries is highly
+system dependent, and not all systems support it.)
\end{funcdesc}
\begin{funcdesc}{load_source}{name, pathname\optional{, file}}
Modified: stackless/trunk/Doc/lib/liblogging.tex
==============================================================================
--- stackless/trunk/Doc/lib/liblogging.tex (original)
+++ stackless/trunk/Doc/lib/liblogging.tex Sun Oct 15 16:42:33 2006
@@ -528,8 +528,8 @@
\method{filter()}.
\end{methoddesc}
-\begin{methoddesc}{makeRecord}{name, lvl, fn, lno, msg, args, exc_info,
- func, extra}
+\begin{methoddesc}{makeRecord}{name, lvl, fn, lno, msg, args, exc_info
+ \optional{, func, extra}}
This is a factory method which can be overridden in subclasses to create
specialized \class{LogRecord} instances.
\versionchanged[\var{func} and \var{extra} were added]{2.5}
@@ -1479,7 +1479,7 @@
information to be logged.
\begin{classdesc}{LogRecord}{name, lvl, pathname, lineno, msg, args,
- exc_info}
+ exc_info \optional{, func}}
Returns an instance of \class{LogRecord} initialized with interesting
information. The \var{name} is the logger name; \var{lvl} is the
numeric level; \var{pathname} is the absolute pathname of the source
@@ -1489,7 +1489,9 @@
which, together with \var{msg}, makes up the user message; and
\var{exc_info} is the exception tuple obtained by calling
\function{sys.exc_info() }(or \constant{None}, if no exception information
-is available).
+is available). The \var{func} is the name of the function from which the
+logging call was made. If not specified, it defaults to \var{None}.
+\versionchanged[\var{func} was added]{2.5}
\end{classdesc}
\begin{methoddesc}{getMessage}{}
Modified: stackless/trunk/Doc/lib/libpyexpat.tex
==============================================================================
--- stackless/trunk/Doc/lib/libpyexpat.tex (original)
+++ stackless/trunk/Doc/lib/libpyexpat.tex Sun Oct 15 16:42:33 2006
@@ -216,9 +216,10 @@
\begin{memberdesc}[xmlparser]{returns_unicode}
If this attribute is set to a non-zero integer, the handler functions
-will be passed Unicode strings. If \member{returns_unicode} is 0,
-8-bit strings containing UTF-8 encoded data will be passed to the
-handlers.
+will be passed Unicode strings. If \member{returns_unicode} is
+\constant{False}, 8-bit strings containing UTF-8 encoded data will be
+passed to the handlers. This is \constant{True} by default when
+Python is built with Unicode support.
\versionchanged[Can be changed at any time to affect the result
type]{1.6}
\end{memberdesc}
Modified: stackless/trunk/Doc/lib/libsqlite3.tex
==============================================================================
--- stackless/trunk/Doc/lib/libsqlite3.tex (original)
+++ stackless/trunk/Doc/lib/libsqlite3.tex Sun Oct 15 16:42:33 2006
@@ -6,14 +6,16 @@
\sectionauthor{Gerhard Häring}{gh at ghaering.de}
\versionadded{2.5}
-SQLite is a C library that provides a SQL-language database that
-stores data in disk files without requiring a separate server process.
+SQLite is a C library that provides a lightweight disk-based database
+that doesn't require a separate server process and allows accessing
+the database using a nonstandard variant of the SQL query language.
+Some applications can use SQLite for internal data storage. It's also
+possible to prototype an application using SQLite and then port the
+code to a larger database such as PostgreSQL or Oracle.
+
pysqlite was written by Gerhard H\"aring and provides a SQL interface
compliant with the DB-API 2.0 specification described by
-\pep{249}. This means that it should be possible to write the first
-version of your applications using SQLite for data storage. If
-switching to a larger database such as PostgreSQL or Oracle is
-later necessary, the switch should be relatively easy.
+\pep{249}.
To use the module, you must first create a \class{Connection} object
that represents the database. Here the data will be stored in the
@@ -34,8 +36,8 @@
# Create table
c.execute('''create table stocks
-(date timestamp, trans varchar, symbol varchar,
- qty decimal, price decimal)''')
+(date text, trans text, symbol text,
+ qty real, price real)''')
# Insert a row of data
c.execute("""insert into stocks
@@ -144,11 +146,11 @@
wait for the lock to go away until raising an exception. The default for the
timeout parameter is 5.0 (five seconds).
-For the \var{isolation_level} parameter, please see \member{isolation_level}
-\ref{sqlite3-Connection-IsolationLevel} property of \class{Connection} objects.
+For the \var{isolation_level} parameter, please see the \member{isolation_level}
+property of \class{Connection} objects in section~\ref{sqlite3-Connection-IsolationLevel}.
SQLite natively supports only the types TEXT, INTEGER, FLOAT, BLOB and NULL. If
-you want to use other types, like you have to add support for them yourself.
+you want to use other types you must add support for them yourself.
The \var{detect_types} parameter and the using custom \strong{converters} registered with
the module-level \function{register_converter} function allow you to easily do that.
@@ -195,7 +197,7 @@
\verbatiminput{sqlite3/complete_statement.py}
\end{funcdesc}
-\begin{funcdesc}{}enable_callback_tracebacks{flag}
+\begin{funcdesc}{enable_callback_tracebacks}{flag}
By default you will not get any tracebacks in user-defined functions,
aggregates, converters, authorizer callbacks etc. If you want to debug them,
you can call this function with \var{flag} as True. Afterwards, you will get
@@ -210,13 +212,14 @@
\label{sqlite3-Connection-IsolationLevel}
\begin{memberdesc}{isolation_level}
Get or set the current isolation level. None for autocommit mode or one of
- "DEFERRED", "IMMEDIATE" or "EXLUSIVE". See Controlling Transactions
- \ref{sqlite3-Controlling-Transactions} for a more detailed explanation.
+ "DEFERRED", "IMMEDIATE" or "EXLUSIVE". See ``Controlling Transactions'',
+ section~\ref{sqlite3-Controlling-Transactions}, for a more detailed explanation.
\end{memberdesc}
\begin{methoddesc}{cursor}{\optional{cursorClass}}
The cursor method accepts a single optional parameter \var{cursorClass}.
- This is a custom cursor class which must extend \class{sqlite3.Cursor}.
+ If supplied, this must be a custom cursor class that extends
+ \class{sqlite3.Cursor}.
\end{methoddesc}
\begin{methoddesc}{execute}{sql, \optional{parameters}}
@@ -242,7 +245,7 @@
Creates a user-defined function that you can later use from within SQL
statements under the function name \var{name}. \var{num_params} is the number
of parameters the function accepts, and \var{func} is a Python callable that is
-called as SQL function.
+called as the SQL function.
The function can return any of the types supported by SQLite: unicode, str,
int, long, float, buffer and None.
@@ -272,7 +275,7 @@
Creates a collation with the specified \var{name} and \var{callable}. The
callable will be passed two string arguments. It should return -1 if the first
-is ordered lower than the second, 0 if they are ordered equal and 1 and if the
+is ordered lower than the second, 0 if they are ordered equal and 1 if the
first is ordered higher than the second. Note that this controls sorting
(ORDER BY in SQL) so your comparisons don't affect other SQL operations.
@@ -321,20 +324,21 @@
\begin{memberdesc}{row_factory}
You can change this attribute to a callable that accepts the cursor and
- the original row as tuple and will return the real result row. This
- way, you can implement more advanced ways of returning results, like
- ones that can also access columns by name.
+ the original row as a tuple and will return the real result row. This
+ way, you can implement more advanced ways of returning results, such
+ as returning an object that can also access columns by name.
Example:
\verbatiminput{sqlite3/row_factory.py}
- If the standard tuple types don't suffice for you, and you want name-based
+ If returning a tuple doesn't suffice and you want name-based
access to columns, you should consider setting \member{row_factory} to the
- highly-optimized sqlite3.Row type. It provides both
+ highly-optimized \class{sqlite3.Row} type. \class{Row} provides both
index-based and case-insensitive name-based access to columns with almost
- no memory overhead. Much better than your own custom dictionary-based
- approach or even a db_row based solution.
+ no memory overhead. It will probably be better than your own custom
+ dictionary-based approach or even a db_row based solution.
+ % XXX what's a db_row-based solution?
\end{memberdesc}
\begin{memberdesc}{text_factory}
@@ -348,7 +352,7 @@
attribute to \constant{sqlite3.OptimizedUnicode}.
You can also set it to any other callable that accepts a single bytestring
- parameter and returns the result object.
+ parameter and returns the resulting object.
See the following example code for illustration:
@@ -356,7 +360,7 @@
\end{memberdesc}
\begin{memberdesc}{total_changes}
- Returns the total number of database rows that have be modified, inserted,
+ Returns the total number of database rows that have been modified, inserted,
or deleted since the database connection was opened.
\end{memberdesc}
@@ -383,9 +387,9 @@
\verbatiminput{sqlite3/execute_2.py}
- \method{execute} will only execute a single SQL statement. If you try to
+ \method{execute()} will only execute a single SQL statement. If you try to
execute more than one statement with it, it will raise a Warning. Use
- \method{executescript} if want to execute multiple SQL statements with one
+ \method{executescript()} if you want to execute multiple SQL statements with one
call.
\end{methoddesc}
@@ -393,7 +397,7 @@
\begin{methoddesc}{executemany}{sql, seq_of_parameters}
Executes a SQL command against all parameter sequences or mappings found in the
sequence \var{sql}. The \module{sqlite3} module also allows
-to use an iterator yielding parameters instead of a sequence.
+using an iterator yielding parameters instead of a sequence.
\verbatiminput{sqlite3/executemany_1.py}
@@ -405,7 +409,7 @@
\begin{methoddesc}{executescript}{sql_script}
This is a nonstandard convenience method for executing multiple SQL statements
-at once. It issues a COMMIT statement before, then executes the SQL script it
+at once. It issues a COMMIT statement first, then executes the SQL script it
gets as a parameter.
\var{sql_script} can be a bytestring or a Unicode string.
@@ -462,20 +466,19 @@
\lineii{BLOB}{buffer}
\end{tableii}
-The type system of the \module{sqlite3} module is extensible in both ways: you can store
+The type system of the \module{sqlite3} module is extensible in two ways: you can store
additional Python types in a SQLite database via object adaptation, and you can
let the \module{sqlite3} module convert SQLite types to different Python types via
converters.
\subsubsection{Using adapters to store additional Python types in SQLite databases}
-Like described before, SQLite supports only a limited set of types natively. To
+As described before, SQLite supports only a limited set of types natively. To
use other Python types with SQLite, you must \strong{adapt} them to one of the sqlite3
-module's supported types for SQLite. So, one of NoneType, int, long, float,
+module's supported types for SQLite: one of NoneType, int, long, float,
str, unicode, buffer.
-The \module{sqlite3} module uses the Python object adaptation, like described in PEP 246
-for this. The protocol to use is \class{PrepareProtocol}.
+The \module{sqlite3} module uses Python object adaptation, as described in \pep{246} for this. The protocol to use is \class{PrepareProtocol}.
There are two ways to enable the \module{sqlite3} module to adapt a custom Python type
to one of the supported ones.
@@ -491,8 +494,8 @@
self.x, self.y = x, y
\end{verbatim}
-Now you want to store the point in a single SQLite column. You'll have to
-choose one of the supported types first that you use to represent the point in.
+Now you want to store the point in a single SQLite column. First you'll have to
+choose one of the supported types first to be used for representing the point.
Let's just use str and separate the coordinates using a semicolon. Then you
need to give your class a method \code{__conform__(self, protocol)} which must
return the converted value. The parameter \var{protocol} will be
@@ -505,13 +508,13 @@
The other possibility is to create a function that converts the type to the
string representation and register the function with \method{register_adapter}.
- \verbatiminput{sqlite3/adapter_point_2.py}
-
\begin{notice}
The type/class to adapt must be a new-style class, i. e. it must have
\class{object} as one of its bases.
\end{notice}
+ \verbatiminput{sqlite3/adapter_point_2.py}
+
The \module{sqlite3} module has two default adapters for Python's built-in
\class{datetime.date} and \class{datetime.datetime} types. Now let's suppose
we want to store \class{datetime.datetime} objects not in ISO representation,
@@ -521,16 +524,17 @@
\subsubsection{Converting SQLite values to custom Python types}
-Now that's all nice and dandy that you can send custom Python types to SQLite.
+Writing an adapter lets you send custom Python types to SQLite.
But to make it really useful we need to make the Python to SQLite to Python
-roundtrip work.
+roundtrip work.
Enter converters.
-Let's go back to the Point class. We stored the x and y coordinates separated
-via semicolons as strings in SQLite.
+Let's go back to the \class{Point} class. We stored the x and y
+coordinates separated via semicolons as strings in SQLite.
-Let's first define a converter function that accepts the string as a parameter and constructs a Point object from it.
+First, we'll define a converter function that accepts the string as a
+parameter and constructs a \class{Point} object from it.
\begin{notice}
Converter functions \strong{always} get called with a string, no matter
@@ -556,11 +560,12 @@
\item Explicitly via the column name
\end{itemize}
-Both ways are described at \ref{sqlite3-Module-Contents} in the text explaining
-the constants \constant{PARSE_DECLTYPES} and \constant{PARSE_COlNAMES}.
+Both ways are described in ``Module Constants'', section~\ref{sqlite3-Module-Contents}, in
+the entries for the constants \constant{PARSE_DECLTYPES} and
+\constant{PARSE_COLNAMES}.
-The following example illustrates both ways.
+The following example illustrates both approaches.
\verbatiminput{sqlite3/converter_point.py}
@@ -569,8 +574,8 @@
There are default adapters for the date and datetime types in the datetime
module. They will be sent as ISO dates/ISO timestamps to SQLite.
-The default converters are registered under the name "date" for datetime.date
-and under the name "timestamp" for datetime.datetime.
+The default converters are registered under the name "date" for \class{datetime.date}
+and under the name "timestamp" for \class{datetime.datetime}.
This way, you can use date/timestamps from Python without any additional
fiddling in most cases. The format of the adapters is also compatible with the
@@ -582,12 +587,12 @@
\subsection{Controlling Transactions \label{sqlite3-Controlling-Transactions}}
-By default, the \module{sqlite3} module opens transactions implicitly before a DML
-statement (INSERT/UPDATE/DELETE/REPLACE), and commits transactions implicitly
-before a non-DML, non-DQL statement (i. e. anything other than
+By default, the \module{sqlite3} module opens transactions implicitly before a Data Modification Language (DML)
+statement (i.e. INSERT/UPDATE/DELETE/REPLACE), and commits transactions implicitly
+before a non-DML, non-query statement (i. e. anything other than
SELECT/INSERT/UPDATE/DELETE/REPLACE).
-So if you are within a transaction, and issue a command like \code{CREATE TABLE
+So if you are within a transaction and issue a command like \code{CREATE TABLE
...}, \code{VACUUM}, \code{PRAGMA}, the \module{sqlite3} module will commit implicitly
before executing that command. There are two reasons for doing that. The first
is that some of these commands don't work within transactions. The other reason
@@ -616,17 +621,17 @@
Using the nonstandard \method{execute}, \method{executemany} and
\method{executescript} methods of the \class{Connection} object, your code can
-be written more concisely, because you don't have to create the - often
-superfluous \class{Cursor} objects explicitly. Instead, the \class{Cursor}
+be written more concisely because you don't have to create the (often
+superfluous) \class{Cursor} objects explicitly. Instead, the \class{Cursor}
objects are created implicitly and these shortcut methods return the cursor
-objects. This way, you can for example execute a SELECT statement and iterate
+objects. This way, you can execute a SELECT statement and iterate
over it directly using only a single call on the \class{Connection} object.
\verbatiminput{sqlite3/shortcut_methods.py}
\subsubsection{Accessing columns by name instead of by index}
-One cool feature of the \module{sqlite3} module is the builtin \class{sqlite3.Row} class
+One useful feature of the \module{sqlite3} module is the builtin \class{sqlite3.Row} class
designed to be used as a row factory.
Rows wrapped with this class can be accessed both by index (like tuples) and
Modified: stackless/trunk/Doc/lib/libstdtypes.tex
==============================================================================
--- stackless/trunk/Doc/lib/libstdtypes.tex (original)
+++ stackless/trunk/Doc/lib/libstdtypes.tex Sun Oct 15 16:42:33 2006
@@ -771,8 +771,8 @@
Split the string at the last occurrence of \var{sep}, and return
a 3-tuple containing the part before the separator, the separator
itself, and the part after the separator. If the separator is not
-found, return a 3-tuple containing the string itself, followed by
-two empty strings.
+found, return a 3-tuple containing two empty strings, followed by
+the string itself.
\versionadded{2.5}
\end{methoddesc}
@@ -1410,15 +1410,15 @@
{(1)}
\lineiii{\var{a}.clear()}{remove all items from \code{a}}{}
\lineiii{\var{a}.copy()}{a (shallow) copy of \code{a}}{}
- \lineiii{\var{a}.has_key(\var{k})}
+ \lineiii{\var{k} in \var{a}}
{\code{True} if \var{a} has a key \var{k}, else \code{False}}
- {}
- \lineiii{\var{k} \code{in} \var{a}}
- {Equivalent to \var{a}.has_key(\var{k})}
{(2)}
\lineiii{\var{k} not in \var{a}}
- {Equivalent to \code{not} \var{a}.has_key(\var{k})}
+ {Equivalent to \code{not} \var{k} in \var{a}}
{(2)}
+ \lineiii{\var{a}.has_key(\var{k})}
+ {Equivalent to \var{k} \code{in} \var{a}, use that form in new code}
+ {}
\lineiii{\var{a}.items()}
{a copy of \var{a}'s list of (\var{key}, \var{value}) pairs}
{(3)}
Modified: stackless/trunk/Doc/lib/libunittest.tex
==============================================================================
--- stackless/trunk/Doc/lib/libunittest.tex (original)
+++ stackless/trunk/Doc/lib/libunittest.tex Sun Oct 15 16:42:33 2006
@@ -212,8 +212,8 @@
class DefaultWidgetSizeTestCase(unittest.TestCase):
def runTest(self):
- widget = Widget("The widget")
- self.failUnless(widget.size() == (50,50), 'incorrect default size')
+ widget = Widget('The widget')
+ self.assertEqual(widget.size(), (50, 50), 'incorrect default size')
\end{verbatim}
Note that in order to test something, we use the one of the
@@ -247,7 +247,7 @@
class SimpleWidgetTestCase(unittest.TestCase):
def setUp(self):
- self.widget = Widget("The widget")
+ self.widget = Widget('The widget')
class DefaultWidgetSizeTestCase(SimpleWidgetTestCase):
def runTest(self):
@@ -273,7 +273,7 @@
class SimpleWidgetTestCase(unittest.TestCase):
def setUp(self):
- self.widget = Widget("The widget")
+ self.widget = Widget('The widget')
def tearDown(self):
self.widget.dispose()
@@ -298,7 +298,7 @@
class WidgetTestCase(unittest.TestCase):
def setUp(self):
- self.widget = Widget("The widget")
+ self.widget = Widget('The widget')
def tearDown(self):
self.widget.dispose()
@@ -322,8 +322,8 @@
passing the method name in the constructor:
\begin{verbatim}
-defaultSizeTestCase = WidgetTestCase("testDefaultSize")
-resizeTestCase = WidgetTestCase("testResize")
+defaultSizeTestCase = WidgetTestCase('testDefaultSize')
+resizeTestCase = WidgetTestCase('testResize')
\end{verbatim}
Test case instances are grouped together according to the features
@@ -333,8 +333,8 @@
\begin{verbatim}
widgetTestSuite = unittest.TestSuite()
-widgetTestSuite.addTest(WidgetTestCase("testDefaultSize"))
-widgetTestSuite.addTest(WidgetTestCase("testResize"))
+widgetTestSuite.addTest(WidgetTestCase('testDefaultSize'))
+widgetTestSuite.addTest(WidgetTestCase('testResize'))
\end{verbatim}
For the ease of running tests, as we will see later, it is a good
@@ -344,8 +344,8 @@
\begin{verbatim}
def suite():
suite = unittest.TestSuite()
- suite.addTest(WidgetTestCase("testDefaultSize"))
- suite.addTest(WidgetTestCase("testResize"))
+ suite.addTest(WidgetTestCase('testDefaultSize'))
+ suite.addTest(WidgetTestCase('testResize'))
return suite
\end{verbatim}
@@ -353,7 +353,7 @@
\begin{verbatim}
def suite():
- tests = ["testDefaultSize", "testResize"]
+ tests = ['testDefaultSize', 'testResize']
return unittest.TestSuite(map(WidgetTestCase, tests))
\end{verbatim}
@@ -462,7 +462,7 @@
\subsection{Classes and functions
\label{unittest-contents}}
-\begin{classdesc}{TestCase}{}
+\begin{classdesc}{TestCase}{\optional{methodName}}
Instances of the \class{TestCase} class represent the smallest
testable units in the \module{unittest} universe. This class is
intended to be used as a base class, with specific tests being
@@ -470,6 +470,23 @@
interface needed by the test runner to allow it to drive the
test, and methods that the test code can use to check for and
report various kinds of failure.
+
+ Each instance of \class{TestCase} will run a single test method:
+ the method named \var{methodName}. If you remember, we had an
+ earlier example that went something like this:
+
+ \begin{verbatim}
+ def suite():
+ suite = unittest.TestSuite()
+ suite.addTest(WidgetTestCase('testDefaultSize'))
+ suite.addTest(WidgetTestCase('testResize'))
+ return suite
+ \end{verbatim}
+
+ Here, we create two instances of \class{WidgetTestCase}, each of
+ which runs a single test.
+
+ \var{methodName} defaults to \code{'runTest'}.
\end{classdesc}
\begin{classdesc}{FunctionTestCase}{testFunc\optional{,
@@ -502,6 +519,11 @@
subclass.
\end{classdesc}
+\begin{classdesc}{TestResult}{}
+ This class is used to compile information about which tests have succeeded
+ and which have failed.
+\end{classdesc}
+
\begin{datadesc}{defaultTestLoader}
Instance of the \class{TestLoader} class intended to be shared. If no
customization of the \class{TestLoader} is needed, this instance can
@@ -574,8 +596,9 @@
\begin{methoddesc}[TestCase]{run}{\optional{result}}
Run the test, collecting the result into the test result object
passed as \var{result}. If \var{result} is omitted or \constant{None},
- a temporary result object is created and used, but is not made
- available to the caller.
+ a temporary result object is created (by calling the
+ \method{defaultTestCase()} method) and used; this result object is not
+ returned to \method{run()}'s caller.
The same effect may be had by simply calling the \class{TestCase}
instance.
@@ -684,8 +707,13 @@
\end{methoddesc}
\begin{methoddesc}[TestCase]{defaultTestResult}{}
- Return the default type of test result object to be used to run this
- test.
+ Return an instance of the test result class that should be used
+ for this test case class (if no other result instance is provided
+ to the \method{run()} method).
+
+ For \class{TestCase} instances, this will always be an instance of
+ \class{TestResult}; subclasses of \class{TestCase} should
+ override this as necessary.
\end{methoddesc}
\begin{methoddesc}[TestCase]{id}{}
@@ -761,26 +789,20 @@
tests for reporting purposes; a \class{TestResult} instance is
returned by the \method{TestRunner.run()} method for this purpose.
-Each instance holds the total number of tests run, and collections of
-failures and errors that occurred among those test runs. The
-collections contain tuples of \code{(\var{testcase},
-\var{traceback})}, where \var{traceback} is a string containing a
-formatted version of the traceback for the exception.
-
\class{TestResult} instances have the following attributes that will
be of interest when inspecting the results of running a set of tests:
\begin{memberdesc}[TestResult]{errors}
A list containing 2-tuples of \class{TestCase} instances and
- formatted tracebacks. Each tuple represents a test which raised an
- unexpected exception.
+ strings holding formatted tracebacks. Each tuple represents a test which
+ raised an unexpected exception.
\versionchanged[Contains formatted tracebacks instead of
\function{sys.exc_info()} results]{2.2}
\end{memberdesc}
\begin{memberdesc}[TestResult]{failures}
- A list containing 2-tuples of \class{TestCase} instances and
- formatted tracebacks. Each tuple represents a test where a failure
+ A list containing 2-tuples of \class{TestCase} instances and strings
+ holding formatted tracebacks. Each tuple represents a test where a failure
was explicitly signalled using the \method{TestCase.fail*()} or
\method{TestCase.assert*()} methods.
\versionchanged[Contains formatted tracebacks instead of
@@ -817,17 +839,25 @@
\begin{methoddesc}[TestResult]{startTest}{test}
Called when the test case \var{test} is about to be run.
+
+ The default implementation simply increments the instance's
+ \code{testsRun} counter.
\end{methoddesc}
\begin{methoddesc}[TestResult]{stopTest}{test}
- Called when the test case \var{test} has been executed, regardless
+ Called after the test case \var{test} has been executed, regardless
of the outcome.
+
+ The default implementation does nothing.
\end{methoddesc}
\begin{methoddesc}[TestResult]{addError}{test, err}
Called when the test case \var{test} raises an unexpected exception
\var{err} is a tuple of the form returned by \function{sys.exc_info()}:
\code{(\var{type}, \var{value}, \var{traceback})}.
+
+ The default implementation appends \code{(\var{test}, \var{err})} to
+ the instance's \code{errors} attribute.
\end{methoddesc}
\begin{methoddesc}[TestResult]{addFailure}{test, err}
@@ -835,10 +865,15 @@
\var{err} is a tuple of the form returned by
\function{sys.exc_info()}: \code{(\var{type}, \var{value},
\var{traceback})}.
+
+ The default implementation appends \code{(\var{test}, \var{err})} to
+ the instance's \code{failures} attribute.
\end{methoddesc}
\begin{methoddesc}[TestResult]{addSuccess}{test}
Called when the test case \var{test} succeeds.
+
+ The default implementation does nothing.
\end{methoddesc}
@@ -878,9 +913,12 @@
Return a suite of all tests cases given a string specifier.
The specifier \var{name} is a ``dotted name'' that may resolve
- either to a module, a test case class, a \class{TestSuite} instance,
- a test method within a test case class, or a callable object which
- returns a \class{TestCase} or \class{TestSuite} instance.
+ either to a module, a test case class, a test method within a test
+ case class, a \class{TestSuite} instance, or a callable object which
+ returns a \class{TestCase} or \class{TestSuite} instance. These checks
+ are applied in the order listed here; that is, a method on a possible
+ test case class will be picked up as ``a test method within a test
+ case class'', rather than ``a callable object''.
For example, if you have a module \module{SampleTests} containing a
\class{TestCase}-derived class \class{SampleTestCase} with three test
@@ -905,7 +943,7 @@
\begin{methoddesc}[TestLoader]{getTestCaseNames}{testCaseClass}
Return a sorted sequence of method names found within
- \var{testCaseClass}.
+ \var{testCaseClass}; this should be a subclass of \class{TestCase}.
\end{methoddesc}
Modified: stackless/trunk/Doc/lib/liburlparse.tex
==============================================================================
--- stackless/trunk/Doc/lib/liburlparse.tex (original)
+++ stackless/trunk/Doc/lib/liburlparse.tex Sun Oct 15 16:42:33 2006
@@ -142,7 +142,7 @@
\begin{funcdesc}{urljoin}{base, url\optional{, allow_fragments}}
Construct a full (``absolute'') URL by combining a ``base URL''
-(\var{base}) with a ``relative URL'' (\var{url}). Informally, this
+(\var{base}) with another URL (\var{url}). Informally, this
uses components of the base URL, in particular the addressing scheme,
the network location and (part of) the path, to provide missing
components in the relative URL. For example:
@@ -155,6 +155,20 @@
The \var{allow_fragments} argument has the same meaning and default as
for \function{urlparse()}.
+
+\note{If \var{url} is an absolute URL (that is, starting with \code{//}
+ or \code{scheme://}, the \var{url}'s host name and/or scheme
+ will be present in the result. For example:}
+
+\begin{verbatim}
+>>> urljoin('http://www.cwi.nl/%7Eguido/Python.html',
+... '//www.python.org/%7Eguido')
+'http://www.python.org/%7Eguido'
+\end{verbatim}
+
+If you do not want that behavior, preprocess
+the \var{url} with \function{urlsplit()} and \function{urlunsplit()},
+removing possible \em{scheme} and \em{netloc} parts.
\end{funcdesc}
\begin{funcdesc}{urldefrag}{url}
Modified: stackless/trunk/Doc/lib/libuuid.tex
==============================================================================
--- stackless/trunk/Doc/lib/libuuid.tex (original)
+++ stackless/trunk/Doc/lib/libuuid.tex Sun Oct 15 16:42:33 2006
@@ -18,20 +18,11 @@
network address. \function{uuid4()} creates a random UUID.
\begin{classdesc}{UUID}{\optional{hex\optional{, bytes\optional{,
-fields\optional{, int\optional{, version}}}}}}
-
-%Instances of the UUID class represent UUIDs as specified in RFC 4122.
-%UUID objects are immutable, hashable, and usable as dictionary keys.
-%Converting a UUID to a string with str() yields something in the form
-%'12345678-1234-1234-1234-123456789abc'. The UUID constructor accepts
-%four possible forms: a similar string of hexadecimal digits, or a
-%string of 16 raw bytes as an argument named 'bytes', or a tuple of
-%six integer fields (with 32-bit, 16-bit, 16-bit, 8-bit, 8-bit, and
-%48-bit values respectively) as an argument named 'fields', or a single
-%128-bit integer as an argument named 'int'.
+bytes_le\optional{, fields\optional{, int\optional{, version}}}}}}}
Create a UUID from either a string of 32 hexadecimal digits,
-a string of 16 bytes as the \var{bytes} argument, a tuple of six
+a string of 16 bytes as the \var{bytes} argument, a string of 16 bytes
+in little-endian order as the \var{bytes_le} argument, a tuple of six
integers (32-bit \var{time_low}, 16-bit \var{time_mid},
16-bit \var{time_hi_version},
8-bit \var{clock_seq_hi_variant}, 8-bit \var{clock_seq_low}, 48-bit \var{node})
@@ -45,22 +36,31 @@
UUID('12345678123456781234567812345678')
UUID('urn:uuid:12345678-1234-5678-1234-567812345678')
UUID(bytes='\x12\x34\x56\x78'*4)
+UUID(bytes_le='\x78\x56\x34\x12\x34\x12\x78\x56' +
+ '\x12\x34\x56\x78\x12\x34\x56\x78')
UUID(fields=(0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x567812345678))
UUID(int=0x12345678123456781234567812345678)
\end{verbatim}
-Exactly one of \var{hex}, \var{bytes}, \var{fields}, or \var{int} must
+Exactly one of \var{hex}, \var{bytes}, \var{bytes_le}, \var{fields},
+or \var{int} must
be given. The \var{version} argument is optional; if given, the
resulting UUID will have its variant and version number set according to
RFC 4122, overriding bits in the given \var{hex}, \var{bytes},
-\var{fields}, or \var{int}.
+\var{bytes_le}, \var{fields}, or \var{int}.
\end{classdesc}
\class{UUID} instances have these read-only attributes:
\begin{memberdesc}{bytes}
-The UUID as a 16-byte string.
+The UUID as a 16-byte string (containing the six
+integer fields in big-endian byte order).
+\end{memberdesc}
+
+\begin{memberdesc}{bytes_le}
+The UUID as a 16-byte string (with \var{time_low}, \var{time_mid},
+and \var{time_hi_version} in little-endian byte order).
\end{memberdesc}
\begin{memberdesc}{fields}
@@ -95,10 +95,10 @@
\begin{memberdesc}{variant}
The UUID variant, which determines the internal layout of the UUID.
-This will be an integer equal to one of the constants
+This will be one of the integer constants
\constant{RESERVED_NCS},
\constant{RFC_4122}, \constant{RESERVED_MICROSOFT}, or
-\constant{RESERVED_FUTURE}).
+\constant{RESERVED_FUTURE}.
\end{memberdesc}
\begin{memberdesc}{version}
@@ -106,7 +106,7 @@
when the variant is \constant{RFC_4122}).
\end{memberdesc}
-The \module{uuid} module defines the following functions
+The \module{uuid} module defines the following functions:
\begin{funcdesc}{getnode}{}
Get the hardware address as a 48-bit positive integer. The first time this
@@ -129,11 +129,8 @@
\index{uuid1}
\begin{funcdesc}{uuid3}{namespace, name}
-Generate a UUID based upon a MD5 hash of the \var{name} string value
-drawn from a specified namespace. \var{namespace}
-must be one of \constant{NAMESPACE_DNS},
-\constant{NAMESPACE_URL}, \constant{NAMESPACE_OID},
-or \constant{NAMESPACE_X500}.
+Generate a UUID based on the MD5 hash
+of a namespace identifier (which is a UUID) and a name (which is a string).
\end{funcdesc}
\index{uuid3}
@@ -143,31 +140,32 @@
\index{uuid4}
\begin{funcdesc}{uuid5}{namespace, name}
-Generate a UUID based upon a SHA-1 hash of the \var{name} string value
-drawn from a specified namespace. \var{namespace}
-must be one of \constant{NAMESPACE_DNS},
-\constant{NAMESPACE_URL}, \constant{NAMESPACE_OID},
-or \constant{NAMESPACE_X500}.
+Generate a UUID based on the SHA-1 hash
+of a namespace identifier (which is a UUID) and a name (which is a string).
\end{funcdesc}
\index{uuid5}
-The \module{uuid} module defines the following namespace constants
+The \module{uuid} module defines the following namespace identifiers
for use with \function{uuid3()} or \function{uuid5()}.
\begin{datadesc}{NAMESPACE_DNS}
-Fully-qualified domain name namespace UUID.
+When this namespace is specified,
+the \var{name} string is a fully-qualified domain name.
\end{datadesc}
\begin{datadesc}{NAMESPACE_URL}
-URL namespace UUID.
+When this namespace is specified,
+the \var{name} string is a URL.
\end{datadesc}
\begin{datadesc}{NAMESPACE_OID}
-ISO OID namespace UUID.
+When this namespace is specified,
+the \var{name} string is an ISO OID.
\end{datadesc}
\begin{datadesc}{NAMESPACE_X500}
-X.500 DN namespace UUID.
+When this namespace is specified,
+the \var{name} string is an X.500 DN in DER or a text output format.
\end{datadesc}
The \module{uuid} module defines the following constants
@@ -178,11 +176,11 @@
\end{datadesc}
\begin{datadesc}{RFC_4122}
-Uses UUID layout specified in \rfc{4122}.
+Specifies the UUID layout given in \rfc{4122}.
\end{datadesc}
\begin{datadesc}{RESERVED_MICROSOFT}
-Reserved for Microsoft backward compatibility.
+Reserved for Microsoft compatibility.
\end{datadesc}
\begin{datadesc}{RESERVED_FUTURE}
@@ -192,12 +190,13 @@
\begin{seealso}
\seerfc{4122}{A Universally Unique IDentifier (UUID) URN Namespace}{
- This specifies a Uniform Resource Name namespace for UUIDs.}
+This specification defines a Uniform Resource Name namespace for UUIDs,
+the internal format of UUIDs, and methods of generating UUIDs.}
\end{seealso}
\subsection{Example \label{uuid-example}}
-Here is a typical usage:
+Here are some examples of typical usage of the \module{uuid} module:
\begin{verbatim}
>>> import uuid
Modified: stackless/trunk/Doc/lib/sqlite3/executescript.py
==============================================================================
--- stackless/trunk/Doc/lib/sqlite3/executescript.py (original)
+++ stackless/trunk/Doc/lib/sqlite3/executescript.py Sun Oct 15 16:42:33 2006
@@ -17,7 +17,7 @@
insert into book(title, author, published)
values (
- 'Dirk Gently''s Holistic Detective Agency
+ 'Dirk Gently''s Holistic Detective Agency',
'Douglas Adams',
1987
);
Modified: stackless/trunk/Doc/perl/python.perl
==============================================================================
--- stackless/trunk/Doc/perl/python.perl (original)
+++ stackless/trunk/Doc/perl/python.perl Sun Oct 15 16:42:33 2006
@@ -883,6 +883,12 @@
$filename = 'grammar.txt';
}
open(GRAMMAR, ">$filename") || die "\n$!\n";
+ print GRAMMAR "##################################################\n";
+ print GRAMMAR "# This file is only meant to be a guide, #\n";
+ print GRAMMAR "# and differs in small ways from the real #\n";
+ print GRAMMAR "# grammar. The exact reference is the file #\n";
+ print GRAMMAR "# Grammar/Grammar distributed with the source. #\n";
+ print GRAMMAR "##################################################\n";
print GRAMMAR strip_grammar_markup($DefinedGrammars{$lang});
close(GRAMMAR);
print "Wrote grammar file $filename\n";
Modified: stackless/trunk/Doc/ref/ref3.tex
==============================================================================
--- stackless/trunk/Doc/ref/ref3.tex (original)
+++ stackless/trunk/Doc/ref/ref3.tex Sun Oct 15 16:42:33 2006
@@ -379,6 +379,41 @@
\end{description} % Sequences
+
+\item[Set types]
+These represent unordered, finite sets of unique, immutable objects.
+As such, they cannot be indexed by any subscript. However, they can be
+iterated over, and the built-in function \function{len()} returns the
+number of items in a set. Common uses for sets are
+fast membership testing, removing duplicates from a sequence, and
+computing mathematical operations such as intersection, union, difference,
+and symmetric difference.
+\bifuncindex{len}
+\obindex{set type}
+
+For set elements, the same immutability rules apply as for dictionary
+keys. Note that numeric types obey the normal rules for numeric
+comparison: if two numbers compare equal (e.g., \code{1} and
+\code{1.0}), only one of them can be contained in a set.
+
+There are currently two intrinsic set types:
+
+\begin{description}
+
+\item[Sets]
+These\obindex{set} represent a mutable set. They are created by the
+built-in \function{set()} constructor and can be modified afterwards
+by several methods, such as \method{add()}.
+
+\item[Frozen sets]
+These\obindex{frozenset} represent an immutable set. They are created by
+the built-in \function{frozenset()} constructor. As a frozenset is
+immutable and hashable, it can be used again as an element of another set,
+or as a dictionary key.
+
+\end{description} % Set types
+
+
\item[Mappings]
These represent finite sets of objects indexed by arbitrary index sets.
The subscript notation \code{a[k]} selects the item indexed
@@ -762,7 +797,7 @@
(call it~\class{C}) of the instance for which the attribute reference
was initiated or one of its bases,
it is transformed into a bound user-defined method object whose
-\member{im_class} attribute is~\class{C} whose \member{im_self} attribute
+\member{im_class} attribute is~\class{C} and whose \member{im_self} attribute
is the instance. Static method and class method objects are also
transformed, as if they had been retrieved from class~\class{C};
see above under ``Classes''. See section~\ref{descriptors} for
Modified: stackless/trunk/Doc/tut/tut.tex
==============================================================================
--- stackless/trunk/Doc/tut/tut.tex (original)
+++ stackless/trunk/Doc/tut/tut.tex Sun Oct 15 16:42:33 2006
@@ -2855,7 +2855,7 @@
*}? Ideally, one would hope that this somehow goes out to the
filesystem, finds which submodules are present in the package, and
imports them all. Unfortunately, this operation does not work very
-well on Mac and Windows platforms, where the filesystem does not
+well on Windows platforms, where the filesystem does not
always have accurate information about the case of a filename! On
these platforms, there is no guaranteed way to know whether a file
\file{ECHO.PY} should be imported as a module \module{echo},
@@ -3060,6 +3060,7 @@
8 64 512
9 81 729
10 100 1000
+
>>> for x in range(1,11):
... print '%2d %3d %4d' % (x, x*x, x*x*x)
...
@@ -3075,8 +3076,9 @@
10 100 1000
\end{verbatim}
-(Note that one space between each column was added by the way
-\keyword{print} works: it always adds spaces between its arguments.)
+(Note that in the first example, one space between each column was
+added by the way \keyword{print} works: it always adds spaces between
+its arguments.)
This example demonstrates the \method{rjust()} method of string objects,
which right-justifies a string in a field of a given width by padding
@@ -3539,7 +3541,7 @@
But use of \code{.args} is discouraged. Instead, the preferred use is to pass
a single argument to an exception (which can be a tuple if multiple arguments
-are needed) and have it bound to the \code{message} attribute. One my also
+are needed) and have it bound to the \code{message} attribute. One may also
instantiate an exception first before raising it and add any attributes to it
as desired.
@@ -4381,7 +4383,7 @@
makes use of private variables of the base class possible.)
Notice that code passed to \code{exec}, \code{eval()} or
-\code{evalfile()} does not consider the classname of the invoking
+\code{execfile()} does not consider the classname of the invoking
class to be the current class; this is similar to the effect of the
\code{global} statement, the effect of which is likewise restricted to
code that is byte-compiled together. The same restriction applies to
Modified: stackless/trunk/Doc/whatsnew/whatsnew25.tex
==============================================================================
--- stackless/trunk/Doc/whatsnew/whatsnew25.tex (original)
+++ stackless/trunk/Doc/whatsnew/whatsnew25.tex Sun Oct 15 16:42:33 2006
@@ -409,7 +409,7 @@
specific exceptions. You couldn't combine both \keyword{except} blocks and a
\keyword{finally} block, because generating the right bytecode for the
combined version was complicated and it wasn't clear what the
-semantics of the combined should be.
+semantics of the combined statement should be.
Guido van~Rossum spent some time working with Java, which does support the
equivalent of combining \keyword{except} blocks and a
@@ -540,10 +540,10 @@
StopIteration
\end{verbatim}
-Because \keyword{yield} will often be returning \constant{None}, you
+\keyword{yield} will usually return \constant{None}, you
should always check for this case. Don't just use its value in
expressions unless you're sure that the \method{send()} method
-will be the only method used resume your generator function.
+will be the only method used to resume your generator function.
In addition to \method{send()}, there are two other new methods on
generators:
@@ -683,22 +683,22 @@
The lock is acquired before the block is executed and always released once
the block is complete.
-The \module{decimal} module's contexts, which encapsulate the desired
-precision and rounding characteristics for computations, provide a
-\method{context_manager()} method for getting a context manager:
+The new \function{localcontext()} function in the \module{decimal} module
+makes it easy to save and restore the current decimal context, which
+encapsulates the desired precision and rounding characteristics for
+computations:
\begin{verbatim}
-import decimal
+from decimal import Decimal, Context, localcontext
# Displays with default precision of 28 digits
-v1 = decimal.Decimal('578')
-print v1.sqrt()
+v = Decimal('578')
+print v.sqrt()
-ctx = decimal.Context(prec=16)
-with ctx.context_manager():
+with localcontext(Context(prec=16)):
# All code in this block uses a precision of 16 digits.
# The original context is restored on exiting the block.
- print v1.sqrt()
+ print v.sqrt()
\end{verbatim}
\subsection{Writing Context Managers\label{context-managers}}
@@ -1115,12 +1115,14 @@
\begin{verbatim}
>>> ('http://www.python.org').partition('://')
('http', '://', 'www.python.org')
->>> (u'Subject: a quick question').partition(':')
-(u'Subject', u':', u' a quick question')
>>> ('file:/usr/share/doc/index.html').partition('://')
('file:/usr/share/doc/index.html', '', '')
+>>> (u'Subject: a quick question').partition(':')
+(u'Subject', u':', u' a quick question')
>>> 'www.python.org'.rpartition('.')
('www.python', '.', 'org')
+>>> 'www.python.org'.rpartition(':')
+('', '', 'www.python.org')
\end{verbatim}
(Implemented by Fredrik Lundh following a suggestion by Raymond Hettinger.)
@@ -2114,14 +2116,16 @@
SQLite embedded database, has been added to the standard library under
the package name \module{sqlite3}.
-SQLite is a C library that provides a SQL-language database that
-stores data in disk files without requiring a separate server process.
+SQLite is a C library that provides a lightweight disk-based database
+that doesn't require a separate server process and allows accessing
+the database using a nonstandard variant of the SQL query language.
+Some applications can use SQLite for internal data storage. It's also
+possible to prototype an application using SQLite and then port the
+code to a larger database such as PostgreSQL or Oracle.
+
pysqlite was written by Gerhard H\"aring and provides a SQL interface
compliant with the DB-API 2.0 specification described by
-\pep{249}. This means that it should be possible to write the first
-version of your applications using SQLite for data storage. If
-switching to a larger database such as PostgreSQL or Oracle is
-later necessary, the switch should be relatively easy.
+\pep{249}.
If you're compiling the Python source yourself, note that the source
tree doesn't include the SQLite code, only the wrapper module.
@@ -2148,8 +2152,8 @@
# Create table
c.execute('''create table stocks
-(date timestamp, trans varchar, symbol varchar,
- qty decimal, price decimal)''')
+(date text, trans text, symbol text,
+ qty real, price real)''')
# Insert a row of data
c.execute("""insert into stocks
Modified: stackless/trunk/Grammar/Grammar
==============================================================================
--- stackless/trunk/Grammar/Grammar (original)
+++ stackless/trunk/Grammar/Grammar Sun Oct 15 16:42:33 2006
@@ -64,8 +64,8 @@
import_name: 'import' dotted_as_names
import_from: ('from' ('.'* dotted_name | '.'+)
'import' ('*' | '(' import_as_names ')' | import_as_names))
-import_as_name: NAME [('as' | NAME) NAME]
-dotted_as_name: dotted_name [('as' | NAME) NAME]
+import_as_name: NAME ['as' NAME]
+dotted_as_name: dotted_name ['as' NAME]
import_as_names: import_as_name (',' import_as_name)* [',']
dotted_as_names: dotted_as_name (',' dotted_as_name)*
dotted_name: NAME ('.' NAME)*
@@ -83,7 +83,7 @@
['finally' ':' suite] |
'finally' ':' suite))
with_stmt: 'with' test [ with_var ] ':' suite
-with_var: ('as' | NAME) expr
+with_var: 'as' expr
# NB compile.c makes sure that the default except clause is last
except_clause: 'except' [test [',' test]]
suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT
Modified: stackless/trunk/Include/code.h
==============================================================================
--- stackless/trunk/Include/code.h (original)
+++ stackless/trunk/Include/code.h Sun Oct 15 16:42:33 2006
@@ -52,7 +52,9 @@
/* This should be defined if a future statement modifies the syntax.
For example, when a keyword is added.
*/
+#if 0
#define PY_PARSER_REQUIRES_FUTURE_KEYWORD
+#endif
#define CO_MAXBLOCKS 20 /* Max static block nesting within a function */
@@ -88,6 +90,9 @@
PyAPI_FUNC(int) PyCode_CheckLineNumber(PyCodeObject* co,
int lasti, PyAddrPair *bounds);
+PyAPI_FUNC(PyObject*) PyCode_Optimize(PyObject *code, PyObject* consts,
+ PyObject *names, PyObject *lineno_obj);
+
#ifdef __cplusplus
}
#endif
Modified: stackless/trunk/Include/import.h
==============================================================================
--- stackless/trunk/Include/import.h (original)
+++ stackless/trunk/Include/import.h Sun Oct 15 16:42:33 2006
@@ -22,7 +22,7 @@
PyAPI_FUNC(PyObject *) PyImport_ImportModuleEx(
char *name, PyObject *globals, PyObject *locals, PyObject *fromlist);
#define PyImport_ImportModuleEx(n, g, l, f) \
- PyImport_ImportModuleLevel(n, g, l, f, -1);
+ PyImport_ImportModuleLevel(n, g, l, f, -1)
PyAPI_FUNC(PyObject *) PyImport_Import(PyObject *name);
PyAPI_FUNC(PyObject *) PyImport_ReloadModule(PyObject *m);
Modified: stackless/trunk/Include/parsetok.h
==============================================================================
--- stackless/trunk/Include/parsetok.h (original)
+++ stackless/trunk/Include/parsetok.h Sun Oct 15 16:42:33 2006
@@ -23,7 +23,9 @@
#define PyPARSE_DONT_IMPLY_DEDENT 0x0002
+#if 0
#define PyPARSE_WITH_IS_KEYWORD 0x0003
+#endif
PyAPI_FUNC(node *) PyParser_ParseString(const char *, grammar *, int,
perrdetail *);
Modified: stackless/trunk/Include/patchlevel.h
==============================================================================
--- stackless/trunk/Include/patchlevel.h (original)
+++ stackless/trunk/Include/patchlevel.h Sun Oct 15 16:42:33 2006
@@ -20,13 +20,13 @@
/* Version parsed out into numeric values */
#define PY_MAJOR_VERSION 2
-#define PY_MINOR_VERSION 5
+#define PY_MINOR_VERSION 6
#define PY_MICRO_VERSION 0
-#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_GAMMA
-#define PY_RELEASE_SERIAL 1
+#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_ALPHA
+#define PY_RELEASE_SERIAL 0
/* Version as a string */
-#define PY_VERSION "2.5c1"
+#define PY_VERSION "2.6a0"
/* Subversion Revision number of this file (not of the repository) */
#define PY_PATCHLEVEL_REVISION "$Revision$"
Modified: stackless/trunk/Include/pyport.h
==============================================================================
--- stackless/trunk/Include/pyport.h (original)
+++ stackless/trunk/Include/pyport.h Sun Oct 15 16:42:33 2006
@@ -3,6 +3,10 @@
#include "pyconfig.h" /* include for defines */
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
/**************************************************************************
Symbols and macros to supply platform-independent interfaces to basic
C language & library operations whose spellings vary across platforms.
@@ -126,7 +130,7 @@
* Py_ssize_t on the platform.
*/
#ifndef PY_FORMAT_SIZE_T
-# if SIZEOF_SIZE_T == SIZEOF_INT
+# if SIZEOF_SIZE_T == SIZEOF_INT && !defined(__APPLE__)
# define PY_FORMAT_SIZE_T ""
# elif SIZEOF_SIZE_T == SIZEOF_LONG
# define PY_FORMAT_SIZE_T "l"
Modified: stackless/trunk/Lib/SimpleXMLRPCServer.py
==============================================================================
--- stackless/trunk/Lib/SimpleXMLRPCServer.py (original)
+++ stackless/trunk/Lib/SimpleXMLRPCServer.py Sun Oct 15 16:42:33 2006
@@ -264,8 +264,9 @@
encoding=self.encoding)
except:
# report exception back to server
+ exc_type, exc_value, exc_tb = sys.exc_info()
response = xmlrpclib.dumps(
- xmlrpclib.Fault(1, "%s:%s" % (sys.exc_type, sys.exc_value)),
+ xmlrpclib.Fault(1, "%s:%s" % (exc_type, exc_value)),
encoding=self.encoding, allow_none=self.allow_none,
)
@@ -364,9 +365,10 @@
'faultString' : fault.faultString}
)
except:
+ exc_type, exc_value, exc_tb = sys.exc_info()
results.append(
{'faultCode' : 1,
- 'faultString' : "%s:%s" % (sys.exc_type, sys.exc_value)}
+ 'faultString' : "%s:%s" % (exc_type, exc_value)}
)
return results
Modified: stackless/trunk/Lib/_strptime.py
==============================================================================
--- stackless/trunk/Lib/_strptime.py (original)
+++ stackless/trunk/Lib/_strptime.py Sun Oct 15 16:42:33 2006
@@ -306,7 +306,7 @@
_cache_lock.release()
found = format_regex.match(data_string)
if not found:
- raise ValueError("time data did not match format: data=%s fmt=%s" %
+ raise ValueError("time data %r does not match format %r" %
(data_string, format))
if len(data_string) != found.end():
raise ValueError("unconverted data remains: %s" %
Modified: stackless/trunk/Lib/bsddb/test/test_basics.py
==============================================================================
--- stackless/trunk/Lib/bsddb/test/test_basics.py (original)
+++ stackless/trunk/Lib/bsddb/test/test_basics.py Sun Oct 15 16:42:33 2006
@@ -697,7 +697,7 @@
for log in logs:
if verbose:
print 'log file: ' + log
- if db.version >= (4,2):
+ if db.version() >= (4,2):
logs = self.env.log_archive(db.DB_ARCH_REMOVE)
assert not logs
Modified: stackless/trunk/Lib/cgi.py
==============================================================================
--- stackless/trunk/Lib/cgi.py (original)
+++ stackless/trunk/Lib/cgi.py Sun Oct 15 16:42:33 2006
@@ -807,8 +807,10 @@
form.dict == {key: [val, val, ...], ...}
"""
- def __init__(self, environ=os.environ):
- self.dict = self.data = parse(environ=environ)
+ def __init__(self, environ=os.environ, keep_blank_values=0, strict_parsing=0):
+ self.dict = self.data = parse(environ=environ,
+ keep_blank_values=keep_blank_values,
+ strict_parsing=strict_parsing)
self.query_string = environ['QUERY_STRING']
Modified: stackless/trunk/Lib/colorsys.py
==============================================================================
--- stackless/trunk/Lib/colorsys.py (original)
+++ stackless/trunk/Lib/colorsys.py Sun Oct 15 16:42:33 2006
@@ -117,7 +117,8 @@
p = v*(1.0 - s)
q = v*(1.0 - s*f)
t = v*(1.0 - s*(1.0-f))
- if i%6 == 0: return v, t, p
+ i = i%6
+ if i == 0: return v, t, p
if i == 1: return q, v, p
if i == 2: return p, v, t
if i == 3: return p, q, v
Modified: stackless/trunk/Lib/ctypes/__init__.py
==============================================================================
--- stackless/trunk/Lib/ctypes/__init__.py (original)
+++ stackless/trunk/Lib/ctypes/__init__.py Sun Oct 15 16:42:33 2006
@@ -427,6 +427,8 @@
c_size_t = c_uint
elif sizeof(c_ulong) == sizeof(c_void_p):
c_size_t = c_ulong
+elif sizeof(c_ulonglong) == sizeof(c_void_p):
+ c_size_t = c_ulonglong
# functions
Modified: stackless/trunk/Lib/ctypes/test/test_bitfields.py
==============================================================================
--- stackless/trunk/Lib/ctypes/test/test_bitfields.py (original)
+++ stackless/trunk/Lib/ctypes/test/test_bitfields.py Sun Oct 15 16:42:33 2006
@@ -215,5 +215,14 @@
("b", c_ubyte, 4)]
self.failUnlessEqual(sizeof(X), sizeof(c_byte))
+ def test_anon_bitfields(self):
+ # anonymous bit-fields gave a strange error message
+ class X(Structure):
+ _fields_ = [("a", c_byte, 4),
+ ("b", c_ubyte, 4)]
+ class Y(Structure):
+ _anonymous_ = ["_"]
+ _fields_ = [("_", X)]
+
if __name__ == "__main__":
unittest.main()
Modified: stackless/trunk/Lib/ctypes/test/test_cast.py
==============================================================================
--- stackless/trunk/Lib/ctypes/test/test_cast.py (original)
+++ stackless/trunk/Lib/ctypes/test/test_cast.py Sun Oct 15 16:42:33 2006
@@ -57,5 +57,21 @@
c_int()
self.failUnlessEqual(p[:4], [1, 2, 96, 4])
+ def test_char_p(self):
+ # This didn't work: bad argument to internal function
+ s = c_char_p("hiho")
+ self.failUnlessEqual(cast(cast(s, c_void_p), c_char_p).value,
+ "hiho")
+
+ try:
+ c_wchar_p
+ except NameError:
+ pass
+ else:
+ def test_wchar_p(self):
+ s = c_wchar_p("hiho")
+ self.failUnlessEqual(cast(cast(s, c_void_p), c_wchar_p).value,
+ "hiho")
+
if __name__ == "__main__":
unittest.main()
Modified: stackless/trunk/Lib/ctypes/test/test_win32.py
==============================================================================
--- stackless/trunk/Lib/ctypes/test/test_win32.py (original)
+++ stackless/trunk/Lib/ctypes/test/test_win32.py Sun Oct 15 16:42:33 2006
@@ -6,7 +6,8 @@
import _ctypes_test
-if sys.platform == "win32":
+if sys.platform == "win32" and sizeof(c_void_p) == sizeof(c_int):
+ # Only windows 32-bit has different calling conventions.
class WindowsTestCase(unittest.TestCase):
def test_callconv_1(self):
Modified: stackless/trunk/Lib/decimal.py
==============================================================================
--- stackless/trunk/Lib/decimal.py (original)
+++ stackless/trunk/Lib/decimal.py Sun Oct 15 16:42:33 2006
@@ -131,7 +131,7 @@
'ROUND_FLOOR', 'ROUND_UP', 'ROUND_HALF_DOWN',
# Functions for manipulating contexts
- 'setcontext', 'getcontext'
+ 'setcontext', 'getcontext', 'localcontext'
]
import copy as _copy
@@ -458,6 +458,49 @@
del threading, local # Don't contaminate the namespace
+def localcontext(ctx=None):
+ """Return a context manager for a copy of the supplied context
+
+ Uses a copy of the current context if no context is specified
+ The returned context manager creates a local decimal context
+ in a with statement:
+ def sin(x):
+ with localcontext() as ctx:
+ ctx.prec += 2
+ # Rest of sin calculation algorithm
+ # uses a precision 2 greater than normal
+ return +s # Convert result to normal precision
+
+ def sin(x):
+ with localcontext(ExtendedContext):
+ # Rest of sin calculation algorithm
+ # uses the Extended Context from the
+ # General Decimal Arithmetic Specification
+ return +s # Convert result to normal context
+
+ """
+ # The string below can't be included in the docstring until Python 2.6
+ # as the doctest module doesn't understand __future__ statements
+ """
+ >>> from __future__ import with_statement
+ >>> print getcontext().prec
+ 28
+ >>> with localcontext():
+ ... ctx = getcontext()
+ ... ctx.prec() += 2
+ ... print ctx.prec
+ ...
+ 30
+ >>> with localcontext(ExtendedContext):
+ ... print getcontext().prec
+ ...
+ 9
+ >>> print getcontext().prec
+ 28
+ """
+ if ctx is None: ctx = getcontext()
+ return _ContextManager(ctx)
+
##### Decimal class ###########################################
@@ -2173,23 +2216,14 @@
del name, val, globalname, rounding_functions
-class ContextManager(object):
- """Helper class to simplify Context management.
-
- Sample usage:
-
- with decimal.ExtendedContext:
- s = ...
- return +s # Convert result to normal precision
-
- with decimal.getcontext() as ctx:
- ctx.prec += 2
- s = ...
- return +s
+class _ContextManager(object):
+ """Context manager class to support localcontext().
+ Sets a copy of the supplied context in __enter__() and restores
+ the previous decimal context in __exit__()
"""
def __init__(self, new_context):
- self.new_context = new_context
+ self.new_context = new_context.copy()
def __enter__(self):
self.saved_context = getcontext()
setcontext(self.new_context)
@@ -2248,9 +2282,6 @@
s.append('traps=[' + ', '.join([t.__name__ for t, v in self.traps.items() if v]) + ']')
return ', '.join(s) + ')'
- def get_manager(self):
- return ContextManager(self.copy())
-
def clear_flags(self):
"""Reset all flags to zero"""
for flag in self.flags:
Modified: stackless/trunk/Lib/distutils/command/register.py
==============================================================================
--- stackless/trunk/Lib/distutils/command/register.py (original)
+++ stackless/trunk/Lib/distutils/command/register.py Sun Oct 15 16:42:33 2006
@@ -251,7 +251,7 @@
body = StringIO.StringIO()
for key, value in data.items():
# handle multiple entries for the same name
- if type(value) != type([]):
+ if type(value) not in (type([]), type( () )):
value = [value]
for value in value:
value = unicode(value).encode("utf-8")
Modified: stackless/trunk/Lib/distutils/sysconfig.py
==============================================================================
--- stackless/trunk/Lib/distutils/sysconfig.py (original)
+++ stackless/trunk/Lib/distutils/sysconfig.py Sun Oct 15 16:42:33 2006
@@ -509,7 +509,10 @@
# are in CFLAGS or LDFLAGS and remove them if they are.
# This is needed when building extensions on a 10.3 system
# using a universal build of python.
- for key in ('LDFLAGS', 'BASECFLAGS'):
+ for key in ('LDFLAGS', 'BASECFLAGS',
+ # a number of derived variables. These need to be
+ # patched up as well.
+ 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'):
flags = _config_vars[key]
flags = re.sub('-arch\s+\w+\s', ' ', flags)
flags = re.sub('-isysroot [^ \t]*', ' ', flags)
Modified: stackless/trunk/Lib/distutils/unixccompiler.py
==============================================================================
--- stackless/trunk/Lib/distutils/unixccompiler.py (original)
+++ stackless/trunk/Lib/distutils/unixccompiler.py Sun Oct 15 16:42:33 2006
@@ -82,6 +82,22 @@
except ValueError:
pass
+ # Check if the SDK that is used during compilation actually exists,
+ # the universal build requires the usage of a universal SDK and not all
+ # users have that installed by default.
+ sysroot = None
+ if '-isysroot' in cc_args:
+ idx = cc_args.index('-isysroot')
+ sysroot = cc_args[idx+1]
+ elif '-isysroot' in compiler_so:
+ idx = compiler_so.index('-isysroot')
+ sysroot = compiler_so[idx+1]
+
+ if sysroot and not os.path.isdir(sysroot):
+ log.warn("Compiling with an SDK that doesn't seem to exist: %s",
+ sysroot)
+ log.warn("Please check your Xcode installation")
+
return compiler_so
class UnixCCompiler(CCompiler):
Modified: stackless/trunk/Lib/doctest.py
==============================================================================
--- stackless/trunk/Lib/doctest.py (original)
+++ stackless/trunk/Lib/doctest.py Sun Oct 15 16:42:33 2006
@@ -1561,7 +1561,7 @@
- test: the DocTest object being run
- - excample: the Example object that failed
+ - example: the Example object that failed
- got: the actual output
"""
@@ -1580,7 +1580,7 @@
- test: the DocTest object being run
- - excample: the Example object that failed
+ - example: the Example object that failed
- exc_info: the exception info
"""
Modified: stackless/trunk/Lib/email/utils.py
==============================================================================
--- stackless/trunk/Lib/email/utils.py (original)
+++ stackless/trunk/Lib/email/utils.py Sun Oct 15 16:42:33 2006
@@ -235,10 +235,6 @@
parts = s.split(TICK, 2)
if len(parts) <= 2:
return None, None, s
- if len(parts) > 3:
- charset, language = parts[:2]
- s = TICK.join(parts[2:])
- return charset, language, s
return parts
Modified: stackless/trunk/Lib/encodings/__init__.py
==============================================================================
--- stackless/trunk/Lib/encodings/__init__.py (original)
+++ stackless/trunk/Lib/encodings/__init__.py Sun Oct 15 16:42:33 2006
@@ -28,7 +28,7 @@
"""#"
-import codecs, types
+import codecs
from encodings import aliases
_cache = {}
@@ -60,7 +60,7 @@
"""
# Make sure we have an 8-bit string, because .translate() works
# differently for Unicode strings.
- if type(encoding) is types.UnicodeType:
+ if isinstance(encoding, unicode):
# Note that .encode('latin-1') does *not* use the codec
# registry, so this call doesn't recurse. (See unicodeobject.c
# PyUnicode_AsEncodedString() for details)
@@ -90,7 +90,7 @@
else:
modnames = [norm_encoding]
for modname in modnames:
- if not modname:
+ if not modname or '.' in modname:
continue
try:
mod = __import__('encodings.' + modname,
Modified: stackless/trunk/Lib/idlelib/NEWS.txt
==============================================================================
--- stackless/trunk/Lib/idlelib/NEWS.txt (original)
+++ stackless/trunk/Lib/idlelib/NEWS.txt Sun Oct 15 16:42:33 2006
@@ -1,3 +1,16 @@
+What's New in IDLE 2.6a1?
+=========================
+
+*Release date: XX-XXX-200X*
+
+- Some syntax errors were being caught by tokenize during the tabnanny
+ check, resulting in obscure error messages. Do the syntax check
+ first. Bug 1562716, 1562719
+
+- IDLE's version number takes a big jump to match the version number of
+ the Python release of which it's a part.
+
+
What's New in IDLE 1.2c1?
=========================
Modified: stackless/trunk/Lib/idlelib/PyShell.py
==============================================================================
--- stackless/trunk/Lib/idlelib/PyShell.py (original)
+++ stackless/trunk/Lib/idlelib/PyShell.py Sun Oct 15 16:42:33 2006
@@ -351,6 +351,8 @@
def build_subprocess_arglist(self):
w = ['-W' + s for s in sys.warnoptions]
+ if 1/2 > 0: # account for new division
+ w.append('-Qnew')
# Maybe IDLE is installed and is being accessed via sys.path,
# or maybe it's not installed and the idle.py script is being
# run from the IDLE source directory.
@@ -726,6 +728,8 @@
raise
except:
if use_subprocess:
+ # When run w/o subprocess, both user and IDLE errors
+ # are printed here; skip message in that case.
print >> self.tkconsole.stderr, \
"IDLE internal error in runcode()"
self.showtraceback()
Modified: stackless/trunk/Lib/idlelib/ScriptBinding.py
==============================================================================
--- stackless/trunk/Lib/idlelib/ScriptBinding.py (original)
+++ stackless/trunk/Lib/idlelib/ScriptBinding.py Sun Oct 15 16:42:33 2006
@@ -57,9 +57,10 @@
filename = self.getfilename()
if not filename:
return
+ if not self.checksyntax(filename):
+ return
if not self.tabnanny(filename):
return
- self.checksyntax(filename)
def tabnanny(self, filename):
f = open(filename, 'r')
@@ -76,9 +77,6 @@
self.editwin.gotoline(nag.get_lineno())
self.errorbox("Tab/space error", indent_message)
return False
- except IndentationError:
- # From tokenize(), let compile() in checksyntax find it again.
- pass
return True
def checksyntax(self, filename):
@@ -139,11 +137,11 @@
filename = self.getfilename()
if not filename:
return
- if not self.tabnanny(filename):
- return
code = self.checksyntax(filename)
if not code:
return
+ if not self.tabnanny(filename):
+ return
shell = self.shell
interp = shell.interp
if PyShell.use_subprocess:
Modified: stackless/trunk/Lib/idlelib/idlever.py
==============================================================================
--- stackless/trunk/Lib/idlelib/idlever.py (original)
+++ stackless/trunk/Lib/idlelib/idlever.py Sun Oct 15 16:42:33 2006
@@ -1 +1 @@
-IDLE_VERSION = "1.2c1"
+IDLE_VERSION = "2.6a0"
Modified: stackless/trunk/Lib/inspect.py
==============================================================================
--- stackless/trunk/Lib/inspect.py (original)
+++ stackless/trunk/Lib/inspect.py Sun Oct 15 16:42:33 2006
@@ -403,6 +403,7 @@
return os.path.normcase(os.path.abspath(_filename))
modulesbyfile = {}
+_filesbymodname = {}
def getmodule(object, _filename=None):
"""Return the module an object was defined in, or None if not found."""
@@ -410,19 +411,32 @@
return object
if hasattr(object, '__module__'):
return sys.modules.get(object.__module__)
+ # Try the filename to modulename cache
+ if _filename is not None and _filename in modulesbyfile:
+ return sys.modules.get(modulesbyfile[_filename])
+ # Try the cache again with the absolute file name
try:
file = getabsfile(object, _filename)
except TypeError:
return None
if file in modulesbyfile:
return sys.modules.get(modulesbyfile[file])
- for module in sys.modules.values():
+ # Update the filename to module name cache and check yet again
+ # Copy sys.modules in order to cope with changes while iterating
+ for modname, module in sys.modules.items():
if ismodule(module) and hasattr(module, '__file__'):
+ f = module.__file__
+ if f == _filesbymodname.get(modname, None):
+ # Have already mapped this module, so skip it
+ continue
+ _filesbymodname[modname] = f
f = getabsfile(module)
+ # Always map to the name the module knows itself by
modulesbyfile[f] = modulesbyfile[
os.path.realpath(f)] = module.__name__
if file in modulesbyfile:
return sys.modules.get(modulesbyfile[file])
+ # Check the main module
main = sys.modules['__main__']
if not hasattr(object, '__name__'):
return None
@@ -430,6 +444,7 @@
mainobject = getattr(main, object.__name__)
if mainobject is object:
return main
+ # Check builtins
builtin = sys.modules['__builtin__']
if hasattr(builtin, object.__name__):
builtinobject = getattr(builtin, object.__name__)
@@ -444,7 +459,7 @@
in the file and the line number indexes a line in that list. An IOError
is raised if the source code cannot be retrieved."""
file = getsourcefile(object) or getfile(object)
- module = getmodule(object)
+ module = getmodule(object, file)
if module:
lines = linecache.getlines(file, module.__dict__)
else:
@@ -457,9 +472,24 @@
if isclass(object):
name = object.__name__
- pat = re.compile(r'^\s*class\s*' + name + r'\b')
+ pat = re.compile(r'^(\s*)class\s*' + name + r'\b')
+ # make some effort to find the best matching class definition:
+ # use the one with the least indentation, which is the one
+ # that's most probably not inside a function definition.
+ candidates = []
for i in range(len(lines)):
- if pat.match(lines[i]): return lines, i
+ match = pat.match(lines[i])
+ if match:
+ # if it's at toplevel, it's already the best one
+ if lines[i][0] == 'c':
+ return lines, i
+ # else add whitespace to candidate list
+ candidates.append((match.group(1), i))
+ if candidates:
+ # this will sort by whitespace, and by line number,
+ # less whitespace first
+ candidates.sort()
+ return lines, candidates[0][1]
else:
raise IOError('could not find class definition')
Modified: stackless/trunk/Lib/logging/__init__.py
==============================================================================
--- stackless/trunk/Lib/logging/__init__.py (original)
+++ stackless/trunk/Lib/logging/__init__.py Sun Oct 15 16:42:33 2006
@@ -214,7 +214,7 @@
information to be logged.
"""
def __init__(self, name, level, pathname, lineno,
- msg, args, exc_info, func):
+ msg, args, exc_info, func=None):
"""
Initialize a logging record with interesting information.
"""
Modified: stackless/trunk/Lib/logging/config.py
==============================================================================
--- stackless/trunk/Lib/logging/config.py (original)
+++ stackless/trunk/Lib/logging/config.py Sun Oct 15 16:42:33 2006
@@ -27,7 +27,7 @@
To use, simply 'import logging' and log away!
"""
-import sys, logging, logging.handlers, string, socket, struct, os, traceback
+import sys, logging, logging.handlers, string, socket, struct, os, traceback, types
try:
import thread
Modified: stackless/trunk/Lib/macpath.py
==============================================================================
--- stackless/trunk/Lib/macpath.py (original)
+++ stackless/trunk/Lib/macpath.py Sun Oct 15 16:42:33 2006
@@ -2,6 +2,7 @@
import os
from stat import *
+from genericpath import *
__all__ = ["normcase","isabs","join","splitdrive","split","splitext",
"basename","dirname","commonprefix","getsize","getmtime",
@@ -101,31 +102,6 @@
components = split(s)
return len(components) == 2 and components[1] == ''
-def isdir(s):
- """Return true if the pathname refers to an existing directory."""
-
- try:
- st = os.stat(s)
- except os.error:
- return 0
- return S_ISDIR(st.st_mode)
-
-
-# Get size, mtime, atime of files.
-
-def getsize(filename):
- """Return the size of a file, reported by os.stat()."""
- return os.stat(filename).st_size
-
-def getmtime(filename):
- """Return the last modification time of a file, reported by os.stat()."""
- return os.stat(filename).st_mtime
-
-def getatime(filename):
- """Return the last access time of a file, reported by os.stat()."""
- return os.stat(filename).st_atime
-
-
def islink(s):
"""Return true if the pathname refers to a symbolic link."""
@@ -135,29 +111,6 @@
except:
return False
-
-def isfile(s):
- """Return true if the pathname refers to an existing regular file."""
-
- try:
- st = os.stat(s)
- except os.error:
- return False
- return S_ISREG(st.st_mode)
-
-def getctime(filename):
- """Return the creation time of a file, reported by os.stat()."""
- return os.stat(filename).st_ctime
-
-def exists(s):
- """Test whether a path exists. Returns False for broken symbolic links"""
-
- try:
- st = os.stat(s)
- except os.error:
- return False
- return True
-
# Is `stat`/`lstat` a meaningful difference on the Mac? This is safe in any
# case.
@@ -170,20 +123,6 @@
return False
return True
-# Return the longest prefix of all list elements.
-
-def commonprefix(m):
- "Given a list of pathnames, returns the longest common leading component"
- if not m: return ''
- s1 = min(m)
- s2 = max(m)
- n = min(len(s1), len(s2))
- for i in xrange(n):
- if s1[i] != s2[i]:
- return s1[:i]
- return s1[:n]
-
-
def expandvars(path):
"""Dummy to retain interface-compatibility with other operating systems."""
return path
Modified: stackless/trunk/Lib/ntpath.py
==============================================================================
--- stackless/trunk/Lib/ntpath.py (original)
+++ stackless/trunk/Lib/ntpath.py Sun Oct 15 16:42:33 2006
@@ -8,6 +8,7 @@
import os
import stat
import sys
+from genericpath import *
__all__ = ["normcase","isabs","join","splitdrive","split","splitext",
"basename","dirname","commonprefix","getsize","getmtime",
@@ -206,86 +207,18 @@
"""Returns the directory component of a pathname"""
return split(p)[0]
-
-# Return the longest prefix of all list elements.
-
-def commonprefix(m):
- "Given a list of pathnames, returns the longest common leading component"
- if not m: return ''
- s1 = min(m)
- s2 = max(m)
- n = min(len(s1), len(s2))
- for i in xrange(n):
- if s1[i] != s2[i]:
- return s1[:i]
- return s1[:n]
-
-
-# Get size, mtime, atime of files.
-
-def getsize(filename):
- """Return the size of a file, reported by os.stat()"""
- return os.stat(filename).st_size
-
-def getmtime(filename):
- """Return the last modification time of a file, reported by os.stat()"""
- return os.stat(filename).st_mtime
-
-def getatime(filename):
- """Return the last access time of a file, reported by os.stat()"""
- return os.stat(filename).st_atime
-
-def getctime(filename):
- """Return the creation time of a file, reported by os.stat()."""
- return os.stat(filename).st_ctime
-
# Is a path a symbolic link?
# This will always return false on systems where posix.lstat doesn't exist.
def islink(path):
- """Test for symbolic link. On WindowsNT/95 always returns false"""
+ """Test for symbolic link.
+ On WindowsNT/95 and OS/2 always returns false
+ """
return False
-
-# Does a path exist?
-
-def exists(path):
- """Test whether a path exists"""
- try:
- st = os.stat(path)
- except os.error:
- return False
- return True
-
+# alias exists to lexists
lexists = exists
-
-# Is a path a dos directory?
-# This follows symbolic links, so both islink() and isdir() can be true
-# for the same path.
-
-def isdir(path):
- """Test whether a path is a directory"""
- try:
- st = os.stat(path)
- except os.error:
- return False
- return stat.S_ISDIR(st.st_mode)
-
-
-# Is a path a regular file?
-# This follows symbolic links, so both islink() and isdir() can be true
-# for the same path.
-
-def isfile(path):
- """Test whether a path is a regular file"""
- try:
- st = os.stat(path)
- except os.error:
- return False
- return stat.S_ISREG(st.st_mode)
-
-
# Is a path a mount point? Either a root (with or without drive letter)
# or an UNC path with at most a / or \ after the mount point.
Modified: stackless/trunk/Lib/os2emxpath.py
==============================================================================
--- stackless/trunk/Lib/os2emxpath.py (original)
+++ stackless/trunk/Lib/os2emxpath.py Sun Oct 15 16:42:33 2006
@@ -7,6 +7,9 @@
import os
import stat
+from genericpath import *
+from ntpath import (expanduser, expandvars, isabs, islink, splitdrive,
+ splitext, split, walk)
__all__ = ["normcase","isabs","join","splitdrive","split","splitext",
"basename","dirname","commonprefix","getsize","getmtime",
@@ -36,18 +39,6 @@
return s.replace('\\', '/').lower()
-# Return whether a path is absolute.
-# Trivial in Posix, harder on the Mac or MS-DOS.
-# For DOS it is absolute if it starts with a slash or backslash (current
-# volume), or if a pathname after the volume letter and colon / UNC resource
-# starts with a slash or backslash.
-
-def isabs(s):
- """Test whether a path is absolute"""
- s = splitdrive(s)[1]
- return s != '' and s[:1] in '/\\'
-
-
# Join two (or more) paths.
def join(a, *p):
@@ -63,17 +54,6 @@
return path
-# Split a path in a drive specification (a drive letter followed by a
-# colon) and the path specification.
-# It is always true that drivespec + pathspec == p
-def splitdrive(p):
- """Split a pathname into drive and path specifiers. Returns a 2-tuple
-"(drive,path)"; either part may be empty"""
- if p[1:2] == ':':
- return p[0:2], p[2:]
- return '', p
-
-
# Parse UNC paths
def splitunc(p):
"""Split a pathname into UNC mount point and relative path specifiers.
@@ -103,57 +83,6 @@
return '', p
-# Split a path in head (everything up to the last '/') and tail (the
-# rest). After the trailing '/' is stripped, the invariant
-# join(head, tail) == p holds.
-# The resulting head won't end in '/' unless it is the root.
-
-def split(p):
- """Split a pathname.
-
- Return tuple (head, tail) where tail is everything after the final slash.
- Either part may be empty."""
-
- d, p = splitdrive(p)
- # set i to index beyond p's last slash
- i = len(p)
- while i and p[i-1] not in '/\\':
- i = i - 1
- head, tail = p[:i], p[i:] # now tail has no slashes
- # remove trailing slashes from head, unless it's all slashes
- head2 = head
- while head2 and head2[-1] in '/\\':
- head2 = head2[:-1]
- head = head2 or head
- return d + head, tail
-
-
-# Split a path in root and extension.
-# The extension is everything starting at the last dot in the last
-# pathname component; the root is everything before that.
-# It is always true that root + ext == p.
-
-def splitext(p):
- """Split the extension from a pathname.
-
- Extension is everything from the last dot to the end.
- Return (root, ext), either part may be empty."""
- root, ext = '', ''
- for c in p:
- if c in ['/','\\']:
- root, ext = root + ext + c, ''
- elif c == '.':
- if ext:
- root, ext = root + ext, c
- else:
- ext = c
- elif ext:
- ext = ext + c
- else:
- root = root + c
- return root, ext
-
-
# Return the tail (basename) part of a path.
def basename(p):
@@ -168,84 +97,12 @@
return split(p)[0]
-# Return the longest prefix of all list elements.
-
-def commonprefix(m):
- "Given a list of pathnames, returns the longest common leading component"
- if not m: return ''
- s1 = min(m)
- s2 = max(m)
- n = min(len(s1), len(s2))
- for i in xrange(n):
- if s1[i] != s2[i]:
- return s1[:i]
- return s1[:n]
-
-
-# Get size, mtime, atime of files.
-
-def getsize(filename):
- """Return the size of a file, reported by os.stat()"""
- return os.stat(filename).st_size
-
-def getmtime(filename):
- """Return the last modification time of a file, reported by os.stat()"""
- return os.stat(filename).st_mtime
-
-def getatime(filename):
- """Return the last access time of a file, reported by os.stat()"""
- return os.stat(filename).st_atime
-
-def getctime(filename):
- """Return the creation time of a file, reported by os.stat()."""
- return os.stat(filename).st_ctime
-
-# Is a path a symbolic link?
-# This will always return false on systems where posix.lstat doesn't exist.
-
-def islink(path):
- """Test for symbolic link. On OS/2 always returns false"""
- return False
-
-
-# Does a path exist?
-# This is false for dangling symbolic links.
-
-def exists(path):
- """Test whether a path exists"""
- try:
- st = os.stat(path)
- except os.error:
- return False
- return True
-
+# alias exists to lexists
lexists = exists
# Is a path a directory?
-def isdir(path):
- """Test whether a path is a directory"""
- try:
- st = os.stat(path)
- except os.error:
- return False
- return stat.S_ISDIR(st.st_mode)
-
-
-# Is a path a regular file?
-# This follows symbolic links, so both islink() and isdir() can be true
-# for the same path.
-
-def isfile(path):
- """Test whether a path is a regular file"""
- try:
- st = os.stat(path)
- except os.error:
- return False
- return stat.S_ISREG(st.st_mode)
-
-
# Is a path a mount point? Either a root (with or without drive letter)
# or an UNC path with at most a / or \ after the mount point.
@@ -258,131 +115,6 @@
return len(p) == 1 and p[0] in '/\\'
-# Directory tree walk.
-# For each directory under top (including top itself, but excluding
-# '.' and '..'), func(arg, dirname, filenames) is called, where
-# dirname is the name of the directory and filenames is the list
-# of files (and subdirectories etc.) in the directory.
-# The func may modify the filenames list, to implement a filter,
-# or to impose a different order of visiting.
-
-def walk(top, func, arg):
- """Directory tree walk whth callback function.
-
- walk(top, func, arg) calls func(arg, d, files) for each directory d
- in the tree rooted at top (including top itself); files is a list
- of all the files and subdirs in directory d."""
- try:
- names = os.listdir(top)
- except os.error:
- return
- func(arg, top, names)
- exceptions = ('.', '..')
- for name in names:
- if name not in exceptions:
- name = join(top, name)
- if isdir(name):
- walk(name, func, arg)
-
-
-# Expand paths beginning with '~' or '~user'.
-# '~' means $HOME; '~user' means that user's home directory.
-# If the path doesn't begin with '~', or if the user or $HOME is unknown,
-# the path is returned unchanged (leaving error reporting to whatever
-# function is called with the expanded path as argument).
-# See also module 'glob' for expansion of *, ? and [...] in pathnames.
-# (A function should also be defined to do full *sh-style environment
-# variable expansion.)
-
-def expanduser(path):
- """Expand ~ and ~user constructs.
-
- If user or $HOME is unknown, do nothing."""
- if path[:1] != '~':
- return path
- i, n = 1, len(path)
- while i < n and path[i] not in '/\\':
- i = i + 1
- if i == 1:
- if 'HOME' in os.environ:
- userhome = os.environ['HOME']
- elif not 'HOMEPATH' in os.environ:
- return path
- else:
- try:
- drive = os.environ['HOMEDRIVE']
- except KeyError:
- drive = ''
- userhome = join(drive, os.environ['HOMEPATH'])
- else:
- return path
- return userhome + path[i:]
-
-
-# Expand paths containing shell variable substitutions.
-# The following rules apply:
-# - no expansion within single quotes
-# - no escape character, except for '$$' which is translated into '$'
-# - ${varname} is accepted.
-# - varnames can be made out of letters, digits and the character '_'
-# XXX With COMMAND.COM you can use any characters in a variable name,
-# XXX except '^|<>='.
-
-def expandvars(path):
- """Expand shell variables of form $var and ${var}.
-
- Unknown variables are left unchanged."""
- if '$' not in path:
- return path
- import string
- varchars = string.letters + string.digits + '_-'
- res = ''
- index = 0
- pathlen = len(path)
- while index < pathlen:
- c = path[index]
- if c == '\'': # no expansion within single quotes
- path = path[index + 1:]
- pathlen = len(path)
- try:
- index = path.index('\'')
- res = res + '\'' + path[:index + 1]
- except ValueError:
- res = res + path
- index = pathlen - 1
- elif c == '$': # variable or '$$'
- if path[index + 1:index + 2] == '$':
- res = res + c
- index = index + 1
- elif path[index + 1:index + 2] == '{':
- path = path[index+2:]
- pathlen = len(path)
- try:
- index = path.index('}')
- var = path[:index]
- if var in os.environ:
- res = res + os.environ[var]
- except ValueError:
- res = res + path
- index = pathlen - 1
- else:
- var = ''
- index = index + 1
- c = path[index:index + 1]
- while c != '' and c in varchars:
- var = var + c
- index = index + 1
- c = path[index:index + 1]
- if var in os.environ:
- res = res + os.environ[var]
- if c != '':
- res = res + c
- else:
- res = res + c
- index = index + 1
- return res
-
-
# Normalize a path, e.g. A//B, A/./B and A/foo/../B all become A/B.
def normpath(path):
Modified: stackless/trunk/Lib/pdb.py
==============================================================================
--- stackless/trunk/Lib/pdb.py (original)
+++ stackless/trunk/Lib/pdb.py Sun Oct 15 16:42:33 2006
@@ -23,7 +23,7 @@
"post_mortem", "help"]
def find_function(funcname, filename):
- cre = re.compile(r'def\s+%s\s*[(]' % funcname)
+ cre = re.compile(r'def\s+%s\s*[(]' % re.escape(funcname))
try:
fp = open(filename)
except IOError:
Modified: stackless/trunk/Lib/plat-mac/aetools.py
==============================================================================
--- stackless/trunk/Lib/plat-mac/aetools.py (original)
+++ stackless/trunk/Lib/plat-mac/aetools.py Sun Oct 15 16:42:33 2006
@@ -233,7 +233,7 @@
"""Send 'activate' command"""
self.send('misc', 'actv')
- def _get(self, _object, as=None, _attributes={}):
+ def _get(self, _object, asfile=None, _attributes={}):
"""_get: get data from an object
Required argument: the object
Keyword argument _attributes: AppleEvent attribute dictionary
@@ -243,8 +243,8 @@
_subcode = 'getd'
_arguments = {'----':_object}
- if as:
- _arguments['rtyp'] = mktype(as)
+ if asfile:
+ _arguments['rtyp'] = mktype(asfile)
_reply, _arguments, _attributes = self.send(_code, _subcode,
_arguments, _attributes)
@@ -253,8 +253,8 @@
if _arguments.has_key('----'):
return _arguments['----']
- if as:
- item.__class__ = as
+ if asfile:
+ item.__class__ = asfile
return item
get = _get
Modified: stackless/trunk/Lib/plat-mac/lib-scriptpackages/StdSuites/AppleScript_Suite.py
==============================================================================
--- stackless/trunk/Lib/plat-mac/lib-scriptpackages/StdSuites/AppleScript_Suite.py (original)
+++ stackless/trunk/Lib/plat-mac/lib-scriptpackages/StdSuites/AppleScript_Suite.py Sun Oct 15 16:42:33 2006
@@ -300,7 +300,7 @@
if _arguments.has_key('----'):
return _arguments['----']
- def as(self, _object, _attributes={}, **_arguments):
+ def as_(self, _object, _attributes={}, **_arguments):
"""as: Coercion
Required argument: an AE object reference
Keyword argument _attributes: AppleEvent attribute dictionary
Modified: stackless/trunk/Lib/plat-sunos5/STROPTS.py
==============================================================================
--- stackless/trunk/Lib/plat-sunos5/STROPTS.py (original)
+++ stackless/trunk/Lib/plat-sunos5/STROPTS.py Sun Oct 15 16:42:33 2006
@@ -1550,7 +1550,7 @@
AS_PAGLCK = 0x80
AS_CLAIMGAP = 0x40
AS_UNMAPWAIT = 0x20
-def AS_TYPE_64BIT(as): return \
+def AS_TYPE_64BIT(as_): return \
AS_LREP_LINKEDLIST = 0
AS_LREP_SKIPLIST = 1
Modified: stackless/trunk/Lib/posixpath.py
==============================================================================
--- stackless/trunk/Lib/posixpath.py (original)
+++ stackless/trunk/Lib/posixpath.py Sun Oct 15 16:42:33 2006
@@ -12,6 +12,7 @@
import os
import stat
+from genericpath import *
__all__ = ["normcase","isabs","join","splitdrive","split","splitext",
"basename","dirname","commonprefix","getsize","getmtime",
@@ -105,50 +106,24 @@
return '', p
-# Return the tail (basename) part of a path.
+# Return the tail (basename) part of a path, same as split(path)[1].
def basename(p):
"""Returns the final component of a pathname"""
- return split(p)[1]
+ i = p.rfind('/') + 1
+ return p[i:]
-# Return the head (dirname) part of a path.
+# Return the head (dirname) part of a path, same as split(path)[0].
def dirname(p):
"""Returns the directory component of a pathname"""
- return split(p)[0]
-
-
-# Return the longest prefix of all list elements.
+ i = p.rfind('/') + 1
+ head = p[:i]
+ if head and head != '/'*len(head):
+ head = head.rstrip('/')
+ return head
-def commonprefix(m):
- "Given a list of pathnames, returns the longest common leading component"
- if not m: return ''
- s1 = min(m)
- s2 = max(m)
- n = min(len(s1), len(s2))
- for i in xrange(n):
- if s1[i] != s2[i]:
- return s1[:i]
- return s1[:n]
-
-# Get size, mtime, atime of files.
-
-def getsize(filename):
- """Return the size of a file, reported by os.stat()."""
- return os.stat(filename).st_size
-
-def getmtime(filename):
- """Return the last modification time of a file, reported by os.stat()."""
- return os.stat(filename).st_mtime
-
-def getatime(filename):
- """Return the last access time of a file, reported by os.stat()."""
- return os.stat(filename).st_atime
-
-def getctime(filename):
- """Return the metadata change time of a file, reported by os.stat()."""
- return os.stat(filename).st_ctime
# Is a path a symbolic link?
# This will always return false on systems where os.lstat doesn't exist.
@@ -161,19 +136,6 @@
return False
return stat.S_ISLNK(st.st_mode)
-
-# Does a path exist?
-# This is false for dangling symbolic links.
-
-def exists(path):
- """Test whether a path exists. Returns False for broken symbolic links"""
- try:
- st = os.stat(path)
- except os.error:
- return False
- return True
-
-
# Being true for dangling symbolic links is also useful.
def lexists(path):
@@ -185,32 +147,6 @@
return True
-# Is a path a directory?
-# This follows symbolic links, so both islink() and isdir() can be true
-# for the same path.
-
-def isdir(path):
- """Test whether a path is a directory"""
- try:
- st = os.stat(path)
- except os.error:
- return False
- return stat.S_ISDIR(st.st_mode)
-
-
-# Is a path a regular file?
-# This follows symbolic links, so both islink() and isfile() can be true
-# for the same path.
-
-def isfile(path):
- """Test whether a path is a regular file"""
- try:
- st = os.stat(path)
- except os.error:
- return False
- return stat.S_ISREG(st.st_mode)
-
-
# Are two filenames really pointing to the same file?
def samefile(f1, f2):
@@ -328,8 +264,7 @@
except KeyError:
return path
userhome = pwent.pw_dir
- if userhome.endswith('/'):
- i += 1
+ userhome = userhome.rstrip('/')
return userhome + path[i:]
Modified: stackless/trunk/Lib/pyclbr.py
==============================================================================
--- stackless/trunk/Lib/pyclbr.py (original)
+++ stackless/trunk/Lib/pyclbr.py Sun Oct 15 16:42:33 2006
@@ -172,7 +172,7 @@
# else it's a nested def
else:
# it's a function
- dict[meth_name] = Function(module, meth_name, file, lineno)
+ dict[meth_name] = Function(fullmodule, meth_name, file, lineno)
stack.append((None, thisindent)) # Marker for nested fns
elif token == 'class':
lineno, thisindent = start
Modified: stackless/trunk/Lib/sgmllib.py
==============================================================================
--- stackless/trunk/Lib/sgmllib.py (original)
+++ stackless/trunk/Lib/sgmllib.py Sun Oct 15 16:42:33 2006
@@ -29,12 +29,7 @@
shorttagopen = re.compile('<[a-zA-Z][-.a-zA-Z0-9]*/')
shorttag = re.compile('<([a-zA-Z][-.a-zA-Z0-9]*)/([^/]*)/')
piclose = re.compile('>')
-starttag = re.compile(r'<[a-zA-Z][-_.:a-zA-Z0-9]*\s*('
- r'\s*([a-zA-Z_][-:.a-zA-Z_0-9]*)(\s*=\s*'
- r'(\'[^\']*\'|"[^"]*"|[-a-zA-Z0-9./,:;+*%?!&$\(\)_#=~@]'
- r'[][\-a-zA-Z0-9./,:;+*%?!&$\(\)_#=~\'"@]*(?=[\s>/<])))?'
- r')*\s*/?\s*(?=[<>])')
-endtag = re.compile(r'</?[a-zA-Z][-_.:a-zA-Z0-9]*\s*/?\s*(?=[<>])')
+endbracket = re.compile('[<>]')
tagfind = re.compile('[a-zA-Z][-_.a-zA-Z0-9]*')
attrfind = re.compile(
r'\s*([a-zA-Z_][-:.a-zA-Z_0-9]*)(\s*=\s*'
@@ -254,10 +249,14 @@
self.finish_shorttag(tag, data)
self.__starttag_text = rawdata[start_pos:match.end(1) + 1]
return k
- match = starttag.match(rawdata, i)
+ # XXX The following should skip matching quotes (' or ")
+ # As a shortcut way to exit, this isn't so bad, but shouldn't
+ # be used to locate the actual end of the start tag since the
+ # < or > characters may be embedded in an attribute value.
+ match = endbracket.search(rawdata, i+1)
if not match:
return -1
- j = match.end(0)
+ j = match.start(0)
# Now parse the data between i+1 and j into a tag and attrs
attrs = []
if rawdata[i:i+2] == '<>':
@@ -306,10 +305,10 @@
# Internal -- parse endtag
def parse_endtag(self, i):
rawdata = self.rawdata
- match = endtag.match(rawdata, i)
+ match = endbracket.search(rawdata, i+1)
if not match:
return -1
- j = match.end(0)
+ j = match.start(0)
tag = rawdata[i+2:j].strip().lower()
if rawdata[j] == '>':
j = j+1
Modified: stackless/trunk/Lib/subprocess.py
==============================================================================
--- stackless/trunk/Lib/subprocess.py (original)
+++ stackless/trunk/Lib/subprocess.py Sun Oct 15 16:42:33 2006
@@ -1000,14 +1000,10 @@
if errwrite:
os.dup2(errwrite, 2)
- # Close pipe fds. Make sure we doesn't close the same
- # fd more than once.
- if p2cread:
- os.close(p2cread)
- if c2pwrite and c2pwrite not in (p2cread,):
- os.close(c2pwrite)
- if errwrite and errwrite not in (p2cread, c2pwrite):
- os.close(errwrite)
+ # Close pipe fds. Make sure we don't close the same
+ # fd more than once, or standard fds.
+ for fd in set((p2cread, c2pwrite, errwrite))-set((0,1,2)):
+ if fd: os.close(fd)
# Close all other fds, if asked for
if close_fds:
Modified: stackless/trunk/Lib/tarfile.py
==============================================================================
--- stackless/trunk/Lib/tarfile.py (original)
+++ stackless/trunk/Lib/tarfile.py Sun Oct 15 16:42:33 2006
@@ -144,7 +144,7 @@
# There are two possible encodings for a number field, see
# itn() below.
if s[0] != chr(0200):
- n = int(s.rstrip(NUL) or "0", 8)
+ n = int(s.rstrip(NUL + " ") or "0", 8)
else:
n = 0L
for i in xrange(len(s) - 1):
@@ -411,9 +411,6 @@
self.buf += self.cmp.flush()
if self.mode == "w" and self.buf:
- blocks, remainder = divmod(len(self.buf), self.bufsize)
- if remainder > 0:
- self.buf += NUL * (self.bufsize - remainder)
self.fileobj.write(self.buf)
self.buf = ""
if self.comptype == "gz":
Modified: stackless/trunk/Lib/test/list_tests.py
==============================================================================
--- stackless/trunk/Lib/test/list_tests.py (original)
+++ stackless/trunk/Lib/test/list_tests.py Sun Oct 15 16:42:33 2006
@@ -269,7 +269,6 @@
self.assertRaises(TypeError, a.insert)
def test_pop(self):
- from decimal import Decimal
a = self.type2test([-1, 0, 1])
a.pop()
self.assertEqual(a, [-1, 0])
@@ -281,8 +280,6 @@
self.assertRaises(IndexError, a.pop)
self.assertRaises(TypeError, a.pop, 42, 42)
a = self.type2test([0, 10, 20, 30, 40])
- self.assertEqual(a.pop(Decimal(2)), 20)
- self.assertRaises(IndexError, a.pop, Decimal(25))
def test_remove(self):
a = self.type2test([0, 0, 1])
Modified: stackless/trunk/Lib/test/output/test_tokenize
==============================================================================
--- stackless/trunk/Lib/test/output/test_tokenize (original)
+++ stackless/trunk/Lib/test/output/test_tokenize Sun Oct 15 16:42:33 2006
@@ -1,15 +1,23 @@
test_tokenize
-1,0-1,35: COMMENT "# Tests for the 'tokenize' module.\n"
-2,0-2,43: COMMENT '# Large bits stolen from test_grammar.py. \n'
+1,0-1,34: COMMENT "# Tests for the 'tokenize' module."
+1,34-1,35: NL '\n'
+2,0-2,42: COMMENT '# Large bits stolen from test_grammar.py. '
+2,42-2,43: NL '\n'
3,0-3,1: NL '\n'
-4,0-4,11: COMMENT '# Comments\n'
+4,0-4,10: COMMENT '# Comments'
+4,10-4,11: NL '\n'
5,0-5,3: STRING '"#"'
5,3-5,4: NEWLINE '\n'
-6,0-6,3: COMMENT "#'\n"
-7,0-7,3: COMMENT '#"\n'
-8,0-8,3: COMMENT '#\\\n'
-9,7-9,9: COMMENT '#\n'
-10,4-10,10: COMMENT '# abc\n'
+6,0-6,2: COMMENT "#'"
+6,2-6,3: NL '\n'
+7,0-7,2: COMMENT '#"'
+7,2-7,3: NL '\n'
+8,0-8,2: COMMENT '#\\'
+8,2-8,3: NL '\n'
+9,7-9,8: COMMENT '#'
+9,8-9,9: NL '\n'
+10,4-10,9: COMMENT '# abc'
+10,9-10,10: NL '\n'
11,0-12,4: STRING "'''#\n#'''"
12,4-12,5: NEWLINE '\n'
13,0-13,1: NL '\n'
@@ -19,7 +27,8 @@
14,7-14,8: COMMENT '#'
14,8-14,9: NEWLINE '\n'
15,0-15,1: NL '\n'
-16,0-16,25: COMMENT '# Balancing continuation\n'
+16,0-16,24: COMMENT '# Balancing continuation'
+16,24-16,25: NL '\n'
17,0-17,1: NL '\n'
18,0-18,1: NAME 'a'
18,2-18,3: OP '='
@@ -92,7 +101,8 @@
29,2-29,3: OP ')'
29,3-29,4: NEWLINE '\n'
30,0-30,1: NL '\n'
-31,0-31,37: COMMENT '# Backslash means line continuation:\n'
+31,0-31,36: COMMENT '# Backslash means line continuation:'
+31,36-31,37: NL '\n'
32,0-32,1: NAME 'x'
32,2-32,3: OP '='
32,4-32,5: NUMBER '1'
@@ -100,13 +110,15 @@
33,2-33,3: NUMBER '1'
33,3-33,4: NEWLINE '\n'
34,0-34,1: NL '\n'
-35,0-35,55: COMMENT '# Backslash does not means continuation in comments :\\\n'
+35,0-35,54: COMMENT '# Backslash does not means continuation in comments :\\'
+35,54-35,55: NL '\n'
36,0-36,1: NAME 'x'
36,2-36,3: OP '='
36,4-36,5: NUMBER '0'
36,5-36,6: NEWLINE '\n'
37,0-37,1: NL '\n'
-38,0-38,20: COMMENT '# Ordinary integers\n'
+38,0-38,19: COMMENT '# Ordinary integers'
+38,19-38,20: NL '\n'
39,0-39,4: NUMBER '0xff'
39,5-39,7: OP '<>'
39,8-39,11: NUMBER '255'
@@ -137,7 +149,8 @@
44,15-44,16: NUMBER '1'
44,16-44,17: NEWLINE '\n'
45,0-45,1: NL '\n'
-46,0-46,16: COMMENT '# Long integers\n'
+46,0-46,15: COMMENT '# Long integers'
+46,15-46,16: NL '\n'
47,0-47,1: NAME 'x'
47,2-47,3: OP '='
47,4-47,6: NUMBER '0L'
@@ -171,7 +184,8 @@
54,4-54,35: NUMBER '123456789012345678901234567890l'
54,35-54,36: NEWLINE '\n'
55,0-55,1: NL '\n'
-56,0-56,25: COMMENT '# Floating-point numbers\n'
+56,0-56,24: COMMENT '# Floating-point numbers'
+56,24-56,25: NL '\n'
57,0-57,1: NAME 'x'
57,2-57,3: OP '='
57,4-57,8: NUMBER '3.14'
@@ -184,7 +198,8 @@
59,2-59,3: OP '='
59,4-59,9: NUMBER '0.314'
59,9-59,10: NEWLINE '\n'
-60,0-60,18: COMMENT '# XXX x = 000.314\n'
+60,0-60,17: COMMENT '# XXX x = 000.314'
+60,17-60,18: NL '\n'
61,0-61,1: NAME 'x'
61,2-61,3: OP '='
61,4-61,8: NUMBER '.314'
@@ -218,7 +233,8 @@
68,4-68,9: NUMBER '3.1e4'
68,9-68,10: NEWLINE '\n'
69,0-69,1: NL '\n'
-70,0-70,18: COMMENT '# String literals\n'
+70,0-70,17: COMMENT '# String literals'
+70,17-70,18: NL '\n'
71,0-71,1: NAME 'x'
71,2-71,3: OP '='
71,4-71,6: STRING "''"
@@ -366,7 +382,8 @@
125,6-126,3: STRING "uR'''spam\n'''"
126,3-126,4: NEWLINE '\n'
127,0-127,1: NL '\n'
-128,0-128,14: COMMENT '# Indentation\n'
+128,0-128,13: COMMENT '# Indentation'
+128,13-128,14: NL '\n'
129,0-129,2: NAME 'if'
129,3-129,4: NUMBER '1'
129,4-129,5: OP ':'
@@ -438,7 +455,8 @@
142,14-142,15: NUMBER '2'
142,15-142,16: NEWLINE '\n'
143,0-143,1: NL '\n'
-144,0-144,12: COMMENT '# Operators\n'
+144,0-144,11: COMMENT '# Operators'
+144,11-144,12: NL '\n'
145,0-145,1: NL '\n'
146,0-146,0: DEDENT ''
146,0-146,0: DEDENT ''
@@ -500,7 +518,8 @@
149,27-149,28: OP ')'
149,28-149,29: NEWLINE '\n'
150,0-150,1: NL '\n'
-151,0-151,13: COMMENT '# comparison\n'
+151,0-151,12: COMMENT '# comparison'
+151,12-151,13: NL '\n'
152,0-152,2: NAME 'if'
152,3-152,4: NUMBER '1'
152,5-152,6: OP '<'
@@ -531,7 +550,8 @@
152,67-152,71: NAME 'pass'
152,71-152,72: NEWLINE '\n'
153,0-153,1: NL '\n'
-154,0-154,9: COMMENT '# binary\n'
+154,0-154,8: COMMENT '# binary'
+154,8-154,9: NL '\n'
155,0-155,1: NAME 'x'
155,2-155,3: OP '='
155,4-155,5: NUMBER '1'
@@ -551,7 +571,8 @@
157,8-157,9: NUMBER '1'
157,9-157,10: NEWLINE '\n'
158,0-158,1: NL '\n'
-159,0-159,8: COMMENT '# shift\n'
+159,0-159,7: COMMENT '# shift'
+159,7-159,8: NL '\n'
160,0-160,1: NAME 'x'
160,2-160,3: OP '='
160,4-160,5: NUMBER '1'
@@ -561,7 +582,8 @@
160,14-160,15: NUMBER '1'
160,15-160,16: NEWLINE '\n'
161,0-161,1: NL '\n'
-162,0-162,11: COMMENT '# additive\n'
+162,0-162,10: COMMENT '# additive'
+162,10-162,11: NL '\n'
163,0-163,1: NAME 'x'
163,2-163,3: OP '='
163,4-163,5: NUMBER '1'
@@ -575,7 +597,8 @@
163,20-163,21: NUMBER '1'
163,21-163,22: NEWLINE '\n'
164,0-164,1: NL '\n'
-165,0-165,17: COMMENT '# multiplicative\n'
+165,0-165,16: COMMENT '# multiplicative'
+165,16-165,17: NL '\n'
166,0-166,1: NAME 'x'
166,2-166,3: OP '='
166,4-166,5: NUMBER '1'
@@ -587,7 +610,8 @@
166,16-166,17: NUMBER '1'
166,17-166,18: NEWLINE '\n'
167,0-167,1: NL '\n'
-168,0-168,8: COMMENT '# unary\n'
+168,0-168,7: COMMENT '# unary'
+168,7-168,8: NL '\n'
169,0-169,1: NAME 'x'
169,2-169,3: OP '='
169,4-169,5: OP '~'
@@ -625,7 +649,8 @@
170,24-170,25: NUMBER '1'
170,25-170,26: NEWLINE '\n'
171,0-171,1: NL '\n'
-172,0-172,11: COMMENT '# selector\n'
+172,0-172,10: COMMENT '# selector'
+172,10-172,11: NL '\n'
173,0-173,6: NAME 'import'
173,7-173,10: NAME 'sys'
173,10-173,11: OP ','
Modified: stackless/trunk/Lib/test/string_tests.py
==============================================================================
--- stackless/trunk/Lib/test/string_tests.py (original)
+++ stackless/trunk/Lib/test/string_tests.py Sun Oct 15 16:42:33 2006
@@ -1069,7 +1069,7 @@
# from raymond's original specification
S = 'http://www.python.org'
self.checkequal(('http', '://', 'www.python.org'), S, 'rpartition', '://')
- self.checkequal(('http://www.python.org', '', ''), S, 'rpartition', '?')
+ self.checkequal(('', '', 'http://www.python.org'), S, 'rpartition', '?')
self.checkequal(('', 'http://', 'www.python.org'), S, 'rpartition', 'http://')
self.checkequal(('http://www.python.', 'org', ''), S, 'rpartition', 'org')
Modified: stackless/trunk/Lib/test/test_StringIO.py
==============================================================================
--- stackless/trunk/Lib/test/test_StringIO.py (original)
+++ stackless/trunk/Lib/test/test_StringIO.py Sun Oct 15 16:42:33 2006
@@ -120,6 +120,28 @@
class TestcStringIO(TestGenericStringIO):
MODULE = cStringIO
+ def test_unicode(self):
+
+ if not test_support.have_unicode: return
+
+ # The cStringIO module converts Unicode strings to character
+ # strings when writing them to cStringIO objects.
+ # Check that this works.
+
+ f = self.MODULE.StringIO()
+ f.write(unicode(self._line[:5]))
+ s = f.getvalue()
+ self.assertEqual(s, 'abcde')
+ self.assertEqual(type(s), types.StringType)
+
+ f = self.MODULE.StringIO(unicode(self._line[:5]))
+ s = f.getvalue()
+ self.assertEqual(s, 'abcde')
+ self.assertEqual(type(s), types.StringType)
+
+ self.assertRaises(UnicodeEncodeError, self.MODULE.StringIO,
+ unicode('\xf4', 'latin-1'))
+
import sys
if sys.platform.startswith('java'):
# Jython doesn't have a buffer object, so we just do a useless
Modified: stackless/trunk/Lib/test/test_array.py
==============================================================================
--- stackless/trunk/Lib/test/test_array.py (original)
+++ stackless/trunk/Lib/test/test_array.py Sun Oct 15 16:42:33 2006
@@ -85,6 +85,13 @@
self.assertNotEqual(id(a), id(b))
self.assertEqual(a, b)
+ def test_deepcopy(self):
+ import copy
+ a = array.array(self.typecode, self.example)
+ b = copy.deepcopy(a)
+ self.assertNotEqual(id(a), id(b))
+ self.assertEqual(a, b)
+
def test_pickle(self):
for protocol in (0, 1, 2):
a = array.array(self.typecode, self.example)
Modified: stackless/trunk/Lib/test/test_builtin.py
==============================================================================
--- stackless/trunk/Lib/test/test_builtin.py (original)
+++ stackless/trunk/Lib/test/test_builtin.py Sun Oct 15 16:42:33 2006
@@ -116,6 +116,7 @@
self.assertEqual(abs(0), 0)
self.assertEqual(abs(1234), 1234)
self.assertEqual(abs(-1234), 1234)
+ self.assertTrue(abs(-sys.maxint-1) > 0)
# float
self.assertEqual(abs(0.0), 0.0)
self.assertEqual(abs(3.14), 3.14)
@@ -155,6 +156,11 @@
S = [10, 20, 30]
self.assertEqual(any(x > 42 for x in S), False)
+ def test_neg(self):
+ x = -sys.maxint-1
+ self.assert_(isinstance(x, int))
+ self.assertEqual(-x, sys.maxint+1)
+
def test_apply(self):
def f0(*args):
self.assertEqual(args, ())
@@ -701,9 +707,11 @@
pass
s = repr(-1-sys.maxint)
- self.assertEqual(int(s)+1, -sys.maxint)
+ x = int(s)
+ self.assertEqual(x+1, -sys.maxint)
+ self.assert_(isinstance(x, int))
# should return long
- int(s[1:])
+ self.assertEqual(int(s[1:]), sys.maxint+1)
# should return long
x = int(1e100)
@@ -721,6 +729,11 @@
self.assertRaises(ValueError, int, '123\0')
self.assertRaises(ValueError, int, '53', 40)
+ # SF bug 1545497: embedded NULs were not detected with
+ # explicit base
+ self.assertRaises(ValueError, int, '123\0', 10)
+ self.assertRaises(ValueError, int, '123\x00 245', 20)
+
x = int('1' * 600)
self.assert_(isinstance(x, long))
Modified: stackless/trunk/Lib/test/test_codecencodings_cn.py
==============================================================================
--- stackless/trunk/Lib/test/test_codecencodings_cn.py (original)
+++ stackless/trunk/Lib/test/test_codecencodings_cn.py Sun Oct 15 16:42:33 2006
@@ -32,6 +32,7 @@
("abc\x80\x80\xc1\xc4\xc8", "replace", u"abc\ufffd\u804a\ufffd"),
("abc\x80\x80\xc1\xc4", "ignore", u"abc\u804a"),
("\x83\x34\x83\x31", "strict", None),
+ (u"\u30fb", "strict", None),
)
class Test_GB18030(test_multibytecodec_support.TestBase, unittest.TestCase):
@@ -45,6 +46,7 @@
("abc\x80\x80\xc1\xc4\xc8", "replace", u"abc\ufffd\u804a\ufffd"),
("abc\x80\x80\xc1\xc4", "ignore", u"abc\u804a"),
("abc\x84\x39\x84\x39\xc1\xc4", "replace", u"abc\ufffd\u804a"),
+ (u"\u30fb", "strict", "\x819\xa79"),
)
has_iso10646 = True
Modified: stackless/trunk/Lib/test/test_contextlib.py
==============================================================================
--- stackless/trunk/Lib/test/test_contextlib.py (original)
+++ stackless/trunk/Lib/test/test_contextlib.py Sun Oct 15 16:42:33 2006
@@ -330,32 +330,6 @@
return True
self.boilerPlate(lock, locked)
-class DecimalContextTestCase(unittest.TestCase):
-
- # XXX Somebody should write more thorough tests for this
-
- def testBasic(self):
- ctx = decimal.getcontext()
- orig_context = ctx.copy()
- try:
- ctx.prec = save_prec = decimal.ExtendedContext.prec + 5
- with decimal.ExtendedContext.get_manager():
- self.assertEqual(decimal.getcontext().prec,
- decimal.ExtendedContext.prec)
- self.assertEqual(decimal.getcontext().prec, save_prec)
- try:
- with decimal.ExtendedContext.get_manager():
- self.assertEqual(decimal.getcontext().prec,
- decimal.ExtendedContext.prec)
- 1/0
- except ZeroDivisionError:
- self.assertEqual(decimal.getcontext().prec, save_prec)
- else:
- self.fail("Didn't raise ZeroDivisionError")
- finally:
- decimal.setcontext(orig_context)
-
-
# This is needed to make the test actually run under regrtest.py!
def test_main():
run_suite(
Modified: stackless/trunk/Lib/test/test_datetime.py
==============================================================================
--- stackless/trunk/Lib/test/test_datetime.py (original)
+++ stackless/trunk/Lib/test/test_datetime.py Sun Oct 15 16:42:33 2006
@@ -844,6 +844,7 @@
t = self.theclass(2005, 3, 2)
self.assertEqual(t.strftime("m:%m d:%d y:%y"), "m:03 d:02 y:05")
self.assertEqual(t.strftime(""), "") # SF bug #761337
+ self.assertEqual(t.strftime('x'*1000), 'x'*1000) # SF bug #1556784
self.assertRaises(TypeError, t.strftime) # needs an arg
self.assertRaises(TypeError, t.strftime, "one", "two") # too many args
Modified: stackless/trunk/Lib/test/test_decimal.py
==============================================================================
--- stackless/trunk/Lib/test/test_decimal.py (original)
+++ stackless/trunk/Lib/test/test_decimal.py Sun Oct 15 16:42:33 2006
@@ -23,6 +23,7 @@
you're working through IDLE, you can import this test module and call test_main()
with the corresponding argument.
"""
+from __future__ import with_statement
import unittest
import glob
@@ -1064,6 +1065,32 @@
self.assertNotEqual(id(c.flags), id(d.flags))
self.assertNotEqual(id(c.traps), id(d.traps))
+class WithStatementTest(unittest.TestCase):
+ # Can't do these as docstrings until Python 2.6
+ # as doctest can't handle __future__ statements
+
+ def test_localcontext(self):
+ # Use a copy of the current context in the block
+ orig_ctx = getcontext()
+ with localcontext() as enter_ctx:
+ set_ctx = getcontext()
+ final_ctx = getcontext()
+ self.assert_(orig_ctx is final_ctx, 'did not restore context correctly')
+ self.assert_(orig_ctx is not set_ctx, 'did not copy the context')
+ self.assert_(set_ctx is enter_ctx, '__enter__ returned wrong context')
+
+ def test_localcontextarg(self):
+ # Use a copy of the supplied context in the block
+ orig_ctx = getcontext()
+ new_ctx = Context(prec=42)
+ with localcontext(new_ctx) as enter_ctx:
+ set_ctx = getcontext()
+ final_ctx = getcontext()
+ self.assert_(orig_ctx is final_ctx, 'did not restore context correctly')
+ self.assert_(set_ctx.prec == new_ctx.prec, 'did not set correct context')
+ self.assert_(new_ctx is not set_ctx, 'did not copy the context')
+ self.assert_(set_ctx is enter_ctx, '__enter__ returned wrong context')
+
def test_main(arith=False, verbose=None):
""" Execute the tests.
@@ -1084,6 +1111,7 @@
DecimalPythonAPItests,
ContextAPItests,
DecimalTest,
+ WithStatementTest,
]
try:
Modified: stackless/trunk/Lib/test/test_descr.py
==============================================================================
--- stackless/trunk/Lib/test/test_descr.py (original)
+++ stackless/trunk/Lib/test/test_descr.py Sun Oct 15 16:42:33 2006
@@ -2142,6 +2142,13 @@
veris(Sub.test(), Base.aProp)
+ # Verify that super() doesn't allow keyword args
+ try:
+ super(Base, kw=1)
+ except TypeError:
+ pass
+ else:
+ raise TestFailed, "super shouldn't accept keyword args"
def inherits():
if verbose: print "Testing inheritance from basic types..."
Modified: stackless/trunk/Lib/test/test_exceptions.py
==============================================================================
--- stackless/trunk/Lib/test/test_exceptions.py (original)
+++ stackless/trunk/Lib/test/test_exceptions.py Sun Oct 15 16:42:33 2006
@@ -185,15 +185,6 @@
def testAttributes(self):
# test that exception attributes are happy
- try:
- str(u'Hello \u00E1')
- except Exception, e:
- sampleUnicodeEncodeError = e
-
- try:
- unicode('\xff')
- except Exception, e:
- sampleUnicodeDecodeError = e
exceptionList = [
(BaseException, (), {'message' : '', 'args' : ()}),
@@ -205,11 +196,16 @@
(SystemExit, ('foo',),
{'message' : 'foo', 'args' : ('foo',), 'code' : 'foo'}),
(IOError, ('foo',),
- {'message' : 'foo', 'args' : ('foo',)}),
+ {'message' : 'foo', 'args' : ('foo',), 'filename' : None,
+ 'errno' : None, 'strerror' : None}),
(IOError, ('foo', 'bar'),
- {'message' : '', 'args' : ('foo', 'bar')}),
+ {'message' : '', 'args' : ('foo', 'bar'), 'filename' : None,
+ 'errno' : 'foo', 'strerror' : 'bar'}),
(IOError, ('foo', 'bar', 'baz'),
- {'message' : '', 'args' : ('foo', 'bar')}),
+ {'message' : '', 'args' : ('foo', 'bar'), 'filename' : 'baz',
+ 'errno' : 'foo', 'strerror' : 'bar'}),
+ (IOError, ('foo', 'bar', 'baz', 'quux'),
+ {'message' : '', 'args' : ('foo', 'bar', 'baz', 'quux')}),
(EnvironmentError, ('errnoStr', 'strErrorStr', 'filenameStr'),
{'message' : '', 'args' : ('errnoStr', 'strErrorStr'),
'strerror' : 'strErrorStr', 'errno' : 'errnoStr',
@@ -236,16 +232,16 @@
'print_file_and_line' : None, 'msg' : 'msgStr',
'filename' : None, 'lineno' : None, 'offset' : None}),
(UnicodeError, (), {'message' : '', 'args' : (),}),
- (sampleUnicodeEncodeError,
- {'message' : '', 'args' : ('ascii', u'Hello \xe1', 6, 7,
- 'ordinal not in range(128)'),
- 'encoding' : 'ascii', 'object' : u'Hello \xe1',
- 'start' : 6, 'reason' : 'ordinal not in range(128)'}),
- (sampleUnicodeDecodeError,
+ (UnicodeEncodeError, ('ascii', u'a', 0, 1, 'ordinal not in range'),
+ {'message' : '', 'args' : ('ascii', u'a', 0, 1,
+ 'ordinal not in range'),
+ 'encoding' : 'ascii', 'object' : u'a',
+ 'start' : 0, 'reason' : 'ordinal not in range'}),
+ (UnicodeDecodeError, ('ascii', '\xff', 0, 1, 'ordinal not in range'),
{'message' : '', 'args' : ('ascii', '\xff', 0, 1,
- 'ordinal not in range(128)'),
+ 'ordinal not in range'),
'encoding' : 'ascii', 'object' : '\xff',
- 'start' : 0, 'reason' : 'ordinal not in range(128)'}),
+ 'start' : 0, 'reason' : 'ordinal not in range'}),
(UnicodeTranslateError, (u"\u3042", 0, 1, "ouch"),
{'message' : '', 'args' : (u'\u3042', 0, 1, 'ouch'),
'object' : u'\u3042', 'reason' : 'ouch',
@@ -261,18 +257,14 @@
except NameError:
pass
- for args in exceptionList:
- expected = args[-1]
+ for exc, args, expected in exceptionList:
try:
- exc = args[0]
- if len(args) == 2:
- raise exc
- else:
- raise exc(*args[1])
+ raise exc(*args)
except BaseException, e:
- if (e is not exc and # needed for sampleUnicode errors
- type(e) is not exc):
+ if type(e) is not exc:
raise
+ # Verify module name
+ self.assertEquals(type(e).__module__, 'exceptions')
# Verify no ref leaks in Exc_str()
s = str(e)
for checkArgName in expected:
@@ -317,6 +309,15 @@
return -1
self.assertRaises(RuntimeError, g)
+ def testUnicodeStrUsage(self):
+ # Make sure both instances and classes have a str and unicode
+ # representation.
+ self.failUnless(str(Exception))
+ self.failUnless(unicode(Exception))
+ self.failUnless(str(Exception('a')))
+ self.failUnless(unicode(Exception(u'a')))
+
+
def test_main():
run_unittest(ExceptionTests)
Modified: stackless/trunk/Lib/test/test_fcntl.py
==============================================================================
--- stackless/trunk/Lib/test/test_fcntl.py (original)
+++ stackless/trunk/Lib/test/test_fcntl.py Sun Oct 15 16:42:33 2006
@@ -25,7 +25,7 @@
'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5',
'freebsd6', 'freebsd7',
'bsdos2', 'bsdos3', 'bsdos4',
- 'openbsd', 'openbsd2', 'openbsd3'):
+ 'openbsd', 'openbsd2', 'openbsd3', 'openbsd4'):
if struct.calcsize('l') == 8:
off_t = 'l'
pid_t = 'i'
Modified: stackless/trunk/Lib/test/test_future.py
==============================================================================
--- stackless/trunk/Lib/test/test_future.py (original)
+++ stackless/trunk/Lib/test/test_future.py Sun Oct 15 16:42:33 2006
@@ -82,6 +82,27 @@
else:
self.fail("expected exception didn't occur")
+ def test_parserhack(self):
+ # test that the parser.c::future_hack function works as expected
+ # Note: although this test must pass, it's not testing the original
+ # bug as of 2.6 since the with statement is not optional and
+ # the parser hack disabled. If a new keyword is introduced in
+ # 2.6, change this to refer to the new future import.
+ try:
+ exec "from __future__ import division, with_statement; with = 0"
+ except SyntaxError:
+ pass
+ else:
+ self.fail("syntax error didn't occur")
+
+ try:
+ exec "from __future__ import (with_statement, division); with = 0"
+ except SyntaxError:
+ pass
+ else:
+ self.fail("syntax error didn't occur")
+
+
def test_main():
test_support.run_unittest(FutureTest)
Modified: stackless/trunk/Lib/test/test_grammar.py
==============================================================================
--- stackless/trunk/Lib/test/test_grammar.py (original)
+++ stackless/trunk/Lib/test/test_grammar.py Sun Oct 15 16:42:33 2006
@@ -825,6 +825,10 @@
verify([ x for x in range(10) if x % 2 if x % 3 ], [1, 5, 7])
verify((x for x in range(10) if x % 2 if x % 3), [1, 5, 7])
+# Verify unpacking single element tuples in listcomp/genexp.
+vereq([x for x, in [(4,), (5,), (6,)]], [4, 5, 6])
+vereq(list(x for x, in [(7,), (8,), (9,)]), [7, 8, 9])
+
# Test ifelse expressions in various cases
def _checkeval(msg, ret):
"helper to check that evaluation of expressions is done correctly"
Modified: stackless/trunk/Lib/test/test_imp.py
==============================================================================
--- stackless/trunk/Lib/test/test_imp.py (original)
+++ stackless/trunk/Lib/test/test_imp.py Sun Oct 15 16:42:33 2006
@@ -1,43 +1,47 @@
import imp
-from test.test_support import TestFailed, TestSkipped
-try:
- import thread
-except ImportError:
- raise TestSkipped("test only valid when thread support is available")
-
-def verify_lock_state(expected):
- if imp.lock_held() != expected:
- raise TestFailed("expected imp.lock_held() to be %r" % expected)
-
-def testLock():
- LOOPS = 50
-
- # The import lock may already be held, e.g. if the test suite is run
- # via "import test.autotest".
- lock_held_at_start = imp.lock_held()
- verify_lock_state(lock_held_at_start)
-
- for i in range(LOOPS):
- imp.acquire_lock()
- verify_lock_state(True)
+import thread
+import unittest
+from test import test_support
- for i in range(LOOPS):
- imp.release_lock()
- # The original state should be restored now.
- verify_lock_state(lock_held_at_start)
+class LockTests(unittest.TestCase):
- if not lock_held_at_start:
- try:
+ """Very basic test of import lock functions."""
+
+ def verify_lock_state(self, expected):
+ self.failUnlessEqual(imp.lock_held(), expected,
+ "expected imp.lock_held() to be %r" % expected)
+ def testLock(self):
+ LOOPS = 50
+
+ # The import lock may already be held, e.g. if the test suite is run
+ # via "import test.autotest".
+ lock_held_at_start = imp.lock_held()
+ self.verify_lock_state(lock_held_at_start)
+
+ for i in range(LOOPS):
+ imp.acquire_lock()
+ self.verify_lock_state(True)
+
+ for i in range(LOOPS):
imp.release_lock()
- except RuntimeError:
- pass
- else:
- raise TestFailed("release_lock() without lock should raise "
- "RuntimeError")
+
+ # The original state should be restored now.
+ self.verify_lock_state(lock_held_at_start)
+
+ if not lock_held_at_start:
+ try:
+ imp.release_lock()
+ except RuntimeError:
+ pass
+ else:
+ self.fail("release_lock() without lock should raise "
+ "RuntimeError")
def test_main():
- testLock()
+ test_support.run_unittest(
+ LockTests,
+ )
if __name__ == "__main__":
test_main()
Modified: stackless/trunk/Lib/test/test_import.py
==============================================================================
--- stackless/trunk/Lib/test/test_import.py (original)
+++ stackless/trunk/Lib/test/test_import.py Sun Oct 15 16:42:33 2006
@@ -1,21 +1,11 @@
-from test.test_support import TESTFN, TestFailed
+from test.test_support import TESTFN, run_unittest
+import unittest
import os
import random
import sys
import py_compile
-# Brief digression to test that import is case-sensitive: if we got this
-# far, we know for sure that "random" exists.
-try:
- import RAnDoM
-except ImportError:
- pass
-else:
- raise TestFailed("import of RAnDoM should have failed (case mismatch)")
-
-# Another brief digression to test the accuracy of manifest float constants.
-from test import double_const # don't blink -- that *was* the test
def remove_files(name):
for f in (name + os.extsep + "py",
@@ -26,199 +16,206 @@
if os.path.exists(f):
os.remove(f)
-def test_with_extension(ext): # ext normally ".py"; perhaps ".pyw"
- source = TESTFN + ext
- pyo = TESTFN + os.extsep + "pyo"
- if sys.platform.startswith('java'):
- pyc = TESTFN + "$py.class"
- else:
- pyc = TESTFN + os.extsep + "pyc"
-
- f = open(source, "w")
- print >> f, "# This tests Python's ability to import a", ext, "file."
- a = random.randrange(1000)
- b = random.randrange(1000)
- print >> f, "a =", a
- print >> f, "b =", b
- f.close()
- try:
+class ImportTest(unittest.TestCase):
+
+ def testCaseSensitivity(self):
+ # Brief digression to test that import is case-sensitive: if we got this
+ # far, we know for sure that "random" exists.
try:
- mod = __import__(TESTFN)
- except ImportError, err:
- raise ValueError("import from %s failed: %s" % (ext, err))
+ import RAnDoM
+ except ImportError:
+ pass
+ else:
+ self.fail("import of RAnDoM should have failed (case mismatch)")
- if mod.a != a or mod.b != b:
- print a, "!=", mod.a
- print b, "!=", mod.b
- raise ValueError("module loaded (%s) but contents invalid" % mod)
- finally:
- os.unlink(source)
+ def testDoubleConst(self):
+ # Another brief digression to test the accuracy of manifest float constants.
+ from test import double_const # don't blink -- that *was* the test
+
+ def testImport(self):
+ def test_with_extension(ext):
+ # ext normally ".py"; perhaps ".pyw"
+ source = TESTFN + ext
+ pyo = TESTFN + os.extsep + "pyo"
+ if sys.platform.startswith('java'):
+ pyc = TESTFN + "$py.class"
+ else:
+ pyc = TESTFN + os.extsep + "pyc"
- try:
- try:
- reload(mod)
- except ImportError, err:
- raise ValueError("import from .pyc/.pyo failed: %s" % err)
- finally:
- try:
- os.unlink(pyc)
- except os.error:
- pass
- try:
- os.unlink(pyo)
- except os.error:
- pass
- del sys.modules[TESTFN]
+ f = open(source, "w")
+ print >> f, "# This tests Python's ability to import a", ext, "file."
+ a = random.randrange(1000)
+ b = random.randrange(1000)
+ print >> f, "a =", a
+ print >> f, "b =", b
+ f.close()
-sys.path.insert(0, os.curdir)
-try:
- test_with_extension(os.extsep + "py")
- if sys.platform.startswith("win"):
- for ext in ".PY", ".Py", ".pY", ".pyw", ".PYW", ".pYw":
- test_with_extension(ext)
-finally:
- del sys.path[0]
-
-# Verify that the imp module can correctly load and find .py files
-import imp
-x = imp.find_module("os")
-os = imp.load_module("os", *x)
-
-def test_module_with_large_stack(module):
- # create module w/list of 65000 elements to test bug #561858
- filename = module + os.extsep + 'py'
-
- # create a file with a list of 65000 elements
- f = open(filename, 'w+')
- f.write('d = [\n')
- for i in range(65000):
- f.write('"",\n')
- f.write(']')
- f.close()
-
- # compile & remove .py file, we only need .pyc (or .pyo)
- f = open(filename, 'r')
- py_compile.compile(filename)
- f.close()
- os.unlink(filename)
-
- # need to be able to load from current dir
- sys.path.append('')
-
- # this used to crash
- exec 'import ' + module
-
- # cleanup
- del sys.path[-1]
- for ext in 'pyc', 'pyo':
- fname = module + os.extsep + ext
- if os.path.exists(fname):
- os.unlink(fname)
-
-test_module_with_large_stack('longlist')
-
-def test_failing_import_sticks():
- source = TESTFN + os.extsep + "py"
- f = open(source, "w")
- print >> f, "a = 1/0"
- f.close()
-
- # New in 2.4, we shouldn't be able to import that no matter how often
- # we try.
- sys.path.insert(0, os.curdir)
- try:
- for i in 1, 2, 3:
try:
- mod = __import__(TESTFN)
- except ZeroDivisionError:
- if TESTFN in sys.modules:
- raise TestFailed("damaged module in sys.modules", i)
- else:
- raise TestFailed("was able to import a damaged module", i)
- finally:
- sys.path.pop(0)
- remove_files(TESTFN)
-
-test_failing_import_sticks()
-
-def test_failing_reload():
- # A failing reload should leave the module object in sys.modules.
- source = TESTFN + os.extsep + "py"
- f = open(source, "w")
- print >> f, "a = 1"
- print >> f, "b = 2"
- f.close()
-
- sys.path.insert(0, os.curdir)
- try:
- mod = __import__(TESTFN)
- if TESTFN not in sys.modules:
- raise TestFailed("expected module in sys.modules")
- if mod.a != 1 or mod.b != 2:
- raise TestFailed("module has wrong attribute values")
-
- # On WinXP, just replacing the .py file wasn't enough to
- # convince reload() to reparse it. Maybe the timestamp didn't
- # move enough. We force it to get reparsed by removing the
- # compiled file too.
- remove_files(TESTFN)
+ try:
+ mod = __import__(TESTFN)
+ except ImportError, err:
+ self.fail("import from %s failed: %s" % (ext, err))
+
+ self.assertEquals(mod.a, a,
+ "module loaded (%s) but contents invalid" % mod)
+ self.assertEquals(mod.b, b,
+ "module loaded (%s) but contents invalid" % mod)
+ finally:
+ os.unlink(source)
+
+ try:
+ try:
+ reload(mod)
+ except ImportError, err:
+ self.fail("import from .pyc/.pyo failed: %s" % err)
+ finally:
+ try:
+ os.unlink(pyc)
+ except OSError:
+ pass
+ try:
+ os.unlink(pyo)
+ except OSError:
+ pass
+ del sys.modules[TESTFN]
+
+ sys.path.insert(0, os.curdir)
+ try:
+ test_with_extension(os.extsep + "py")
+ if sys.platform.startswith("win"):
+ for ext in ".PY", ".Py", ".pY", ".pyw", ".PYW", ".pYw":
+ test_with_extension(ext)
+ finally:
+ del sys.path[0]
+
+ def testImpModule(self):
+ # Verify that the imp module can correctly load and find .py files
+ import imp
+ x = imp.find_module("os")
+ os = imp.load_module("os", *x)
+
+ def test_module_with_large_stack(self, module='longlist'):
+ # create module w/list of 65000 elements to test bug #561858
+ filename = module + os.extsep + 'py'
+
+ # create a file with a list of 65000 elements
+ f = open(filename, 'w+')
+ f.write('d = [\n')
+ for i in range(65000):
+ f.write('"",\n')
+ f.write(']')
+ f.close()
+
+ # compile & remove .py file, we only need .pyc (or .pyo)
+ f = open(filename, 'r')
+ py_compile.compile(filename)
+ f.close()
+ os.unlink(filename)
+
+ # need to be able to load from current dir
+ sys.path.append('')
- # Now damage the module.
+ # this used to crash
+ exec 'import ' + module
+
+ # cleanup
+ del sys.path[-1]
+ for ext in 'pyc', 'pyo':
+ fname = module + os.extsep + ext
+ if os.path.exists(fname):
+ os.unlink(fname)
+
+ def test_failing_import_sticks(self):
+ source = TESTFN + os.extsep + "py"
f = open(source, "w")
- print >> f, "a = 10"
- print >> f, "b = 20//0"
+ print >> f, "a = 1/0"
f.close()
+
+ # New in 2.4, we shouldn't be able to import that no matter how often
+ # we try.
+ sys.path.insert(0, os.curdir)
try:
- reload(mod)
- except ZeroDivisionError:
- pass
- else:
- raise TestFailed("was able to reload a damaged module")
+ for i in 1, 2, 3:
+ try:
+ mod = __import__(TESTFN)
+ except ZeroDivisionError:
+ if TESTFN in sys.modules:
+ self.fail("damaged module in sys.modules on %i. try" % i)
+ else:
+ self.fail("was able to import a damaged module on %i. try" % i)
+ finally:
+ sys.path.pop(0)
+ remove_files(TESTFN)
+
+ def test_failing_reload(self):
+ # A failing reload should leave the module object in sys.modules.
+ source = TESTFN + os.extsep + "py"
+ f = open(source, "w")
+ print >> f, "a = 1"
+ print >> f, "b = 2"
+ f.close()
+
+ sys.path.insert(0, os.curdir)
+ try:
+ mod = __import__(TESTFN)
+ self.assert_(TESTFN in sys.modules, "expected module in sys.modules")
+ self.assertEquals(mod.a, 1, "module has wrong attribute values")
+ self.assertEquals(mod.b, 2, "module has wrong attribute values")
+
+ # On WinXP, just replacing the .py file wasn't enough to
+ # convince reload() to reparse it. Maybe the timestamp didn't
+ # move enough. We force it to get reparsed by removing the
+ # compiled file too.
+ remove_files(TESTFN)
+
+ # Now damage the module.
+ f = open(source, "w")
+ print >> f, "a = 10"
+ print >> f, "b = 20//0"
+ f.close()
+
+ self.assertRaises(ZeroDivisionError, reload, mod)
+
+ # But we still expect the module to be in sys.modules.
+ mod = sys.modules.get(TESTFN)
+ self.failIf(mod is None, "expected module to still be in sys.modules")
+
+ # We should have replaced a w/ 10, but the old b value should
+ # stick.
+ self.assertEquals(mod.a, 10, "module has wrong attribute values")
+ self.assertEquals(mod.b, 2, "module has wrong attribute values")
+
+ finally:
+ sys.path.pop(0)
+ remove_files(TESTFN)
+ if TESTFN in sys.modules:
+ del sys.modules[TESTFN]
+
+ def test_import_name_binding(self):
+ # import x.y.z binds x in the current namespace
+ import test as x
+ import test.test_support
+ self.assert_(x is test, x.__name__)
+ self.assert_(hasattr(test.test_support, "__file__"))
+
+ # import x.y.z as w binds z as w
+ import test.test_support as y
+ self.assert_(y is test.test_support, y.__name__)
+
+ def test_import_initless_directory_warning(self):
+ import warnings
+ oldfilters = warnings.filters[:]
+ warnings.simplefilter('error', ImportWarning);
+ try:
+ # Just a random non-package directory we always expect to be
+ # somewhere in sys.path...
+ self.assertRaises(ImportWarning, __import__, "site-packages")
+ finally:
+ warnings.filters = oldfilters
- # But we still expect the module to be in sys.modules.
- mod = sys.modules.get(TESTFN)
- if mod is None:
- raise TestFailed("expected module to still be in sys.modules")
- # We should have replaced a w/ 10, but the old b value should
- # stick.
- if mod.a != 10 or mod.b != 2:
- raise TestFailed("module has wrong attribute values")
-
- finally:
- sys.path.pop(0)
- remove_files(TESTFN)
- if TESTFN in sys.modules:
- del sys.modules[TESTFN]
-
-test_failing_reload()
-
-def test_import_name_binding():
- # import x.y.z binds x in the current namespace
- import test as x
- import test.test_support
- assert x is test, x.__name__
- assert hasattr(test.test_support, "__file__")
-
- # import x.y.z as w binds z as w
- import test.test_support as y
- assert y is test.test_support, y.__name__
-
-test_import_name_binding()
-
-def test_import_initless_directory_warning():
- import warnings
- oldfilters = warnings.filters[:]
- warnings.simplefilter('error', ImportWarning);
- try:
- # Just a random non-package directory we always expect to be
- # somewhere in sys.path...
- __import__("site-packages")
- except ImportWarning:
- pass
- else:
- raise AssertionError
- finally:
- warnings.filters = oldfilters
+def test_main(verbose=None):
+ run_unittest(ImportTest)
-test_import_initless_directory_warning()
+if __name__ == '__main__':
+ test_main()
Modified: stackless/trunk/Lib/test/test_inspect.py
==============================================================================
--- stackless/trunk/Lib/test/test_inspect.py (original)
+++ stackless/trunk/Lib/test/test_inspect.py Sun Oct 15 16:42:33 2006
@@ -178,7 +178,18 @@
self.assertEqual(inspect.getcomments(mod.StupidGit), '# line 20\n')
def test_getmodule(self):
+ # Check actual module
+ self.assertEqual(inspect.getmodule(mod), mod)
+ # Check class (uses __module__ attribute)
self.assertEqual(inspect.getmodule(mod.StupidGit), mod)
+ # Check a method (no __module__ attribute, falls back to filename)
+ self.assertEqual(inspect.getmodule(mod.StupidGit.abuse), mod)
+ # Do it again (check the caching isn't broken)
+ self.assertEqual(inspect.getmodule(mod.StupidGit.abuse), mod)
+ # Check a builtin
+ self.assertEqual(inspect.getmodule(str), sys.modules["__builtin__"])
+ # Check filename override
+ self.assertEqual(inspect.getmodule(None, modfile), mod)
def test_getsource(self):
self.assertSourceEqual(git.abuse, 29, 39)
Modified: stackless/trunk/Lib/test/test_itertools.py
==============================================================================
--- stackless/trunk/Lib/test/test_itertools.py (original)
+++ stackless/trunk/Lib/test/test_itertools.py Sun Oct 15 16:42:33 2006
@@ -58,6 +58,10 @@
self.assertEqual(repr(c), 'count(3)')
c.next()
self.assertEqual(repr(c), 'count(4)')
+ c = count(-9)
+ self.assertEqual(repr(c), 'count(-9)')
+ c.next()
+ self.assertEqual(c.next(), -8)
def test_cycle(self):
self.assertEqual(take(10, cycle('abc')), list('abcabcabca'))
@@ -371,6 +375,7 @@
# test values of n
self.assertRaises(TypeError, tee, 'abc', 'invalid')
+ self.assertRaises(ValueError, tee, [], -1)
for n in xrange(5):
result = tee('abc', n)
self.assertEqual(type(result), tuple)
Modified: stackless/trunk/Lib/test/test_long.py
==============================================================================
--- stackless/trunk/Lib/test/test_long.py (original)
+++ stackless/trunk/Lib/test/test_long.py Sun Oct 15 16:42:33 2006
@@ -247,17 +247,23 @@
"long(-sys.maxint-1) != -sys.maxint-1")
# long -> int should not fail for hugepos_aslong or hugeneg_aslong
+ x = int(hugepos_aslong)
try:
- self.assertEqual(int(hugepos_aslong), hugepos,
+ self.assertEqual(x, hugepos,
"converting sys.maxint to long and back to int fails")
except OverflowError:
self.fail("int(long(sys.maxint)) overflowed!")
+ if not isinstance(x, int):
+ raise TestFailed("int(long(sys.maxint)) should have returned int")
+ x = int(hugeneg_aslong)
try:
- self.assertEqual(int(hugeneg_aslong), hugeneg,
+ self.assertEqual(x, hugeneg,
"converting -sys.maxint-1 to long and back to int fails")
except OverflowError:
self.fail("int(long(-sys.maxint-1)) overflowed!")
-
+ if not isinstance(x, int):
+ raise TestFailed("int(long(-sys.maxint-1)) should have "
+ "returned int")
# but long -> int should overflow for hugepos+1 and hugeneg-1
x = hugepos_aslong + 1
try:
@@ -282,6 +288,17 @@
self.assert_(type(y) is long,
"overflowing int conversion must return long not long subtype")
+ # long -> Py_ssize_t conversion
+ class X(object):
+ def __getslice__(self, i, j):
+ return i, j
+
+ self.assertEqual(X()[-5L:7L], (-5, 7))
+ # use the clamping effect to test the smallest and largest longs
+ # that fit a Py_ssize_t
+ slicemin, slicemax = X()[-2L**100:2L**100]
+ self.assertEqual(X()[slicemin:slicemax], (slicemin, slicemax))
+
# ----------------------------------- tests of auto int->long conversion
def test_auto_overflow(self):
Modified: stackless/trunk/Lib/test/test_multibytecodec.py
==============================================================================
--- stackless/trunk/Lib/test/test_multibytecodec.py (original)
+++ stackless/trunk/Lib/test/test_multibytecodec.py Sun Oct 15 16:42:33 2006
@@ -202,6 +202,22 @@
uni = u':hu4:unit\xe9 de famille'
self.assertEqual(iso2022jp2.decode('iso2022-jp-2'), uni)
+ def test_iso2022_jp_g0(self):
+ self.failIf('\x0e' in u'\N{SOFT HYPHEN}'.encode('iso-2022-jp-2'))
+ for encoding in ('iso-2022-jp-2004', 'iso-2022-jp-3'):
+ e = u'\u3406'.encode(encoding)
+ self.failIf(filter(lambda x: x >= '\x80', e))
+
+ def test_bug1572832(self):
+ if sys.maxunicode >= 0x10000:
+ myunichr = unichr
+ else:
+ myunichr = lambda x: unichr(0xD7C0+(x>>10)) + unichr(0xDC00+(x&0x3FF))
+
+ for x in xrange(0x10000, 0x110000):
+ # Any ISO 2022 codec will cause the segfault
+ myunichr(x).encode('iso_2022_jp', 'ignore')
+
def test_main():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(Test_MultibyteCodec))
Modified: stackless/trunk/Lib/test/test_mutants.py
==============================================================================
--- stackless/trunk/Lib/test/test_mutants.py (original)
+++ stackless/trunk/Lib/test/test_mutants.py Sun Oct 15 16:42:33 2006
@@ -91,12 +91,17 @@
self.hashcode = random.randrange(1000000000)
def __hash__(self):
+ return 42
return self.hashcode
def __cmp__(self, other):
maybe_mutate() # The point of the test.
return cmp(self.i, other.i)
+ def __eq__(self, other):
+ maybe_mutate() # The point of the test.
+ return self.i == other.i
+
def __repr__(self):
return "Horrid(%d)" % self.i
@@ -132,7 +137,10 @@
while dict1 and len(dict1) == len(dict2):
if verbose:
print ".",
- c = cmp(dict1, dict2)
+ if random.random() < 0.5:
+ c = cmp(dict1, dict2)
+ else:
+ c = dict1 == dict2
if verbose:
print
Modified: stackless/trunk/Lib/test/test_new.py
==============================================================================
--- stackless/trunk/Lib/test/test_new.py (original)
+++ stackless/trunk/Lib/test/test_new.py Sun Oct 15 16:42:33 2006
@@ -57,6 +57,14 @@
else:
raise TestFailed, "dangerous instance method creation allowed"
+# Verify that instancemethod() doesn't allow keyword args
+try:
+ new.instancemethod(break_yolks, c, kw=1)
+except TypeError:
+ pass
+else:
+ raise TestFailed, "instancemethod shouldn't accept keyword args"
+
# It's unclear what the semantics should be for a code object compiled at
# module scope, but bound and run in a function. In CPython, `c' is global
# (by accident?) while in Jython, `c' is local. The intent of the test
Modified: stackless/trunk/Lib/test/test_os.py
==============================================================================
--- stackless/trunk/Lib/test/test_os.py (original)
+++ stackless/trunk/Lib/test/test_os.py Sun Oct 15 16:42:33 2006
@@ -223,6 +223,23 @@
except TypeError:
pass
+ def test_utime_dir(self):
+ delta = 1000000
+ st = os.stat(test_support.TESTFN)
+ # round to int, because some systems may support sub-second
+ # time stamps in stat, but not in utime.
+ os.utime(test_support.TESTFN, (st.st_atime, int(st.st_mtime-delta)))
+ st2 = os.stat(test_support.TESTFN)
+ self.assertEquals(st2.st_mtime, int(st.st_mtime-delta))
+
+ # Restrict test to Win32, since there is no guarantee other
+ # systems support centiseconds
+ if sys.platform == 'win32':
+ def test_1565150(self):
+ t1 = 1159195039.25
+ os.utime(self.fname, (t1, t1))
+ self.assertEquals(os.stat(self.fname).st_mtime, t1)
+
from test import mapping_tests
class EnvironTests(mapping_tests.BasicTestMappingProtocol):
Modified: stackless/trunk/Lib/test/test_parser.py
==============================================================================
--- stackless/trunk/Lib/test/test_parser.py (original)
+++ stackless/trunk/Lib/test/test_parser.py Sun Oct 15 16:42:33 2006
@@ -183,6 +183,44 @@
def test_assert(self):
self.check_suite("assert alo < ahi and blo < bhi\n")
+ def test_position(self):
+ # An absolutely minimal test of position information. Better
+ # tests would be a big project.
+ code = "def f(x):\n return x + 1\n"
+ st1 = parser.suite(code)
+ st2 = st1.totuple(line_info=1, col_info=1)
+
+ def walk(tree):
+ node_type = tree[0]
+ next = tree[1]
+ if isinstance(next, tuple):
+ for elt in tree[1:]:
+ for x in walk(elt):
+ yield x
+ else:
+ yield tree
+
+ terminals = list(walk(st2))
+ self.assertEqual([
+ (1, 'def', 1, 0),
+ (1, 'f', 1, 4),
+ (7, '(', 1, 5),
+ (1, 'x', 1, 6),
+ (8, ')', 1, 7),
+ (11, ':', 1, 8),
+ (4, '', 1, 9),
+ (5, '', 2, -1),
+ (1, 'return', 2, 4),
+ (1, 'x', 2, 11),
+ (14, '+', 2, 13),
+ (2, '1', 2, 15),
+ (4, '', 2, 16),
+ (6, '', 2, -1),
+ (4, '', 2, -1),
+ (0, '', 2, -1)],
+ terminals)
+
+
#
# Second, we take *invalid* trees and make sure we get ParserError
# rejections for them.
Modified: stackless/trunk/Lib/test/test_peepholer.py
==============================================================================
--- stackless/trunk/Lib/test/test_peepholer.py (original)
+++ stackless/trunk/Lib/test/test_peepholer.py Sun Oct 15 16:42:33 2006
@@ -161,6 +161,41 @@
self.assert_('(None)' not in asm)
self.assertEqual(asm.split().count('RETURN_VALUE'), 1)
+ def test_elim_jump_to_return(self):
+ # JUMP_FORWARD to RETURN --> RETURN
+ def f(cond, true_value, false_value):
+ return true_value if cond else false_value
+ asm = disassemble(f)
+ self.assert_('JUMP_FORWARD' not in asm)
+ self.assert_('JUMP_ABSOLUTE' not in asm)
+ self.assertEqual(asm.split().count('RETURN_VALUE'), 2)
+
+ def test_elim_jump_after_return1(self):
+ # Eliminate dead code: jumps immediately after returns can't be reached
+ def f(cond1, cond2):
+ if cond1: return 1
+ if cond2: return 2
+ while 1:
+ return 3
+ while 1:
+ if cond1: return 4
+ return 5
+ return 6
+ asm = disassemble(f)
+ self.assert_('JUMP_FORWARD' not in asm)
+ self.assert_('JUMP_ABSOLUTE' not in asm)
+ self.assertEqual(asm.split().count('RETURN_VALUE'), 6)
+
+ def test_elim_jump_after_return2(self):
+ # Eliminate dead code: jumps immediately after returns can't be reached
+ def f(cond1, cond2):
+ while 1:
+ if cond1: return 4
+ asm = disassemble(f)
+ self.assert_('JUMP_FORWARD' not in asm)
+ # There should be one jump for the while loop.
+ self.assertEqual(asm.split().count('JUMP_ABSOLUTE'), 1)
+ self.assertEqual(asm.split().count('RETURN_VALUE'), 2)
def test_main(verbose=None):
Modified: stackless/trunk/Lib/test/test_pep352.py
==============================================================================
--- stackless/trunk/Lib/test/test_pep352.py (original)
+++ stackless/trunk/Lib/test/test_pep352.py Sun Oct 15 16:42:33 2006
@@ -15,8 +15,7 @@
self.failUnless(issubclass(Exception, object))
def verify_instance_interface(self, ins):
- for attr in ("args", "message", "__str__", "__unicode__", "__repr__",
- "__getitem__"):
+ for attr in ("args", "message", "__str__", "__repr__", "__getitem__"):
self.failUnless(hasattr(ins, attr), "%s missing %s attribute" %
(ins.__class__.__name__, attr))
Modified: stackless/trunk/Lib/test/test_pyclbr.py
==============================================================================
--- stackless/trunk/Lib/test/test_pyclbr.py (original)
+++ stackless/trunk/Lib/test/test_pyclbr.py Sun Oct 15 16:42:33 2006
@@ -93,6 +93,9 @@
py_item = getattr(module, name)
if isinstance(value, pyclbr.Function):
self.assert_(isinstance(py_item, (FunctionType, BuiltinFunctionType)))
+ if py_item.__module__ != moduleName:
+ continue # skip functions that came from somewhere else
+ self.assertEquals(py_item.__module__, value.module)
else:
self.failUnless(isinstance(py_item, (ClassType, type)))
if py_item.__module__ != moduleName:
Modified: stackless/trunk/Lib/test/test_sgmllib.py
==============================================================================
--- stackless/trunk/Lib/test/test_sgmllib.py (original)
+++ stackless/trunk/Lib/test/test_sgmllib.py Sun Oct 15 16:42:33 2006
@@ -286,21 +286,6 @@
('codepoint', 'convert', 42),
])
- def test_attr_values_quoted_markup(self):
- """Multi-line and markup in attribute values"""
- self.check_events("""<a title='foo\n<br>bar'>text</a>""",
- [("starttag", "a", [("title", "foo\n<br>bar")]),
- ("data", "text"),
- ("endtag", "a")])
- self.check_events("""<a title='less < than'>text</a>""",
- [("starttag", "a", [("title", "less < than")]),
- ("data", "text"),
- ("endtag", "a")])
- self.check_events("""<a title='greater > than'>text</a>""",
- [("starttag", "a", [("title", "greater > than")]),
- ("data", "text"),
- ("endtag", "a")])
-
def test_attr_funky_names(self):
self.check_events("""<a a.b='v' c:d=v e-f=v>""", [
("starttag", "a", [("a.b", "v"), ("c:d", "v"), ("e-f", "v")]),
@@ -376,6 +361,19 @@
('decl', 'DOCTYPE doc [<!ATTLIST doc attr (a | b) >]'),
])
+ def test_read_chunks(self):
+ # SF bug #1541697, this caused sgml parser to hang
+ # Just verify this code doesn't cause a hang.
+ CHUNK = 1024 # increasing this to 8212 makes the problem go away
+
+ f = open(test_support.findfile('sgml_input.html'))
+ fp = sgmllib.SGMLParser()
+ while 1:
+ data = f.read(CHUNK)
+ fp.feed(data)
+ if len(data) != CHUNK:
+ break
+
# XXX These tests have been disabled by prefixing their names with
# an underscore. The first two exercise outstanding bugs in the
# sgmllib module, and the third exhibits questionable behavior
Modified: stackless/trunk/Lib/test/test_subprocess.py
==============================================================================
--- stackless/trunk/Lib/test/test_subprocess.py (original)
+++ stackless/trunk/Lib/test/test_subprocess.py Sun Oct 15 16:42:33 2006
@@ -234,6 +234,12 @@
stripped = remove_stderr_debug_decorations(output)
self.assertEqual(stripped, "appleorange")
+ def test_stdout_filedes_of_stdout(self):
+ # stdout is set to 1 (#1531862).
+ cmd = r"import sys, os; sys.exit(os.write(sys.stdout.fileno(), '.\n'))"
+ rc = subprocess.call([sys.executable, "-c", cmd], stdout=1)
+ self.assertEquals(rc, 2)
+
def test_cwd(self):
tmpdir = os.getenv("TEMP", "/tmp")
# We cannot use os.path.realpath to canonicalize the path,
Modified: stackless/trunk/Lib/test/test_syntax.py
==============================================================================
--- stackless/trunk/Lib/test/test_syntax.py (original)
+++ stackless/trunk/Lib/test/test_syntax.py Sun Oct 15 16:42:33 2006
@@ -235,6 +235,107 @@
>>> f() += 1
Traceback (most recent call last):
SyntaxError: illegal expression for augmented assignment (<doctest test.test_syntax[33]>, line 1)
+
+
+Test continue in finally in weird combinations.
+
+continue in for loop under finally shouuld be ok.
+
+ >>> def test():
+ ... try:
+ ... pass
+ ... finally:
+ ... for abc in range(10):
+ ... continue
+ ... print abc
+ >>> test()
+ 9
+
+Start simple, a continue in a finally should not be allowed.
+
+ >>> def test():
+ ... for abc in range(10):
+ ... try:
+ ... pass
+ ... finally:
+ ... continue
+ Traceback (most recent call last):
+ ...
+ SyntaxError: 'continue' not supported inside 'finally' clause (<doctest test.test_syntax[36]>, line 6)
+
+This is essentially a continue in a finally which should not be allowed.
+
+ >>> def test():
+ ... for abc in range(10):
+ ... try:
+ ... pass
+ ... finally:
+ ... try:
+ ... continue
+ ... except:
+ ... pass
+ Traceback (most recent call last):
+ ...
+ SyntaxError: 'continue' not supported inside 'finally' clause (<doctest test.test_syntax[37]>, line 7)
+
+ >>> def foo():
+ ... try:
+ ... pass
+ ... finally:
+ ... continue
+ Traceback (most recent call last):
+ ...
+ SyntaxError: 'continue' not supported inside 'finally' clause (<doctest test.test_syntax[38]>, line 5)
+
+ >>> def foo():
+ ... for a in ():
+ ... try:
+ ... pass
+ ... finally:
+ ... continue
+ Traceback (most recent call last):
+ ...
+ SyntaxError: 'continue' not supported inside 'finally' clause (<doctest test.test_syntax[39]>, line 6)
+
+ >>> def foo():
+ ... for a in ():
+ ... try:
+ ... pass
+ ... finally:
+ ... try:
+ ... continue
+ ... finally:
+ ... pass
+ Traceback (most recent call last):
+ ...
+ SyntaxError: 'continue' not supported inside 'finally' clause (<doctest test.test_syntax[40]>, line 7)
+
+ >>> def foo():
+ ... for a in ():
+ ... try: pass
+ ... finally:
+ ... try:
+ ... pass
+ ... except:
+ ... continue
+ Traceback (most recent call last):
+ ...
+ SyntaxError: 'continue' not supported inside 'finally' clause (<doctest test.test_syntax[41]>, line 8)
+
+There is one test for a break that is not in a loop. The compiler
+uses a single data structure to keep track of try-finally and loops,
+so we need to be sure that a break is actually inside a loop. If it
+isn't, there should be a syntax error.
+
+ >>> try:
+ ... print 1
+ ... break
+ ... print 2
+ ... finally:
+ ... print 3
+ Traceback (most recent call last):
+ ...
+ SyntaxError: 'break' outside loop (<doctest test.test_syntax[42]>, line 3)
"""
import re
Modified: stackless/trunk/Lib/test/test_tarfile.py
==============================================================================
--- stackless/trunk/Lib/test/test_tarfile.py (original)
+++ stackless/trunk/Lib/test/test_tarfile.py Sun Oct 15 16:42:33 2006
@@ -324,6 +324,27 @@
class WriteStreamTest(WriteTest):
sep = '|'
+ def test_padding(self):
+ self.dst.close()
+
+ if self.comp == "gz":
+ f = gzip.GzipFile(self.dstname)
+ s = f.read()
+ f.close()
+ elif self.comp == "bz2":
+ f = bz2.BZ2Decompressor()
+ s = file(self.dstname).read()
+ s = f.decompress(s)
+ self.assertEqual(len(f.unused_data), 0, "trailing data")
+ else:
+ f = file(self.dstname)
+ s = f.read()
+ f.close()
+
+ self.assertEqual(s.count("\0"), tarfile.RECORDSIZE,
+ "incorrect zero padding")
+
+
class WriteGNULongTest(unittest.TestCase):
"""This testcase checks for correct creation of GNU Longname
and Longlink extensions.
Modified: stackless/trunk/Lib/test/test_tempfile.py
==============================================================================
--- stackless/trunk/Lib/test/test_tempfile.py (original)
+++ stackless/trunk/Lib/test/test_tempfile.py Sun Oct 15 16:42:33 2006
@@ -27,7 +27,7 @@
# number of files that can be opened at one time (see ulimit -n)
if sys.platform == 'mac':
TEST_FILES = 32
-elif sys.platform == 'openbsd3':
+elif sys.platform in ('openbsd3', 'openbsd4'):
TEST_FILES = 48
else:
TEST_FILES = 100
Modified: stackless/trunk/Lib/test/test_time.py
==============================================================================
--- stackless/trunk/Lib/test/test_time.py (original)
+++ stackless/trunk/Lib/test/test_time.py Sun Oct 15 16:42:33 2006
@@ -102,15 +102,19 @@
self.assertEquals(expected, result)
def test_strptime(self):
+ # Should be able to go round-trip from strftime to strptime without
+ # throwing an exception.
tt = time.gmtime(self.t)
for directive in ('a', 'A', 'b', 'B', 'c', 'd', 'H', 'I',
'j', 'm', 'M', 'p', 'S',
'U', 'w', 'W', 'x', 'X', 'y', 'Y', 'Z', '%'):
- format = ' %' + directive
+ format = '%' + directive
+ strf_output = time.strftime(format, tt)
try:
- time.strptime(time.strftime(format, tt), format)
+ time.strptime(strf_output, format)
except ValueError:
- self.fail('conversion specifier: %r failed.' % format)
+ self.fail("conversion specifier %r failed with '%s' input." %
+ (format, strf_output))
def test_asctime(self):
time.asctime(time.gmtime(self.t))
Modified: stackless/trunk/Lib/test/test_tokenize.py
==============================================================================
--- stackless/trunk/Lib/test/test_tokenize.py (original)
+++ stackless/trunk/Lib/test/test_tokenize.py Sun Oct 15 16:42:33 2006
@@ -1,9 +1,93 @@
-import os, glob, random
+"""Tests for the tokenize module.
+
+The tests were originally written in the old Python style, where the
+test output was compared to a golden file. This docstring represents
+the first steps towards rewriting the entire test as a doctest.
+
+The tests can be really simple. Given a small fragment of source
+code, print out a table with the tokens. The ENDMARK is omitted for
+brevity.
+
+>>> dump_tokens("1 + 1")
+NUMBER '1' (1, 0) (1, 1)
+OP '+' (1, 2) (1, 3)
+NUMBER '1' (1, 4) (1, 5)
+
+A comment generates a token here, unlike in the parser module. The
+comment token is followed by an NL or a NEWLINE token, depending on
+whether the line contains the completion of a statement.
+
+>>> dump_tokens("if False:\\n"
+... " # NL\\n"
+... " True = False # NEWLINE\\n")
+NAME 'if' (1, 0) (1, 2)
+NAME 'False' (1, 3) (1, 8)
+OP ':' (1, 8) (1, 9)
+NEWLINE '\\n' (1, 9) (1, 10)
+COMMENT '# NL' (2, 4) (2, 8)
+NL '\\n' (2, 8) (2, 9)
+INDENT ' ' (3, 0) (3, 4)
+NAME 'True' (3, 4) (3, 8)
+OP '=' (3, 9) (3, 10)
+NAME 'False' (3, 11) (3, 16)
+COMMENT '# NEWLINE' (3, 17) (3, 26)
+NEWLINE '\\n' (3, 26) (3, 27)
+DEDENT '' (4, 0) (4, 0)
+
+
+There will be a bunch more tests of specific source patterns.
+
+The tokenize module also defines an untokenize function that should
+regenerate the original program text from the tokens.
+
+There are some standard formatting practices that are easy to get right.
+
+>>> roundtrip("if x == 1:\\n"
+... " print x\\n")
+if x == 1:
+ print x
+
+Some people use different formatting conventions, which makes
+untokenize a little trickier. Note that this test involves trailing
+whitespace after the colon. Note that we use hex escapes to make the
+two trailing blanks apparent in the expected output.
+
+>>> roundtrip("if x == 1 : \\n"
+... " print x\\n")
+if x == 1 :\x20\x20
+ print x
+
+Comments need to go in the right place.
+
+>>> roundtrip("if x == 1:\\n"
+... " # A comment by itself.\\n"
+... " print x # Comment here, too.\\n"
+... " # Another comment.\\n"
+... "after_if = True\\n")
+if x == 1:
+ # A comment by itself.
+ print x # Comment here, too.
+ # Another comment.
+after_if = True
+
+>>> roundtrip("if (x # The comments need to go in the right place\\n"
+... " == 1):\\n"
+... " print 'x == 1'\\n")
+if (x # The comments need to go in the right place
+ == 1):
+ print 'x == 1'
+
+"""
+
+import os, glob, random, time, sys
from cStringIO import StringIO
from test.test_support import (verbose, findfile, is_resource_enabled,
TestFailed)
-from tokenize import (tokenize, generate_tokens, untokenize,
- NUMBER, NAME, OP, STRING)
+from tokenize import (tokenize, generate_tokens, untokenize, tok_name,
+ ENDMARKER, NUMBER, NAME, OP, STRING, COMMENT)
+
+# How much time in seconds can pass before we print a 'Still working' message.
+_PRINT_WORKING_MSG_INTERVAL = 5 * 60
# Test roundtrip for `untokenize`. `f` is a file path. The source code in f
# is tokenized, converted back to source code via tokenize.untokenize(),
@@ -24,6 +108,23 @@
if t1 != t2:
raise TestFailed("untokenize() roundtrip failed for %r" % f)
+def dump_tokens(s):
+ """Print out the tokens in s in a table format.
+
+ The ENDMARKER is omitted.
+ """
+ f = StringIO(s)
+ for type, token, start, end, line in generate_tokens(f.readline):
+ if type == ENDMARKER:
+ break
+ type = tok_name[type]
+ print "%(type)-10.10s %(token)-13.13r %(start)s %(end)s" % locals()
+
+def roundtrip(s):
+ f = StringIO(s)
+ source = untokenize(generate_tokens(f.readline))
+ print source,
+
# This is an example from the docs, set up as a doctest.
def decistmt(s):
"""Substitute Decimals for floats in a string of statements.
@@ -66,6 +167,8 @@
if verbose:
print 'starting...'
+ next_time = time.time() + _PRINT_WORKING_MSG_INTERVAL
+
# This displays the tokenization of tokenize_tests.py to stdout, and
# regrtest.py checks that this equals the expected output (in the
# test/output/ directory).
@@ -85,6 +188,12 @@
testfiles = random.sample(testfiles, 10)
for f in testfiles:
+ # Print still working message since this test can be really slow
+ if next_time <= time.time():
+ next_time = time.time() + _PRINT_WORKING_MSG_INTERVAL
+ print >>sys.__stdout__, ' test_main still working, be patient...'
+ sys.__stdout__.flush()
+
test_roundtrip(f)
# Test detecton of IndentationError.
@@ -105,7 +214,7 @@
# Run the doctests in this module.
from test import test_tokenize # i.e., this module
from test.test_support import run_doctest
- run_doctest(test_tokenize)
+ run_doctest(test_tokenize, verbose)
if verbose:
print 'finished'
Modified: stackless/trunk/Lib/test/test_traceback.py
==============================================================================
--- stackless/trunk/Lib/test/test_traceback.py (original)
+++ stackless/trunk/Lib/test/test_traceback.py Sun Oct 15 16:42:33 2006
@@ -149,6 +149,10 @@
str_value = '<unprintable %s object>' % X.__name__
self.assertEqual(err[0], X.__name__ + ': ' + str_value + '\n')
+ def test_without_exception(self):
+ err = traceback.format_exception_only(None, None)
+ self.assertEqual(err, ['None\n'])
+
def test_main():
run_unittest(TracebackCases)
Modified: stackless/trunk/Lib/test/test_unicode.py
==============================================================================
--- stackless/trunk/Lib/test/test_unicode.py (original)
+++ stackless/trunk/Lib/test/test_unicode.py Sun Oct 15 16:42:33 2006
@@ -92,6 +92,10 @@
"\\xfe\\xff'")
testrepr = repr(u''.join(map(unichr, xrange(256))))
self.assertEqual(testrepr, latin1repr)
+ # Test repr works on wide unicode escapes without overflow.
+ self.assertEqual(repr(u"\U00010000" * 39 + u"\uffff" * 4096),
+ repr(u"\U00010000" * 39 + u"\uffff" * 4096))
+
def test_count(self):
string_tests.CommonTest.test_count(self)
Modified: stackless/trunk/Lib/test/test_urllib2.py
==============================================================================
--- stackless/trunk/Lib/test/test_urllib2.py (original)
+++ stackless/trunk/Lib/test/test_urllib2.py Sun Oct 15 16:42:33 2006
@@ -46,6 +46,69 @@
self.assertEquals(urllib2.parse_http_list(string), list)
+def test_request_headers_dict():
+ """
+ The Request.headers dictionary is not a documented interface. It should
+ stay that way, because the complete set of headers are only accessible
+ through the .get_header(), .has_header(), .header_items() interface.
+ However, .headers pre-dates those methods, and so real code will be using
+ the dictionary.
+
+ The introduction in 2.4 of those methods was a mistake for the same reason:
+ code that previously saw all (urllib2 user)-provided headers in .headers
+ now sees only a subset (and the function interface is ugly and incomplete).
+ A better change would have been to replace .headers dict with a dict
+ subclass (or UserDict.DictMixin instance?) that preserved the .headers
+ interface and also provided access to the "unredirected" headers. It's
+ probably too late to fix that, though.
+
+
+ Check .capitalize() case normalization:
+
+ >>> url = "http://example.com"
+ >>> Request(url, headers={"Spam-eggs": "blah"}).headers["Spam-eggs"]
+ 'blah'
+ >>> Request(url, headers={"spam-EggS": "blah"}).headers["Spam-eggs"]
+ 'blah'
+
+ Currently, Request(url, "Spam-eggs").headers["Spam-Eggs"] raises KeyError,
+ but that could be changed in future.
+
+ """
+
+def test_request_headers_methods():
+ """
+ Note the case normalization of header names here, to .capitalize()-case.
+ This should be preserved for backwards-compatibility. (In the HTTP case,
+ normalization to .title()-case is done by urllib2 before sending headers to
+ httplib).
+
+ >>> url = "http://example.com"
+ >>> r = Request(url, headers={"Spam-eggs": "blah"})
+ >>> r.has_header("Spam-eggs")
+ True
+ >>> r.header_items()
+ [('Spam-eggs', 'blah')]
+ >>> r.add_header("Foo-Bar", "baz")
+ >>> items = r.header_items()
+ >>> items.sort()
+ >>> items
+ [('Foo-bar', 'baz'), ('Spam-eggs', 'blah')]
+
+ Note that e.g. r.has_header("spam-EggS") is currently False, and
+ r.get_header("spam-EggS") returns None, but that could be changed in
+ future.
+
+ >>> r.has_header("Not-there")
+ False
+ >>> print r.get_header("Not-there")
+ None
+ >>> r.get_header("Not-there", "default")
+ 'default'
+
+ """
+
+
def test_password_manager(self):
"""
>>> mgr = urllib2.HTTPPasswordMgr()
@@ -676,11 +739,11 @@
r = MockResponse(200, "OK", {}, "")
newreq = h.do_request_(req)
if data is None: # GET
- self.assert_("Content-Length" not in req.unredirected_hdrs)
- self.assert_("Content-Type" not in req.unredirected_hdrs)
+ self.assert_("Content-length" not in req.unredirected_hdrs)
+ self.assert_("Content-type" not in req.unredirected_hdrs)
else: # POST
- self.assertEqual(req.unredirected_hdrs["Content-Length"], "0")
- self.assertEqual(req.unredirected_hdrs["Content-Type"],
+ self.assertEqual(req.unredirected_hdrs["Content-length"], "0")
+ self.assertEqual(req.unredirected_hdrs["Content-type"],
"application/x-www-form-urlencoded")
# XXX the details of Host could be better tested
self.assertEqual(req.unredirected_hdrs["Host"], "example.com")
@@ -692,8 +755,8 @@
req.add_unredirected_header("Host", "baz")
req.add_unredirected_header("Spam", "foo")
newreq = h.do_request_(req)
- self.assertEqual(req.unredirected_hdrs["Content-Length"], "foo")
- self.assertEqual(req.unredirected_hdrs["Content-Type"], "bar")
+ self.assertEqual(req.unredirected_hdrs["Content-length"], "foo")
+ self.assertEqual(req.unredirected_hdrs["Content-type"], "bar")
self.assertEqual(req.unredirected_hdrs["Host"], "baz")
self.assertEqual(req.unredirected_hdrs["Spam"], "foo")
@@ -847,7 +910,7 @@
407, 'Proxy-Authenticate: Basic realm="%s"\r\n\r\n' % realm)
opener.add_handler(auth_handler)
opener.add_handler(http_handler)
- self._test_basic_auth(opener, auth_handler, "Proxy-Authorization",
+ self._test_basic_auth(opener, auth_handler, "Proxy-authorization",
realm, http_handler, password_manager,
"http://acme.example.com:3128/protected",
"proxy.example.com:3128",
Modified: stackless/trunk/Lib/test/test_uuid.py
==============================================================================
--- stackless/trunk/Lib/test/test_uuid.py (original)
+++ stackless/trunk/Lib/test/test_uuid.py Sun Oct 15 16:42:33 2006
@@ -429,7 +429,7 @@
# Make sure the generated UUIDs are actually unique.
uuids = {}
- for u in [uuid.uuid1() for i in range(1000)]:
+ for u in [uuid.uuid4() for i in range(1000)]:
uuids[u] = 1
equal(len(uuids.keys()), 1000)
Modified: stackless/trunk/Lib/tokenize.py
==============================================================================
--- stackless/trunk/Lib/tokenize.py (original)
+++ stackless/trunk/Lib/tokenize.py Sun Oct 15 16:42:33 2006
@@ -159,14 +159,73 @@
for token_info in generate_tokens(readline):
tokeneater(*token_info)
+class Untokenizer:
+
+ def __init__(self):
+ self.tokens = []
+ self.prev_row = 1
+ self.prev_col = 0
+
+ def add_whitespace(self, start):
+ row, col = start
+ assert row <= self.prev_row
+ col_offset = col - self.prev_col
+ if col_offset:
+ self.tokens.append(" " * col_offset)
+
+ def untokenize(self, iterable):
+ for t in iterable:
+ if len(t) == 2:
+ self.compat(t, iterable)
+ break
+ tok_type, token, start, end, line = t
+ self.add_whitespace(start)
+ self.tokens.append(token)
+ self.prev_row, self.prev_col = end
+ if tok_type in (NEWLINE, NL):
+ self.prev_row += 1
+ self.prev_col = 0
+ return "".join(self.tokens)
+
+ def compat(self, token, iterable):
+ startline = False
+ indents = []
+ toks_append = self.tokens.append
+ toknum, tokval = token
+ if toknum in (NAME, NUMBER):
+ tokval += ' '
+ if toknum in (NEWLINE, NL):
+ startline = True
+ for tok in iterable:
+ toknum, tokval = tok[:2]
+
+ if toknum in (NAME, NUMBER):
+ tokval += ' '
+
+ if toknum == INDENT:
+ indents.append(tokval)
+ continue
+ elif toknum == DEDENT:
+ indents.pop()
+ continue
+ elif toknum in (NEWLINE, NL):
+ startline = True
+ elif startline and indents:
+ toks_append(indents[-1])
+ startline = False
+ toks_append(tokval)
def untokenize(iterable):
"""Transform tokens back into Python source code.
Each element returned by the iterable must be a token sequence
- with at least two elements, a token number and token value.
+ with at least two elements, a token number and token value. If
+ only two tokens are passed, the resulting output is poor.
+
+ Round-trip invariant for full input:
+ Untokenized source will match input source exactly
- Round-trip invariant:
+ Round-trip invariant for limited intput:
# Output text will tokenize the back to the input
t1 = [tok[:2] for tok in generate_tokens(f.readline)]
newcode = untokenize(t1)
@@ -174,31 +233,8 @@
t2 = [tok[:2] for tokin generate_tokens(readline)]
assert t1 == t2
"""
-
- startline = False
- indents = []
- toks = []
- toks_append = toks.append
- for tok in iterable:
- toknum, tokval = tok[:2]
-
- if toknum in (NAME, NUMBER):
- tokval += ' '
-
- if toknum == INDENT:
- indents.append(tokval)
- continue
- elif toknum == DEDENT:
- indents.pop()
- continue
- elif toknum in (NEWLINE, COMMENT, NL):
- startline = True
- elif startline and indents:
- toks_append(indents[-1])
- startline = False
- toks_append(tokval)
- return ''.join(toks)
-
+ ut = Untokenizer()
+ return ut.untokenize(iterable)
def generate_tokens(readline):
"""
@@ -237,7 +273,7 @@
if endmatch:
pos = end = endmatch.end(0)
yield (STRING, contstr + line[:end],
- strstart, (lnum, end), contline + line)
+ strstart, (lnum, end), contline + line)
contstr, needcont = '', 0
contline = None
elif needcont and line[-2:] != '\\\n' and line[-3:] != '\\\r\n':
@@ -263,7 +299,15 @@
if pos == max: break
if line[pos] in '#\r\n': # skip comments or blank lines
- yield ((NL, COMMENT)[line[pos] == '#'], line[pos:],
+ if line[pos] == '#':
+ comment_token = line[pos:].rstrip('\r\n')
+ nl_pos = pos + len(comment_token)
+ yield (COMMENT, comment_token,
+ (lnum, pos), (lnum, pos + len(comment_token)), line)
+ yield (NL, line[nl_pos:],
+ (lnum, nl_pos), (lnum, len(line)), line)
+ else:
+ yield ((NL, COMMENT)[line[pos] == '#'], line[pos:],
(lnum, pos), (lnum, len(line)), line)
continue
@@ -294,9 +338,10 @@
(initial == '.' and token != '.'): # ordinary number
yield (NUMBER, token, spos, epos, line)
elif initial in '\r\n':
- yield (parenlev > 0 and NL or NEWLINE,
- token, spos, epos, line)
+ yield (NL if parenlev > 0 else NEWLINE,
+ token, spos, epos, line)
elif initial == '#':
+ assert not token.endswith("\n")
yield (COMMENT, token, spos, epos, line)
elif token in triple_quoted:
endprog = endprogs[token]
Modified: stackless/trunk/Lib/traceback.py
==============================================================================
--- stackless/trunk/Lib/traceback.py (original)
+++ stackless/trunk/Lib/traceback.py Sun Oct 15 16:42:33 2006
@@ -170,7 +170,7 @@
# would throw another exception and mask the original problem.
if (isinstance(etype, BaseException) or
isinstance(etype, types.InstanceType) or
- type(etype) is str):
+ etype is None or type(etype) is str):
return [_format_final_exc_line(etype, value)]
stype = etype.__name__
Modified: stackless/trunk/Lib/urllib2.py
==============================================================================
--- stackless/trunk/Lib/urllib2.py (original)
+++ stackless/trunk/Lib/urllib2.py Sun Oct 15 16:42:33 2006
@@ -263,11 +263,11 @@
def add_header(self, key, val):
# useful for something like authentication
- self.headers[key.title()] = val
+ self.headers[key.capitalize()] = val
def add_unredirected_header(self, key, val):
# will not be added to a redirected request
- self.unredirected_hdrs[key.title()] = val
+ self.unredirected_hdrs[key.capitalize()] = val
def has_header(self, header_name):
return (header_name in self.headers or
@@ -286,7 +286,7 @@
class OpenerDirector:
def __init__(self):
client_version = "Python-urllib/%s" % __version__
- self.addheaders = [('User-Agent', client_version)]
+ self.addheaders = [('User-agent', client_version)]
# manage the individual handlers
self.handlers = []
self.handle_open = {}
@@ -675,7 +675,7 @@
if user and password:
user_pass = '%s:%s' % (unquote(user), unquote(password))
creds = base64.encodestring(user_pass).strip()
- req.add_header('Proxy-Authorization', 'Basic ' + creds)
+ req.add_header('Proxy-authorization', 'Basic ' + creds)
hostport = unquote(hostport)
req.set_proxy(hostport, proxy_type)
if orig_type == proxy_type:
@@ -819,7 +819,7 @@
class ProxyBasicAuthHandler(AbstractBasicAuthHandler, BaseHandler):
- auth_header = 'Proxy-Authorization'
+ auth_header = 'Proxy-authorization'
def http_error_407(self, req, fp, code, msg, headers):
# http_error_auth_reqed requires that there is no userinfo component in
@@ -1022,20 +1022,20 @@
if request.has_data(): # POST
data = request.get_data()
- if not request.has_header('Content-Type'):
+ if not request.has_header('Content-type'):
request.add_unredirected_header(
- 'Content-Type',
+ 'Content-type',
'application/x-www-form-urlencoded')
- if not request.has_header('Content-Length'):
+ if not request.has_header('Content-length'):
request.add_unredirected_header(
- 'Content-Length', '%d' % len(data))
+ 'Content-length', '%d' % len(data))
scheme, sel = splittype(request.get_selector())
sel_host, sel_path = splithost(sel)
if not request.has_header('Host'):
request.add_unredirected_header('Host', sel_host or host)
for name, value in self.parent.addheaders:
- name = name.title()
+ name = name.capitalize()
if not request.has_header(name):
request.add_unredirected_header(name, value)
@@ -1067,6 +1067,8 @@
# So make sure the connection gets closed after the (only)
# request.
headers["Connection"] = "close"
+ headers = dict(
+ (name.title(), val) for name, val in headers.items())
try:
h.request(req.get_method(), req.get_selector(), req.data, headers)
r = h.getresponse()
@@ -1217,7 +1219,7 @@
modified = email.Utils.formatdate(stats.st_mtime, usegmt=True)
mtype = mimetypes.guess_type(file)[0]
headers = mimetools.Message(StringIO(
- 'Content-Type: %s\nContent-Length: %d\nLast-Modified: %s\n' %
+ 'Content-type: %s\nContent-length: %d\nLast-modified: %s\n' %
(mtype or 'text/plain', size, modified)))
if host:
host, port = splitport(host)
@@ -1272,9 +1274,9 @@
headers = ""
mtype = mimetypes.guess_type(req.get_full_url())[0]
if mtype:
- headers += "Content-Type: %s\n" % mtype
+ headers += "Content-type: %s\n" % mtype
if retrlen is not None and retrlen >= 0:
- headers += "Content-Length: %d\n" % retrlen
+ headers += "Content-length: %d\n" % retrlen
sf = StringIO(headers)
headers = mimetools.Message(sf)
return addinfourl(fp, headers, req.get_full_url())
Modified: stackless/trunk/Lib/uuid.py
==============================================================================
--- stackless/trunk/Lib/uuid.py (original)
+++ stackless/trunk/Lib/uuid.py Sun Oct 15 16:42:33 2006
@@ -488,8 +488,8 @@
# 0x01b21dd213814000 is the number of 100-ns intervals between the
# UUID epoch 1582-10-15 00:00:00 and the Unix epoch 1970-01-01 00:00:00.
timestamp = int(nanoseconds/100) + 0x01b21dd213814000L
- if timestamp == _last_timestamp:
- timestamp += 1
+ if timestamp <= _last_timestamp:
+ timestamp = _last_timestamp + 1
_last_timestamp = timestamp
if clock_seq is None:
import random
Modified: stackless/trunk/Lib/webbrowser.py
==============================================================================
--- stackless/trunk/Lib/webbrowser.py (original)
+++ stackless/trunk/Lib/webbrowser.py Sun Oct 15 16:42:33 2006
@@ -165,7 +165,10 @@
cmdline = [self.name] + [arg.replace("%s", url)
for arg in self.args]
try:
- p = subprocess.Popen(cmdline, close_fds=True)
+ if sys.platform[:3] == 'win':
+ p = subprocess.Popen(cmdline)
+ else:
+ p = subprocess.Popen(cmdline, close_fds=True)
return not p.wait()
except OSError:
return False
@@ -178,11 +181,14 @@
def open(self, url, new=0, autoraise=1):
cmdline = [self.name] + [arg.replace("%s", url)
for arg in self.args]
- setsid = getattr(os, 'setsid', None)
- if not setsid:
- setsid = getattr(os, 'setpgrp', None)
try:
- p = subprocess.Popen(cmdline, close_fds=True, preexec_fn=setsid)
+ if sys.platform[:3] == 'win':
+ p = subprocess.Popen(cmdline)
+ else:
+ setsid = getattr(os, 'setsid', None)
+ if not setsid:
+ setsid = getattr(os, 'setpgrp', None)
+ p = subprocess.Popen(cmdline, close_fds=True, preexec_fn=setsid)
return (p.poll() is None)
except OSError:
return False
@@ -441,7 +447,7 @@
# if successful, register it
if retncode is None and commd:
- register("gnome", None, BackgroundBrowser(commd))
+ register("gnome", None, BackgroundBrowser(commd.split()))
# First, the Mozilla/Netscape browsers
for browser in ("mozilla-firefox", "firefox",
Modified: stackless/trunk/Mac/BuildScript/build-installer.py
==============================================================================
--- stackless/trunk/Mac/BuildScript/build-installer.py (original)
+++ stackless/trunk/Mac/BuildScript/build-installer.py Sun Oct 15 16:42:33 2006
@@ -10,6 +10,7 @@
Usage: see USAGE variable in the script.
"""
import platform, os, sys, getopt, textwrap, shutil, urllib2, stat, time, pwd
+import grp
INCLUDE_TIMESTAMP=1
VERBOSE=1
@@ -657,9 +658,13 @@
print "Fix file modes"
frmDir = os.path.join(rootDir, 'Library', 'Frameworks', 'Python.framework')
+ gid = grp.getgrnam('admin').gr_gid
+
for dirpath, dirnames, filenames in os.walk(frmDir):
for dn in dirnames:
os.chmod(os.path.join(dirpath, dn), 0775)
+ os.chown(os.path.join(dirpath, dn), -1, gid)
+
for fn in filenames:
if os.path.islink(fn):
@@ -668,7 +673,8 @@
# "chmod g+w $fn"
p = os.path.join(dirpath, fn)
st = os.stat(p)
- os.chmod(p, stat.S_IMODE(st.st_mode) | stat.S_IXGRP)
+ os.chmod(p, stat.S_IMODE(st.st_mode) | stat.S_IWGRP)
+ os.chown(p, -1, gid)
# We added some directories to the search path during the configure
# phase. Remove those because those directories won't be there on
@@ -945,6 +951,10 @@
ref, isDirectory = Carbon.File.FSPathMakeRef(filePath)
if isDirectory:
+ # There is a problem with getting this into the pax(1) archive,
+ # just ignore directory icons for now.
+ return
+
tmpPath = os.path.join(filePath, "Icon\r")
if not os.path.exists(tmpPath):
fp = open(tmpPath, 'w')
Modified: stackless/trunk/Mac/BuildScript/scripts/postflight.documentation
==============================================================================
--- stackless/trunk/Mac/BuildScript/scripts/postflight.documentation (original)
+++ stackless/trunk/Mac/BuildScript/scripts/postflight.documentation Sun Oct 15 16:42:33 2006
@@ -1,6 +1,5 @@
#!/bin/sh
-# FIXME
PYVER="@PYVER@"
if [ -d /Developer/Documentation ]; then
@@ -8,5 +7,5 @@
mkdir -p /Developer/Documentation/Python
fi
- ln -fhs /Library/Frameworks/Python.framework/Versions/${PYVER}/Resources/English.lproj/Documentation "/Developer/Documentation/Python/Reference Documentation"
+ ln -fhs /Library/Frameworks/Python.framework/Versions/${PYVER}/Resources/English.lproj/Documentation "/Developer/Documentation/Python/Reference Documentation @PYVER@"
fi
Modified: stackless/trunk/Mac/BuildScript/scripts/postflight.patch-profile
==============================================================================
--- stackless/trunk/Mac/BuildScript/scripts/postflight.patch-profile (original)
+++ stackless/trunk/Mac/BuildScript/scripts/postflight.patch-profile Sun Oct 15 16:42:33 2006
@@ -47,22 +47,29 @@
echo "${PYTHON_ROOT}/bin is not on your PATH or at least not early enough"
case "${BSH}" in
*csh)
+ if [ -f "${HOME}/.tcshrc" ]; then
+ RC="${HOME}/.tcshrc"
+ else
+ RC="${HOME}/.cshrc"
+ fi
# Create backup copy before patching
- if [ -f "${HOME}/.cshrc" ]; then
- cp -fp "${HOME}/.cshrc" "${HOME}/.cshrc.pysave"
+ if [ -f "${RC}" ]; then
+ cp -fp "${RC}" "${RC}.pysave"
fi
- echo "" >> "${HOME}/.cshrc"
- echo "# Setting PATH for MacPython ${PYVER}" >> "${HOME}/.cshrc"
- echo "# The orginal version is saved in .cshrc.pysave" >> "${HOME}/.cshrc"
- echo "set path=(${PYTHON_ROOT}/bin "'$path'")" >> "${HOME}/.cshrc"
+ echo "" >> "${RC}"
+ echo "# Setting PATH for MacPython ${PYVER}" >> "${RC}"
+ echo "# The orginal version is saved in .cshrc.pysave" >> "${RC}"
+ echo "set path=(${PYTHON_ROOT}/bin "'$path'")" >> "${RC}"
if [ `id -ur` = 0 ]; then
- chown "${USER}" "${HOME}/.cshrc"
+ chown "${USER}" "${RC}"
fi
exit 0
;;
bash)
if [ -e "${HOME}/.bash_profile" ]; then
PR="${HOME}/.bash_profile"
+ elif [ -e "${HOME}/.bash_login" ]; then
+ PR="${HOME}/.bash_login"
elif [ -e "${HOME}/.profile" ]; then
PR="${HOME}/.profile"
else
Modified: stackless/trunk/Mac/Makefile.in
==============================================================================
--- stackless/trunk/Mac/Makefile.in (original)
+++ stackless/trunk/Mac/Makefile.in Sun Oct 15 16:42:33 2006
@@ -101,7 +101,7 @@
fi
-pythonw: $(srcdir)/Tools/pythonw.c
+pythonw: $(srcdir)/Tools/pythonw.c Makefile
$(CC) $(LDFLAGS) -o $@ $(srcdir)/Tools/pythonw.c \
-DPYTHONWEXECUTABLE='"$(APPINSTALLDIR)/Contents/MacOS/Python"'
@@ -249,3 +249,6 @@
rm pythonw
cd PythonLauncher && make clean
cd IDLE && make clean
+
+Makefile: $(srcdir)/Makefile.in ../config.status
+ cd .. && CONFIG_FILES=Mac/Makefile CONFIG_HEADERS= $(SHELL) ./config.status
Modified: stackless/trunk/Mac/PythonLauncher/FileSettings.m
==============================================================================
--- stackless/trunk/Mac/PythonLauncher/FileSettings.m (original)
+++ stackless/trunk/Mac/PythonLauncher/FileSettings.m Sun Oct 15 16:42:33 2006
@@ -207,7 +207,7 @@
[NSNumber numberWithBool: inspect], @"inspect",
[NSNumber numberWithBool: optimize], @"optimize",
[NSNumber numberWithBool: nosite], @"nosite",
- [NSNumber numberWithBool: nosite], @"nosite",
+ [NSNumber numberWithBool: tabs], @"tabs",
others, @"others",
scriptargs, @"scriptargs",
[NSNumber numberWithBool: with_terminal], @"with_terminal",
@@ -235,7 +235,7 @@
if (value) optimize = [value boolValue];
value = [dict objectForKey: @"nosite"];
if (value) nosite = [value boolValue];
- value = [dict objectForKey: @"nosite"];
+ value = [dict objectForKey: @"tabs"];
if (value) tabs = [value boolValue];
value = [dict objectForKey: @"others"];
if (value) others = [value retain];
@@ -291,7 +291,7 @@
tabs?" -t":"",
others,
[self _replaceSingleQuotes:script],
- scriptargs,
+ scriptargs ? scriptargs : @"",
with_terminal? "&& echo Exit status: $? && exit 1" : " &"];
}
Modified: stackless/trunk/Mac/README
==============================================================================
--- stackless/trunk/Mac/README (original)
+++ stackless/trunk/Mac/README Sun Oct 15 16:42:33 2006
@@ -48,7 +48,7 @@
A second reason for using frameworks is that they put Python-related items in
only two places: "/Library/Framework/Python.framework" and
-"/Applications/MacPython 2.5". This simplifies matters for users installing
+"/Applications/MacPython 2.6". This simplifies matters for users installing
Python from a binary distribution if they want to get rid of it again. Moreover,
due to the way frameworks work a user without admin privileges can install a
binary distribution in his or her home directory without recompilation.
@@ -75,7 +75,7 @@
This directory contains a Makefile that will create a couple of python-related
applications (fullblown OSX .app applications, that is) in
-"/Applications/MacPython 2.3", and a hidden helper application Python.app
+"/Applications/MacPython 2.6", and a hidden helper application Python.app
inside the Python.framework, and unix tools "python" and "pythonw" into
/usr/local/bin. In addition it has a target "installmacsubtree" that installs
the relevant portions of the Mac subtree into the Python.framework.
@@ -90,20 +90,16 @@
3. make install
This sequence will put the framework in /Library/Framework/Python.framework,
-the applications in /Applications/MacPython 2.5 and the unix tools in
+the applications in "/Applications/MacPython 2.6" and the unix tools in
/usr/local/bin.
Installing in another place, for instance $HOME/Library/Frameworks if you have
no admin privileges on your machine, has only been tested very lightly. This
can be done by configuring with --enable-framework=$HOME/Library/Frameworks.
-The other two directories, /Applications/MacPython-2.3 and /usr/local/bin, will
-then also be deposited in $HOME. This is sub-optimal for the unix tools, which
-you would want in $HOME/bin, but there is no easy way to fix this right now.
-
-Note that there are no references to the actual locations in the code or
-resource files, so you are free to move things around afterwards. For example,
-you could use --enable-framework=/tmp/newversion/Library/Frameworks and use
-/tmp/newversion as the basis for an installer or something.
+The other two directories, "/Applications/MacPython-2.6" and /usr/local/bin,
+will then also be deposited in $HOME. This is sub-optimal for the unix tools,
+which you would want in $HOME/bin, but there is no easy way to fix this right
+now.
If you want to install some part, but not all, read the main Makefile. The
frameworkinstall is composed of a couple of sub-targets that install the
@@ -111,7 +107,7 @@
There is an extra target frameworkinstallextras that is not part of the
normal frameworkinstall which installs the Demo and Tools directories
-into /Applications/MacPython-2.3, this is useful for binary distributions.
+into "/Applications/MacPython 2.6", this is useful for binary distributions.
What do all these programs do?
===============================
Modified: stackless/trunk/Mac/Tools/fixapplepython23.py
==============================================================================
--- stackless/trunk/Mac/Tools/fixapplepython23.py (original)
+++ stackless/trunk/Mac/Tools/fixapplepython23.py Sun Oct 15 16:42:33 2006
@@ -123,7 +123,8 @@
makescript(GXX_SCRIPT, "g++")
# Finally fix the makefile
rv = fix(MAKEFILE, do_apply)
- sys.exit(rv)
+ #sys.exit(rv)
+ sys.exit(0)
if __name__ == '__main__':
main()
Modified: stackless/trunk/Makefile.pre.in
==============================================================================
--- stackless/trunk/Makefile.pre.in (original)
+++ stackless/trunk/Makefile.pre.in Sun Oct 15 16:42:33 2006
@@ -277,6 +277,7 @@
Python/modsupport.o \
Python/mystrtoul.o \
Python/mysnprintf.o \
+ Python/peephole.o \
Python/pyarena.o \
Python/pyfpe.o \
Python/pystate.o \
Modified: stackless/trunk/Misc/ACKS
==============================================================================
--- stackless/trunk/Misc/ACKS (original)
+++ stackless/trunk/Misc/ACKS Sun Oct 15 16:42:33 2006
@@ -242,6 +242,7 @@
Michael Guravage
Lars Gustäbel
Barry Haddow
+Václav Haisman
Paul ten Hagen
Rasmus Hahn
Peter Haight
@@ -365,6 +366,7 @@
Soren Larsen
Piers Lauder
Ben Laurie
+Simon Law
Chris Lawrence
Christopher Lee
Inyeol Lee
Modified: stackless/trunk/Misc/HISTORY
==============================================================================
--- stackless/trunk/Misc/HISTORY (original)
+++ stackless/trunk/Misc/HISTORY Sun Oct 15 16:42:33 2006
@@ -11679,7 +11679,7 @@
- The way GNU readline is configured is totally different. The
--with-readline configure option is gone. It is now an extension
module, which may be loaded dynamically. You must enable it (and
-specify the correct linraries to link with) in the Modules/Setup file.
+specify the correct libraries to link with) in the Modules/Setup file.
Importing the module installs some hooks which enable command line
editing. When the interpreter shell is invoked interactively, it
attempts to import the readline module; when this fails, the default
Modified: stackless/trunk/Misc/NEWS
==============================================================================
--- stackless/trunk/Misc/NEWS (original)
+++ stackless/trunk/Misc/NEWS Sun Oct 15 16:42:33 2006
@@ -4,6 +4,236 @@
(editors: check NEWS.help for information about editing NEWS using ReST.)
+What's New in Python 2.6 alpha 1?
+=================================
+
+*Release date: XX-XXX-200X*
+
+Core and builtins
+-----------------
+
+- Update the peephole optimizer to remove more dead code (jumps after returns)
+ and inline unconditional jumps to returns.
+
+- Bug #1545497: when given an explicit base, int() did ignore NULs
+ embedded in the string to convert.
+
+- Bug #1569998: break inside a try statement (outside a loop) is now
+ recognized and rejected.
+
+- list.pop(x) accepts any object x following the __index__ protocol.
+
+- Fix some leftovers from the conversion from int to Py_ssize_t
+ (relevant to strings and sequences of more than 2**31 items).
+
+- A number of places, including integer negation and absolute value,
+ were fixed to not rely on undefined behaviour of the C compiler
+ anymore.
+
+- Bug #1566800: make sure that EnvironmentError can be called with any
+ number of arguments, as was the case in Python 2.4.
+
+- Patch #1567691: super() and new.instancemethod() now don't accept
+ keyword arguments any more (previously they accepted them, but didn't
+ use them).
+
+- Fix a bug in the parser's future statement handling that led to "with"
+ not being recognized as a keyword after, e.g., this statement:
+ from __future__ import division, with_statement
+
+- Bug #1557232: fix seg fault with def f((((x)))) and def f(((x),)).
+
+- Fix %zd string formatting on Mac OS X so it prints negative numbers.
+
+- Allow exception instances to be directly sliced again.
+
+- Bug #1551432: Exceptions do not define an explicit __unicode__ method. This
+ allows calling unicode() on exceptions classes directly to succeed.
+
+- Make _PyGILState_NoteThreadState() static, it was not used anywhere
+ outside of pystate.c and should not be necessary.
+
+- Bug #1542051: Exceptions now correctly call PyObject_GC_UnTrack.
+ Also make sure that every exception class has __module__ set to
+ 'exceptions'.
+
+- Bug #1550983: emit better error messages for erroneous relative
+ imports (if not in package and if beyond toplevel package).
+
+- Overflow checking code in integer division ran afoul of new gcc
+ optimizations. Changed to be more standard-conforming.
+
+- Patch #1542451: disallow continue anywhere under a finally.
+
+- Patch #1546288: fix seg fault in dict_equal due to ref counting bug.
+
+- The return tuple from str.rpartition(sep) is (tail, sep, head) where
+ head is the original string if sep was not found.
+
+- Bug #1520864: unpacking singleton tuples in list comprehensions and
+ generator expressions (x for x, in ... ) works again. Fixing this problem
+ required changing the .pyc magic number. This means that .pyc files
+ generated before 2.5c2 will be regenerated.
+
+- with and as are now keywords.
+
+
+Library
+-------
+
+- Bug #813342: Start the IDLE subprocess with -Qnew if the parent
+ is started with that option.
+
+- Bug #1565150: Fix subsecond processing for os.utime on Windows.
+
+- Support for MSVC 8 was added to bdist_wininst.
+
+- Bug #1446043: correctly raise a LookupError if an encoding name given
+ to encodings.search_function() contains a dot.
+
+- Bug #1560617: in pyclbr, return full module name not only for classes,
+ but also for functions.
+
+- Bug #1457823: cgi.(Sv)FormContentDict's constructor now takes
+ keep_blank_values and strict_parsing keyword arguments.
+
+- Bug #1566602: correct failure of posixpath unittest when $HOME ends
+ with a slash.
+
+- Bug #1565661: in webbrowser, split() the command for the default
+ GNOME browser in case it is a command with args.
+
+- Made the error message for time.strptime when the data data and format do
+ match be more clear.
+
+- Fix a bug in traceback.format_exception_only() that led to an error
+ being raised when print_exc() was called without an exception set.
+ In version 2.4, this printed "None", restored that behavior.
+
+- Make webbrowser.BackgroundBrowser usable in Windows (it wasn't because
+ the close_fds arg to subprocess.Popen is not supported).
+
+- Reverted patch #1504333 to sgmllib because it introduced an infinite loop.
+
+- Patch #1553314: Fix the inspect.py slowdown that was hurting IPython & SAGE
+ by adding smarter caching in inspect.getmodule()
+
+- Fix missing import of the types module in logging.config.
+
+- Patch #1550886: Fix decimal module context management implementation
+ to match the localcontext() example from PEP 343.
+
+- Bug #1545341: The 'classifier' keyword argument to the Distutils setup()
+ function now accepts tuples as well as lists.
+
+- Bug #1541863: uuid.uuid1 failed to generate unique identifiers
+ on systems with low clock resolution.
+
+- Bug #1531862: Do not close standard file descriptors in subprocess.
+
+- fixed a bug with bsddb.DB.stat: the flags and txn keyword arguments
+ were transposed.
+
+Extension Modules
+-----------------
+
+- Bug #1567666: Emulate GetFileAttributesExA for Win95.
+
+- Patch #1576166: Support os.utime for directories on Windows NT+.
+
+- Bug #1548891: The cStringIO.StringIO() constructor now encodes unicode
+ arguments with the system default encoding just like the write()
+ method does, instead of converting it to a raw buffer.
+
+- Patch #1572724: fix typo ('=' instead of '==') in _msi.c.
+
+- Bug #1572832: fix a bug in ISO-2022 codecs which may cause segfault
+ when encoding non-BMP unicode characters.
+
+- Bug #1556784: allow format strings longer than 127 characters in
+ datetime's strftime function.
+
+- Fix itertools.count(n) to work with negative numbers again.
+
+- RLIMIT_SBSIZE was added to the resource module where available.
+
+- Bug #1551427: fix a wrong NULL pointer check in the win32 version
+ of os.urandom().
+
+- Bug #1548092: fix curses.tparm seg fault on invalid input.
+
+- Bug #1550714: fix SystemError from itertools.tee on negative value for n.
+
+- Fixed a few bugs on cjkcodecs:
+ - gbk and gb18030 codec now handle U+30FB KATAKANA MIDDLE DOT correctly.
+ - iso2022_jp_2 codec now encodes into G0 for KS X 1001, GB2312
+ codepoints to conform the standard.
+ - iso2022_jp_3 and iso2022_jp_2004 codec can encode JIS X 0213:2
+ codepoints now.
+
+- Bug #1552726: in readline.c, avoid repeatedly polling in interactive
+ mode by only placing a timeout on the select() if an input hook has
+ been defined. This prevents an interactive Python from waking up 10
+ times per second. Patch by Richard Boulton.
+
+
+Tests
+-----
+
+- Converted test_imp to use unittest.
+
+- Fix bsddb test_basics.test06_Transactions to check the version
+ number properly.
+
+
+Documentation
+-------------
+
+- Bug #1565919: document set types in the Language Reference.
+
+- Bug #1546052: clarify that PyString_FromString(AndSize) copies the
+ string pointed to by its parameter.
+
+- Bug #1566663: remove obsolete example from datetime docs.
+
+- Bug #1541682: Fix example in the "Refcount details" API docs.
+ Additionally, remove a faulty example showing PySequence_SetItem applied
+ to a newly created list object and add notes that this isn't a good idea.
+
+
+Tools
+-----
+
+- Make auto-generated python.vim file list built-ins and exceptions in
+ alphatbetical order. Makes output more deterministic and easier to tell if
+ the file is stale or not.
+
+- Bug #1546372: Fixed small bugglet in pybench that caused a missing
+ file not to get reported properly.
+
+
+Build
+-----
+
+- Patch #1576954: Update VC6 build directory; remove redundant
+ files in VC7.
+
+- Bug #1568842: Fix test for uintptr_t.
+
+- Patch #1540470, for OpenBSD 4.0.
+
+
+C API
+-----
+
+- Bug #1542693: remove semi-colon at end of PyImport_ImportModuleEx macro
+ so it can be used as an expression.
+
+
+Mac
+---
+
+
What's New in Python 2.5 release candidate 1?
=============================================
@@ -80,7 +310,7 @@
- The __repr__ method of a NULL ctypes.py_object() no longer raises
an exception.
-- uuid.UUID now has a bytes_le attribute. This returns the UUID in
+- uuid.UUID now has a bytes_le attribute. This returns the UUID in
little-endian byte order for Windows. In addition, uuid.py gained some
workarounds for clocks with low resolution, to stop the code yielding
duplicate UUIDs.
@@ -167,10 +397,6 @@
is always 1 (normal) or 0 (if the specified thread wasn't found).
-Mac
----
-
-
What's New in Python 2.5 beta 3?
================================
@@ -243,7 +469,7 @@
- Bug #1002398: The documentation for os.path.sameopenfile now correctly
refers to file descriptors, not file objects.
-- The renaming of the xml package to xmlcore, and the import hackery done
+- The renaming of the xml package to xmlcore, and the import hackery done
to make it appear at both names, has been removed. Bug #1511497,
#1513611, and probably others.
@@ -261,8 +487,8 @@
- Bug #978833: Really close underlying socket in _socketobject.close.
-- Bug #1459963: urllib and urllib2 now normalize HTTP header names correctly
- with title().
+- Bug #1459963: urllib and urllib2 now normalize HTTP header names with
+ title().
- Patch #1525766: In pkgutil.walk_packages, correctly pass the onerror callback
to recursive calls and call it with the failing package name.
Deleted: /stackless/trunk/Misc/RPM/python-2.5.spec
==============================================================================
--- /stackless/trunk/Misc/RPM/python-2.5.spec Sun Oct 15 16:42:33 2006
+++ (empty file)
@@ -1,385 +0,0 @@
-##########################
-# User-modifiable configs
-##########################
-
-# Is the resulting package and the installed binary named "python" or
-# "python2"?
-#WARNING: Commenting out doesn't work. Last line is what's used.
-%define config_binsuffix none
-%define config_binsuffix 2.5
-
-# Build tkinter? "auto" enables it if /usr/bin/wish exists.
-#WARNING: Commenting out doesn't work. Last line is what's used.
-%define config_tkinter no
-%define config_tkinter yes
-%define config_tkinter auto
-
-# Use pymalloc? The last line (commented or not) determines wether
-# pymalloc is used.
-#WARNING: Commenting out doesn't work. Last line is what's used.
-%define config_pymalloc no
-%define config_pymalloc yes
-
-# Enable IPV6?
-#WARNING: Commenting out doesn't work. Last line is what's used.
-%define config_ipv6 yes
-%define config_ipv6 no
-
-# Location of the HTML directory.
-%define config_htmldir /var/www/html/python
-
-#################################
-# End of user-modifiable configs
-#################################
-
-%define name python
-%define version 2.5c1
-%define libvers 2.5
-%define release 1pydotorg
-%define __prefix /usr
-
-# kludge to get around rpm <percent>define weirdness
-%define ipv6 %(if [ "%{config_ipv6}" = yes ]; then echo --enable-ipv6; else echo --disable-ipv6; fi)
-%define pymalloc %(if [ "%{config_pymalloc}" = yes ]; then echo --with-pymalloc; else echo --without-pymalloc; fi)
-%define binsuffix %(if [ "%{config_binsuffix}" = none ]; then echo ; else echo "%{config_binsuffix}"; fi)
-%define include_tkinter %(if [ \\( "%{config_tkinter}" = auto -a -f /usr/bin/wish \\) -o "%{config_tkinter}" = yes ]; then echo 1; else echo 0; fi)
-%define libdirname %(( uname -m | egrep -q '_64$' && [ -d /usr/lib64 ] && echo lib64 ) || echo lib)
-
-# detect if documentation is available
-%define include_docs %(if [ -f "%{_sourcedir}/html-%{version}.tar.bz2" ]; then echo 1; else echo 0; fi)
-
-Summary: An interpreted, interactive, object-oriented programming language.
-Name: %{name}%{binsuffix}
-Version: %{version}
-Release: %{release}
-Copyright: Modified CNRI Open Source License
-Group: Development/Languages
-Source: Python-%{version}.tar.bz2
-%if %{include_docs}
-Source1: html-%{version}.tar.bz2
-%endif
-BuildRoot: %{_tmppath}/%{name}-%{version}-root
-BuildPrereq: expat-devel
-BuildPrereq: db4-devel
-BuildPrereq: gdbm-devel
-BuildPrereq: sqlite-devel
-Prefix: %{__prefix}
-Packager: Sean Reifschneider <jafo-rpms at tummy.com>
-
-%description
-Python is an interpreted, interactive, object-oriented programming
-language. It incorporates modules, exceptions, dynamic typing, very high
-level dynamic data types, and classes. Python combines remarkable power
-with very clear syntax. It has interfaces to many system calls and
-libraries, as well as to various window systems, and is extensible in C or
-C++. It is also usable as an extension language for applications that need
-a programmable interface. Finally, Python is portable: it runs on many
-brands of UNIX, on PCs under Windows, MS-DOS, and OS/2, and on the
-Mac.
-
-%package devel
-Summary: The libraries and header files needed for Python extension development.
-Prereq: python%{binsuffix} = %{PACKAGE_VERSION}
-Group: Development/Libraries
-
-%description devel
-The Python programming language's interpreter can be extended with
-dynamically loaded extensions and can be embedded in other programs.
-This package contains the header files and libraries needed to do
-these types of tasks.
-
-Install python-devel if you want to develop Python extensions. The
-python package will also need to be installed. You'll probably also
-want to install the python-docs package, which contains Python
-documentation.
-
-%if %{include_tkinter}
-%package tkinter
-Summary: A graphical user interface for the Python scripting language.
-Group: Development/Languages
-Prereq: python%{binsuffix} = %{PACKAGE_VERSION}-%{release}
-
-%description tkinter
-The Tkinter (Tk interface) program is an graphical user interface for
-the Python scripting language.
-
-You should install the tkinter package if you'd like to use a graphical
-user interface for Python programming.
-%endif
-
-%package tools
-Summary: A collection of development tools included with Python.
-Group: Development/Tools
-Prereq: python%{binsuffix} = %{PACKAGE_VERSION}-%{release}
-
-%description tools
-The Python package includes several development tools that are used
-to build python programs. This package contains a selection of those
-tools, including the IDLE Python IDE.
-
-Install python-tools if you want to use these tools to develop
-Python programs. You will also need to install the python and
-tkinter packages.
-
-%if %{include_docs}
-%package docs
-Summary: Python-related documentation.
-Group: Development/Documentation
-
-%description docs
-Documentation relating to the Python programming language in HTML and info
-formats.
-%endif
-
-%changelog
-* Mon Dec 20 2004 Sean Reifschneider <jafo-rpms at tummy.com> [2.4-2pydotorg]
-- Changing the idle wrapper so that it passes arguments to idle.
-
-* Tue Oct 19 2004 Sean Reifschneider <jafo-rpms at tummy.com> [2.4b1-1pydotorg]
-- Updating to 2.4.
-
-* Thu Jul 22 2004 Sean Reifschneider <jafo-rpms at tummy.com> [2.3.4-3pydotorg]
-- Paul Tiemann fixes for %{prefix}.
-- Adding permission changes for directory as suggested by reimeika.ca
-- Adding code to detect when it should be using lib64.
-- Adding a define for the location of /var/www/html for docs.
-
-* Thu May 27 2004 Sean Reifschneider <jafo-rpms at tummy.com> [2.3.4-2pydotorg]
-- Including changes from Ian Holsman to build under Red Hat 7.3.
-- Fixing some problems with the /usr/local path change.
-
-* Sat Mar 27 2004 Sean Reifschneider <jafo-rpms at tummy.com> [2.3.2-3pydotorg]
-- Being more agressive about finding the paths to fix for
- #!/usr/local/bin/python.
-
-* Sat Feb 07 2004 Sean Reifschneider <jafo-rpms at tummy.com> [2.3.3-2pydotorg]
-- Adding code to remove "#!/usr/local/bin/python" from particular files and
- causing the RPM build to terminate if there are any unexpected files
- which have that line in them.
-
-* Mon Oct 13 2003 Sean Reifschneider <jafo-rpms at tummy.com> [2.3.2-1pydotorg]
-- Adding code to detect wether documentation is available to build.
-
-* Fri Sep 19 2003 Sean Reifschneider <jafo-rpms at tummy.com> [2.3.1-1pydotorg]
-- Updating to the 2.3.1 release.
-
-* Mon Feb 24 2003 Sean Reifschneider <jafo-rpms at tummy.com> [2.3b1-1pydotorg]
-- Updating to 2.3b1 release.
-
-* Mon Feb 17 2003 Sean Reifschneider <jafo-rpms at tummy.com> [2.3a1-1]
-- Updating to 2.3 release.
-
-* Sun Dec 23 2001 Sean Reifschneider <jafo-rpms at tummy.com>
-[Release 2.2-2]
-- Added -docs package.
-- Added "auto" config_tkinter setting which only enables tk if
- /usr/bin/wish exists.
-
-* Sat Dec 22 2001 Sean Reifschneider <jafo-rpms at tummy.com>
-[Release 2.2-1]
-- Updated to 2.2.
-- Changed the extension to "2" from "2.2".
-
-* Tue Nov 18 2001 Sean Reifschneider <jafo-rpms at tummy.com>
-[Release 2.2c1-1]
-- Updated to 2.2c1.
-
-* Thu Nov 1 2001 Sean Reifschneider <jafo-rpms at tummy.com>
-[Release 2.2b1-3]
-- Changed the way the sed for fixing the #! in pydoc works.
-
-* Wed Oct 24 2001 Sean Reifschneider <jafo-rpms at tummy.com>
-[Release 2.2b1-2]
-- Fixed missing "email" package, thanks to anonymous report on sourceforge.
-- Fixed missing "compiler" package.
-
-* Mon Oct 22 2001 Sean Reifschneider <jafo-rpms at tummy.com>
-[Release 2.2b1-1]
-- Updated to 2.2b1.
-
-* Mon Oct 9 2001 Sean Reifschneider <jafo-rpms at tummy.com>
-[Release 2.2a4-4]
-- otto at balinor.mat.unimi.it mentioned that the license file is missing.
-
-* Sun Sep 30 2001 Sean Reifschneider <jafo-rpms at tummy.com>
-[Release 2.2a4-3]
-- Ignacio Vazquez-Abrams pointed out that I had a spruious double-quote in
- the spec files. Thanks.
-
-* Wed Jul 25 2001 Sean Reifschneider <jafo-rpms at tummy.com>
-[Release 2.2a1-1]
-- Updated to 2.2a1 release.
-- Changed idle and pydoc to use binsuffix macro
-
-#######
-# PREP
-#######
-%prep
-%setup -n Python-%{version}
-
-########
-# BUILD
-########
-%build
-./configure --enable-unicode=ucs4 %{ipv6} %{pymalloc} --prefix=%{__prefix}
-make
-
-##########
-# INSTALL
-##########
-%install
-# set the install path
-echo '[install_scripts]' >setup.cfg
-echo 'install_dir='"${RPM_BUILD_ROOT}%{__prefix}/bin" >>setup.cfg
-
-[ -d "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
-mkdir -p $RPM_BUILD_ROOT%{__prefix}/%{libdirname}/python%{libvers}/lib-dynload
-make prefix=$RPM_BUILD_ROOT%{__prefix} install
-
-# REPLACE PATH IN PYDOC
-if [ ! -z "%{binsuffix}" ]
-then
- (
- cd $RPM_BUILD_ROOT%{__prefix}/bin
- mv pydoc pydoc.old
- sed 's|#!.*|#!%{__prefix}/bin/env python'%{binsuffix}'|' \
- pydoc.old >pydoc
- chmod 755 pydoc
- rm -f pydoc.old
- )
-fi
-
-# add the binsuffix
-if [ ! -z "%{binsuffix}" ]
-then
- ( cd $RPM_BUILD_ROOT%{__prefix}/bin; rm -f python[0-9a-zA-Z]*;
- mv -f python python"%{binsuffix}" )
- ( cd $RPM_BUILD_ROOT%{__prefix}/man/man1; mv python.1 python%{binsuffix}.1 )
- ( cd $RPM_BUILD_ROOT%{__prefix}/bin; mv -f pydoc pydoc"%{binsuffix}" )
- ( cd $RPM_BUILD_ROOT%{__prefix}/bin; mv -f idle idle"%{binsuffix}" )
-fi
-
-########
-# Tools
-echo '#!%{__prefix}/bin/env python%{binsuffix}' >${RPM_BUILD_ROOT}%{__prefix}/bin/idle%{binsuffix}
-echo 'import os, sys' >>${RPM_BUILD_ROOT}%{__prefix}/bin/idle%{binsuffix}
-echo 'os.execvp("%{__prefix}/bin/python%{binsuffix}", ["%{__prefix}/bin/python%{binsuffix}", "%{__prefix}/lib/python%{libvers}/idlelib/idle.py"] + sys.argv[1:])' >>${RPM_BUILD_ROOT}%{__prefix}/bin/idle%{binsuffix}
-echo 'print "Failed to exec Idle"' >>${RPM_BUILD_ROOT}%{__prefix}/bin/idle%{binsuffix}
-echo 'sys.exit(1)' >>${RPM_BUILD_ROOT}%{__prefix}/bin/idle%{binsuffix}
-chmod 755 $RPM_BUILD_ROOT%{__prefix}/bin/idle%{binsuffix}
-cp -a Tools $RPM_BUILD_ROOT%{__prefix}/%{libdirname}/python%{libvers}
-
-# MAKE FILE LISTS
-rm -f mainpkg.files
-find "$RPM_BUILD_ROOT""%{__prefix}"/%{libdirname}/python%{libvers}/lib-dynload -type f |
- sed "s|^${RPM_BUILD_ROOT}|/|" |
- grep -v -e '_tkinter.so$' >mainpkg.files
-find "$RPM_BUILD_ROOT""%{__prefix}"/bin -type f |
- sed "s|^${RPM_BUILD_ROOT}|/|" |
- grep -v -e '/bin/idle%{binsuffix}$' >>mainpkg.files
-
-rm -f tools.files
-find "$RPM_BUILD_ROOT""%{__prefix}"/%{libdirname}/python%{libvers}/idlelib \
- "$RPM_BUILD_ROOT""%{__prefix}"/%{libdirname}/python%{libvers}/Tools -type f |
- sed "s|^${RPM_BUILD_ROOT}|/|" >tools.files
-echo "%{__prefix}"/bin/idle%{binsuffix} >>tools.files
-
-######
-# Docs
-%if %{include_docs}
-mkdir -p "$RPM_BUILD_ROOT"%{config_htmldir}
-(
- cd "$RPM_BUILD_ROOT"%{config_htmldir}
- bunzip2 < %{SOURCE1} | tar x
-)
-%endif
-
-# fix the #! line in installed files
-find "$RPM_BUILD_ROOT" -type f -print0 |
- xargs -0 grep -l /usr/local/bin/python | while read file
-do
- FIXFILE="$file"
- sed 's|^#!.*python|#!%{__prefix}/bin/env python'"%{binsuffix}"'|' \
- "$FIXFILE" >/tmp/fix-python-path.$$
- cat /tmp/fix-python-path.$$ >"$FIXFILE"
- rm -f /tmp/fix-python-path.$$
-done
-
-# check to see if there are any straggling #! lines
-find "$RPM_BUILD_ROOT" -type f | xargs egrep -n '^#! */usr/local/bin/python' \
- | grep ':1:#!' >/tmp/python-rpm-files.$$ || true
-if [ -s /tmp/python-rpm-files.$$ ]
-then
- echo '*****************************************************'
- cat /tmp/python-rpm-files.$$
- cat <<@EOF
- *****************************************************
- There are still files referencing /usr/local/bin/python in the
- install directory. They are listed above. Please fix the .spec
- file and try again. If you are an end-user, you probably want
- to report this to jafo-rpms at tummy.com as well.
- *****************************************************
- at EOF
- rm -f /tmp/python-rpm-files.$$
- exit 1
-fi
-rm -f /tmp/python-rpm-files.$$
-
-########
-# CLEAN
-########
-%clean
-[ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf $RPM_BUILD_ROOT
-rm -f mainpkg.files tools.files
-
-########
-# FILES
-########
-%files -f mainpkg.files
-%defattr(-,root,root)
-%doc Misc/README Misc/cheatsheet Misc/Porting
-%doc LICENSE Misc/ACKS Misc/HISTORY Misc/NEWS
-%{__prefix}/man/man1/python%{binsuffix}.1*
-
-%attr(755,root,root) %dir %{__prefix}/include/python%{libvers}
-%attr(755,root,root) %dir %{__prefix}/%{libdirname}/python%{libvers}/
-%{__prefix}/%{libdirname}/python%{libvers}/*.txt
-%{__prefix}/%{libdirname}/python%{libvers}/*.py*
-%{__prefix}/%{libdirname}/python%{libvers}/pdb.doc
-%{__prefix}/%{libdirname}/python%{libvers}/profile.doc
-%{__prefix}/%{libdirname}/python%{libvers}/curses
-%{__prefix}/%{libdirname}/python%{libvers}/distutils
-%{__prefix}/%{libdirname}/python%{libvers}/encodings
-%{__prefix}/%{libdirname}/python%{libvers}/plat-linux2
-%{__prefix}/%{libdirname}/python%{libvers}/site-packages
-%{__prefix}/%{libdirname}/python%{libvers}/test
-%{__prefix}/%{libdirname}/python%{libvers}/xml
-%{__prefix}/%{libdirname}/python%{libvers}/email
-%{__prefix}/%{libdirname}/python%{libvers}/email/mime
-%{__prefix}/%{libdirname}/python%{libvers}/sqlite3
-%{__prefix}/%{libdirname}/python%{libvers}/compiler
-%{__prefix}/%{libdirname}/python%{libvers}/bsddb
-%{__prefix}/%{libdirname}/python%{libvers}/hotshot
-%{__prefix}/%{libdirname}/python%{libvers}/logging
-%{__prefix}/%{libdirname}/python%{libvers}/lib-old
-
-%files devel
-%defattr(-,root,root)
-%{__prefix}/include/python%{libvers}/*.h
-%{__prefix}/%{libdirname}/python%{libvers}/config
-
-%files -f tools.files tools
-%defattr(-,root,root)
-
-%if %{include_tkinter}
-%files tkinter
-%defattr(-,root,root)
-%{__prefix}/%{libdirname}/python%{libvers}/lib-tk
-%{__prefix}/%{libdirname}/python%{libvers}/lib-dynload/_tkinter.so*
-%endif
-
-%if %{include_docs}
-%files docs
-%defattr(-,root,root)
-%{config_htmldir}/*
-%endif
Modified: stackless/trunk/Misc/Vim/python.vim
==============================================================================
--- stackless/trunk/Misc/Vim/python.vim (original)
+++ stackless/trunk/Misc/Vim/python.vim Sun Oct 15 16:42:33 2006
@@ -62,39 +62,39 @@
if exists("python_highlight_builtins")
- syn keyword pythonBuiltin unichr all set abs vars int __import__ unicode
- syn keyword pythonBuiltin enumerate reduce coerce intern exit issubclass
- syn keyword pythonBuiltin divmod file Ellipsis apply isinstance open any
- syn keyword pythonBuiltin locals help filter basestring slice copyright min
- syn keyword pythonBuiltin super sum tuple hex execfile long id xrange chr
- syn keyword pythonBuiltin complex bool zip pow dict True oct NotImplemented
- syn keyword pythonBuiltin map None float hash getattr buffer max reversed
- syn keyword pythonBuiltin object quit len repr callable credits setattr
- syn keyword pythonBuiltin eval frozenset sorted ord __debug__ hasattr
- syn keyword pythonBuiltin delattr False input license classmethod type
- syn keyword pythonBuiltin raw_input list iter compile reload range globals
- syn keyword pythonBuiltin staticmethod str property round dir cmp
+ syn keyword pythonBuiltin Ellipsis False None NotImplemented True __debug__
+ syn keyword pythonBuiltin __import__ abs all any apply basestring bool
+ syn keyword pythonBuiltin buffer callable chr classmethod cmp coerce
+ syn keyword pythonBuiltin compile complex copyright credits delattr dict
+ syn keyword pythonBuiltin dir divmod enumerate eval execfile exit file
+ syn keyword pythonBuiltin filter float frozenset getattr globals hasattr
+ syn keyword pythonBuiltin hash help hex id input int intern isinstance
+ syn keyword pythonBuiltin issubclass iter len license list locals long map
+ syn keyword pythonBuiltin max min object oct open ord pow property quit
+ syn keyword pythonBuiltin range raw_input reduce reload repr reversed round
+ syn keyword pythonBuiltin set setattr slice sorted staticmethod str sum
+ syn keyword pythonBuiltin super tuple type unichr unicode vars xrange zip
endif
if exists("python_highlight_exceptions")
- syn keyword pythonException GeneratorExit ImportError RuntimeError
- syn keyword pythonException UnicodeTranslateError MemoryError StopIteration
- syn keyword pythonException PendingDeprecationWarning EnvironmentError
- syn keyword pythonException LookupError OSError DeprecationWarning
- syn keyword pythonException UnicodeError UnicodeEncodeError
- syn keyword pythonException FloatingPointError ReferenceError NameError
- syn keyword pythonException IOError SyntaxError
- syn keyword pythonException FutureWarning ImportWarning SystemExit
- syn keyword pythonException Exception EOFError StandardError ValueError
- syn keyword pythonException TabError KeyError ZeroDivisionError SystemError
- syn keyword pythonException UnicodeDecodeError IndentationError
- syn keyword pythonException AssertionError TypeError IndexError
- syn keyword pythonException RuntimeWarning KeyboardInterrupt UserWarning
- syn keyword pythonException SyntaxWarning UnboundLocalError ArithmeticError
- syn keyword pythonException Warning NotImplementedError AttributeError
- syn keyword pythonException OverflowError BaseException
+ syn keyword pythonException ArithmeticError AssertionError AttributeError
+ syn keyword pythonException BaseException DeprecationWarning EOFError
+ syn keyword pythonException EnvironmentError Exception FloatingPointError
+ syn keyword pythonException FutureWarning GeneratorExit IOError ImportError
+ syn keyword pythonException ImportWarning IndentationError IndexError
+ syn keyword pythonException KeyError KeyboardInterrupt LookupError
+ syn keyword pythonException MemoryError NameError NotImplementedError
+ syn keyword pythonException OSError OverflowError PendingDeprecationWarning
+ syn keyword pythonException ReferenceError RuntimeError RuntimeWarning
+ syn keyword pythonException StandardError StopIteration SyntaxError
+ syn keyword pythonException SyntaxWarning SystemError SystemExit TabError
+ syn keyword pythonException TypeError UnboundLocalError UnicodeDecodeError
+ syn keyword pythonException UnicodeEncodeError UnicodeError
+ syn keyword pythonException UnicodeTranslateError UnicodeWarning
+ syn keyword pythonException UserWarning ValueError Warning
+ syn keyword pythonException ZeroDivisionError
endif
Modified: stackless/trunk/Misc/Vim/vim_syntax.py
==============================================================================
--- stackless/trunk/Misc/Vim/vim_syntax.py (original)
+++ stackless/trunk/Misc/Vim/vim_syntax.py Sun Oct 15 16:42:33 2006
@@ -5,9 +5,9 @@
import __builtin__
from string import Template
-comment_header = """" Auto-generated Vim syntax file for Python
+comment_header = '''" Auto-generated Vim syntax file for Python.
"
-" To use: copy or symlink to ~/.vim/syntax/python.vim"""
+" To use: copy or symlink to ~/.vim/syntax/python.vim'''
statement_header = """
if exists("b:current_syntax")
@@ -30,14 +30,14 @@
import_stmts = ('import', 'from')
object_defs = ('def', 'class')
-exception_names = frozenset(exc for exc in dir(exceptions)
+exception_names = sorted(exc for exc in dir(exceptions)
if not exc.startswith('__'))
# Need to include functions that start with '__' (e.g., __import__), but
# nothing that comes with modules (e.g., __name__), so just exclude anything in
# the 'exceptions' module since we want to ignore exceptions *and* what any
# module would have
-builtin_names = frozenset(builtin for builtin in dir(__builtin__)
+builtin_names = sorted(builtin for builtin in dir(__builtin__)
if builtin not in dir(exceptions))
escapes = (r'+\\[abfnrtv\'"\\]+', r'"\\\o\{1,3}"', r'"\\x\x\{2}"',
Modified: stackless/trunk/Misc/Vim/vimrc
==============================================================================
--- stackless/trunk/Misc/Vim/vimrc (original)
+++ stackless/trunk/Misc/Vim/vimrc Sun Oct 15 16:42:33 2006
@@ -19,9 +19,10 @@
" Number of spaces to use for an indent.
" This will affect Ctrl-T and 'autoindent'.
" Python: 4 spaces
-" C: tab (8 spaces)
+" C: 8 spaces (pre-existing files) or 4 spaces (new files)
au BufRead,BufNewFile *.py,*pyw set shiftwidth=4
-au BufRead,BufNewFile *.c,*.h set shiftwidth=4
+au BufRead *.c,*.h set shiftwidth=8
+au BufNewFile *.c,*.h set shiftwidth=4
" Number of spaces that a pre-existing tab is equal to.
" For the amount of space used for a new tab use shiftwidth.
Modified: stackless/trunk/Misc/build.sh
==============================================================================
--- stackless/trunk/Misc/build.sh (original)
+++ stackless/trunk/Misc/build.sh Sun Oct 15 16:42:33 2006
@@ -58,7 +58,7 @@
PYTHON=$INSTALL_DIR/bin/python
# Python options and regression test program that should always be run.
-REGRTEST_ARGS="-E -tt $INSTALL_DIR/lib/python2.5/test/regrtest.py"
+REGRTEST_ARGS="-E -tt $INSTALL_DIR/lib/python2.6/test/regrtest.py"
REFLOG="build/reflog.txt.out"
# These tests are not stable and falsely report leaks sometimes.
Modified: stackless/trunk/Modules/_bsddb.c
==============================================================================
--- stackless/trunk/Modules/_bsddb.c (original)
+++ stackless/trunk/Modules/_bsddb.c Sun Oct 15 16:42:33 2006
@@ -98,7 +98,7 @@
#error "eek! DBVER can't handle minor versions > 9"
#endif
-#define PY_BSDDB_VERSION "4.4.5"
+#define PY_BSDDB_VERSION "4.4.6"
static char *rcs_id = "$Id$";
@@ -2430,7 +2430,7 @@
#if (DBVER >= 43)
PyObject* txnobj = NULL;
DB_TXN *txn = NULL;
- static char* kwnames[] = { "txn", "flags", NULL };
+ static char* kwnames[] = { "flags", "txn", NULL };
#else
static char* kwnames[] = { "flags", NULL };
#endif
Modified: stackless/trunk/Modules/_ctypes/_ctypes.c
==============================================================================
--- stackless/trunk/Modules/_ctypes/_ctypes.c (original)
+++ stackless/trunk/Modules/_ctypes/_ctypes.c Sun Oct 15 16:42:33 2006
@@ -672,6 +672,7 @@
return PyInt_FromLong(0); /* NULL pointer */
typedict = PyType_stgdict(type);
+ assert(typedict); /* Cannot be NULL for pointer types */
/* If we expect POINTER(<type>), but receive a <type> instance, accept
it by calling byref(<type>).
@@ -2588,16 +2589,22 @@
PPROC address;
char *mangled_name;
int i;
- StgDictObject *dict = PyType_stgdict((PyObject *)type);
+ StgDictObject *dict;
address = (PPROC)GetProcAddress(handle, name);
+#ifdef _WIN64
+ /* win64 has no stdcall calling conv, so it should
+ also not have the name mangling of it.
+ */
+ return address;
+#else
if (address)
return address;
-
if (((size_t)name & ~0xFFFF) == 0) {
return NULL;
}
+ dict = PyType_stgdict((PyObject *)type);
/* It should not happen that dict is NULL, but better be safe */
if (dict==NULL || dict->flags & FUNCFLAG_CDECL)
return address;
@@ -2616,6 +2623,7 @@
return address;
}
return NULL;
+#endif
}
#endif
@@ -3129,6 +3137,13 @@
}
ob = PyTuple_GET_ITEM(argtypes, i);
dict = PyType_stgdict(ob);
+ if (dict == NULL) {
+ /* Cannot happen: _validate_paramflags()
+ would not accept such an object */
+ PyErr_Format(PyExc_RuntimeError,
+ "NULL stgdict unexpected");
+ goto error;
+ }
if (PyString_Check(dict->proto)) {
PyErr_Format(
PyExc_TypeError,
@@ -3726,6 +3741,8 @@
assert(stgdict); /* Cannot be NULL for array object instances */
proto = stgdict->proto;
itemdict = PyType_stgdict(proto);
+ assert(itemdict); /* proto is the item type of the array, a ctypes
+ type, so this cannot be NULL */
if (itemdict->getfunc == getentry("c")->getfunc) {
char *ptr = (char *)self->b_ptr;
return PyString_FromStringAndSize(ptr + ilow, len);
@@ -4159,6 +4176,9 @@
proto = stgdict->proto;
assert(proto);
itemdict = PyType_stgdict(proto);
+ assert(itemdict); /* proto is the item type of the pointer, a ctypes
+ type, so this cannot be NULL */
+
size = itemdict->size;
offset = index * itemdict->size;
@@ -4194,6 +4214,9 @@
assert(proto);
itemdict = PyType_stgdict(proto);
+ assert(itemdict); /* Cannot be NULL because the itemtype of a pointer
+ is always a ctypes type */
+
size = itemdict->size;
offset = index * itemdict->size;
@@ -4574,11 +4597,11 @@
if (obj->b_objects == NULL)
goto failed;
}
+ Py_XINCREF(obj->b_objects);
result->b_objects = obj->b_objects;
- if (result->b_objects) {
+ if (result->b_objects && PyDict_Check(result->b_objects)) {
PyObject *index;
int rc;
- Py_INCREF(obj->b_objects);
index = PyLong_FromVoidPtr((void *)src);
if (index == NULL)
goto failed;
Modified: stackless/trunk/Modules/_ctypes/_ctypes_test.c
==============================================================================
--- stackless/trunk/Modules/_ctypes/_ctypes_test.c (original)
+++ stackless/trunk/Modules/_ctypes/_ctypes_test.c Sun Oct 15 16:42:33 2006
@@ -25,6 +25,16 @@
/* some functions handy for testing */
+EXPORT(int)myprintf(char *fmt, ...)
+{
+ int result;
+ va_list argptr;
+ va_start(argptr, fmt);
+ result = vprintf(fmt, argptr);
+ va_end(argptr);
+ return result;
+}
+
EXPORT(char *)my_strtok(char *token, const char *delim)
{
return strtok(token, delim);
Modified: stackless/trunk/Modules/_ctypes/callbacks.c
==============================================================================
--- stackless/trunk/Modules/_ctypes/callbacks.c (original)
+++ stackless/trunk/Modules/_ctypes/callbacks.c Sun Oct 15 16:42:33 2006
@@ -300,7 +300,7 @@
}
cc = FFI_DEFAULT_ABI;
-#if defined(MS_WIN32) && !defined(_WIN32_WCE)
+#if defined(MS_WIN32) && !defined(_WIN32_WCE) && !defined(MS_WIN64)
if (is_cdecl == 0)
cc = FFI_STDCALL;
#endif
Modified: stackless/trunk/Modules/_ctypes/callproc.c
==============================================================================
--- stackless/trunk/Modules/_ctypes/callproc.c (original)
+++ stackless/trunk/Modules/_ctypes/callproc.c Sun Oct 15 16:42:33 2006
@@ -638,7 +638,7 @@
}
cc = FFI_DEFAULT_ABI;
-#if defined(MS_WIN32) && !defined(_WIN32_WCE)
+#if defined(MS_WIN32) && !defined(MS_WIN64) && !defined(_WIN32_WCE)
if ((flags & FUNCFLAG_CDECL) == 0)
cc = FFI_STDCALL;
#endif
@@ -683,6 +683,14 @@
return -1;
}
#endif
+#ifdef MS_WIN64
+ if (delta != 0) {
+ PyErr_Format(PyExc_RuntimeError,
+ "ffi_call failed with code %d",
+ delta);
+ return -1;
+ }
+#else
if (delta < 0) {
if (flags & FUNCFLAG_CDECL)
PyErr_Format(PyExc_ValueError,
@@ -704,6 +712,7 @@
return -1;
}
#endif
+#endif
if ((flags & FUNCFLAG_PYTHONAPI) && PyErr_Occurred())
return -1;
return 0;
@@ -979,7 +988,11 @@
}
for (i = 0; i < argcount; ++i) {
atypes[i] = args[i].ffi_type;
- if (atypes[i]->type == FFI_TYPE_STRUCT)
+ if (atypes[i]->type == FFI_TYPE_STRUCT
+#ifdef _WIN64
+ && atypes[i]->size <= sizeof(void *)
+#endif
+ )
avalues[i] = (void *)args[i].value.p;
else
avalues[i] = (void *)&args[i].value;
@@ -1099,7 +1112,11 @@
hMod = LoadLibrary(name);
if (!hMod)
return PyErr_SetFromWindowsErr(GetLastError());
+#ifdef _WIN64
+ return PyLong_FromVoidPtr(hMod);
+#else
return Py_BuildValue("i", hMod);
+#endif
}
static char free_library_doc[] =
Modified: stackless/trunk/Modules/_ctypes/cfield.c
==============================================================================
--- stackless/trunk/Modules/_ctypes/cfield.c (original)
+++ stackless/trunk/Modules/_ctypes/cfield.c Sun Oct 15 16:42:33 2006
@@ -1315,7 +1315,11 @@
*(char **)ptr = PyString_AS_STRING(str);
return str;
} else if (PyInt_Check(value) || PyLong_Check(value)) {
+#if SIZEOF_VOID_P == SIZEOF_LONG_LONG
+ *(char **)ptr = (char *)PyInt_AsUnsignedLongLongMask(value);
+#else
*(char **)ptr = (char *)PyInt_AsUnsignedLongMask(value);
+#endif
_RET(value);
}
PyErr_Format(PyExc_TypeError,
@@ -1360,7 +1364,11 @@
if (!value)
return NULL;
} else if (PyInt_Check(value) || PyLong_Check(value)) {
+#if SIZEOF_VOID_P == SIZEOF_LONG_LONG
+ *(wchar_t **)ptr = (wchar_t *)PyInt_AsUnsignedLongLongMask(value);
+#else
*(wchar_t **)ptr = (wchar_t *)PyInt_AsUnsignedLongMask(value);
+#endif
Py_INCREF(Py_None);
return Py_None;
} else if (!PyUnicode_Check(value)) {
Modified: stackless/trunk/Modules/_ctypes/libffi_msvc/ffi.c
==============================================================================
--- stackless/trunk/Modules/_ctypes/libffi_msvc/ffi.c (original)
+++ stackless/trunk/Modules/_ctypes/libffi_msvc/ffi.c Sun Oct 15 16:42:33 2006
@@ -34,6 +34,8 @@
/* ffi_prep_args is called by the assembly routine once stack space
has been allocated for the function's arguments */
+extern void Py_FatalError(char *msg);
+
/*@-exportheader@*/
void ffi_prep_args(char *stack, extended_cif *ecif)
/*@=exportheader@*/
@@ -44,11 +46,10 @@
register ffi_type **p_arg;
argp = stack;
-
if (ecif->cif->rtype->type == FFI_TYPE_STRUCT)
{
*(void **) argp = ecif->rvalue;
- argp += 4;
+ argp += sizeof(void *);
}
p_argv = ecif->avalue;
@@ -60,8 +61,8 @@
size_t z;
/* Align if necessary */
- if ((sizeof(int) - 1) & (unsigned) argp)
- argp = (char *) ALIGN(argp, sizeof(int));
+ if ((sizeof(void *) - 1) & (size_t) argp)
+ argp = (char *) ALIGN(argp, sizeof(void *));
z = (*p_arg)->size;
if (z < sizeof(int))
@@ -108,7 +109,11 @@
p_argv++;
argp += z;
}
-
+
+ if (argp - stack > ecif->cif->bytes)
+ {
+ Py_FatalError("FFI BUG: not enough stack space for arguments");
+ }
return;
}
@@ -128,6 +133,9 @@
break;
case FFI_TYPE_UINT64:
+#ifdef _WIN64
+ case FFI_TYPE_POINTER:
+#endif
cif->flags = FFI_TYPE_SINT64;
break;
@@ -139,6 +147,7 @@
return FFI_OK;
}
+#ifdef _WIN32
/*@-declundef@*/
/*@-exportheader@*/
extern int
@@ -160,6 +169,16 @@
void (*fn)());
/*@=declundef@*/
/*@=exportheader@*/
+#endif
+
+#ifdef _WIN64
+extern int
+ffi_call_AMD64(void (*)(char *, extended_cif *),
+ /*@out@*/ extended_cif *,
+ unsigned, unsigned,
+ /*@out@*/ unsigned *,
+ void (*fn)());
+#endif
int
ffi_call(/*@dependent@*/ ffi_cif *cif,
@@ -188,6 +207,7 @@
switch (cif->abi)
{
+#if !defined(_WIN64)
case FFI_SYSV:
/*@-usedef@*/
return ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes,
@@ -201,6 +221,14 @@
cif->flags, ecif.rvalue, fn);
/*@=usedef@*/
break;
+#else
+ case FFI_SYSV:
+ /*@-usedef@*/
+ return ffi_call_AMD64(ffi_prep_args, &ecif, cif->bytes,
+ cif->flags, ecif.rvalue, fn);
+ /*@=usedef@*/
+ break;
+#endif
default:
FFI_ASSERT(0);
@@ -213,10 +241,14 @@
/** private members **/
static void ffi_prep_incoming_args_SYSV (char *stack, void **ret,
- void** args, ffi_cif* cif);
+ void** args, ffi_cif* cif);
/* This function is jumped to by the trampoline */
+#ifdef _WIN64
+void *
+#else
static void __fastcall
+#endif
ffi_closure_SYSV (ffi_closure *closure, int *argp)
{
// this is our return value storage
@@ -244,6 +276,7 @@
rtype = cif->flags;
+#if defined(_WIN32) && !defined(_WIN64)
#ifdef _MSC_VER
/* now, do a generic return based on the value of rtype */
if (rtype == FFI_TYPE_INT)
@@ -303,6 +336,15 @@
: "eax", "edx");
}
#endif
+#endif
+
+#ifdef _WIN64
+ /* The result is returned in rax. This does the right thing for
+ result types except for floats; we have to 'mov xmm0, rax' in the
+ caller to correct this.
+ */
+ return *(void **)resp;
+#endif
}
/*@-exportheader@*/
@@ -330,8 +372,8 @@
size_t z;
/* Align if necessary */
- if ((sizeof(int) - 1) & (unsigned) argp) {
- argp = (char *) ALIGN(argp, sizeof(int));
+ if ((sizeof(char *) - 1) & (size_t) argp) {
+ argp = (char *) ALIGN(argp, sizeof(char*));
}
z = (*p_arg)->size;
@@ -347,24 +389,8 @@
return;
}
-/* How to make a trampoline. Derived from gcc/config/i386/i386.c. */
-
-#define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX,BYTES) \
-{ unsigned char *__tramp = (unsigned char*)(TRAMP); \
- unsigned int __fun = (unsigned int)(FUN); \
- unsigned int __ctx = (unsigned int)(CTX); \
- unsigned int __dis = __fun - ((unsigned int) __tramp + 8 + 4); \
- *(unsigned char*) &__tramp[0] = 0xb9; \
- *(unsigned int*) &__tramp[1] = __ctx; /* mov ecx, __ctx */ \
- *(unsigned char*) &__tramp[5] = 0x8b; \
- *(unsigned char*) &__tramp[6] = 0xd4; /* mov edx, esp */ \
- *(unsigned char*) &__tramp[7] = 0xe8; \
- *(unsigned int*) &__tramp[8] = __dis; /* call __fun */ \
- *(unsigned char*) &__tramp[12] = 0xC2; /* ret BYTES */ \
- *(unsigned short*) &__tramp[13] = BYTES; \
- }
-
/* the cif must already be prep'ed */
+extern void ffi_closure_OUTER();
ffi_status
ffi_prep_closure (ffi_closure* closure,
@@ -373,19 +399,78 @@
void *user_data)
{
short bytes;
+ char *tramp;
+#ifdef _WIN64
+ int mask;
+#endif
FFI_ASSERT (cif->abi == FFI_SYSV);
if (cif->abi == FFI_SYSV)
bytes = 0;
+#if !defined(_WIN64)
else if (cif->abi == FFI_STDCALL)
bytes = cif->bytes;
+#endif
else
return FFI_BAD_ABI;
- FFI_INIT_TRAMPOLINE (&closure->tramp[0],
- &ffi_closure_SYSV,
- (void*)closure,
- bytes);
+ tramp = &closure->tramp[0];
+
+#define BYTES(text) memcpy(tramp, text, sizeof(text)), tramp += sizeof(text)-1
+#define POINTER(x) *(void**)tramp = (void*)(x), tramp += sizeof(void*)
+#define SHORT(x) *(short*)tramp = x, tramp += sizeof(short)
+#define INT(x) *(int*)tramp = x, tramp += sizeof(int)
+
+#ifdef _WIN64
+ if (cif->nargs >= 1 &&
+ (cif->arg_types[0]->type == FFI_TYPE_FLOAT
+ || cif->arg_types[0]->type == FFI_TYPE_DOUBLE))
+ mask |= 1;
+ if (cif->nargs >= 2 &&
+ (cif->arg_types[1]->type == FFI_TYPE_FLOAT
+ || cif->arg_types[1]->type == FFI_TYPE_DOUBLE))
+ mask |= 2;
+ if (cif->nargs >= 3 &&
+ (cif->arg_types[2]->type == FFI_TYPE_FLOAT
+ || cif->arg_types[2]->type == FFI_TYPE_DOUBLE))
+ mask |= 4;
+ if (cif->nargs >= 4 &&
+ (cif->arg_types[3]->type == FFI_TYPE_FLOAT
+ || cif->arg_types[3]->type == FFI_TYPE_DOUBLE))
+ mask |= 8;
+
+ /* 41 BB ---- mov r11d,mask */
+ BYTES("\x41\xBB"); INT(mask);
+
+ /* 48 B8 -------- mov rax, closure */
+ BYTES("\x48\xB8"); POINTER(closure);
+
+ /* 49 BA -------- mov r10, ffi_closure_OUTER */
+ BYTES("\x49\xBA"); POINTER(ffi_closure_OUTER);
+
+ /* 41 FF E2 jmp r10 */
+ BYTES("\x41\xFF\xE2");
+
+#else
+
+ /* mov ecx, closure */
+ BYTES("\xb9"); POINTER(closure);
+
+ /* mov edx, esp */
+ BYTES("\x8b\xd4");
+
+ /* call ffi_closure_SYSV */
+ BYTES("\xe8"); POINTER((char*)&ffi_closure_SYSV - (tramp + 4));
+
+ /* ret bytes */
+ BYTES("\xc2");
+ SHORT(bytes);
+
+#endif
+
+ if (tramp - &closure->tramp[0] > FFI_TRAMPOLINE_SIZE)
+ Py_FatalError("FFI_TRAMPOLINE_SIZE too small in " __FILE__);
+
closure->cif = cif;
closure->user_data = user_data;
closure->fun = fun;
Modified: stackless/trunk/Modules/_ctypes/libffi_msvc/ffi.h
==============================================================================
--- stackless/trunk/Modules/_ctypes/libffi_msvc/ffi.h (original)
+++ stackless/trunk/Modules/_ctypes/libffi_msvc/ffi.h Sun Oct 15 16:42:33 2006
@@ -174,12 +174,10 @@
/* ---- Definitions for the raw API -------------------------------------- */
-#ifndef FFI_SIZEOF_ARG
-# if LONG_MAX == 2147483647
-# define FFI_SIZEOF_ARG 4
-# elif LONG_MAX == 9223372036854775807
-# define FFI_SIZEOF_ARG 8
-# endif
+#ifdef _WIN64
+#define FFI_SIZEOF_ARG 8
+#else
+#define FFI_SIZEOF_ARG 4
#endif
typedef union {
Modified: stackless/trunk/Modules/_ctypes/libffi_msvc/ffitarget.h
==============================================================================
--- stackless/trunk/Modules/_ctypes/libffi_msvc/ffitarget.h (original)
+++ stackless/trunk/Modules/_ctypes/libffi_msvc/ffitarget.h Sun Oct 15 16:42:33 2006
@@ -44,7 +44,9 @@
/* ---- Intel x86 Win32 ---------- */
FFI_SYSV,
+#ifndef _WIN64
FFI_STDCALL,
+#endif
/* TODO: Add fastcall support for the sake of completeness */
FFI_DEFAULT_ABI = FFI_SYSV,
@@ -67,8 +69,8 @@
#define FFI_CLOSURES 1
-#ifdef X86_64
-#define FFI_TRAMPOLINE_SIZE 24
+#ifdef _WIN64
+#define FFI_TRAMPOLINE_SIZE 29
#define FFI_NATIVE_RAW_API 0
#else
#define FFI_TRAMPOLINE_SIZE 15
Modified: stackless/trunk/Modules/_ctypes/stgdict.c
==============================================================================
--- stackless/trunk/Modules/_ctypes/stgdict.c (original)
+++ stackless/trunk/Modules/_ctypes/stgdict.c Sun Oct 15 16:42:33 2006
@@ -177,11 +177,11 @@
for (i = 0; i < PySequence_Fast_GET_SIZE(fieldlist); ++i) {
PyObject *pair = PySequence_Fast_GET_ITEM(fieldlist, i); /* borrowed */
- PyObject *fname, *ftype;
+ PyObject *fname, *ftype, *bits;
CFieldObject *fdescr;
CFieldObject *new_descr;
/* Convert to PyArg_UnpackTuple... */
- if (!PyArg_ParseTuple(pair, "OO", &fname, &ftype)) {
+ if (!PyArg_ParseTuple(pair, "OO|O", &fname, &ftype, &bits)) {
Py_DECREF(fieldlist);
return -1;
}
@@ -208,12 +208,12 @@
continue;
}
new_descr = (CFieldObject *)PyObject_CallObject((PyObject *)&CField_Type, NULL);
- assert(new_descr->ob_type == &CField_Type);
if (new_descr == NULL) {
Py_DECREF(fdescr);
Py_DECREF(fieldlist);
return -1;
}
+ assert(new_descr->ob_type == &CField_Type);
new_descr->size = fdescr->size;
new_descr->offset = fdescr->offset + offset;
new_descr->index = fdescr->index + index;
Modified: stackless/trunk/Modules/_cursesmodule.c
==============================================================================
--- stackless/trunk/Modules/_cursesmodule.c (original)
+++ stackless/trunk/Modules/_cursesmodule.c Sun Oct 15 16:42:33 2006
@@ -2334,6 +2334,10 @@
}
result = tparm(fmt,i1,i2,i3,i4,i5,i6,i7,i8,i9);
+ if (!result) {
+ PyErr_SetString(PyCursesError, "tparm() returned NULL");
+ return NULL;
+ }
return PyString_FromString(result);
}
Modified: stackless/trunk/Modules/_sre.c
==============================================================================
--- stackless/trunk/Modules/_sre.c (original)
+++ stackless/trunk/Modules/_sre.c Sun Oct 15 16:42:33 2006
@@ -1166,9 +1166,10 @@
/* install new repeat context */
ctx->u.rep = (SRE_REPEAT*) PyObject_MALLOC(sizeof(*ctx->u.rep));
- /* XXX(nnorwitz): anything else we need to do on error? */
- if (!ctx->u.rep)
+ if (!ctx->u.rep) {
+ PyErr_NoMemory();
RETURN_FAILURE;
+ }
ctx->u.rep->count = -1;
ctx->u.rep->pattern = ctx->pattern;
ctx->u.rep->prev = state->repeat;
@@ -1884,6 +1885,8 @@
}
TRACE(("|%p|%p|END\n", PatternObject_GetCode(self), state.ptr));
+ if (PyErr_Occurred())
+ return NULL;
state_fini(&state);
@@ -1922,6 +1925,9 @@
state_fini(&state);
+ if (PyErr_Occurred())
+ return NULL;
+
return pattern_new_match(self, &state, status);
}
@@ -2071,6 +2077,9 @@
#endif
}
+ if (PyErr_Occurred())
+ goto error;
+
if (status <= 0) {
if (status == 0)
break;
@@ -2198,6 +2207,9 @@
#endif
}
+ if (PyErr_Occurred())
+ goto error;
+
if (status <= 0) {
if (status == 0)
break;
@@ -2347,6 +2359,9 @@
#endif
}
+ if (PyErr_Occurred())
+ goto error;
+
if (status <= 0) {
if (status == 0)
break;
@@ -3250,6 +3265,8 @@
status = sre_umatch(state, PatternObject_GetCode(self->pattern));
#endif
}
+ if (PyErr_Occurred())
+ return NULL;
match = pattern_new_match((PatternObject*) self->pattern,
state, status);
@@ -3281,6 +3298,8 @@
status = sre_usearch(state, PatternObject_GetCode(self->pattern));
#endif
}
+ if (PyErr_Occurred())
+ return NULL;
match = pattern_new_match((PatternObject*) self->pattern,
state, status);
Modified: stackless/trunk/Modules/almodule.c
==============================================================================
--- stackless/trunk/Modules/almodule.c (original)
+++ stackless/trunk/Modules/almodule.c Sun Oct 15 16:42:33 2006
@@ -1686,7 +1686,7 @@
{
int res, param;
ALparamInfo pinfo;
- PyObject *v, *item;;
+ PyObject *v, *item;
if (!PyArg_ParseTuple(args, "ii:GetParamInfo", &res, ¶m))
return NULL;
Modified: stackless/trunk/Modules/arraymodule.c
==============================================================================
--- stackless/trunk/Modules/arraymodule.c (original)
+++ stackless/trunk/Modules/arraymodule.c Sun Oct 15 16:42:33 2006
@@ -1495,7 +1495,7 @@
copy_doc},
{"count", (PyCFunction)array_count, METH_O,
count_doc},
- {"__deepcopy__",(PyCFunction)array_copy, METH_NOARGS,
+ {"__deepcopy__",(PyCFunction)array_copy, METH_O,
copy_doc},
{"extend", (PyCFunction)array_extend, METH_O,
extend_doc},
Modified: stackless/trunk/Modules/bz2module.c
==============================================================================
--- stackless/trunk/Modules/bz2module.c (original)
+++ stackless/trunk/Modules/bz2module.c Sun Oct 15 16:42:33 2006
@@ -1023,12 +1023,12 @@
case MODE_CLOSED:
PyErr_SetString(PyExc_ValueError,
"I/O operation on closed file");
- goto cleanup;;
+ goto cleanup;
default:
PyErr_SetString(PyExc_IOError,
"seek works only while reading");
- goto cleanup;;
+ goto cleanup;
}
if (where == 2) {
Modified: stackless/trunk/Modules/cPickle.c
==============================================================================
--- stackless/trunk/Modules/cPickle.c (original)
+++ stackless/trunk/Modules/cPickle.c Sun Oct 15 16:42:33 2006
@@ -1029,7 +1029,7 @@
static int
save_long(Picklerobject *self, PyObject *args)
{
- int size;
+ Py_ssize_t size;
int res = -1;
PyObject *repr = NULL;
@@ -1071,7 +1071,7 @@
* byte at the start, and cut it back later if possible.
*/
nbytes = (nbits >> 3) + 1;
- if ((int)nbytes < 0 || (size_t)(int)nbytes != nbytes) {
+ if (nbytes > INT_MAX) {
PyErr_SetString(PyExc_OverflowError, "long too large "
"to pickle");
goto finally;
@@ -1213,12 +1213,14 @@
c_str[1] = size;
len = 2;
}
- else {
+ else if (size <= INT_MAX) {
c_str[0] = BINSTRING;
for (i = 1; i < 5; i++)
c_str[i] = (int)(size >> ((i - 1) * 8));
len = 5;
}
+ else
+ return -1; /* string too large */
if (self->write_func(self, c_str, len) < 0)
return -1;
@@ -1291,7 +1293,7 @@
static int
save_unicode(Picklerobject *self, PyObject *args, int doput)
{
- int size, len;
+ Py_ssize_t size, len;
PyObject *repr=0;
if (!PyUnicode_Check(args))
@@ -1330,6 +1332,8 @@
if ((size = PyString_Size(repr)) < 0)
goto err;
+ if (size > INT_MAX)
+ return -1; /* string too large */
c_str[0] = BINUNICODE;
for (i = 1; i < 5; i++)
Modified: stackless/trunk/Modules/cStringIO.c
==============================================================================
--- stackless/trunk/Modules/cStringIO.c (original)
+++ stackless/trunk/Modules/cStringIO.c Sun Oct 15 16:42:33 2006
@@ -657,11 +657,9 @@
char *buf;
Py_ssize_t size;
- if (PyObject_AsReadBuffer(s, (const void **)&buf, &size)) {
- PyErr_Format(PyExc_TypeError, "expected read buffer, %.200s found",
- s->ob_type->tp_name);
+ if (PyObject_AsCharBuffer(s, (const void **)&buf, &size) != 0)
return NULL;
- }
+
self = PyObject_New(Iobject, &Itype);
if (!self) return NULL;
Py_INCREF(s);
Modified: stackless/trunk/Modules/cjkcodecs/_codecs_cn.c
==============================================================================
--- stackless/trunk/Modules/cjkcodecs/_codecs_cn.c (original)
+++ stackless/trunk/Modules/cjkcodecs/_codecs_cn.c Sun Oct 15 16:42:33 2006
@@ -15,14 +15,26 @@
#undef hz
#endif
-#define GBK_PREDECODE(dc1, dc2, assi) \
+/* GBK and GB2312 map differently in few codepoints that are listed below:
+ *
+ * gb2312 gbk
+ * A1A4 U+30FB KATAKANA MIDDLE DOT U+00B7 MIDDLE DOT
+ * A1AA U+2015 HORIZONTAL BAR U+2014 EM DASH
+ * A844 undefined U+2015 HORIZONTAL BAR
+ */
+
+#define GBK_DECODE(dc1, dc2, assi) \
if ((dc1) == 0xa1 && (dc2) == 0xaa) (assi) = 0x2014; \
else if ((dc1) == 0xa8 && (dc2) == 0x44) (assi) = 0x2015; \
- else if ((dc1) == 0xa1 && (dc2) == 0xa4) (assi) = 0x00b7;
-#define GBK_PREENCODE(code, assi) \
+ else if ((dc1) == 0xa1 && (dc2) == 0xa4) (assi) = 0x00b7; \
+ else TRYMAP_DEC(gb2312, assi, dc1 ^ 0x80, dc2 ^ 0x80); \
+ else TRYMAP_DEC(gbkext, assi, dc1, dc2);
+
+#define GBK_ENCODE(code, assi) \
if ((code) == 0x2014) (assi) = 0xa1aa; \
else if ((code) == 0x2015) (assi) = 0xa844; \
- else if ((code) == 0x00b7) (assi) = 0xa1a4;
+ else if ((code) == 0x00b7) (assi) = 0xa1a4; \
+ else if ((code) != 0x30fb && TRYMAP_ENC_COND(gbcommon, assi, code));
/*
* GB2312 codec
@@ -99,8 +111,7 @@
REQUIRE_OUTBUF(2)
- GBK_PREENCODE(c, code)
- else TRYMAP_ENC(gbcommon, code, c);
+ GBK_ENCODE(c, code)
else return 1;
OUT1((code >> 8) | 0x80)
@@ -129,9 +140,7 @@
REQUIRE_INBUF(2)
- GBK_PREDECODE(c, IN2, **outbuf)
- else TRYMAP_DEC(gb2312, **outbuf, c ^ 0x80, IN2 ^ 0x80);
- else TRYMAP_DEC(gbkext, **outbuf, c, IN2);
+ GBK_DECODE(c, IN2, **outbuf)
else return 2;
NEXT(2, 1)
@@ -187,9 +196,7 @@
REQUIRE_OUTBUF(2)
- GBK_PREENCODE(c, code)
- else TRYMAP_ENC(gbcommon, code, c);
- else TRYMAP_ENC(gb18030ext, code, c);
+ GBK_ENCODE(c, code)
else {
const struct _gb18030_to_unibmp_ranges *utrrange;
@@ -287,9 +294,7 @@
return 4;
}
- GBK_PREDECODE(c, c2, **outbuf)
- else TRYMAP_DEC(gb2312, **outbuf, c ^ 0x80, c2 ^ 0x80);
- else TRYMAP_DEC(gbkext, **outbuf, c, c2);
+ GBK_DECODE(c, c2, **outbuf)
else TRYMAP_DEC(gb18030ext, **outbuf, c, c2);
else return 2;
Modified: stackless/trunk/Modules/cjkcodecs/_codecs_iso2022.c
==============================================================================
--- stackless/trunk/Modules/cjkcodecs/_codecs_iso2022.c (original)
+++ stackless/trunk/Modules/cjkcodecs/_codecs_iso2022.c Sun Oct 15 16:42:33 2006
@@ -592,9 +592,11 @@
{
DBCHAR coded;
assert(*length == 1);
- TRYMAP_ENC(cp949, coded, *data)
- if (!(coded & 0x8000))
- return coded;
+ if (*data < 0x10000) {
+ TRYMAP_ENC(cp949, coded, *data)
+ if (!(coded & 0x8000))
+ return coded;
+ }
return MAP_UNMAPPABLE;
}
@@ -628,11 +630,13 @@
{
DBCHAR coded;
assert(*length == 1);
- if (*data == 0xff3c) /* F/W REVERSE SOLIDUS */
- return 0x2140;
- else TRYMAP_ENC(jisxcommon, coded, *data) {
- if (!(coded & 0x8000))
- return coded;
+ if (*data < 0x10000) {
+ if (*data == 0xff3c) /* F/W REVERSE SOLIDUS */
+ return 0x2140;
+ else TRYMAP_ENC(jisxcommon, coded, *data) {
+ if (!(coded & 0x8000))
+ return coded;
+ }
}
return MAP_UNMAPPABLE;
}
@@ -665,9 +669,11 @@
{
DBCHAR coded;
assert(*length == 1);
- TRYMAP_ENC(jisxcommon, coded, *data) {
- if (coded & 0x8000)
- return coded & 0x7fff;
+ if (*data < 0x10000) {
+ TRYMAP_ENC(jisxcommon, coded, *data) {
+ if (coded & 0x8000)
+ return coded & 0x7fff;
+ }
}
return MAP_UNMAPPABLE;
}
@@ -854,7 +860,7 @@
if (coded == MAP_UNMAPPABLE || coded == MAP_MULTIPLE_AVAIL)
return coded;
else if (coded & 0x8000)
- return coded;
+ return coded & 0x7fff;
else
return MAP_UNMAPPABLE;
}
@@ -901,7 +907,7 @@
if (coded == MAP_UNMAPPABLE || coded == MAP_MULTIPLE_AVAIL)
return coded;
else if (coded & 0x8000)
- return coded;
+ return coded & 0x7fff;
else
return MAP_UNMAPPABLE;
}
@@ -970,9 +976,11 @@
{
DBCHAR coded;
assert(*length == 1);
- TRYMAP_ENC(gbcommon, coded, *data) {
- if (!(coded & 0x8000))
- return coded;
+ if (*data < 0x10000) {
+ TRYMAP_ENC(gbcommon, coded, *data) {
+ if (!(coded & 0x8000))
+ return coded;
+ }
}
return MAP_UNMAPPABLE;
}
@@ -992,7 +1000,10 @@
/*-*- registry tables -*-*/
-#define REGISTRY_KSX1001 { CHARSET_KSX1001, 1, 2, \
+#define REGISTRY_KSX1001_G0 { CHARSET_KSX1001, 0, 2, \
+ ksx1001_init, \
+ ksx1001_decoder, ksx1001_encoder }
+#define REGISTRY_KSX1001_G1 { CHARSET_KSX1001, 1, 2, \
ksx1001_init, \
ksx1001_decoder, ksx1001_encoder }
#define REGISTRY_JISX0201_R { CHARSET_JISX0201_R, 0, 1, \
@@ -1034,7 +1045,7 @@
jisx0213_init, \
jisx0213_2004_2_decoder, \
jisx0213_2004_2_encoder }
-#define REGISTRY_GB2312 { CHARSET_GB2312, 1, 2, \
+#define REGISTRY_GB2312 { CHARSET_GB2312, 0, 2, \
gb2312_init, \
gb2312_decoder, gb2312_encoder }
#define REGISTRY_CNS11643_1 { CHARSET_CNS11643_1, 1, 2, \
@@ -1054,7 +1065,7 @@
};
static const struct iso2022_designation iso2022_kr_designations[] = {
- REGISTRY_KSX1001, REGISTRY_SENTINEL
+ REGISTRY_KSX1001_G1, REGISTRY_SENTINEL
};
CONFIGDEF(kr, 0)
@@ -1071,7 +1082,7 @@
CONFIGDEF(jp_1, NO_SHIFT | USE_JISX0208_EXT)
static const struct iso2022_designation iso2022_jp_2_designations[] = {
- REGISTRY_JISX0208, REGISTRY_JISX0212, REGISTRY_KSX1001,
+ REGISTRY_JISX0208, REGISTRY_JISX0212, REGISTRY_KSX1001_G0,
REGISTRY_GB2312, REGISTRY_JISX0201_R, REGISTRY_JISX0208_O,
REGISTRY_ISO8859_1, REGISTRY_ISO8859_7, REGISTRY_SENTINEL
};
Modified: stackless/trunk/Modules/cjkcodecs/cjkcodecs.h
==============================================================================
--- stackless/trunk/Modules/cjkcodecs/cjkcodecs.h (original)
+++ stackless/trunk/Modules/cjkcodecs/cjkcodecs.h Sun Oct 15 16:42:33 2006
@@ -159,29 +159,32 @@
#endif
#define _TRYMAP_ENC(m, assi, val) \
- if ((m)->map != NULL && (val) >= (m)->bottom && \
+ ((m)->map != NULL && (val) >= (m)->bottom && \
(val)<= (m)->top && ((assi) = (m)->map[(val) - \
(m)->bottom]) != NOCHAR)
-#define TRYMAP_ENC(charset, assi, uni) \
+#define TRYMAP_ENC_COND(charset, assi, uni) \
_TRYMAP_ENC(&charset##_encmap[(uni) >> 8], assi, (uni) & 0xff)
+#define TRYMAP_ENC(charset, assi, uni) \
+ if TRYMAP_ENC_COND(charset, assi, uni)
+
#define _TRYMAP_DEC(m, assi, val) \
- if ((m)->map != NULL && (val) >= (m)->bottom && \
+ ((m)->map != NULL && (val) >= (m)->bottom && \
(val)<= (m)->top && ((assi) = (m)->map[(val) - \
(m)->bottom]) != UNIINV)
#define TRYMAP_DEC(charset, assi, c1, c2) \
- _TRYMAP_DEC(&charset##_decmap[c1], assi, c2)
+ if _TRYMAP_DEC(&charset##_decmap[c1], assi, c2)
#define _TRYMAP_ENC_MPLANE(m, assplane, asshi, asslo, val) \
- if ((m)->map != NULL && (val) >= (m)->bottom && \
+ ((m)->map != NULL && (val) >= (m)->bottom && \
(val)<= (m)->top && \
((assplane) = (m)->map[((val) - (m)->bottom)*3]) != 0 && \
(((asshi) = (m)->map[((val) - (m)->bottom)*3 + 1]), 1) && \
(((asslo) = (m)->map[((val) - (m)->bottom)*3 + 2]), 1))
#define TRYMAP_ENC_MPLANE(charset, assplane, asshi, asslo, uni) \
- _TRYMAP_ENC_MPLANE(&charset##_encmap[(uni) >> 8], \
+ if _TRYMAP_ENC_MPLANE(&charset##_encmap[(uni) >> 8], \
assplane, asshi, asslo, (uni) & 0xff)
#define TRYMAP_DEC_MPLANE(charset, assi, plane, c1, c2) \
- _TRYMAP_DEC(&charset##_decmap[plane][c1], assi, c2)
+ if _TRYMAP_DEC(&charset##_decmap[plane][c1], assi, c2)
#if Py_UNICODE_SIZE == 2
#define DECODE_SURROGATE(c) \
Modified: stackless/trunk/Modules/datetimemodule.c
==============================================================================
--- stackless/trunk/Modules/datetimemodule.c (original)
+++ stackless/trunk/Modules/datetimemodule.c Sun Oct 15 16:42:33 2006
@@ -1149,9 +1149,9 @@
PyObject *newfmt = NULL; /* py string, the output format */
char *pnew; /* pointer to available byte in output format */
- char totalnew; /* number bytes total in output format buffer,
+ int totalnew; /* number bytes total in output format buffer,
exclusive of trailing \0 */
- char usednew; /* number bytes used so far in output format buffer */
+ int usednew; /* number bytes used so far in output format buffer */
char *ptoappend; /* pointer to string to append to output buffer */
int ntoappend; /* # of bytes to append to output buffer */
Modified: stackless/trunk/Modules/gcmodule.c
==============================================================================
--- stackless/trunk/Modules/gcmodule.c (original)
+++ stackless/trunk/Modules/gcmodule.c Sun Oct 15 16:42:33 2006
@@ -1179,6 +1179,7 @@
"disable() -- Disable automatic garbage collection.\n"
"isenabled() -- Returns true if automatic collection is enabled.\n"
"collect() -- Do a full collection right now.\n"
+"get_count() -- Return the current collection counts.\n"
"set_debug() -- Set debugging flags.\n"
"get_debug() -- Get debugging flags.\n"
"set_threshold() -- Set the collection thresholds.\n"
Modified: stackless/trunk/Modules/itertoolsmodule.c
==============================================================================
--- stackless/trunk/Modules/itertoolsmodule.c (original)
+++ stackless/trunk/Modules/itertoolsmodule.c Sun Oct 15 16:42:33 2006
@@ -618,11 +618,15 @@
static PyObject *
tee(PyObject *self, PyObject *args)
{
- int i, n=2;
+ Py_ssize_t i, n=2;
PyObject *it, *iterable, *copyable, *result;
- if (!PyArg_ParseTuple(args, "O|i", &iterable, &n))
+ if (!PyArg_ParseTuple(args, "O|n", &iterable, &n))
return NULL;
+ if (n < 0) {
+ PyErr_SetString(PyExc_ValueError, "n must be >= 0");
+ return NULL;
+ }
result = PyTuple_New(n);
if (result == NULL)
return NULL;
@@ -2068,7 +2072,7 @@
static PyObject *
count_next(countobject *lz)
{
- return PyInt_FromSize_t(lz->cnt++);
+ return PyInt_FromSsize_t(lz->cnt++);
}
static PyObject *
Modified: stackless/trunk/Modules/linuxaudiodev.c
==============================================================================
--- stackless/trunk/Modules/linuxaudiodev.c (original)
+++ stackless/trunk/Modules/linuxaudiodev.c Sun Oct 15 16:42:33 2006
@@ -28,7 +28,9 @@
#if defined(linux)
#include <linux/soundcard.h>
+#ifndef HAVE_STDINT_H
typedef unsigned long uint32_t;
+#endif
#elif defined(__FreeBSD__)
#include <machine/soundcard.h>
Modified: stackless/trunk/Modules/main.c
==============================================================================
--- stackless/trunk/Modules/main.c (original)
+++ stackless/trunk/Modules/main.c Sun Oct 15 16:42:33 2006
@@ -60,32 +60,33 @@
static char *usage_1 = "\
Options and arguments (and corresponding environment variables):\n\
-c cmd : program passed in as string (terminates option list)\n\
--d : debug output from parser (also PYTHONDEBUG=x)\n\
+-d : debug output from parser; also PYTHONDEBUG=x\n\
-E : ignore environment variables (such as PYTHONPATH)\n\
-h : print this help message and exit (also --help)\n\
--i : inspect interactively after running script, (also PYTHONINSPECT=x)\n\
- and force prompts, even if stdin does not appear to be a terminal\n\
+-i : inspect interactively after running script; forces a prompt even\n\
+ if stdin does not appear to be a terminal; also PYTHONINSPECT=x\n\
";
static char *usage_2 = "\
-m mod : run library module as a script (terminates option list)\n\
--O : optimize generated bytecode (a tad; also PYTHONOPTIMIZE=x)\n\
+-O : optimize generated bytecode slightly; also PYTHONOPTIMIZE=x\n\
-OO : remove doc-strings in addition to the -O optimizations\n\
-Q arg : division options: -Qold (default), -Qwarn, -Qwarnall, -Qnew\n\
-S : don't imply 'import site' on initialization\n\
-t : issue warnings about inconsistent tab usage (-tt: issue errors)\n\
--u : unbuffered binary stdout and stderr (also PYTHONUNBUFFERED=x)\n\
+-u : unbuffered binary stdout and stderr; also PYTHONUNBUFFERED=x\n\
";
static char *usage_3 = "\
see man page for details on internal buffering relating to '-u'\n\
--v : verbose (trace import statements) (also PYTHONVERBOSE=x)\n\
+-v : verbose (trace import statements); also PYTHONVERBOSE=x\n\
+ can be supplied multiple times to increase verbosity\n\
-V : print the Python version number and exit (also --version)\n\
--W arg : warning control (arg is action:message:category:module:lineno)\n\
+-W arg : warning control; arg is action:message:category:module:lineno\n\
-x : skip first line of source, allowing use of non-Unix forms of #!cmd\n\
file : program read from script file\n\
- : program read from stdin (default; interactive mode if a tty)\n\
";
static char *usage_4 = "\
-arg ...: arguments passed to program in sys.argv[1:]\n\
+arg ...: arguments passed to program in sys.argv[1:]\n\n\
Other environment variables:\n\
PYTHONSTARTUP: file executed on interactive startup (no default)\n\
PYTHONPATH : '%c'-separated list of directories prefixed to the\n\
Modified: stackless/trunk/Modules/mmapmodule.c
==============================================================================
--- stackless/trunk/Modules/mmapmodule.c (original)
+++ stackless/trunk/Modules/mmapmodule.c Sun Oct 15 16:42:33 2006
@@ -470,7 +470,7 @@
mmap_tell_method(mmap_object *self, PyObject *unused)
{
CHECK_VALID(NULL);
- return PyInt_FromLong((long) self->pos);
+ return PyInt_FromSize_t(self->pos);
}
static PyObject *
Modified: stackless/trunk/Modules/ossaudiodev.c
==============================================================================
--- stackless/trunk/Modules/ossaudiodev.c (original)
+++ stackless/trunk/Modules/ossaudiodev.c Sun Oct 15 16:42:33 2006
@@ -34,7 +34,9 @@
#if defined(linux)
+#ifndef HAVE_STDINT_H
typedef unsigned long uint32_t;
+#endif
#elif defined(__FreeBSD__)
Modified: stackless/trunk/Modules/parsermodule.c
==============================================================================
--- stackless/trunk/Modules/parsermodule.c (original)
+++ stackless/trunk/Modules/parsermodule.c Sun Oct 15 16:42:33 2006
@@ -74,7 +74,8 @@
node2tuple(node *n, /* node to convert */
SeqMaker mkseq, /* create sequence */
SeqInserter addelem, /* func. to add elem. in seq. */
- int lineno) /* include line numbers? */
+ int lineno, /* include line numbers? */
+ int col_offset) /* include column offsets? */
{
if (n == NULL) {
Py_INCREF(Py_None);
@@ -95,7 +96,7 @@
}
(void) addelem(v, 0, w);
for (i = 0; i < NCH(n); i++) {
- w = node2tuple(CHILD(n, i), mkseq, addelem, lineno);
+ w = node2tuple(CHILD(n, i), mkseq, addelem, lineno, col_offset);
if (w == NULL) {
Py_DECREF(v);
return ((PyObject*) NULL);
@@ -108,12 +109,14 @@
return (v);
}
else if (ISTERMINAL(TYPE(n))) {
- PyObject *result = mkseq(2 + lineno);
+ PyObject *result = mkseq(2 + lineno + col_offset);
if (result != NULL) {
(void) addelem(result, 0, PyInt_FromLong(TYPE(n)));
(void) addelem(result, 1, PyString_FromString(STR(n)));
if (lineno == 1)
(void) addelem(result, 2, PyInt_FromLong(n->n_lineno));
+ if (col_offset == 1)
+ (void) addelem(result, 3, PyInt_FromLong(n->n_col_offset));
}
return (result);
}
@@ -289,29 +292,35 @@
parser_st2tuple(PyST_Object *self, PyObject *args, PyObject *kw)
{
PyObject *line_option = 0;
+ PyObject *col_option = 0;
PyObject *res = 0;
int ok;
- static char *keywords[] = {"ast", "line_info", NULL};
+ static char *keywords[] = {"ast", "line_info", "col_info", NULL};
if (self == NULL) {
- ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|O:st2tuple", keywords,
- &PyST_Type, &self, &line_option);
+ ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|OO:st2tuple", keywords,
+ &PyST_Type, &self, &line_option,
+ &col_option);
}
else
- ok = PyArg_ParseTupleAndKeywords(args, kw, "|O:totuple", &keywords[1],
- &line_option);
+ ok = PyArg_ParseTupleAndKeywords(args, kw, "|OO:totuple", &keywords[1],
+ &line_option, &col_option);
if (ok != 0) {
int lineno = 0;
+ int col_offset = 0;
if (line_option != NULL) {
lineno = (PyObject_IsTrue(line_option) != 0) ? 1 : 0;
}
+ if (col_option != NULL) {
+ col_offset = (PyObject_IsTrue(col_option) != 0) ? 1 : 0;
+ }
/*
* Convert ST into a tuple representation. Use Guido's function,
* since it's known to work already.
*/
res = node2tuple(((PyST_Object*)self)->st_node,
- PyTuple_New, PyTuple_SetItem, lineno);
+ PyTuple_New, PyTuple_SetItem, lineno, col_offset);
}
return (res);
}
@@ -327,28 +336,34 @@
parser_st2list(PyST_Object *self, PyObject *args, PyObject *kw)
{
PyObject *line_option = 0;
+ PyObject *col_option = 0;
PyObject *res = 0;
int ok;
- static char *keywords[] = {"ast", "line_info", NULL};
+ static char *keywords[] = {"ast", "line_info", "col_info", NULL};
if (self == NULL)
- ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|O:st2list", keywords,
- &PyST_Type, &self, &line_option);
+ ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|OO:st2list", keywords,
+ &PyST_Type, &self, &line_option,
+ &col_option);
else
- ok = PyArg_ParseTupleAndKeywords(args, kw, "|O:tolist", &keywords[1],
- &line_option);
+ ok = PyArg_ParseTupleAndKeywords(args, kw, "|OO:tolist", &keywords[1],
+ &line_option, &col_option);
if (ok) {
int lineno = 0;
+ int col_offset = 0;
if (line_option != 0) {
lineno = PyObject_IsTrue(line_option) ? 1 : 0;
}
+ if (col_option != NULL) {
+ col_offset = (PyObject_IsTrue(col_option) != 0) ? 1 : 0;
+ }
/*
* Convert ST into a tuple representation. Use Guido's function,
* since it's known to work already.
*/
res = node2tuple(self->st_node,
- PyList_New, PyList_SetItem, lineno);
+ PyList_New, PyList_SetItem, lineno, col_offset);
}
return (res);
}
Modified: stackless/trunk/Modules/posixmodule.c
==============================================================================
--- stackless/trunk/Modules/posixmodule.c (original)
+++ stackless/trunk/Modules/posixmodule.c Sun Oct 15 16:42:33 2006
@@ -792,7 +792,7 @@
/* XXX endianness */
__int64 out;
out = time_in + secs_between_epochs;
- out = out * 10000000 + nsec_in;
+ out = out * 10000000 + nsec_in / 100;
memcpy(out_ptr, &out, sizeof(out));
}
@@ -828,6 +828,106 @@
return 0;
}
+/* Emulate GetFileAttributesEx[AW] on Windows 95 */
+static int checked = 0;
+static BOOL (CALLBACK *gfaxa)(LPCSTR, GET_FILEEX_INFO_LEVELS, LPVOID);
+static BOOL (CALLBACK *gfaxw)(LPCWSTR, GET_FILEEX_INFO_LEVELS, LPVOID);
+static void
+check_gfax()
+{
+ HINSTANCE hKernel32;
+ if (checked)
+ return;
+ checked = 1;
+ hKernel32 = GetModuleHandle("KERNEL32");
+ *(FARPROC*)&gfaxa = GetProcAddress(hKernel32, "GetFileAttributesExA");
+ *(FARPROC*)&gfaxw = GetProcAddress(hKernel32, "GetFileAttributesExW");
+}
+
+static BOOL WINAPI
+Py_GetFileAttributesExA(LPCSTR pszFile,
+ GET_FILEEX_INFO_LEVELS level,
+ LPVOID pv)
+{
+ BOOL result;
+ HANDLE hFindFile;
+ WIN32_FIND_DATAA FileData;
+ LPWIN32_FILE_ATTRIBUTE_DATA pfad = pv;
+ /* First try to use the system's implementation, if that is
+ available and either succeeds to gives an error other than
+ that it isn't implemented. */
+ check_gfax();
+ if (gfaxa) {
+ result = gfaxa(pszFile, level, pv);
+ if (result || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
+ return result;
+ }
+ /* It's either not present, or not implemented.
+ Emulate using FindFirstFile. */
+ if (level != GetFileExInfoStandard) {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+ /* Use GetFileAttributes to validate that the file name
+ does not contain wildcards (which FindFirstFile would
+ accept). */
+ if (GetFileAttributesA(pszFile) == 0xFFFFFFFF)
+ return FALSE;
+ hFindFile = FindFirstFileA(pszFile, &FileData);
+ if (hFindFile == INVALID_HANDLE_VALUE)
+ return FALSE;
+ FindClose(hFindFile);
+ pfad->dwFileAttributes = FileData.dwFileAttributes;
+ pfad->ftCreationTime = FileData.ftCreationTime;
+ pfad->ftLastAccessTime = FileData.ftLastAccessTime;
+ pfad->ftLastWriteTime = FileData.ftLastWriteTime;
+ pfad->nFileSizeHigh = FileData.nFileSizeHigh;
+ pfad->nFileSizeLow = FileData.nFileSizeLow;
+ return TRUE;
+}
+
+static BOOL WINAPI
+Py_GetFileAttributesExW(LPCWSTR pszFile,
+ GET_FILEEX_INFO_LEVELS level,
+ LPVOID pv)
+{
+ BOOL result;
+ HANDLE hFindFile;
+ WIN32_FIND_DATAW FileData;
+ LPWIN32_FILE_ATTRIBUTE_DATA pfad = pv;
+ /* First try to use the system's implementation, if that is
+ available and either succeeds to gives an error other than
+ that it isn't implemented. */
+ check_gfax();
+ if (gfaxa) {
+ result = gfaxw(pszFile, level, pv);
+ if (result || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
+ return result;
+ }
+ /* It's either not present, or not implemented.
+ Emulate using FindFirstFile. */
+ if (level != GetFileExInfoStandard) {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+ /* Use GetFileAttributes to validate that the file name
+ does not contain wildcards (which FindFirstFile would
+ accept). */
+ if (GetFileAttributesW(pszFile) == 0xFFFFFFFF)
+ return FALSE;
+ hFindFile = FindFirstFileW(pszFile, &FileData);
+ if (hFindFile == INVALID_HANDLE_VALUE)
+ return FALSE;
+ FindClose(hFindFile);
+ pfad->dwFileAttributes = FileData.dwFileAttributes;
+ pfad->ftCreationTime = FileData.ftCreationTime;
+ pfad->ftLastAccessTime = FileData.ftLastAccessTime;
+ pfad->ftLastWriteTime = FileData.ftLastWriteTime;
+ pfad->nFileSizeHigh = FileData.nFileSizeHigh;
+ pfad->nFileSizeLow = FileData.nFileSizeLow;
+ return TRUE;
+}
+
static int
win32_stat(const char* path, struct win32_stat *result)
{
@@ -835,7 +935,7 @@
int code;
char *dot;
/* XXX not supported on Win95 and NT 3.x */
- if (!GetFileAttributesExA(path, GetFileExInfoStandard, &info)) {
+ if (!Py_GetFileAttributesExA(path, GetFileExInfoStandard, &info)) {
/* Protocol violation: we explicitly clear errno, instead of
setting it to a POSIX error. Callers should use GetLastError. */
errno = 0;
@@ -863,7 +963,7 @@
const wchar_t *dot;
WIN32_FILE_ATTRIBUTE_DATA info;
/* XXX not supported on Win95 and NT 3.x */
- if (!GetFileAttributesExW(path, GetFileExInfoStandard, &info)) {
+ if (!Py_GetFileAttributesExW(path, GetFileExInfoStandard, &info)) {
/* Protocol violation: we explicitly clear errno, instead of
setting it to a POSIX error. Callers should use GetLastError. */
errno = 0;
@@ -2458,7 +2558,8 @@
wpath = PyUnicode_AS_UNICODE(obwpath);
Py_BEGIN_ALLOW_THREADS
hFile = CreateFileW(wpath, FILE_WRITE_ATTRIBUTES, 0,
- NULL, OPEN_EXISTING, 0, NULL);
+ NULL, OPEN_EXISTING,
+ FILE_FLAG_BACKUP_SEMANTICS, NULL);
Py_END_ALLOW_THREADS
if (hFile == INVALID_HANDLE_VALUE)
return win32_error_unicode("utime", wpath);
@@ -2473,7 +2574,8 @@
return NULL;
Py_BEGIN_ALLOW_THREADS
hFile = CreateFileA(apath, FILE_WRITE_ATTRIBUTES, 0,
- NULL, OPEN_EXISTING, 0, NULL);
+ NULL, OPEN_EXISTING,
+ FILE_FLAG_BACKUP_SEMANTICS, NULL);
Py_END_ALLOW_THREADS
if (hFile == INVALID_HANDLE_VALUE) {
win32_error("utime", apath);
@@ -2501,11 +2603,11 @@
if (extract_time(PyTuple_GET_ITEM(arg, 0),
&atimesec, &ausec) == -1)
goto done;
- time_t_to_FILE_TIME(atimesec, ausec, &atime);
+ time_t_to_FILE_TIME(atimesec, 1000*ausec, &atime);
if (extract_time(PyTuple_GET_ITEM(arg, 1),
&mtimesec, &musec) == -1)
goto done;
- time_t_to_FILE_TIME(mtimesec, musec, &mtime);
+ time_t_to_FILE_TIME(mtimesec, 1000*musec, &mtime);
}
if (!SetFileTime(hFile, NULL, &atime, &mtime)) {
/* Avoid putting the file name into the error here,
@@ -7877,7 +7979,7 @@
pCryptGenRandom = (CRYPTGENRANDOM)GetProcAddress(
hAdvAPI32, "CryptGenRandom");
- if (pCryptAcquireContext == NULL)
+ if (pCryptGenRandom == NULL)
return PyErr_Format(PyExc_NotImplementedError,
"CryptGenRandom not found");
@@ -8617,3 +8719,4 @@
}
#endif
+
Modified: stackless/trunk/Modules/readline.c
==============================================================================
--- stackless/trunk/Modules/readline.c (original)
+++ stackless/trunk/Modules/readline.c Sun Oct 15 16:42:33 2006
@@ -768,10 +768,16 @@
while (!has_input)
{ struct timeval timeout = {0, 100000}; /* 0.1 seconds */
+
+ /* [Bug #1552726] Only limit the pause if an input hook has been
+ defined. */
+ struct timeval *timeoutp = NULL;
+ if (PyOS_InputHook)
+ timeoutp = &timeout;
FD_SET(fileno(rl_instream), &selectset);
/* select resets selectset if no input was available */
has_input = select(fileno(rl_instream) + 1, &selectset,
- NULL, NULL, &timeout);
+ NULL, NULL, timeoutp);
if(PyOS_InputHook) PyOS_InputHook();
}
Modified: stackless/trunk/Modules/resource.c
==============================================================================
--- stackless/trunk/Modules/resource.c (original)
+++ stackless/trunk/Modules/resource.c Sun Oct 15 16:42:33 2006
@@ -298,6 +298,10 @@
PyModule_AddIntConstant(m, "RLIMIT_MEMLOCK", RLIMIT_MEMLOCK);
#endif
+#ifdef RLIMIT_SBSIZE
+ PyModule_AddIntConstant(m, "RLIMIT_SBSIZE", RLIMIT_SBSIZE);
+#endif
+
#ifdef RUSAGE_SELF
PyModule_AddIntConstant(m, "RUSAGE_SELF", RUSAGE_SELF);
#endif
Modified: stackless/trunk/Objects/abstract.c
==============================================================================
--- stackless/trunk/Objects/abstract.c (original)
+++ stackless/trunk/Objects/abstract.c Sun Oct 15 16:42:33 2006
@@ -1653,20 +1653,18 @@
if (cmp > 0) {
switch (operation) {
case PY_ITERSEARCH_COUNT:
- ++n;
- if (n <= 0) {
- /* XXX(nnorwitz): int means ssize_t */
+ if (n == PY_SSIZE_T_MAX) {
PyErr_SetString(PyExc_OverflowError,
- "count exceeds C int size");
+ "count exceeds C integer size");
goto Fail;
}
+ ++n;
break;
case PY_ITERSEARCH_INDEX:
if (wrapped) {
- /* XXX(nnorwitz): int means ssize_t */
PyErr_SetString(PyExc_OverflowError,
- "index exceeds C int size");
+ "index exceeds C integer size");
goto Fail;
}
goto Done;
@@ -1681,9 +1679,9 @@
}
if (operation == PY_ITERSEARCH_INDEX) {
- ++n;
- if (n <= 0)
+ if (n == PY_SSIZE_T_MAX)
wrapped = 1;
+ ++n;
}
}
Modified: stackless/trunk/Objects/classobject.c
==============================================================================
--- stackless/trunk/Objects/classobject.c (original)
+++ stackless/trunk/Objects/classobject.c Sun Oct 15 16:42:33 2006
@@ -92,8 +92,22 @@
}
Py_INCREF(bases);
}
+
+ if (getattrstr == NULL) {
+ getattrstr = PyString_InternFromString("__getattr__");
+ if (getattrstr == NULL)
+ goto alloc_error;
+ setattrstr = PyString_InternFromString("__setattr__");
+ if (setattrstr == NULL)
+ goto alloc_error;
+ delattrstr = PyString_InternFromString("__delattr__");
+ if (delattrstr == NULL)
+ goto alloc_error;
+ }
+
op = PyObject_GC_New(PyClassObject, &PyClass_Type);
if (op == NULL) {
+alloc_error:
Py_DECREF(bases);
return NULL;
}
@@ -102,17 +116,7 @@
op->cl_dict = dict;
Py_XINCREF(name);
op->cl_name = name;
- if (getattrstr == NULL) {
- getattrstr = PyString_InternFromString("__getattr__");
- if (getattrstr == NULL)
- return NULL;
- setattrstr = PyString_InternFromString("__setattr__");
- if (setattrstr == NULL)
- return NULL;
- delattrstr = PyString_InternFromString("__delattr__");
- if (delattrstr == NULL)
- return NULL;
- }
+
op->cl_getattr = class_lookup(op, getattrstr, &dummy);
op->cl_setattr = class_lookup(op, setattrstr, &dummy);
op->cl_delattr = class_lookup(op, delattrstr, &dummy);
@@ -2257,6 +2261,8 @@
PyObject *self;
PyObject *classObj = NULL;
+ if (!_PyArg_NoKeywords("instancemethod", kw))
+ return NULL;
if (!PyArg_UnpackTuple(args, "instancemethod", 2, 3,
&func, &self, &classObj))
return NULL;
Modified: stackless/trunk/Objects/dictobject.c
==============================================================================
--- stackless/trunk/Objects/dictobject.c (original)
+++ stackless/trunk/Objects/dictobject.c Sun Oct 15 16:42:33 2006
@@ -1585,7 +1585,10 @@
/* temporarily bump aval's refcount to ensure it stays
alive until we're done with it */
Py_INCREF(aval);
+ /* ditto for key */
+ Py_INCREF(key);
bval = PyDict_GetItem((PyObject *)b, key);
+ Py_DECREF(key);
if (bval == NULL) {
Py_DECREF(aval);
return 0;
Modified: stackless/trunk/Objects/exceptions.c
==============================================================================
--- stackless/trunk/Objects/exceptions.c (original)
+++ stackless/trunk/Objects/exceptions.c Sun Oct 15 16:42:33 2006
@@ -81,6 +81,7 @@
static void
BaseException_dealloc(PyBaseExceptionObject *self)
{
+ _PyObject_GC_UNTRACK(self);
BaseException_clear(self);
self->ob_type->tp_free((PyObject *)self);
}
@@ -174,27 +175,10 @@
Py_RETURN_NONE;
}
-#ifdef Py_USING_UNICODE
-/* while this method generates fairly uninspired output, it a least
- * guarantees that we can display exceptions that have unicode attributes
- */
-static PyObject *
-BaseException_unicode(PyBaseExceptionObject *self)
-{
- if (PyTuple_GET_SIZE(self->args) == 0)
- return PyUnicode_FromUnicode(NULL, 0);
- if (PyTuple_GET_SIZE(self->args) == 1)
- return PyObject_Unicode(PyTuple_GET_ITEM(self->args, 0));
- return PyObject_Unicode(self->args);
-}
-#endif /* Py_USING_UNICODE */
static PyMethodDef BaseException_methods[] = {
{"__reduce__", (PyCFunction)BaseException_reduce, METH_NOARGS },
{"__setstate__", (PyCFunction)BaseException_setstate, METH_O },
-#ifdef Py_USING_UNICODE
- {"__unicode__", (PyCFunction)BaseException_unicode, METH_NOARGS },
-#endif
{NULL, NULL, 0, NULL},
};
@@ -206,12 +190,19 @@
return PySequence_GetItem(self->args, index);
}
+static PyObject *
+BaseException_getslice(PyBaseExceptionObject *self,
+ Py_ssize_t start, Py_ssize_t stop)
+{
+ return PySequence_GetSlice(self->args, start, stop);
+}
+
static PySequenceMethods BaseException_as_sequence = {
0, /* sq_length; */
0, /* sq_concat; */
0, /* sq_repeat; */
(ssizeargfunc)BaseException_getitem, /* sq_item; */
- 0, /* sq_slice; */
+ (ssizessizeargfunc)BaseException_getslice, /* sq_slice; */
0, /* sq_ass_item; */
0, /* sq_ass_slice; */
0, /* sq_contains; */
@@ -455,6 +446,7 @@
static void
SystemExit_dealloc(PySystemExitObject *self)
{
+ _PyObject_GC_UNTRACK(self);
SystemExit_clear(self);
self->ob_type->tp_free((PyObject *)self);
}
@@ -526,7 +518,7 @@
if (BaseException_init((PyBaseExceptionObject *)self, args, kwds) == -1)
return -1;
- if (PyTuple_GET_SIZE(args) <= 1) {
+ if (PyTuple_GET_SIZE(args) <= 1 || PyTuple_GET_SIZE(args) > 3) {
return 0;
}
@@ -570,6 +562,7 @@
static void
EnvironmentError_dealloc(PyEnvironmentErrorObject *self)
{
+ _PyObject_GC_UNTRACK(self);
EnvironmentError_clear(self);
self->ob_type->tp_free((PyObject *)self);
}
@@ -768,6 +761,7 @@
static void
WindowsError_dealloc(PyWindowsErrorObject *self)
{
+ _PyObject_GC_UNTRACK(self);
WindowsError_clear(self);
self->ob_type->tp_free((PyObject *)self);
}
@@ -1043,6 +1037,7 @@
static void
SyntaxError_dealloc(PySyntaxErrorObject *self)
{
+ _PyObject_GC_UNTRACK(self);
SyntaxError_clear(self);
self->ob_type->tp_free((PyObject *)self);
}
@@ -1559,6 +1554,7 @@
static void
UnicodeError_dealloc(PyUnicodeErrorObject *self)
{
+ _PyObject_GC_UNTRACK(self);
UnicodeError_clear(self);
self->ob_type->tp_free((PyObject *)self);
}
@@ -1645,7 +1641,7 @@
static PyTypeObject _PyExc_UnicodeEncodeError = {
PyObject_HEAD_INIT(NULL)
0,
- "UnicodeEncodeError",
+ EXC_MODULE_NAME "UnicodeEncodeError",
sizeof(PyUnicodeErrorObject), 0,
(destructor)UnicodeError_dealloc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
(reprfunc)UnicodeEncodeError_str, 0, 0, 0,
@@ -1820,7 +1816,7 @@
(destructor)UnicodeError_dealloc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
(reprfunc)UnicodeTranslateError_str, 0, 0, 0,
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
- PyDoc_STR("Unicode decoding error."), (traverseproc)UnicodeError_traverse,
+ PyDoc_STR("Unicode translation error."), (traverseproc)UnicodeError_traverse,
(inquiry)UnicodeError_clear, 0, 0, 0, 0, 0, UnicodeError_members,
0, &_PyExc_UnicodeError, 0, 0, 0, offsetof(PyUnicodeErrorObject, dict),
(initproc)UnicodeTranslateError_init, 0, BaseException_new,
Modified: stackless/trunk/Objects/fileobject.c
==============================================================================
--- stackless/trunk/Objects/fileobject.c (original)
+++ stackless/trunk/Objects/fileobject.c Sun Oct 15 16:42:33 2006
@@ -922,7 +922,7 @@
ndone += nnow;
ntodo -= nnow;
}
- return PyInt_FromLong((long)ndone);
+ return PyInt_FromSsize_t(ndone);
}
/**************************************************************************
@@ -1001,6 +1001,7 @@
size_t nfree; /* # of free buffer slots; pvend-pvfree */
size_t total_v_size; /* total # of slots in buffer */
size_t increment; /* amount to increment the buffer */
+ size_t prev_v_size;
/* Optimize for normal case: avoid _PyString_Resize if at all
* possible via first reading into stack buffer "buf".
@@ -1115,8 +1116,11 @@
/* expand buffer and try again */
assert(*(pvend-1) == '\0');
increment = total_v_size >> 2; /* mild exponential growth */
+ prev_v_size = total_v_size;
total_v_size += increment;
- if (total_v_size > PY_SSIZE_T_MAX) {
+ /* check for overflow */
+ if (total_v_size <= prev_v_size ||
+ total_v_size > PY_SSIZE_T_MAX) {
PyErr_SetString(PyExc_OverflowError,
"line is longer than a Python string can hold");
Py_DECREF(v);
@@ -1125,7 +1129,7 @@
if (_PyString_Resize(&v, (int)total_v_size) < 0)
return NULL;
/* overwrite the trailing null byte */
- pvfree = BUF(v) + (total_v_size - increment - 1);
+ pvfree = BUF(v) + (prev_v_size - 1);
}
if (BUF(v) + total_v_size != p)
_PyString_Resize(&v, p - BUF(v));
@@ -2016,7 +2020,7 @@
if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|si:file",
kwlist, &o_name, &mode,
&bufsize))
- return -1;
+ goto Error;
if (fill_file_fields(foself, NULL, o_name, mode,
fclose) == NULL)
Modified: stackless/trunk/Objects/intobject.c
==============================================================================
--- stackless/trunk/Objects/intobject.c (original)
+++ stackless/trunk/Objects/intobject.c Sun Oct 15 16:42:33 2006
@@ -546,6 +546,17 @@
}
}
+/* Integer overflow checking for unary negation: on a 2's-complement
+ * box, -x overflows iff x is the most negative long. In this case we
+ * get -x == x. However, -x is undefined (by C) if x /is/ the most
+ * negative long (it's a signed overflow case), and some compilers care.
+ * So we cast x to unsigned long first. However, then other compilers
+ * warn about applying unary minus to an unsigned operand. Hence the
+ * weird "0-".
+ */
+#define UNARY_NEG_WOULD_OVERFLOW(x) \
+ ((x) < 0 && (unsigned long)(x) == 0-(unsigned long)(x))
+
/* Return type of i_divmod */
enum divmod_result {
DIVMOD_OK, /* Correct result */
@@ -565,7 +576,7 @@
return DIVMOD_ERROR;
}
/* (-sys.maxint-1)/-1 is the only overflow case. */
- if (y == -1 && x < 0 && x == -x)
+ if (y == -1 && UNARY_NEG_WOULD_OVERFLOW(x))
return DIVMOD_OVERFLOW;
xdivy = x / y;
xmody = x - xdivy * y;
@@ -754,10 +765,10 @@
static PyObject *
int_neg(PyIntObject *v)
{
- register long a, x;
+ register long a;
a = v->ob_ival;
- x = -a;
- if (a < 0 && x < 0) {
+ /* check for overflow */
+ if (UNARY_NEG_WOULD_OVERFLOW(a)) {
PyObject *o = PyLong_FromLong(a);
if (o != NULL) {
PyObject *result = PyNumber_Negative(o);
@@ -766,7 +777,7 @@
}
return NULL;
}
- return PyInt_FromLong(x);
+ return PyInt_FromLong(-a);
}
static PyObject *
@@ -976,8 +987,25 @@
return PyInt_FromLong(0L);
if (base == -909)
return PyNumber_Int(x);
- if (PyString_Check(x))
- return PyInt_FromString(PyString_AS_STRING(x), NULL, base);
+ if (PyString_Check(x)) {
+ /* Since PyInt_FromString doesn't have a length parameter,
+ * check here for possible NULs in the string. */
+ char *string = PyString_AS_STRING(x);
+ if (strlen(string) != PyString_Size(x)) {
+ /* create a repr() of the input string,
+ * just like PyInt_FromString does */
+ PyObject *srepr;
+ srepr = PyObject_Repr(x);
+ if (srepr == NULL)
+ return NULL;
+ PyErr_Format(PyExc_ValueError,
+ "invalid literal for int() with base %d: %s",
+ base, PyString_AS_STRING(srepr));
+ Py_DECREF(srepr);
+ return NULL;
+ }
+ return PyInt_FromString(string, NULL, base);
+ }
#ifdef Py_USING_UNICODE
if (PyUnicode_Check(x))
return PyInt_FromUnicode(PyUnicode_AS_UNICODE(x),
Modified: stackless/trunk/Objects/listobject.c
==============================================================================
--- stackless/trunk/Objects/listobject.c (original)
+++ stackless/trunk/Objects/listobject.c Sun Oct 15 16:42:33 2006
@@ -863,17 +863,12 @@
listpop(PyListObject *self, PyObject *args)
{
Py_ssize_t i = -1;
- PyObject *v, *arg = NULL;
+ PyObject *v;
int status;
- if (!PyArg_UnpackTuple(args, "pop", 0, 1, &arg))
+ if (!PyArg_ParseTuple(args, "|n:pop", &i))
return NULL;
- if (arg != NULL) {
- if (PyInt_Check(arg))
- i = PyInt_AS_LONG((PyIntObject*) arg);
- else if (!PyArg_ParseTuple(args, "|n:pop", &i))
- return NULL;
- }
+
if (self->ob_size == 0) {
/* Special-case most common failure cause */
PyErr_SetString(PyExc_IndexError, "pop from empty list");
@@ -1398,7 +1393,7 @@
PyObject *compare;
PyObject **dest;
int result = -1; /* guilty until proved innocent */
- Py_ssize_t min_gallop = ms->min_gallop;
+ Py_ssize_t min_gallop;
assert(ms && pa && pb && na > 0 && nb > 0 && pa + na == pb);
if (MERGE_GETMEM(ms, na) < 0)
@@ -1414,6 +1409,7 @@
if (na == 1)
goto CopyB;
+ min_gallop = ms->min_gallop;
compare = ms->compare;
for (;;) {
Py_ssize_t acount = 0; /* # of times A won in a row */
@@ -1531,7 +1527,7 @@
int result = -1; /* guilty until proved innocent */
PyObject **basea;
PyObject **baseb;
- Py_ssize_t min_gallop = ms->min_gallop;
+ Py_ssize_t min_gallop;
assert(ms && pa && pb && na > 0 && nb > 0 && pa + na == pb);
if (MERGE_GETMEM(ms, nb) < 0)
@@ -1550,6 +1546,7 @@
if (nb == 1)
goto CopyA;
+ min_gallop = ms->min_gallop;
compare = ms->compare;
for (;;) {
Py_ssize_t acount = 0; /* # of times A won in a row */
Modified: stackless/trunk/Objects/longobject.c
==============================================================================
--- stackless/trunk/Objects/longobject.c (original)
+++ stackless/trunk/Objects/longobject.c Sun Oct 15 16:42:33 2006
@@ -193,6 +193,18 @@
return (PyObject *)v;
}
+/* Checking for overflow in PyLong_AsLong is a PITA since C doesn't define
+ * anything about what happens when a signed integer operation overflows,
+ * and some compilers think they're doing you a favor by being "clever"
+ * then. The bit pattern for the largest postive signed long is
+ * (unsigned long)LONG_MAX, and for the smallest negative signed long
+ * it is abs(LONG_MIN), which we could write -(unsigned long)LONG_MIN.
+ * However, some other compilers warn about applying unary minus to an
+ * unsigned operand. Hence the weird "0-".
+ */
+#define PY_ABS_LONG_MIN (0-(unsigned long)LONG_MIN)
+#define PY_ABS_SSIZE_T_MIN (0-(size_t)PY_SSIZE_T_MIN)
+
/* Get a C long int from a long int object.
Returns -1 and sets an error condition if overflow occurs. */
@@ -225,14 +237,16 @@
if ((x >> SHIFT) != prev)
goto overflow;
}
- /* Haven't lost any bits, but if the sign bit is set we're in
- * trouble *unless* this is the min negative number. So,
- * trouble iff sign bit set && (positive || some bit set other
- * than the sign bit).
- */
- if ((long)x < 0 && (sign > 0 || (x << 1) != 0))
- goto overflow;
- return (long)x * sign;
+ /* Haven't lost any bits, but casting to long requires extra care
+ * (see comment above).
+ */
+ if (x <= (unsigned long)LONG_MAX) {
+ return (long)x * sign;
+ }
+ else if (sign < 0 && x == PY_ABS_LONG_MIN) {
+ return LONG_MIN;
+ }
+ /* else overflow */
overflow:
PyErr_SetString(PyExc_OverflowError,
@@ -268,14 +282,16 @@
if ((x >> SHIFT) != prev)
goto overflow;
}
- /* Haven't lost any bits, but if the sign bit is set we're in
- * trouble *unless* this is the min negative number. So,
- * trouble iff sign bit set && (positive || some bit set other
- * than the sign bit).
+ /* Haven't lost any bits, but casting to a signed type requires
+ * extra care (see comment above).
*/
- if ((Py_ssize_t)x < 0 && (sign > 0 || (x << 1) != 0))
- goto overflow;
- return (Py_ssize_t)x * sign;
+ if (x <= (size_t)PY_SSIZE_T_MAX) {
+ return (Py_ssize_t)x * sign;
+ }
+ else if (sign < 0 && x == PY_ABS_SSIZE_T_MIN) {
+ return PY_SSIZE_T_MIN;
+ }
+ /* else overflow */
overflow:
PyErr_SetString(PyExc_OverflowError,
@@ -1167,7 +1183,7 @@
{
register PyLongObject *a = (PyLongObject *)aa;
PyStringObject *str;
- Py_ssize_t i;
+ Py_ssize_t i, j, sz;
Py_ssize_t size_a;
char *p;
int bits;
@@ -1187,11 +1203,18 @@
++bits;
i >>= 1;
}
- i = 5 + (addL ? 1 : 0) + (size_a*SHIFT + bits-1) / bits;
- str = (PyStringObject *) PyString_FromStringAndSize((char *)0, i);
+ i = 5 + (addL ? 1 : 0);
+ j = size_a*SHIFT + bits-1;
+ sz = i + j / bits;
+ if (j / SHIFT < size_a || sz < i) {
+ PyErr_SetString(PyExc_OverflowError,
+ "long is too large to format");
+ return NULL;
+ }
+ str = (PyStringObject *) PyString_FromStringAndSize((char *)0, sz);
if (str == NULL)
return NULL;
- p = PyString_AS_STRING(str) + i;
+ p = PyString_AS_STRING(str) + sz;
*p = '\0';
if (addL)
*--p = 'L';
@@ -1305,7 +1328,7 @@
} while ((*q++ = *p++) != '\0');
q--;
_PyString_Resize((PyObject **)&str,
- (int) (q - PyString_AS_STRING(str)));
+ (Py_ssize_t) (q - PyString_AS_STRING(str)));
}
return (PyObject *)str;
}
@@ -1363,14 +1386,14 @@
while (_PyLong_DigitValue[Py_CHARMASK(*p)] < base)
++p;
*str = p;
- n = (p - start) * bits_per_char;
- if (n / bits_per_char != p - start) {
+ /* n <- # of Python digits needed, = ceiling(n/SHIFT). */
+ n = (p - start) * bits_per_char + SHIFT - 1;
+ if (n / bits_per_char < p - start) {
PyErr_SetString(PyExc_ValueError,
"long string too large to convert");
return NULL;
}
- /* n <- # of Python digits needed, = ceiling(n/SHIFT). */
- n = (n + SHIFT - 1) / SHIFT;
+ n = n / SHIFT;
z = _PyLong_New(n);
if (z == NULL)
return NULL;
Modified: stackless/trunk/Objects/setobject.c
==============================================================================
--- stackless/trunk/Objects/setobject.c (original)
+++ stackless/trunk/Objects/setobject.c Sun Oct 15 16:42:33 2006
@@ -319,8 +319,10 @@
assert(so->fill <= so->mask); /* at least one empty slot */
n_used = so->used;
Py_INCREF(entry->key);
- if (set_insert_key(so, entry->key, entry->hash) == -1)
+ if (set_insert_key(so, entry->key, entry->hash) == -1) {
+ Py_DECREF(entry->key);
return -1;
+ }
if (!(so->used > n_used && so->fill*3 >= (so->mask+1)*2))
return 0;
return set_table_resize(so, so->used>50000 ? so->used*2 : so->used*4);
@@ -1142,7 +1144,12 @@
}
while (set_next((PySetObject *)other, &pos, &entry)) {
- if (set_contains_entry(so, entry)) {
+ int rv = set_contains_entry(so, entry);
+ if (rv == -1) {
+ Py_DECREF(result);
+ return NULL;
+ }
+ if (rv) {
if (set_add_entry(result, entry) == -1) {
Py_DECREF(result);
return NULL;
@@ -1159,7 +1166,14 @@
}
while ((key = PyIter_Next(it)) != NULL) {
- if (set_contains_key(so, key)) {
+ int rv = set_contains_key(so, key);
+ if (rv == -1) {
+ Py_DECREF(it);
+ Py_DECREF(result);
+ Py_DECREF(key);
+ return NULL;
+ }
+ if (rv) {
if (set_add_key(result, key) == -1) {
Py_DECREF(it);
Py_DECREF(result);
@@ -1236,7 +1250,8 @@
Py_ssize_t pos = 0;
while (set_next((PySetObject *)other, &pos, &entry))
- set_discard_entry(so, entry);
+ if (set_discard_entry(so, entry) == -1)
+ return -1;
} else {
PyObject *key, *it;
it = PyObject_GetIter(other);
@@ -1299,17 +1314,26 @@
entrycopy.hash = entry->hash;
entrycopy.key = entry->key;
if (!PyDict_Contains(other, entry->key)) {
- if (set_add_entry((PySetObject *)result, &entrycopy) == -1)
+ if (set_add_entry((PySetObject *)result, &entrycopy) == -1) {
+ Py_DECREF(result);
return NULL;
+ }
}
}
return result;
}
while (set_next(so, &pos, &entry)) {
- if (!set_contains_entry((PySetObject *)other, entry)) {
- if (set_add_entry((PySetObject *)result, entry) == -1)
+ int rv = set_contains_entry((PySetObject *)other, entry);
+ if (rv == -1) {
+ Py_DECREF(result);
+ return NULL;
+ }
+ if (!rv) {
+ if (set_add_entry((PySetObject *)result, entry) == -1) {
+ Py_DECREF(result);
return NULL;
+ }
}
}
return result;
@@ -1468,7 +1492,10 @@
Py_RETURN_FALSE;
while (set_next(so, &pos, &entry)) {
- if (!set_contains_entry((PySetObject *)other, entry))
+ int rv = set_contains_entry((PySetObject *)other, entry);
+ if (rv == -1)
+ return NULL;
+ if (!rv)
Py_RETURN_FALSE;
}
Py_RETURN_TRUE;
Modified: stackless/trunk/Objects/stringlib/partition.h
==============================================================================
--- stackless/trunk/Objects/stringlib/partition.h (original)
+++ stackless/trunk/Objects/stringlib/partition.h Sun Oct 15 16:42:33 2006
@@ -78,12 +78,12 @@
}
if (pos < 0) {
- Py_INCREF(str_obj);
- PyTuple_SET_ITEM(out, 0, (PyObject*) str_obj);
Py_INCREF(STRINGLIB_EMPTY);
- PyTuple_SET_ITEM(out, 1, (PyObject*) STRINGLIB_EMPTY);
+ PyTuple_SET_ITEM(out, 0, (PyObject*) STRINGLIB_EMPTY);
Py_INCREF(STRINGLIB_EMPTY);
- PyTuple_SET_ITEM(out, 2, (PyObject*) STRINGLIB_EMPTY);
+ PyTuple_SET_ITEM(out, 1, (PyObject*) STRINGLIB_EMPTY);
+ Py_INCREF(str_obj);
+ PyTuple_SET_ITEM(out, 2, (PyObject*) str_obj);
return out;
}
Modified: stackless/trunk/Objects/stringobject.c
==============================================================================
--- stackless/trunk/Objects/stringobject.c (original)
+++ stackless/trunk/Objects/stringobject.c Sun Oct 15 16:42:33 2006
@@ -804,10 +804,22 @@
return ret;
}
if (flags & Py_PRINT_RAW) {
+ char *data = op->ob_sval;
+ Py_ssize_t size = op->ob_size;
+ while (size > INT_MAX) {
+ /* Very long strings cannot be written atomically.
+ * But don't write exactly INT_MAX bytes at a time
+ * to avoid memory aligment issues.
+ */
+ const int chunk_size = INT_MAX & ~0x3FFF;
+ fwrite(data, 1, chunk_size, fp);
+ data += chunk_size;
+ size -= chunk_size;
+ }
#ifdef __VMS
- if (op->ob_size) fwrite(op->ob_sval, (int) op->ob_size, 1, fp);
+ if (size) fwrite(data, (int)size, 1, fp);
#else
- fwrite(op->ob_sval, 1, (int) op->ob_size, fp);
+ fwrite(data, 1, (int)size, fp);
#endif
return 0;
}
@@ -844,7 +856,7 @@
register PyStringObject* op = (PyStringObject*) obj;
size_t newsize = 2 + 4 * op->ob_size;
PyObject *v;
- if (newsize > PY_SSIZE_T_MAX) {
+ if (newsize > PY_SSIZE_T_MAX || newsize / 4 != op->ob_size) {
PyErr_SetString(PyExc_OverflowError,
"string is too large to make repr");
}
@@ -1543,11 +1555,11 @@
}
PyDoc_STRVAR(rpartition__doc__,
-"S.rpartition(sep) -> (head, sep, tail)\n\
+"S.rpartition(sep) -> (tail, sep, head)\n\
\n\
Searches for the separator sep in S, starting at the end of S, and returns\n\
the part before it, the separator itself, and the part after it. If the\n\
-separator is not found, returns S and two empty strings.");
+separator is not found, returns two empty strings and S.");
static PyObject *
string_rpartition(PyStringObject *self, PyObject *sep_obj)
@@ -4237,7 +4249,7 @@
return NULL;
}
llen = PyString_Size(result);
- if (llen > PY_SSIZE_T_MAX) {
+ if (llen > INT_MAX) {
PyErr_SetString(PyExc_ValueError, "string too large in _PyString_FormatLong");
return NULL;
}
@@ -4726,9 +4738,10 @@
default:
PyErr_Format(PyExc_ValueError,
"unsupported format character '%c' (0x%x) "
- "at index %i",
+ "at index %zd",
c, c,
- (int)(fmt - 1 - PyString_AsString(format)));
+ (Py_ssize_t)(fmt - 1 -
+ PyString_AsString(format)));
goto error;
}
if (sign) {
Modified: stackless/trunk/Objects/typeobject.c
==============================================================================
--- stackless/trunk/Objects/typeobject.c (original)
+++ stackless/trunk/Objects/typeobject.c Sun Oct 15 16:42:33 2006
@@ -99,7 +99,7 @@
s = strrchr(type->tp_name, '.');
if (s != NULL)
return PyString_FromStringAndSize(
- type->tp_name, (int)(s - type->tp_name));
+ type->tp_name, (Py_ssize_t)(s - type->tp_name));
return PyString_FromString("__builtin__");
}
}
@@ -3802,7 +3802,7 @@
while (type && type->tp_flags & Py_TPFLAGS_HEAPTYPE)
type = type->tp_base;
/* If type is NULL now, this is a really weird type.
- In the same of backwards compatibility (?), just shut up. */
+ In the spirit of backwards compatibility (?), just shut up. */
if (type && type->tp_setattro != func) {
PyErr_Format(PyExc_TypeError,
"can't apply this %s to %s object",
@@ -4019,7 +4019,7 @@
while (staticbase && (staticbase->tp_flags & Py_TPFLAGS_HEAPTYPE))
staticbase = staticbase->tp_base;
/* If staticbase is NULL now, it is a really weird type.
- In the same of backwards compatibility (?), just shut up. */
+ In the spirit of backwards compatibility (?), just shut up. */
if (staticbase && staticbase->tp_new != type->tp_new) {
PyErr_Format(PyExc_TypeError,
"%s.__new__(%s) is not safe, use %s.__new__()",
@@ -4175,19 +4175,10 @@
return -1;
len = PyInt_AsSsize_t(res);
Py_DECREF(res);
- if (len == -1 && PyErr_Occurred())
- return -1;
-#if SIZEOF_SIZE_T < SIZEOF_INT
- /* Overflow check -- range of PyInt is more than C ssize_t */
- if (len != (int)len) {
- PyErr_SetString(PyExc_OverflowError,
- "__len__() should return 0 <= outcome < 2**31");
- return -1;
- }
-#endif
if (len < 0) {
- PyErr_SetString(PyExc_ValueError,
- "__len__() should return >= 0");
+ if (!PyErr_Occurred())
+ PyErr_SetString(PyExc_ValueError,
+ "__len__() should return >= 0");
return -1;
}
return len;
@@ -5924,6 +5915,8 @@
PyObject *obj = NULL;
PyTypeObject *obj_type = NULL;
+ if (!_PyArg_NoKeywords("super", kwds))
+ return -1;
if (!PyArg_ParseTuple(args, "O!|O:super", &PyType_Type, &type, &obj))
return -1;
if (obj == Py_None)
Modified: stackless/trunk/Objects/unicodeobject.c
==============================================================================
--- stackless/trunk/Objects/unicodeobject.c (original)
+++ stackless/trunk/Objects/unicodeobject.c Sun Oct 15 16:42:33 2006
@@ -2040,7 +2040,32 @@
static const char *hexdigit = "0123456789abcdef";
- repr = PyString_FromStringAndSize(NULL, 2 + 6*size + 1);
+ /* XXX(nnorwitz): rather than over-allocating, it would be
+ better to choose a different scheme. Perhaps scan the
+ first N-chars of the string and allocate based on that size.
+ */
+ /* Initial allocation is based on the longest-possible unichr
+ escape.
+
+ In wide (UTF-32) builds '\U00xxxxxx' is 10 chars per source
+ unichr, so in this case it's the longest unichr escape. In
+ narrow (UTF-16) builds this is five chars per source unichr
+ since there are two unichrs in the surrogate pair, so in narrow
+ (UTF-16) builds it's not the longest unichr escape.
+
+ In wide or narrow builds '\uxxxx' is 6 chars per source unichr,
+ so in the narrow (UTF-16) build case it's the longest unichr
+ escape.
+ */
+
+ repr = PyString_FromStringAndSize(NULL,
+ 2
+#ifdef Py_UNICODE_WIDE
+ + 10*size
+#else
+ + 6*size
+#endif
+ + 1);
if (repr == NULL)
return NULL;
@@ -2065,15 +2090,6 @@
#ifdef Py_UNICODE_WIDE
/* Map 21-bit characters to '\U00xxxxxx' */
else if (ch >= 0x10000) {
- Py_ssize_t offset = p - PyString_AS_STRING(repr);
-
- /* Resize the string if necessary */
- if (offset + 12 > PyString_GET_SIZE(repr)) {
- if (_PyString_Resize(&repr, PyString_GET_SIZE(repr) + 100))
- return NULL;
- p = PyString_AS_STRING(repr) + offset;
- }
-
*p++ = '\\';
*p++ = 'U';
*p++ = hexdigit[(ch >> 28) & 0x0000000F];
@@ -2086,8 +2102,8 @@
*p++ = hexdigit[ch & 0x0000000F];
continue;
}
-#endif
- /* Map UTF-16 surrogate pairs to Unicode \UXXXXXXXX escapes */
+#else
+ /* Map UTF-16 surrogate pairs to '\U00xxxxxx' */
else if (ch >= 0xD800 && ch < 0xDC00) {
Py_UNICODE ch2;
Py_UCS4 ucs;
@@ -2112,6 +2128,7 @@
s--;
size++;
}
+#endif
/* Map 16-bit characters to '\uxxxx' */
if (ch >= 256) {
@@ -2367,6 +2384,7 @@
Py_UNICODE unimax = PyUnicode_GetMax();
#endif
+ /* XXX overflow detection missing */
v = _PyUnicode_New((size+Py_UNICODE_SIZE-1)/ Py_UNICODE_SIZE);
if (v == NULL)
goto onError;
@@ -3153,6 +3171,7 @@
Py_ssize_t needed = (targetsize - extrachars) + \
(targetsize << 2);
extrachars += needed;
+ /* XXX overflow detection missing */
if (_PyUnicode_Resize(&v,
PyUnicode_GET_SIZE(v) + needed) < 0) {
Py_DECREF(x);
@@ -6695,11 +6714,11 @@
}
PyDoc_STRVAR(rpartition__doc__,
-"S.rpartition(sep) -> (head, sep, tail)\n\
+"S.rpartition(sep) -> (tail, sep, head)\n\
\n\
Searches for the separator sep in S, starting at the end of S, and returns\n\
the part before it, the separator itself, and the part after it. If the\n\
-separator is not found, returns S and two empty strings.");
+separator is not found, returns two empty strings and S.");
static PyObject*
unicode_rpartition(PyUnicodeObject *self, PyObject *separator)
@@ -7745,10 +7764,11 @@
default:
PyErr_Format(PyExc_ValueError,
"unsupported format character '%c' (0x%x) "
- "at index %i",
+ "at index %zd",
(31<=c && c<=126) ? (char)c : '?',
(int)c,
- (int)(fmt -1 - PyUnicode_AS_UNICODE(uformat)));
+ (Py_ssize_t)(fmt - 1 -
+ PyUnicode_AS_UNICODE(uformat)));
goto onError;
}
if (sign) {
Modified: stackless/trunk/PC/VC6/pcbuild.dsw
==============================================================================
Binary files. No diff available.
Modified: stackless/trunk/PC/VC6/pythoncore.dsp
==============================================================================
Binary files. No diff available.
Modified: stackless/trunk/PC/_msi.c
==============================================================================
--- stackless/trunk/PC/_msi.c (original)
+++ stackless/trunk/PC/_msi.c Sun Oct 15 16:42:33 2006
@@ -495,7 +495,7 @@
status = MsiSummaryInfoGetProperty(si->h, field, &type, &ival,
&fval, sval, &ssize);
- if (status = ERROR_MORE_DATA) {
+ if (status == ERROR_MORE_DATA) {
sval = malloc(ssize);
status = MsiSummaryInfoGetProperty(si->h, field, &type, &ival,
&fval, sval, &ssize);
Modified: stackless/trunk/PC/example_nt/example.vcproj
==============================================================================
--- stackless/trunk/PC/example_nt/example.vcproj (original)
+++ stackless/trunk/PC/example_nt/example.vcproj Sun Oct 15 16:42:33 2006
@@ -39,7 +39,7 @@
<Tool
Name="VCLinkerTool"
AdditionalOptions="/export:initexample"
- AdditionalDependencies="odbc32.lib odbccp32.lib python25.lib"
+ AdditionalDependencies="odbc32.lib odbccp32.lib python26.lib"
OutputFile=".\Release/example.pyd"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
@@ -105,7 +105,7 @@
<Tool
Name="VCLinkerTool"
AdditionalOptions="/export:initexample"
- AdditionalDependencies="odbc32.lib odbccp32.lib python25_d.lib"
+ AdditionalDependencies="odbc32.lib odbccp32.lib python26_d.lib"
OutputFile=".\Debug/example_d.pyd"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
Modified: stackless/trunk/PC/pyconfig.h
==============================================================================
--- stackless/trunk/PC/pyconfig.h (original)
+++ stackless/trunk/PC/pyconfig.h Sun Oct 15 16:42:33 2006
@@ -280,9 +280,9 @@
their Makefile (other compilers are generally
taken care of by distutils.) */
# ifdef _DEBUG
-# pragma comment(lib,"python25_d.lib")
+# pragma comment(lib,"python26_d.lib")
# else
-# pragma comment(lib,"python25.lib")
+# pragma comment(lib,"python26.lib")
# endif /* _DEBUG */
# endif /* _MSC_VER */
# endif /* Py_BUILD_CORE */
Modified: stackless/trunk/PCbuild/_ctypes.vcproj
==============================================================================
--- stackless/trunk/PCbuild/_ctypes.vcproj (original)
+++ stackless/trunk/PCbuild/_ctypes.vcproj Sun Oct 15 16:42:33 2006
@@ -4,6 +4,7 @@
Version="7.10"
Name="_ctypes"
ProjectGUID="{F22F40F4-D318-40DC-96B3-88DC81CE0894}"
+ RootNamespace="_ctypes"
Keyword="Win32Proj">
<Platforms>
<Platform
@@ -128,7 +129,7 @@
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions=" /USECL:MS_OPTERON"
+ AdditionalOptions=" /USECL:MS_OPTERON /GS-"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\Include,..\PC,..\Modules\_ctypes\libffi_msvc;..\Stackless"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
@@ -268,6 +269,41 @@
</File>
<File
RelativePath="..\Modules\_ctypes\libffi_msvc\win32.c">
+ <FileConfiguration
+ Name="ReleaseAMD64|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\Modules\_ctypes\libffi_msvc\win64.asm">
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCCustomBuildTool"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCCustomBuildTool"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="ReleaseAMD64|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="amd64_ml64 /nologo /c /Fo "$(IntDir)\win64.obj" "$(InputPath)"
+"
+ Outputs=""$(IntDir)\win64.obj""/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="ReleaseItanium|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCCustomBuildTool"/>
+ </FileConfiguration>
</File>
</Files>
<Globals>
Modified: stackless/trunk/PCbuild/build_ssl.py
==============================================================================
--- stackless/trunk/PCbuild/build_ssl.py (original)
+++ stackless/trunk/PCbuild/build_ssl.py Sun Oct 15 16:42:33 2006
@@ -139,23 +139,26 @@
try:
os.chdir(ssl_dir)
# If the ssl makefiles do not exist, we invoke Perl to generate them.
- if not os.path.isfile(makefile):
+ # Due to a bug in this script, the makefile sometimes ended up empty
+ # Force a regeneration if it is.
+ if not os.path.isfile(makefile) or os.path.getsize(makefile)==0:
print "Creating the makefiles..."
sys.stdout.flush()
# Put our working Perl at the front of our path
os.environ["PATH"] = os.path.dirname(perl) + \
os.pathsep + \
os.environ["PATH"]
+ run_configure(configure, do_script)
if arch=="x86" and debug:
# the do_masm script in openssl doesn't generate a debug
# build makefile so we generate it here:
os.system("perl util\mk1mf.pl debug "+configure+" >"+makefile)
- run_configure(configure, do_script)
# Now run make.
- print "Executing nmake over the ssl makefiles..."
+ makeCommand = "nmake /nologo PERL=\"%s\" -f \"%s\"" %(perl, makefile)
+ print "Executing ssl makefiles:", makeCommand
sys.stdout.flush()
- rc = os.system("nmake /nologo PERL=\"%s\" -f \"%s\"" %(perl, makefile))
+ rc = os.system(makeCommand)
if rc:
print "Executing "+makefile+" failed"
print rc
Modified: stackless/trunk/PCbuild/pythoncore.vcproj
==============================================================================
--- stackless/trunk/PCbuild/pythoncore.vcproj (original)
+++ stackless/trunk/PCbuild/pythoncore.vcproj Sun Oct 15 16:42:33 2006
@@ -39,15 +39,15 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="getbuildinfo.o"
- OutputFile="./python25.dll"
+ OutputFile="./python26.dll"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
IgnoreDefaultLibraryNames="libc"
GenerateDebugInformation="TRUE"
- ProgramDatabaseFile=".\./python25.pdb"
+ ProgramDatabaseFile=".\./python26.pdb"
SubSystem="2"
BaseAddress="0x1e000000"
- ImportLibrary=".\./python25.lib"
+ ImportLibrary=".\./python26.lib"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"/>
@@ -99,15 +99,15 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="getbuildinfo.o"
- OutputFile="./python25_d.dll"
+ OutputFile="./python26_d.dll"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
IgnoreDefaultLibraryNames="libc"
GenerateDebugInformation="TRUE"
- ProgramDatabaseFile=".\./python25_d.pdb"
+ ProgramDatabaseFile=".\./python26_d.pdb"
SubSystem="2"
BaseAddress="0x1e000000"
- ImportLibrary=".\./python25_d.lib"
+ ImportLibrary=".\./python26_d.lib"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"/>
@@ -166,15 +166,15 @@
Name="VCLinkerTool"
AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
AdditionalDependencies="getbuildinfo.o"
- OutputFile="./python25.dll"
+ OutputFile="./python26.dll"
LinkIncremental="1"
SuppressStartupBanner="FALSE"
IgnoreDefaultLibraryNames="libc"
GenerateDebugInformation="TRUE"
- ProgramDatabaseFile=".\./python25.pdb"
+ ProgramDatabaseFile=".\./python26.pdb"
SubSystem="2"
BaseAddress="0x1e000000"
- ImportLibrary=".\./python25.lib"
+ ImportLibrary=".\./python26.lib"
TargetMachine="0"/>
<Tool
Name="VCMIDLTool"/>
@@ -233,15 +233,15 @@
Name="VCLinkerTool"
AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
AdditionalDependencies="getbuildinfo.o"
- OutputFile="./python25.dll"
+ OutputFile="./python26.dll"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
IgnoreDefaultLibraryNames="libc"
GenerateDebugInformation="TRUE"
- ProgramDatabaseFile=".\./python25.pdb"
+ ProgramDatabaseFile=".\./python26.pdb"
SubSystem="2"
BaseAddress="0x1e000000"
- ImportLibrary=".\./python25.lib"
+ ImportLibrary=".\./python26.lib"
TargetMachine="0"/>
<Tool
Name="VCMIDLTool"/>
@@ -799,6 +799,9 @@
RelativePath="..\Parser\parsetok.c">
</File>
<File
+ RelativePath="..\Python\peephole.c">
+ </File>
+ <File
RelativePath="..\Modules\posixmodule.c">
</File>
<File
@@ -841,18 +844,12 @@
RelativePath="..\Modules\sha512module.c">
</File>
<File
- RelativePath="..\Modules\sha512module.c">
- </File>
- <File
RelativePath="..\Modules\shamodule.c">
</File>
<File
RelativePath="..\Modules\signalmodule.c">
</File>
<File
- RelativePath="..\Modules\signalmodule.c">
- </File>
- <File
RelativePath="..\Objects\sliceobject.c">
</File>
<File
Modified: stackless/trunk/PCbuild/readme.txt
==============================================================================
--- stackless/trunk/PCbuild/readme.txt (original)
+++ stackless/trunk/PCbuild/readme.txt Sun Oct 15 16:42:33 2006
@@ -12,7 +12,7 @@
The proper order to build subprojects:
1) pythoncore (this builds the main Python DLL and library files,
- python25.{dll, lib} in Release mode)
+ python26.{dll, lib} in Release mode)
NOTE: in previous releases, this subproject was
named after the release number, e.g. python20.
@@ -26,7 +26,7 @@
test slave; see SUBPROJECTS below)
When using the Debug setting, the output files have a _d added to
-their name: python25_d.dll, python_d.exe, parser_d.pyd, and so on.
+their name: python26_d.dll, python_d.exe, parser_d.pyd, and so on.
SUBPROJECTS
-----------
Modified: stackless/trunk/PCbuild8/_ctypes.vcproj
==============================================================================
--- stackless/trunk/PCbuild8/_ctypes.vcproj (original)
+++ stackless/trunk/PCbuild8/_ctypes.vcproj Sun Oct 15 16:42:33 2006
@@ -4,20 +4,24 @@
Version="8,00"
Name="_ctypes"
ProjectGUID="{F22F40F4-D318-40DC-96B3-88DC81CE0894}"
+ RootNamespace="_ctypes"
Keyword="Win32Proj"
>
<Platforms>
<Platform
Name="Win32"
/>
+ <Platform
+ Name="x64"
+ />
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-debug\_ctypes"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_ctypes"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
CharacterSet="2"
@@ -63,14 +67,15 @@
<Tool
Name="VCLinkerTool"
AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
- OutputFile="./_ctypes_d.pyd"
+ OutputFile="$(OutDir)\_ctypes_d.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./_ctypes_d.pdb"
+ ProgramDatabaseFile=""
SubSystem="0"
BaseAddress="0x1D1A0000"
- ImportLibrary=".\./_ctypes_d.lib"
+ ImportLibrary=""
TargetMachine="1"
/>
<Tool
@@ -99,9 +104,9 @@
/>
</Configuration>
<Configuration
- Name="Release|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-release\_ctypes"
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_ctypes"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
CharacterSet="2"
@@ -120,19 +125,20 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- InlineFunctionExpansion="1"
+ Optimization="0"
AdditionalIncludeDirectories="..\Include,..\PC,..\Modules\_ctypes\libffi_msvc"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+ MinimalRebuild="false"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="false"
- DebugInformationFormat="0"
+ DebugInformationFormat="3"
CompileAs="0"
/>
<Tool
@@ -147,17 +153,16 @@
<Tool
Name="VCLinkerTool"
AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
- OutputFile="./_ctypes.pyd"
+ OutputFile="$(OutDir)\_ctypes_d.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
- GenerateDebugInformation="false"
- ProgramDatabaseFile=".\./_ctypes.pdb"
+ AdditionalLibraryDirectories="$(OutDir)"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=""
SubSystem="0"
- OptimizeReferences="0"
- EnableCOMDATFolding="0"
BaseAddress="0x1D1A0000"
- ImportLibrary=".\./_ctypes.lib"
- TargetMachine="1"
+ ImportLibrary=""
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
@@ -185,9 +190,9 @@
/>
</Configuration>
<Configuration
- Name="ReleaseAMD64|Win32"
- OutputDirectory="."
- IntermediateDirectory="amd64-temp-release\_ctypes"
+ Name="Release|Win32"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_ctypes"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
CharacterSet="2"
@@ -209,19 +214,16 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions=" /USECL:MS_OPTERON"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\Include,..\PC,..\Modules\_ctypes\libffi_msvc"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
StringPooling="true"
- BasicRuntimeChecks="0"
RuntimeLibrary="2"
- BufferSecurityCheck="false"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="0"
CompileAs="0"
/>
<Tool
@@ -235,18 +237,19 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK /EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
- OutputFile="./_ctypes.pyd"
+ AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
+ OutputFile="$(OutDir)\_ctypes.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
- GenerateDebugInformation="false"
- ProgramDatabaseFile=".\./_ctypes.pdb"
+ AdditionalLibraryDirectories="$(OutDir)"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=""
SubSystem="0"
OptimizeReferences="0"
EnableCOMDATFolding="0"
BaseAddress="0x1D1A0000"
- ImportLibrary=".\./_ctypes.lib"
- TargetMachine="0"
+ ImportLibrary=""
+ TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
@@ -274,9 +277,9 @@
/>
</Configuration>
<Configuration
- Name="ReleaseItanium|Win32"
- OutputDirectory="."
- IntermediateDirectory="ia64-temp-release\_ctypes"
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_ctypes"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
CharacterSet="2"
@@ -295,22 +298,20 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions=" /USECL:MS_ITANIUM"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\Include,..\PC,..\Modules\_ctypes\libffi_msvc"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
StringPooling="true"
- BasicRuntimeChecks="0"
RuntimeLibrary="2"
- BufferSecurityCheck="false"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="0"
CompileAs="0"
/>
<Tool
@@ -324,18 +325,19 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK /EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
- OutputFile="./_ctypes.pyd"
+ AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
+ OutputFile="$(OutDir)\_ctypes.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
- GenerateDebugInformation="false"
- ProgramDatabaseFile=".\./_ctypes.pdb"
+ AdditionalLibraryDirectories="$(OutDir)"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=""
SubSystem="0"
OptimizeReferences="0"
EnableCOMDATFolding="0"
BaseAddress="0x1D1A0000"
- ImportLibrary=".\./_ctypes.lib"
- TargetMachine="0"
+ ImportLibrary=""
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
Modified: stackless/trunk/PCbuild8/_ctypes_test.vcproj
==============================================================================
--- stackless/trunk/PCbuild8/_ctypes_test.vcproj (original)
+++ stackless/trunk/PCbuild8/_ctypes_test.vcproj Sun Oct 15 16:42:33 2006
@@ -4,20 +4,24 @@
Version="8,00"
Name="_ctypes_test"
ProjectGUID="{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}"
+ RootNamespace="_ctypes_test"
Keyword="Win32Proj"
>
<Platforms>
<Platform
Name="Win32"
/>
+ <Platform
+ Name="x64"
+ />
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-debug\_ctypes_test"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_ctypes_test"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
CharacterSet="2"
@@ -62,13 +66,14 @@
/>
<Tool
Name="VCLinkerTool"
- OutputFile="./_ctypes_test_d.pyd"
+ OutputFile="$(OutDir)\_ctypes_test_d.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./_ctypes_test_d.pdb"
+ ProgramDatabaseFile=""
SubSystem="0"
- ImportLibrary=".\./_ctypes_test_d.lib"
+ ImportLibrary=""
TargetMachine="1"
/>
<Tool
@@ -97,9 +102,9 @@
/>
</Configuration>
<Configuration
- Name="Release|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-release\_ctypes_test"
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_ctypes_test"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
CharacterSet="2"
@@ -118,19 +123,20 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- InlineFunctionExpansion="1"
+ Optimization="0"
AdditionalIncludeDirectories="..\Include,..\PC"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+ MinimalRebuild="false"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
- DebugInformationFormat="0"
+ DebugInformationFormat="3"
CompileAs="0"
/>
<Tool
@@ -144,16 +150,15 @@
/>
<Tool
Name="VCLinkerTool"
- OutputFile="./_ctypes_test.pyd"
+ OutputFile="$(OutDir)/_ctypes_test_d.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
- GenerateDebugInformation="false"
- ProgramDatabaseFile=".\./_ctypes_test.pdb"
+ AdditionalLibraryDirectories="$(OutDir)"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=""
SubSystem="0"
- OptimizeReferences="0"
- EnableCOMDATFolding="0"
- ImportLibrary=".\./_ctypes_test.lib"
- TargetMachine="1"
+ ImportLibrary=""
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
@@ -181,9 +186,9 @@
/>
</Configuration>
<Configuration
- Name="ReleaseItanium|Win32"
- OutputDirectory="."
- IntermediateDirectory="ia64-temp-release\_ctypes_test"
+ Name="Release|Win32"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_ctypes_test"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
CharacterSet="2"
@@ -205,18 +210,16 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions=" /USECL:MS_ITANIUM"
- Optimization="0"
+ InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\Include,..\PC"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
- MinimalRebuild="false"
- BasicRuntimeChecks="0"
- RuntimeLibrary="3"
- BufferSecurityCheck="false"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
+ DebugInformationFormat="0"
CompileAs="0"
/>
<Tool
@@ -230,15 +233,17 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
- OutputFile="./_ctypes_test_d.pyd"
+ OutputFile="$(OutDir)\_ctypes_test.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./_ctypes_test_d.pdb"
+ ProgramDatabaseFile=""
SubSystem="0"
- ImportLibrary=".\./_ctypes_test_d.lib"
- TargetMachine="0"
+ OptimizeReferences="0"
+ EnableCOMDATFolding="0"
+ ImportLibrary=""
+ TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
@@ -266,9 +271,9 @@
/>
</Configuration>
<Configuration
- Name="ReleaseAMD64|Win32"
- OutputDirectory="."
- IntermediateDirectory="amd64-temp-release\_ctypes_test"
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_ctypes_test"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
CharacterSet="2"
@@ -287,22 +292,20 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions=" /USECL:MS_OPTERON"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\Include,..\PC"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
StringPooling="true"
- BasicRuntimeChecks="0"
RuntimeLibrary="2"
- BufferSecurityCheck="false"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
+ DebugInformationFormat="0"
CompileAs="0"
/>
<Tool
@@ -316,17 +319,17 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
- OutputFile="./_ctypes_test.pyd"
+ OutputFile="$(OutDir)\_ctypes_test.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
- GenerateDebugInformation="false"
- ProgramDatabaseFile=".\./_ctypes_test.pdb"
+ AdditionalLibraryDirectories="$(OutDir)"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=""
SubSystem="0"
OptimizeReferences="0"
EnableCOMDATFolding="0"
- ImportLibrary=".\./_ctypes_test.lib"
- TargetMachine="0"
+ ImportLibrary=""
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
Modified: stackless/trunk/PCbuild8/_elementtree.vcproj
==============================================================================
--- stackless/trunk/PCbuild8/_elementtree.vcproj (original)
+++ stackless/trunk/PCbuild8/_elementtree.vcproj Sun Oct 15 16:42:33 2006
@@ -4,19 +4,23 @@
Version="8,00"
Name="_elementtree"
ProjectGUID="{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}"
+ RootNamespace="_elementtree"
>
<Platforms>
<Platform
Name="Win32"
/>
+ <Platform
+ Name="x64"
+ />
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-debug\_elementtree"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_elementtree"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -61,14 +65,15 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="odbccp32.lib"
- OutputFile="./_elementtree_d.pyd"
+ OutputFile="$(OutDir)\_elementtree_d.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./_elementtree_d.pdb"
+ ProgramDatabaseFile=""
SubSystem="2"
BaseAddress="0x1D100000"
- ImportLibrary=".\./_elementtree_d.lib"
+ ImportLibrary=""
TargetMachine="1"
/>
<Tool
@@ -97,9 +102,9 @@
/>
</Configuration>
<Configuration
- Name="Release|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-release\_elementtree"
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_elementtree"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -119,16 +124,14 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
+ Optimization="0"
AdditionalIncludeDirectories="..\Include,..\PC,..\Modules\expat"
- PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
+ PreprocessorDefinitions="_DEBUG;HAVE_EXPAT_H;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"
+ RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
@@ -147,15 +150,16 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="odbccp32.lib"
- OutputFile="./_elementtree.pyd"
+ OutputFile="$(OutDir)\_elementtree_d.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./_elementtree.pdb"
+ ProgramDatabaseFile=""
SubSystem="2"
BaseAddress="0x1D100000"
- ImportLibrary=".\./_elementtree.lib"
- TargetMachine="1"
+ ImportLibrary=""
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
@@ -183,9 +187,9 @@
/>
</Configuration>
<Configuration
- Name="ReleaseItanium|Win32"
- OutputDirectory="./."
- IntermediateDirectory=".\ia64-temp-release\_elementtree"
+ Name="Release|Win32"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_elementtree"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -208,20 +212,16 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions=" /USECL:MS_ITANIUM"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\Include,..\PC,..\Modules\expat"
PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"
StringPooling="true"
- BasicRuntimeChecks="0"
RuntimeLibrary="2"
- BufferSecurityCheck="false"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
CompileAs="0"
/>
@@ -236,17 +236,17 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
AdditionalDependencies="odbccp32.lib"
- OutputFile="./_elementtree.pyd"
+ OutputFile="$(OutDir)\_elementtree.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./_elementtree.pdb"
+ ProgramDatabaseFile=""
SubSystem="2"
BaseAddress="0x1D100000"
- ImportLibrary=".\./_elementtree.lib"
- TargetMachine="0"
+ ImportLibrary=""
+ TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
@@ -274,9 +274,9 @@
/>
</Configuration>
<Configuration
- Name="ReleaseAMD64|Win32"
- OutputDirectory="."
- IntermediateDirectory="amd64-temp-release\_elementtree"
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_elementtree"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -296,23 +296,21 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions=" /USECL:MS_OPTERON /GS-"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\Include,..\PC,..\Modules\expat"
PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"
StringPooling="true"
- BasicRuntimeChecks="0"
RuntimeLibrary="2"
BufferSecurityCheck="false"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
CompileAs="0"
/>
@@ -327,17 +325,17 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
AdditionalDependencies="odbccp32.lib"
- OutputFile="./_elementtree.pyd"
+ OutputFile="$(OutDir)\_elementtree.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./_elementtree.pdb"
+ ProgramDatabaseFile=""
SubSystem="2"
BaseAddress="0x1D100000"
- ImportLibrary=".\./_elementtree.lib"
- TargetMachine="0"
+ ImportLibrary=""
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
Modified: stackless/trunk/PCbuild8/_msi.vcproj
==============================================================================
--- stackless/trunk/PCbuild8/_msi.vcproj (original)
+++ stackless/trunk/PCbuild8/_msi.vcproj Sun Oct 15 16:42:33 2006
@@ -4,19 +4,23 @@
Version="8,00"
Name="_msi"
ProjectGUID="{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}"
+ RootNamespace="_msi"
>
<Platforms>
<Platform
Name="Win32"
/>
+ <Platform
+ Name="x64"
+ />
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-debug\_msi"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_msi"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -63,13 +67,14 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
- OutputFile="./_msi.pyd"
+ OutputFile="$(OutDir)\_msi.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./_msi.pdb"
+ ProgramDatabaseFile=""
BaseAddress="0x1D160000"
- ImportLibrary=".\./_msi.lib"
+ ImportLibrary=""
TargetMachine="1"
/>
<Tool
@@ -98,9 +103,9 @@
/>
</Configuration>
<Configuration
- Name="Release|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-release\_msi"
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_msi"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -121,19 +126,19 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
+ Optimization="0"
AdditionalIncludeDirectories="..\Include,..\PC"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL"
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
+ DebugInformationFormat="3"
CompileAs="0"
/>
<Tool
@@ -148,13 +153,15 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
- OutputFile="./_msi.pyd"
+ OutputFile="$(OutDir)\_msi.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\./_msi.pdb"
+ AdditionalLibraryDirectories="$(OutDir)"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=""
BaseAddress="0x1D160000"
- ImportLibrary=".\./_msi.lib"
- TargetMachine="1"
+ ImportLibrary=""
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
@@ -182,9 +189,9 @@
/>
</Configuration>
<Configuration
- Name="ReleaseItanium|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\ia64-temp-release\_msi"
+ Name="Release|Win32"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_msi"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -208,21 +215,16 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions=" /USECL:MS_ITANIUM"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\Include,..\PC"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL"
StringPooling="true"
- BasicRuntimeChecks="0"
RuntimeLibrary="2"
- BufferSecurityCheck="false"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
CompileAs="0"
/>
<Tool
@@ -236,15 +238,16 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
- OutputFile="./_msi.pyd"
+ OutputFile="$(OutDir)\_msi.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\./_msi.pdb"
+ AdditionalLibraryDirectories="$(OutDir)"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=""
BaseAddress="0x1D160000"
- ImportLibrary=".\./_msi.lib"
- TargetMachine="0"
+ ImportLibrary=""
+ TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
@@ -272,9 +275,9 @@
/>
</Configuration>
<Configuration
- Name="ReleaseAMD64|Win32"
- OutputDirectory="."
- IntermediateDirectory="amd64-temp-release\_msi"
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_msi"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -295,24 +298,20 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions=" /USECL:MS_OPTERON /GS-"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\Include,..\PC"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL"
StringPooling="true"
- BasicRuntimeChecks="0"
RuntimeLibrary="2"
- BufferSecurityCheck="false"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
CompileAs="0"
/>
<Tool
@@ -326,15 +325,16 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
- AdditionalDependencies="fci.lib msi.lib rpcrt4.lib bufferoverflowU.lib"
- OutputFile="./_msi.pyd"
+ AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
+ OutputFile="$(OutDir)\_msi.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\./_msi.pdb"
+ AdditionalLibraryDirectories="$(OutDir)"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=""
BaseAddress="0x1D160000"
- ImportLibrary=".\./_msi.lib"
- TargetMachine="0"
+ ImportLibrary=""
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
Modified: stackless/trunk/PCbuild8/_sqlite3.vcproj
==============================================================================
--- stackless/trunk/PCbuild8/_sqlite3.vcproj (original)
+++ stackless/trunk/PCbuild8/_sqlite3.vcproj Sun Oct 15 16:42:33 2006
@@ -4,19 +4,23 @@
Version="8,00"
Name="_sqlite3"
ProjectGUID="{2FF0A312-22F9-4C34-B070-842916DE27A9}"
+ RootNamespace="_sqlite3"
>
<Platforms>
<Platform
Name="Win32"
/>
+ <Platform
+ Name="x64"
+ />
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-debug\_sqlite3"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_sqlite3"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -61,15 +65,16 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="..\..\sqlite-source-3.3.4\sqlite3.lib"
- OutputFile="./_sqlite3_d.pyd"
+ OutputFile="$(OutDir)\_sqlite3_d.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
IgnoreDefaultLibraryNames=""
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./_sqlite3_d.pdb"
+ ProgramDatabaseFile=""
SubSystem="2"
BaseAddress="0x1e180000"
- ImportLibrary=".\./_sqlite3_d.lib"
+ ImportLibrary=""
TargetMachine="1"
/>
<Tool
@@ -98,9 +103,9 @@
/>
</Configuration>
<Configuration
- Name="Release|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-release\_sqlite3"
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_sqlite"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -120,16 +125,14 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
+ Optimization="0"
AdditionalIncludeDirectories="..\Include;..\PC;..\..\sqlite-source-3.3.4"
- PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;MODULE_NAME=\"sqlite3\""
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
+ PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;MODULE_NAME=\"sqlite3\""
+ RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
@@ -148,16 +151,17 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="..\..\sqlite-source-3.3.4\sqlite3.lib"
- OutputFile="./_sqlite3.pyd"
+ OutputFile="$(OutDir)\_sqlite3_d.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
IgnoreDefaultLibraryNames=""
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./_sqlite3.pdb"
+ ProgramDatabaseFile=""
SubSystem="2"
BaseAddress="0x1e180000"
- ImportLibrary=".\./_sqlite3.lib"
- TargetMachine="1"
+ ImportLibrary=""
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
@@ -185,9 +189,9 @@
/>
</Configuration>
<Configuration
- Name="ReleaseItanium|Win32"
- OutputDirectory="./."
- IntermediateDirectory=".\ia64-temp-release\_sqlite3"
+ Name="Release|Win32"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_sqlite3"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -210,20 +214,16 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions=" /USECL:MS_ITANIUM"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\Include;..\PC;..\..\sqlite-source-3.3.4"
PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;MODULE_NAME=\"sqlite3\""
StringPooling="true"
- BasicRuntimeChecks="0"
RuntimeLibrary="2"
- BufferSecurityCheck="false"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
CompileAs="0"
/>
@@ -238,18 +238,18 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
- AdditionalDependencies="..\..\sqlite-source-3.3.4\ia64\sqlite3.lib"
- OutputFile="./_sqlite3.pyd"
+ AdditionalDependencies="..\..\sqlite-source-3.3.4\sqlite3.lib"
+ OutputFile="$(OutDir)\_sqlite3.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
IgnoreDefaultLibraryNames=""
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./_sqlite3.pdb"
+ ProgramDatabaseFile=""
SubSystem="2"
BaseAddress="0x1e180000"
- ImportLibrary=".\./_sqlite3.lib"
- TargetMachine="0"
+ ImportLibrary=""
+ TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
@@ -277,9 +277,9 @@
/>
</Configuration>
<Configuration
- Name="ReleaseAMD64|Win32"
- OutputDirectory="."
- IntermediateDirectory="amd64-temp-release\_sqlite3"
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_sqlite3"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -299,23 +299,20 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions=" /USECL:MS_OPTERON"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\Include;..\PC;..\..\sqlite-source-3.3.4"
PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;MODULE_NAME=\"sqlite3\""
StringPooling="true"
- BasicRuntimeChecks="0"
RuntimeLibrary="2"
- BufferSecurityCheck="false"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
CompileAs="0"
/>
@@ -330,18 +327,18 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
- AdditionalDependencies="..\..\sqlite-source-3.3.4\amd64\sqlite3.lib"
- OutputFile="./_sqlite3.pyd"
+ AdditionalDependencies="..\..\sqlite-source-3.3.4\sqlite3.lib"
+ OutputFile="$(OutDir)\_sqlite3.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
IgnoreDefaultLibraryNames=""
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./_sqlite3.pdb"
+ ProgramDatabaseFile=""
SubSystem="2"
BaseAddress="0x1e180000"
- ImportLibrary=".\./_sqlite3.lib"
- TargetMachine="0"
+ ImportLibrary=""
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
Modified: stackless/trunk/PCbuild8/make_buildinfo.c
==============================================================================
--- stackless/trunk/PCbuild8/make_buildinfo.c (original)
+++ stackless/trunk/PCbuild8/make_buildinfo.c Sun Oct 15 16:42:33 2006
@@ -3,19 +3,23 @@
#include <sys/stat.h>
#include <stdio.h>
-/* This file creates the getbuildinfo.o object, by first
- invoking subwcrev.exe (if found), and then invoking cl.exe.
- As a side effect, it might generate PCBuild\getbuildinfo2.c
- also. If this isn't a subversion checkout, or subwcrev isn't
- found, it compiles ..\\Modules\\getbuildinfo.c instead.
+/* This file creates the getbuildinfo2.c file, by
+ invoking subwcrev.exe (if found).
+ If this isn't a subversion checkout, or subwcrev isn't
+ found, it copies ..\\Modules\\getbuildinfo.c instead.
+
+ A file, getbuildinfo2.h is then updated to define
+ SUBWCREV if it was a subversion checkout.
+
+ getbuildinfo2.c is part of the pythoncore project with
+ getbuildinfo2.h as a forced include. This helps
+ VisualStudio refrain from unnecessary compiles much of the
+ time.
Currently, subwcrev.exe is found from the registry entries
of TortoiseSVN.
- No attempt is made to place getbuildinfo.o into the proper
- binary directory. This isn't necessary, as this tool is
- invoked as a pre-link step for pythoncore, so that overwrites
- any previous getbuildinfo.o.
+ make_buildinfo.exe is called as a pre-build step for pythoncore.
*/
@@ -40,11 +44,11 @@
type != REG_SZ)
/* Registry corrupted */
return 0;
- strcat(command, "bin\\subwcrev.exe");
+ strcat_s(command, sizeof(command), "bin\\subwcrev.exe");
if (_stat(command+1, &st) < 0)
/* subwcrev.exe not part of the release */
return 0;
- strcat(command, "\" .. ..\\Modules\\getbuildinfo.c getbuildinfo2.c");
+ strcat_s(command, sizeof(command), "\" .. ..\\Modules\\getbuildinfo.c getbuildinfo2.c");
puts(command); fflush(stdout);
if (system(command) < 0)
return 0;
@@ -53,40 +57,25 @@
int main(int argc, char*argv[])
{
- char command[500] = "cl.exe -c -D_WIN32 -DUSE_DL_EXPORT -D_WINDOWS -DWIN32 -D_WINDLL ";
- int do_unlink, result;
- if (argc != 2) {
- fprintf(stderr, "make_buildinfo $(ConfigurationName)\n");
- return EXIT_FAILURE;
- }
- if (strcmp(argv[1], "Release") == 0) {
- strcat(command, "-MD ");
- }
- else if (strcmp(argv[1], "Debug") == 0) {
- strcat(command, "-D_DEBUG -MDd ");
- }
- else if (strcmp(argv[1], "ReleaseItanium") == 0) {
- strcat(command, "-MD /USECL:MS_ITANIUM ");
- }
- else if (strcmp(argv[1], "ReleaseAMD64") == 0) {
- strcat(command, "-MD ");
- strcat(command, "-MD /USECL:MS_OPTERON ");
- }
- else {
- fprintf(stderr, "unsupported configuration %s\n", argv[1]);
- return EXIT_FAILURE;
- }
+ char command[500] = "";
+ int svn;
+ FILE *f;
- if ((do_unlink = make_buildinfo2()))
- strcat(command, "getbuildinfo2.c -DSUBWCREV ");
- else
- strcat(command, "..\\Modules\\getbuildinfo.c");
- strcat(command, " -Fogetbuildinfo.o -I..\\Include -I..\\PC");
- puts(command); fflush(stdout);
- result = system(command);
- if (do_unlink)
- unlink("getbuildinfo2.c");
- if (result < 0)
+ if (fopen_s(&f, "getbuildinfo2.h", "w"))
return EXIT_FAILURE;
+ /* Get getbuildinfo.c from svn as getbuildinfo2.c */
+ svn = make_buildinfo2();
+ if (svn) {
+ puts("got getbuildinfo2.c from svn. Updating getbuildinfo2.h");
+ /* yes. make sure SUBWCREV is defined */
+ fprintf(f, "#define SUBWCREV\n");
+ } else {
+ puts("didn't get getbuildinfo2.c from svn. Copying from Modules and clearing getbuildinfo2.h");
+ strcat_s(command, sizeof(command), "copy ..\\Modules\\getbuildinfo.c getbuildinfo2.c");
+ puts(command); fflush(stdout);
+ if (system(command) < 0)
+ return EXIT_FAILURE;
+ }
+ fclose(f);
return 0;
}
\ No newline at end of file
Modified: stackless/trunk/PCbuild8/make_buildinfo.vcproj
==============================================================================
--- stackless/trunk/PCbuild8/make_buildinfo.vcproj (original)
+++ stackless/trunk/PCbuild8/make_buildinfo.vcproj Sun Oct 15 16:42:33 2006
@@ -4,6 +4,7 @@
Version="8,00"
Name="make_buildinfo"
ProjectGUID="{C73F0EC1-358B-4177-940F-0846AC8B04CD}"
+ RootNamespace="make_buildinfo"
Keyword="Win32Proj"
>
<Platforms>
@@ -40,7 +41,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
@@ -90,82 +91,8 @@
/>
<Tool
Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="."
- IntermediateDirectory=".\x86-temp-release\make_buildinfo"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
- RuntimeLibrary="0"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/make_buildinfo.exe"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
+ Description="Making getbuildinfo2.c"
+ CommandLine="$(TargetPath)"
/>
</Configuration>
</Configurations>
Modified: stackless/trunk/PCbuild8/pcbuild.sln
==============================================================================
--- stackless/trunk/PCbuild8/pcbuild.sln (original)
+++ stackless/trunk/PCbuild8/pcbuild.sln Sun Oct 15 16:42:33 2006
@@ -2,8 +2,8 @@
# Visual Studio 2005
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythoncore", "pythoncore.vcproj", "{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}"
ProjectSection(ProjectDependencies) = postProject
- {C73F0EC1-358B-4177-940F-0846AC8B04CD} = {C73F0EC1-358B-4177-940F-0846AC8B04CD}
{F0E0541E-F17D-430B-97C4-93ADF0DD284E} = {F0E0541E-F17D-430B-97C4-93ADF0DD284E}
+ {C73F0EC1-358B-4177-940F-0846AC8B04CD} = {C73F0EC1-358B-4177-940F-0846AC8B04CD}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythonw", "pythonw.vcproj", "{F4229CC3-873C-49AE-9729-DD308ED4CD4A}"
@@ -61,137 +61,244 @@
readme.txt = readme.txt
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythoncore_pgo", "pythoncore_pgo.vcproj", "{8B59C1FF-2439-4BE9-9F24-84D4982D28D4}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "python", "python.vcproj", "{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}"
ProjectSection(ProjectDependencies) = postProject
{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "python", "python.vcproj", "{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_versioninfo", "make_versioninfo.vcproj", "{F0E0541E-F17D-430B-97C4-93ADF0DD284E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ PGIRelease|Win32 = PGIRelease|Win32
+ PGIRelease|x64 = PGIRelease|x64
+ PGORelease|Win32 = PGORelease|Win32
+ PGORelease|x64 = PGORelease|x64
Release|Win32 = Release|Win32
- ReleaseAMD64|Win32 = ReleaseAMD64|Win32
- ReleaseItanium|Win32 = ReleaseItanium|Win32
+ Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|Win32.ActiveCfg = Debug|Win32
{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|Win32.Build.0 = Debug|Win32
+ {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|x64.ActiveCfg = Debug|x64
+ {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|x64.Build.0 = Debug|x64
+ {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGIRelease|Win32.ActiveCfg = PGIRelease|Win32
+ {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGIRelease|Win32.Build.0 = PGIRelease|Win32
+ {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGIRelease|x64.ActiveCfg = PGIRelease|x64
+ {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGIRelease|x64.Build.0 = PGIRelease|x64
+ {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGORelease|Win32.ActiveCfg = PGORelease|Win32
+ {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGORelease|Win32.Build.0 = PGORelease|Win32
+ {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGORelease|x64.ActiveCfg = PGORelease|x64
+ {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGORelease|x64.Build.0 = PGORelease|x64
{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|Win32.ActiveCfg = Release|Win32
{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|Win32.Build.0 = Release|Win32
- {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.ReleaseAMD64|Win32.ActiveCfg = ReleaseAMD64|Win32
- {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.ReleaseAMD64|Win32.Build.0 = ReleaseAMD64|Win32
- {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.ReleaseItanium|Win32.ActiveCfg = ReleaseItanium|Win32
- {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.ReleaseItanium|Win32.Build.0 = ReleaseItanium|Win32
+ {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|x64.ActiveCfg = Release|x64
+ {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|x64.Build.0 = Release|x64
{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|Win32.ActiveCfg = Debug|Win32
{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|Win32.Build.0 = Debug|Win32
+ {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|x64.ActiveCfg = Debug|x64
+ {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|x64.Build.0 = Debug|x64
+ {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGIRelease|Win32.ActiveCfg = Release|Win32
+ {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGIRelease|Win32.Build.0 = Release|Win32
+ {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGIRelease|x64.ActiveCfg = Release|x64
+ {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGIRelease|x64.Build.0 = Release|x64
+ {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGORelease|Win32.ActiveCfg = Release|Win32
+ {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGORelease|Win32.Build.0 = Release|Win32
+ {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGORelease|x64.ActiveCfg = Release|x64
+ {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGORelease|x64.Build.0 = Release|x64
{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|Win32.ActiveCfg = Release|Win32
{F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|Win32.Build.0 = Release|Win32
- {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.ReleaseAMD64|Win32.ActiveCfg = ReleaseAMD64|Win32
- {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.ReleaseAMD64|Win32.Build.0 = ReleaseAMD64|Win32
- {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.ReleaseItanium|Win32.ActiveCfg = ReleaseItanium|Win32
- {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.ReleaseItanium|Win32.Build.0 = ReleaseItanium|Win32
+ {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|x64.ActiveCfg = Release|x64
+ {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|x64.Build.0 = Release|x64
{97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Debug|Win32.ActiveCfg = Debug|Win32
{97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Debug|Win32.Build.0 = Debug|Win32
+ {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Debug|x64.ActiveCfg = Debug|x64
+ {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Debug|x64.Build.0 = Debug|x64
+ {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.PGIRelease|Win32.ActiveCfg = Release|Win32
+ {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.PGIRelease|Win32.Build.0 = Release|Win32
+ {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.PGIRelease|x64.ActiveCfg = Release|x64
+ {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.PGIRelease|x64.Build.0 = Release|x64
+ {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.PGORelease|Win32.ActiveCfg = Release|Win32
+ {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.PGORelease|Win32.Build.0 = Release|Win32
+ {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.PGORelease|x64.ActiveCfg = Release|x64
+ {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.PGORelease|x64.Build.0 = Release|x64
{97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Release|Win32.ActiveCfg = Release|Win32
{97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Release|Win32.Build.0 = Release|Win32
- {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.ReleaseAMD64|Win32.ActiveCfg = ReleaseAMD64|Win32
- {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.ReleaseAMD64|Win32.Build.0 = ReleaseAMD64|Win32
- {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.ReleaseItanium|Win32.ActiveCfg = ReleaseItanium|Win32
- {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.ReleaseItanium|Win32.Build.0 = ReleaseItanium|Win32
+ {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Release|x64.ActiveCfg = Release|x64
+ {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Release|x64.Build.0 = Release|x64
{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Debug|Win32.ActiveCfg = Debug|Win32
{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Debug|Win32.Build.0 = Debug|Win32
+ {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Debug|x64.ActiveCfg = Debug|x64
+ {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Debug|x64.Build.0 = Debug|x64
+ {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.PGIRelease|Win32.ActiveCfg = Release|Win32
+ {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.PGIRelease|Win32.Build.0 = Release|Win32
+ {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.PGIRelease|x64.ActiveCfg = Release|x64
+ {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.PGIRelease|x64.Build.0 = Release|x64
+ {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.PGORelease|Win32.ActiveCfg = Release|Win32
+ {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.PGORelease|Win32.Build.0 = Release|Win32
+ {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.PGORelease|x64.ActiveCfg = Release|x64
+ {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.PGORelease|x64.Build.0 = Release|x64
{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Release|Win32.ActiveCfg = Release|Win32
{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Release|Win32.Build.0 = Release|Win32
- {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.ReleaseAMD64|Win32.ActiveCfg = ReleaseAMD64|Win32
- {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.ReleaseAMD64|Win32.Build.0 = ReleaseAMD64|Win32
- {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.ReleaseItanium|Win32.ActiveCfg = ReleaseItanium|Win32
- {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.ReleaseItanium|Win32.Build.0 = ReleaseItanium|Win32
+ {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Release|x64.ActiveCfg = Release|x64
+ {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Release|x64.Build.0 = Release|x64
{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|Win32.ActiveCfg = Debug|Win32
{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|Win32.Build.0 = Debug|Win32
+ {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|x64.ActiveCfg = Debug|x64
+ {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|x64.Build.0 = Debug|x64
+ {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGIRelease|Win32.ActiveCfg = Release|Win32
+ {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGIRelease|Win32.Build.0 = Release|Win32
+ {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGIRelease|x64.ActiveCfg = Release|x64
+ {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGIRelease|x64.Build.0 = Release|x64
+ {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGORelease|Win32.ActiveCfg = Release|Win32
+ {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGORelease|Win32.Build.0 = Release|Win32
+ {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGORelease|x64.ActiveCfg = Release|x64
+ {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGORelease|x64.Build.0 = Release|x64
{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|Win32.ActiveCfg = Release|Win32
{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|Win32.Build.0 = Release|Win32
- {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.ReleaseAMD64|Win32.ActiveCfg = Release|Win32
- {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.ReleaseItanium|Win32.ActiveCfg = Release|Win32
+ {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|x64.ActiveCfg = Release|x64
+ {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|x64.Build.0 = Release|x64
{51F35FAE-FB92-4B2C-9187-1542C065AD77}.Debug|Win32.ActiveCfg = Debug|Win32
{51F35FAE-FB92-4B2C-9187-1542C065AD77}.Debug|Win32.Build.0 = Debug|Win32
+ {51F35FAE-FB92-4B2C-9187-1542C065AD77}.Debug|x64.ActiveCfg = Debug|x64
+ {51F35FAE-FB92-4B2C-9187-1542C065AD77}.Debug|x64.Build.0 = Debug|x64
+ {51F35FAE-FB92-4B2C-9187-1542C065AD77}.PGIRelease|Win32.ActiveCfg = Release|Win32
+ {51F35FAE-FB92-4B2C-9187-1542C065AD77}.PGIRelease|Win32.Build.0 = Release|Win32
+ {51F35FAE-FB92-4B2C-9187-1542C065AD77}.PGIRelease|x64.ActiveCfg = Release|x64
+ {51F35FAE-FB92-4B2C-9187-1542C065AD77}.PGIRelease|x64.Build.0 = Release|x64
+ {51F35FAE-FB92-4B2C-9187-1542C065AD77}.PGORelease|Win32.ActiveCfg = Release|Win32
+ {51F35FAE-FB92-4B2C-9187-1542C065AD77}.PGORelease|Win32.Build.0 = Release|Win32
+ {51F35FAE-FB92-4B2C-9187-1542C065AD77}.PGORelease|x64.ActiveCfg = Release|x64
+ {51F35FAE-FB92-4B2C-9187-1542C065AD77}.PGORelease|x64.Build.0 = Release|x64
{51F35FAE-FB92-4B2C-9187-1542C065AD77}.Release|Win32.ActiveCfg = Release|Win32
{51F35FAE-FB92-4B2C-9187-1542C065AD77}.Release|Win32.Build.0 = Release|Win32
- {51F35FAE-FB92-4B2C-9187-1542C065AD77}.ReleaseAMD64|Win32.ActiveCfg = ReleaseAMD64|Win32
- {51F35FAE-FB92-4B2C-9187-1542C065AD77}.ReleaseAMD64|Win32.Build.0 = ReleaseAMD64|Win32
- {51F35FAE-FB92-4B2C-9187-1542C065AD77}.ReleaseItanium|Win32.ActiveCfg = ReleaseItanium|Win32
- {51F35FAE-FB92-4B2C-9187-1542C065AD77}.ReleaseItanium|Win32.Build.0 = ReleaseItanium|Win32
+ {51F35FAE-FB92-4B2C-9187-1542C065AD77}.Release|x64.ActiveCfg = Release|x64
+ {51F35FAE-FB92-4B2C-9187-1542C065AD77}.Release|x64.Build.0 = Release|x64
{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Debug|Win32.ActiveCfg = Debug|Win32
{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Debug|Win32.Build.0 = Debug|Win32
+ {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Debug|x64.ActiveCfg = Debug|x64
+ {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Debug|x64.Build.0 = Debug|x64
+ {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.PGIRelease|Win32.ActiveCfg = Release|Win32
+ {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.PGIRelease|Win32.Build.0 = Release|Win32
+ {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.PGIRelease|x64.ActiveCfg = Release|x64
+ {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.PGIRelease|x64.Build.0 = Release|x64
+ {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.PGORelease|Win32.ActiveCfg = Release|Win32
+ {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.PGORelease|Win32.Build.0 = Release|Win32
+ {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.PGORelease|x64.ActiveCfg = Release|x64
+ {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.PGORelease|x64.Build.0 = Release|x64
{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Release|Win32.ActiveCfg = Release|Win32
{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Release|Win32.Build.0 = Release|Win32
- {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.ReleaseAMD64|Win32.ActiveCfg = ReleaseAMD64|Win32
- {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.ReleaseAMD64|Win32.Build.0 = ReleaseAMD64|Win32
- {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.ReleaseItanium|Win32.ActiveCfg = ReleaseItanium|Win32
- {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.ReleaseItanium|Win32.Build.0 = ReleaseItanium|Win32
+ {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Release|x64.ActiveCfg = Release|x64
+ {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Release|x64.Build.0 = Release|x64
{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|Win32.ActiveCfg = Debug|Win32
{C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|Win32.Build.0 = Debug|Win32
- {C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|Win32.ActiveCfg = Release|Win32
- {C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|Win32.Build.0 = Release|Win32
- {C73F0EC1-358B-4177-940F-0846AC8B04CD}.ReleaseAMD64|Win32.ActiveCfg = Release|Win32
- {C73F0EC1-358B-4177-940F-0846AC8B04CD}.ReleaseAMD64|Win32.Build.0 = Release|Win32
- {C73F0EC1-358B-4177-940F-0846AC8B04CD}.ReleaseItanium|Win32.ActiveCfg = Release|Win32
- {C73F0EC1-358B-4177-940F-0846AC8B04CD}.ReleaseItanium|Win32.Build.0 = Release|Win32
+ {C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|x64.ActiveCfg = Debug|Win32
+ {C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|x64.Build.0 = Debug|Win32
+ {C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGIRelease|Win32.ActiveCfg = Debug|Win32
+ {C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGIRelease|Win32.Build.0 = Debug|Win32
+ {C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGIRelease|x64.ActiveCfg = Debug|Win32
+ {C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGORelease|Win32.ActiveCfg = Debug|Win32
+ {C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGORelease|Win32.Build.0 = Debug|Win32
+ {C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGORelease|x64.ActiveCfg = Debug|Win32
+ {C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|Win32.ActiveCfg = Debug|Win32
+ {C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|Win32.Build.0 = Debug|Win32
+ {C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|x64.ActiveCfg = Debug|Win32
+ {C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|x64.Build.0 = Debug|Win32
{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Debug|Win32.ActiveCfg = Debug|Win32
{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Debug|Win32.Build.0 = Debug|Win32
+ {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Debug|x64.ActiveCfg = Debug|x64
+ {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Debug|x64.Build.0 = Debug|x64
+ {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.PGIRelease|Win32.ActiveCfg = Release|Win32
+ {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.PGIRelease|Win32.Build.0 = Release|Win32
+ {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.PGIRelease|x64.ActiveCfg = Release|x64
+ {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.PGIRelease|x64.Build.0 = Release|x64
+ {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.PGORelease|Win32.ActiveCfg = Release|Win32
+ {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.PGORelease|Win32.Build.0 = Release|Win32
+ {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.PGORelease|x64.ActiveCfg = Release|x64
+ {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.PGORelease|x64.Build.0 = Release|x64
{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Release|Win32.ActiveCfg = Release|Win32
{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Release|Win32.Build.0 = Release|Win32
- {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.ReleaseAMD64|Win32.ActiveCfg = ReleaseAMD64|Win32
- {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.ReleaseAMD64|Win32.Build.0 = ReleaseAMD64|Win32
- {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.ReleaseItanium|Win32.ActiveCfg = ReleaseItanium|Win32
- {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.ReleaseItanium|Win32.Build.0 = ReleaseItanium|Win32
+ {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Release|x64.ActiveCfg = Release|x64
+ {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Release|x64.Build.0 = Release|x64
{F22F40F4-D318-40DC-96B3-88DC81CE0894}.Debug|Win32.ActiveCfg = Debug|Win32
{F22F40F4-D318-40DC-96B3-88DC81CE0894}.Debug|Win32.Build.0 = Debug|Win32
+ {F22F40F4-D318-40DC-96B3-88DC81CE0894}.Debug|x64.ActiveCfg = Debug|x64
+ {F22F40F4-D318-40DC-96B3-88DC81CE0894}.Debug|x64.Build.0 = Debug|x64
+ {F22F40F4-D318-40DC-96B3-88DC81CE0894}.PGIRelease|Win32.ActiveCfg = Release|Win32
+ {F22F40F4-D318-40DC-96B3-88DC81CE0894}.PGIRelease|Win32.Build.0 = Release|Win32
+ {F22F40F4-D318-40DC-96B3-88DC81CE0894}.PGIRelease|x64.ActiveCfg = Release|x64
+ {F22F40F4-D318-40DC-96B3-88DC81CE0894}.PGIRelease|x64.Build.0 = Release|x64
+ {F22F40F4-D318-40DC-96B3-88DC81CE0894}.PGORelease|Win32.ActiveCfg = Release|Win32
+ {F22F40F4-D318-40DC-96B3-88DC81CE0894}.PGORelease|Win32.Build.0 = Release|Win32
+ {F22F40F4-D318-40DC-96B3-88DC81CE0894}.PGORelease|x64.ActiveCfg = Release|x64
+ {F22F40F4-D318-40DC-96B3-88DC81CE0894}.PGORelease|x64.Build.0 = Release|x64
{F22F40F4-D318-40DC-96B3-88DC81CE0894}.Release|Win32.ActiveCfg = Release|Win32
{F22F40F4-D318-40DC-96B3-88DC81CE0894}.Release|Win32.Build.0 = Release|Win32
- {F22F40F4-D318-40DC-96B3-88DC81CE0894}.ReleaseAMD64|Win32.ActiveCfg = ReleaseAMD64|Win32
- {F22F40F4-D318-40DC-96B3-88DC81CE0894}.ReleaseItanium|Win32.ActiveCfg = ReleaseItanium|Win32
+ {F22F40F4-D318-40DC-96B3-88DC81CE0894}.Release|x64.ActiveCfg = Release|x64
{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Debug|Win32.ActiveCfg = Debug|Win32
{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Debug|Win32.Build.0 = Debug|Win32
+ {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Debug|x64.ActiveCfg = Debug|x64
+ {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Debug|x64.Build.0 = Debug|x64
+ {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.PGIRelease|Win32.ActiveCfg = Release|Win32
+ {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.PGIRelease|Win32.Build.0 = Release|Win32
+ {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.PGIRelease|x64.ActiveCfg = Release|x64
+ {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.PGIRelease|x64.Build.0 = Release|x64
+ {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.PGORelease|Win32.ActiveCfg = Release|Win32
+ {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.PGORelease|Win32.Build.0 = Release|Win32
+ {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.PGORelease|x64.ActiveCfg = Release|x64
+ {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.PGORelease|x64.Build.0 = Release|x64
{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Release|Win32.ActiveCfg = Release|Win32
{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Release|Win32.Build.0 = Release|Win32
- {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.ReleaseAMD64|Win32.ActiveCfg = ReleaseAMD64|Win32
- {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.ReleaseItanium|Win32.ActiveCfg = ReleaseItanium|Win32
+ {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Release|x64.ActiveCfg = Release|x64
+ {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Release|x64.Build.0 = Release|x64
{2FF0A312-22F9-4C34-B070-842916DE27A9}.Debug|Win32.ActiveCfg = Debug|Win32
{2FF0A312-22F9-4C34-B070-842916DE27A9}.Debug|Win32.Build.0 = Debug|Win32
+ {2FF0A312-22F9-4C34-B070-842916DE27A9}.Debug|x64.ActiveCfg = Debug|x64
+ {2FF0A312-22F9-4C34-B070-842916DE27A9}.Debug|x64.Build.0 = Debug|x64
+ {2FF0A312-22F9-4C34-B070-842916DE27A9}.PGIRelease|Win32.ActiveCfg = Release|Win32
+ {2FF0A312-22F9-4C34-B070-842916DE27A9}.PGIRelease|Win32.Build.0 = Release|Win32
+ {2FF0A312-22F9-4C34-B070-842916DE27A9}.PGIRelease|x64.ActiveCfg = Release|x64
+ {2FF0A312-22F9-4C34-B070-842916DE27A9}.PGIRelease|x64.Build.0 = Release|x64
+ {2FF0A312-22F9-4C34-B070-842916DE27A9}.PGORelease|Win32.ActiveCfg = Release|Win32
+ {2FF0A312-22F9-4C34-B070-842916DE27A9}.PGORelease|Win32.Build.0 = Release|Win32
+ {2FF0A312-22F9-4C34-B070-842916DE27A9}.PGORelease|x64.ActiveCfg = Release|x64
+ {2FF0A312-22F9-4C34-B070-842916DE27A9}.PGORelease|x64.Build.0 = Release|x64
{2FF0A312-22F9-4C34-B070-842916DE27A9}.Release|Win32.ActiveCfg = Release|Win32
{2FF0A312-22F9-4C34-B070-842916DE27A9}.Release|Win32.Build.0 = Release|Win32
- {2FF0A312-22F9-4C34-B070-842916DE27A9}.ReleaseAMD64|Win32.ActiveCfg = ReleaseAMD64|Win32
- {2FF0A312-22F9-4C34-B070-842916DE27A9}.ReleaseAMD64|Win32.Build.0 = ReleaseAMD64|Win32
- {2FF0A312-22F9-4C34-B070-842916DE27A9}.ReleaseItanium|Win32.ActiveCfg = ReleaseItanium|Win32
- {2FF0A312-22F9-4C34-B070-842916DE27A9}.ReleaseItanium|Win32.Build.0 = ReleaseItanium|Win32
- {8B59C1FF-2439-4BE9-9F24-84D4982D28D4}.Debug|Win32.ActiveCfg = Release|Win32
- {8B59C1FF-2439-4BE9-9F24-84D4982D28D4}.Debug|Win32.Build.0 = Release|Win32
- {8B59C1FF-2439-4BE9-9F24-84D4982D28D4}.Release|Win32.ActiveCfg = Release|Win32
- {8B59C1FF-2439-4BE9-9F24-84D4982D28D4}.Release|Win32.Build.0 = Release|Win32
- {8B59C1FF-2439-4BE9-9F24-84D4982D28D4}.ReleaseAMD64|Win32.ActiveCfg = Release|Win32
- {8B59C1FF-2439-4BE9-9F24-84D4982D28D4}.ReleaseAMD64|Win32.Build.0 = Release|Win32
- {8B59C1FF-2439-4BE9-9F24-84D4982D28D4}.ReleaseItanium|Win32.ActiveCfg = Release|Win32
- {8B59C1FF-2439-4BE9-9F24-84D4982D28D4}.ReleaseItanium|Win32.Build.0 = Release|Win32
+ {2FF0A312-22F9-4C34-B070-842916DE27A9}.Release|x64.ActiveCfg = Release|x64
+ {2FF0A312-22F9-4C34-B070-842916DE27A9}.Release|x64.Build.0 = Release|x64
{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|Win32.ActiveCfg = Debug|Win32
{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|Win32.Build.0 = Debug|Win32
+ {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|x64.ActiveCfg = Debug|x64
+ {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|x64.Build.0 = Debug|x64
+ {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGIRelease|Win32.ActiveCfg = Release|Win32
+ {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGIRelease|Win32.Build.0 = Release|Win32
+ {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGIRelease|x64.ActiveCfg = Release|x64
+ {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGIRelease|x64.Build.0 = Release|x64
+ {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGORelease|Win32.ActiveCfg = Release|Win32
+ {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGORelease|Win32.Build.0 = Release|Win32
+ {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGORelease|x64.ActiveCfg = Release|x64
+ {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGORelease|x64.Build.0 = Release|x64
{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|Win32.ActiveCfg = Release|Win32
{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|Win32.Build.0 = Release|Win32
- {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.ReleaseAMD64|Win32.ActiveCfg = ReleaseAMD64|Win32
- {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.ReleaseAMD64|Win32.Build.0 = ReleaseAMD64|Win32
- {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.ReleaseItanium|Win32.ActiveCfg = ReleaseItanium|Win32
- {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.ReleaseItanium|Win32.Build.0 = ReleaseItanium|Win32
+ {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|x64.ActiveCfg = Release|x64
+ {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|x64.Build.0 = Release|x64
{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|Win32.ActiveCfg = Debug|Win32
{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|Win32.Build.0 = Debug|Win32
+ {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|x64.ActiveCfg = Debug|Win32
+ {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|x64.Build.0 = Debug|Win32
+ {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGIRelease|Win32.ActiveCfg = Release|Win32
+ {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGIRelease|Win32.Build.0 = Release|Win32
+ {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGIRelease|x64.ActiveCfg = Release|Win32
+ {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGORelease|Win32.ActiveCfg = Release|Win32
+ {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGORelease|Win32.Build.0 = Release|Win32
+ {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGORelease|x64.ActiveCfg = Release|Win32
{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|Win32.ActiveCfg = Release|Win32
{F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|Win32.Build.0 = Release|Win32
- {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.ReleaseAMD64|Win32.ActiveCfg = Release|Win32
- {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.ReleaseAMD64|Win32.Build.0 = Release|Win32
- {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.ReleaseItanium|Win32.ActiveCfg = Release|Win32
- {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.ReleaseItanium|Win32.Build.0 = Release|Win32
+ {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|x64.ActiveCfg = Release|Win32
+ {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|x64.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Modified: stackless/trunk/PCbuild8/python.vcproj
==============================================================================
--- stackless/trunk/PCbuild8/python.vcproj (original)
+++ stackless/trunk/PCbuild8/python.vcproj Sun Oct 15 16:42:33 2006
@@ -4,19 +4,23 @@
Version="8,00"
Name="python"
ProjectGUID="{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}"
+ RootNamespace="python"
>
<Platforms>
<Platform
Name="Win32"
/>
+ <Platform
+ Name="x64"
+ />
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Release|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-release\python"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\python"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -67,11 +71,12 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="odbccp32.lib"
- OutputFile=".\./python.exe"
+ OutputFile="$(OutDir)\python.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./python.pdb"
+ ProgramDatabaseFile=""
SubSystem="1"
StackReserveSize="2000000"
BaseAddress="0x1d000000"
@@ -103,9 +108,9 @@
/>
</Configuration>
<Configuration
- Name="Debug|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-debug\python"
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\python"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -126,15 +131,18 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- Optimization="0"
+ Optimization="2"
+ InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\Include,..\PC"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- RuntimeLibrary="3"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
- BrowseInformation="1"
WarningLevel="3"
SuppressStartupBanner="true"
DebugInformationFormat="3"
@@ -145,9 +153,8 @@
/>
<Tool
Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
+ PreprocessorDefinitions="NDEBUG"
Culture="1033"
- AdditionalIncludeDirectories="..\Include"
/>
<Tool
Name="VCPreLinkEventTool"
@@ -155,15 +162,16 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="odbccp32.lib"
- OutputFile="./python_d.exe"
+ OutputFile="$(OutDir)\python.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./python_d.pdb"
+ ProgramDatabaseFile=""
SubSystem="1"
StackReserveSize="2000000"
BaseAddress="0x1d000000"
- TargetMachine="1"
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
@@ -191,9 +199,9 @@
/>
</Configuration>
<Configuration
- Name="ReleaseItanium|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\ia64-temp-release\python"
+ Name="Debug|Win32"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\python"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -217,20 +225,14 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions=" /USECL:MS_ITANIUM /VSEXTCOMP_VERBOSE"
- Optimization="2"
- InlineFunctionExpansion="1"
+ Optimization="0"
AdditionalIncludeDirectories="..\Include,..\PC"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- StringPooling="true"
- BasicRuntimeChecks="0"
- RuntimeLibrary="2"
- BufferSecurityCheck="false"
- EnableFunctionLevelLinking="true"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ RuntimeLibrary="3"
UsePrecompiledHeader="0"
+ BrowseInformation="1"
WarningLevel="3"
SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
CompileAs="0"
/>
@@ -239,25 +241,26 @@
/>
<Tool
Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
+ PreprocessorDefinitions="_DEBUG"
Culture="1033"
+ AdditionalIncludeDirectories="..\Include"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK /VSEXTCOMP_VERBOSE"
AdditionalDependencies="odbccp32.lib"
- OutputFile=".\./python.exe"
+ OutputFile="$(OutDir)\python_d.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./python.pdb"
+ ProgramDatabaseFile=""
SubSystem="1"
StackReserveSize="2000000"
BaseAddress="0x1d000000"
- TargetMachine="0"
+ TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
@@ -285,9 +288,9 @@
/>
</Configuration>
<Configuration
- Name="ReleaseAMD64|Win32"
- OutputDirectory="."
- IntermediateDirectory="amd64-temp-release\python"
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\python"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -308,23 +311,18 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions=" /USECL:MS_OPTERON"
- Optimization="2"
- InlineFunctionExpansion="1"
+ Optimization="0"
AdditionalIncludeDirectories="..\Include,..\PC"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- StringPooling="true"
- BasicRuntimeChecks="0"
- RuntimeLibrary="2"
- BufferSecurityCheck="false"
- EnableFunctionLevelLinking="true"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ RuntimeLibrary="3"
UsePrecompiledHeader="0"
+ BrowseInformation="1"
WarningLevel="3"
SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
CompileAs="0"
/>
@@ -333,25 +331,26 @@
/>
<Tool
Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
+ PreprocessorDefinitions="_DEBUG"
Culture="1033"
+ AdditionalIncludeDirectories="..\Include"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
- AdditionalDependencies="odbccp32.lib"
- OutputFile=".\./python.exe"
+ AdditionalDependencies="odbccp32.lib python26_d.lib"
+ OutputFile="$(OutDir)\python_d.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./python.pdb"
+ ProgramDatabaseFile=""
SubSystem="1"
StackReserveSize="2000000"
BaseAddress="0x1d000000"
- TargetMachine="0"
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
Modified: stackless/trunk/PCbuild8/pythoncore.vcproj
==============================================================================
--- stackless/trunk/PCbuild8/pythoncore.vcproj (original)
+++ stackless/trunk/PCbuild8/pythoncore.vcproj Sun Oct 15 16:42:33 2006
@@ -10,14 +10,17 @@
<Platform
Name="Win32"
/>
+ <Platform
+ Name="x64"
+ />
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Release|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-release\pythoncore"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\pythoncore"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -25,6 +28,7 @@
>
<Tool
Name="VCPreBuildEventTool"
+ CommandLine=""
/>
<Tool
Name="VCCustomBuildTool"
@@ -66,22 +70,20 @@
/>
<Tool
Name="VCPreLinkEventTool"
- Description="generate buildinfo"
- CommandLine="make_buildinfo.exe $(ConfigurationName)
"
+ CommandLine=""
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="getbuildinfo.o"
- OutputFile="./python25.dll"
+ OutputFile="$(OutDir)\python26.dll"
LinkIncremental="1"
SuppressStartupBanner="true"
IgnoreDefaultLibraryNames="libc"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./python25.pdb"
+ ProgramDatabaseFile=""
SubSystem="2"
LinkTimeCodeGeneration="0"
BaseAddress="0x1e000000"
- ImportLibrary=".\./python25.lib"
+ ImportLibrary=""
TargetMachine="1"
/>
<Tool
@@ -110,9 +112,106 @@
/>
</Configuration>
<Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\pythoncore"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/Zm200 "
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ WholeProgramOptimization="false"
+ AdditionalIncludeDirectories="..\Include,..\PC"
+ PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT;_CRT_SECURE_NO_DEPRECATE"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ AdditionalIncludeDirectories="..\Include"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)\python26.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ IgnoreDefaultLibraryNames="libc"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=""
+ SubSystem="2"
+ LinkTimeCodeGeneration="0"
+ BaseAddress="0x1e000000"
+ ImportLibrary=""
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
Name="Debug|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-debug\pythoncore"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\pythoncore"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -162,16 +261,15 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="getbuildinfo.o"
- OutputFile="./python25_d.dll"
+ OutputFile="$(OutDir)\python26_d.dll"
LinkIncremental="1"
SuppressStartupBanner="true"
IgnoreDefaultLibraryNames="libc"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./python25_d.pdb"
+ ProgramDatabaseFile=""
SubSystem="2"
BaseAddress="0x1e000000"
- ImportLibrary=".\./python25_d.lib"
+ ImportLibrary=""
TargetMachine="1"
/>
<Tool
@@ -200,9 +298,98 @@
/>
</Configuration>
<Configuration
- Name="ReleaseItanium|Win32"
- OutputDirectory="./."
- IntermediateDirectory=".\ia64-temp-release\pythoncore"
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\pythoncore"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/Zm200 "
+ Optimization="0"
+ AdditionalIncludeDirectories="..\Include,..\PC"
+ PreprocessorDefinitions="_DEBUG;USE_DL_EXPORT;WIN32;_WINDOWS;_CRT_SECURE_NO_DEPRECATE"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ AdditionalIncludeDirectories="..\Include"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)\python26_d.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ IgnoreDefaultLibraryNames="libc"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=""
+ SubSystem="2"
+ BaseAddress="0x1e000000"
+ ImportLibrary=""
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="PGIRelease|Win32"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)\pythoncore"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\pythoncore"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -210,6 +397,8 @@
>
<Tool
Name="VCPreBuildEventTool"
+ Description="Get getbuildinfo2.c"
+ CommandLine="make_buildinfo.exe"
/>
<Tool
Name="VCCustomBuildTool"
@@ -225,20 +414,18 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions=" /USECL:MS_ITANIUM"
+ AdditionalOptions="/Zm200 "
Optimization="2"
InlineFunctionExpansion="1"
+ WholeProgramOptimization="true"
AdditionalIncludeDirectories="..\Include,..\PC"
- PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT"
+ PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT;_CRT_SECURE_NO_DEPRECATE"
StringPooling="true"
- BasicRuntimeChecks="0"
RuntimeLibrary="2"
- BufferSecurityCheck="false"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
CompileAs="0"
/>
@@ -253,23 +440,21 @@
/>
<Tool
Name="VCPreLinkEventTool"
- Description="generate buildinfo"
- CommandLine="make_buildinfo.exe $(ConfigurationName)"
+ CommandLine=""
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
- AdditionalDependencies="getbuildinfo.o"
- OutputFile="./python25.dll"
+ OutputFile="$(OutDir)/python26.dll"
LinkIncremental="1"
- SuppressStartupBanner="false"
+ SuppressStartupBanner="true"
IgnoreDefaultLibraryNames="libc"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./python25.pdb"
+ ProgramDatabaseFile=""
SubSystem="2"
+ LinkTimeCodeGeneration="2"
BaseAddress="0x1e000000"
- ImportLibrary=".\./python25.lib"
- TargetMachine="0"
+ ImportLibrary=""
+ TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
@@ -294,12 +479,13 @@
/>
<Tool
Name="VCPostBuildEventTool"
+ CommandLine=""
/>
</Configuration>
<Configuration
- Name="ReleaseAMD64|Win32"
- OutputDirectory="./."
- IntermediateDirectory=".\amd64-temp-release\pythoncore"
+ Name="PGIRelease|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)\pythoncore"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\pythoncore"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -307,6 +493,8 @@
>
<Tool
Name="VCPreBuildEventTool"
+ Description="Get getbuildinfo2.c"
+ CommandLine="make_buildinfo.exe"
/>
<Tool
Name="VCCustomBuildTool"
@@ -319,23 +507,22 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions="/Zm200 /USECL:MS_OPTERON /GS-"
+ AdditionalOptions="/Zm200 "
Optimization="2"
InlineFunctionExpansion="1"
+ WholeProgramOptimization="true"
AdditionalIncludeDirectories="..\Include,..\PC"
- PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT"
+ PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT;_CRT_SECURE_NO_DEPRECATE"
StringPooling="true"
- BasicRuntimeChecks="0"
RuntimeLibrary="2"
- BufferSecurityCheck="false"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
CompileAs="0"
/>
@@ -350,23 +537,21 @@
/>
<Tool
Name="VCPreLinkEventTool"
- Description="generate buildinfo"
- CommandLine="make_buildinfo.exe $(ConfigurationName)"
+ CommandLine=""
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
- AdditionalDependencies="getbuildinfo.o"
- OutputFile="./python25.dll"
+ OutputFile="$(OutDir)/python26.dll"
LinkIncremental="1"
SuppressStartupBanner="true"
IgnoreDefaultLibraryNames="libc"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./python25.pdb"
+ ProgramDatabaseFile=""
SubSystem="2"
+ LinkTimeCodeGeneration="2"
BaseAddress="0x1e000000"
- ImportLibrary=".\./python25.lib"
- TargetMachine="0"
+ ImportLibrary=""
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
@@ -391,97 +576,651 @@
/>
<Tool
Name="VCPostBuildEventTool"
+ CommandLine=""
/>
</Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="zlib"
+ <Configuration
+ Name="PGORelease|Win32"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\PGIRelease\pythoncore"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ BuildLogFile="$(OutDir)\BuildLog.htm"
+ ExcludeBuckets="7"
>
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/Zm200 "
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="..\Include,..\PC"
+ PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT;_CRT_SECURE_NO_DEPRECATE"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ AdditionalIncludeDirectories="..\Include"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ CommandLine="copy $(PlatformName)\python.exe $(IntDir)
$(IntDir)\python.exe ../Tools/pybench/pybench.py -n 1
"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)\python26.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ IgnoreDefaultLibraryNames="libc"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=""
+ SubSystem="2"
+ LinkTimeCodeGeneration="3"
+ ProfileGuidedDatabase="$(IntDir)\$(TargetName).pgd"
+ BaseAddress="0x1e000000"
+ ImportLibrary=""
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="PGORelease|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\pythoncore"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ BuildLogFile="$(OutDir)\BuildLog.htm"
+ ExcludeBuckets="7"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/Zm200 "
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="..\Include,..\PC"
+ PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT;_CRT_SECURE_NO_DEPRECATE"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ AdditionalIncludeDirectories="..\Include"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ CommandLine="copy $(PlatformName)\python.exe $(IntDir)
$(IntDir)\python.exe ../Tools/pybench/pybench.py -n 1
"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)\python26.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ IgnoreDefaultLibraryNames="libc"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=""
+ SubSystem="2"
+ LinkTimeCodeGeneration="3"
+ ProfileGuidedDatabase="$(IntDir)\$(TargetName).pgd"
+ BaseAddress="0x1e000000"
+ ImportLibrary=""
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="zlib"
+ >
+ <File
+ RelativePath="..\Modules\zlib\adler32.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Modules\zlib\compress.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Modules\zlib\crc32.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Modules\zlib\deflate.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Modules\zlib\gzio.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Modules\zlib\infback.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Modules\zlib\inffast.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Modules\zlib\inflate.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Modules\zlib\inftrees.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Modules\zlib\trees.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Modules\zlib\uncompr.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Modules\zlibmodule.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\Modules\zlib"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\Modules\zlib"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\Modules\zlib"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\Modules\zlib"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="PGIRelease|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\Modules\zlib"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="PGIRelease|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\Modules\zlib"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="PGORelease|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\Modules\zlib"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="PGORelease|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\Modules\zlib"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\Modules\zlib\zutil.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="include files"
+ >
+ <File
+ RelativePath="..\Include\abstract.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\asdl.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\ast.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\bitset.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\boolobject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\bufferobject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\cellobject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\ceval.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\classobject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\cobject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\code.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\codecs.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\compile.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\complexobject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\cStringIO.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\datetime.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\descrobject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\dictobject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\enumobject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\errcode.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\eval.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\fileobject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\floatobject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\frameobject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\funcobject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\genobject.h"
+ >
+ </File>
<File
- RelativePath="..\Modules\zlib\adler32.c"
+ RelativePath="..\Include\graminit.h"
>
</File>
<File
- RelativePath="..\Modules\zlib\compress.c"
+ RelativePath="..\Include\grammar.h"
>
</File>
<File
- RelativePath="..\Modules\zlib\crc32.c"
+ RelativePath="..\Include\import.h"
>
</File>
<File
- RelativePath="..\Modules\zlib\deflate.c"
+ RelativePath="..\Include\intobject.h"
>
</File>
<File
- RelativePath="..\Modules\zlib\gzio.c"
+ RelativePath="..\Include\intrcheck.h"
>
</File>
<File
- RelativePath="..\Modules\zlib\infback.c"
+ RelativePath="..\Include\iterobject.h"
>
</File>
<File
- RelativePath="..\Modules\zlib\inffast.c"
+ RelativePath="..\Include\listobject.h"
>
</File>
<File
- RelativePath="..\Modules\zlib\inflate.c"
+ RelativePath="..\Include\longintrepr.h"
>
</File>
<File
- RelativePath="..\Modules\zlib\inftrees.c"
+ RelativePath="..\Include\longobject.h"
>
</File>
<File
- RelativePath="..\Modules\zlib\trees.c"
+ RelativePath="..\Include\marshal.h"
>
</File>
<File
- RelativePath="..\Modules\zlib\uncompr.c"
+ RelativePath="..\Include\metagrammar.h"
>
</File>
<File
- RelativePath="..\Modules\zlibmodule.c"
+ RelativePath="..\Include\methodobject.h"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\Modules\zlib"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\Modules\zlib"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="ReleaseItanium|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\Modules\zlib"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="ReleaseAMD64|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\Modules\zlib"
- />
- </FileConfiguration>
</File>
<File
- RelativePath="..\Modules\zlib\zutil.c"
+ RelativePath="..\Include\modsupport.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\moduleobject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\node.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\object.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\objimpl.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\opcode.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\osdefs.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\parsetok.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\patchlevel.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\pgen.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\pgenheaders.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\py_curses.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\pyarena.h"
+ >
+ </File>
+ <File
+ RelativePath="..\PC\pyconfig.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\pydebug.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\pyerrors.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\pyexpat.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\pyfpe.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\pygetopt.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\pymactoolbox.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\pymem.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\pyport.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\pystate.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\pystrtod.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\Python-ast.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\Python.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\pythonrun.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\pythread.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\rangeobject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\setobject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\sliceobject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\stringobject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\structmember.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\structseq.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\symtable.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\sysmodule.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\timefuncs.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\token.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\traceback.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\tupleobject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\ucnhash.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\unicodeobject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Include\weakrefobject.h"
>
</File>
</Filter>
@@ -558,6 +1297,10 @@
>
</File>
<File
+ RelativePath="..\Modules\_typesmodule.c"
+ >
+ </File>
+ <File
RelativePath="..\Modules\_weakref.c"
>
</File>
@@ -738,6 +1481,74 @@
>
</File>
<File
+ RelativePath=".\getbuildinfo2.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ForcedIncludeFiles="getbuildinfo2.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ForcedIncludeFiles="getbuildinfo2.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ForcedIncludeFiles="getbuildinfo2.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ForcedIncludeFiles="getbuildinfo2.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="PGIRelease|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ForcedIncludeFiles="getbuildinfo2.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="PGIRelease|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ForcedIncludeFiles="getbuildinfo2.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="PGORelease|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ForcedIncludeFiles="getbuildinfo2.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="PGORelease|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ForcedIncludeFiles="getbuildinfo2.h"
+ />
+ </FileConfiguration>
+ </File>
+ <File
RelativePath="..\Python\getcompiler.c"
>
</File>
@@ -797,6 +1608,14 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\Python"
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Debug|Win32"
>
<Tool
@@ -805,7 +1624,31 @@
/>
</FileConfiguration>
<FileConfiguration
- Name="ReleaseItanium|Win32"
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\Python"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="PGIRelease|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\Python"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="PGIRelease|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\Python"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="PGORelease|Win32"
>
<Tool
Name="VCCLCompilerTool"
@@ -813,7 +1656,7 @@
/>
</FileConfiguration>
<FileConfiguration
- Name="ReleaseAMD64|Win32"
+ Name="PGORelease|x64"
>
<Tool
Name="VCCLCompilerTool"
@@ -938,6 +1781,10 @@
>
</File>
<File
+ RelativePath="..\Python\peephole.c"
+ >
+ </File>
+ <File
RelativePath="..\Modules\posixmodule.c"
>
</File>
Deleted: /stackless/trunk/PCbuild8/pythoncore_pgo.vcproj
==============================================================================
--- /stackless/trunk/PCbuild8/pythoncore_pgo.vcproj Sun Oct 15 16:42:33 2006
+++ (empty file)
@@ -1,781 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8,00"
- Name="pythoncore_pgo"
- ProjectGUID="{8B59C1FF-2439-4BE9-9F24-84D4982D28D4}"
- RootNamespace="pythoncore_pgo"
- Keyword="Win32Proj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(ProjectName)"
- IntermediateDirectory=".\x86-temp-release\$(ProjectName)"
- ConfigurationType="2"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/Zm200 "
- Optimization="2"
- InlineFunctionExpansion="1"
- WholeProgramOptimization="true"
- AdditionalIncludeDirectories="..\Include,..\PC"
- PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT;_CRT_SECURE_NO_DEPRECATE"
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- SuppressStartupBanner="true"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- AdditionalIncludeDirectories="..\Include"
- />
- <Tool
- Name="VCPreLinkEventTool"
- Description="Generate buildinfo & profile guided optimizations (please be patient)"
- CommandLine="make_buildinfo.exe $(ConfigurationName)
link @$(ProjectName)_link.txt
$(OutDir)\python ../Tools/pybench/pybench.py -n 1
"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="getbuildinfo.o"
- OutputFile="$(OutDir)/python25.dll"
- LinkIncremental="1"
- SuppressStartupBanner="true"
- IgnoreDefaultLibraryNames="libc"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)/python25.pdb"
- SubSystem="2"
- LinkTimeCodeGeneration="3"
- BaseAddress="0x1e000000"
- ImportLibrary="$(OutDir)/python25.lib"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="zlib"
- >
- <File
- RelativePath="..\Modules\zlib\adler32.c"
- >
- </File>
- <File
- RelativePath="..\Modules\zlib\compress.c"
- >
- </File>
- <File
- RelativePath="..\Modules\zlib\crc32.c"
- >
- </File>
- <File
- RelativePath="..\Modules\zlib\deflate.c"
- >
- </File>
- <File
- RelativePath="..\Modules\zlib\gzio.c"
- >
- </File>
- <File
- RelativePath="..\Modules\zlib\infback.c"
- >
- </File>
- <File
- RelativePath="..\Modules\zlib\inffast.c"
- >
- </File>
- <File
- RelativePath="..\Modules\zlib\inflate.c"
- >
- </File>
- <File
- RelativePath="..\Modules\zlib\inftrees.c"
- >
- </File>
- <File
- RelativePath="..\Modules\zlib\trees.c"
- >
- </File>
- <File
- RelativePath="..\Modules\zlib\uncompr.c"
- >
- </File>
- <File
- RelativePath="..\Modules\zlibmodule.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\Modules\zlib"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\Modules\zlib\zutil.c"
- >
- </File>
- </Filter>
- <File
- RelativePath="..\Modules\_bisectmodule.c"
- >
- </File>
- <File
- RelativePath="..\Modules\cjkcodecs\_codecs_cn.c"
- >
- </File>
- <File
- RelativePath="..\Modules\cjkcodecs\_codecs_hk.c"
- >
- </File>
- <File
- RelativePath="..\Modules\cjkcodecs\_codecs_iso2022.c"
- >
- </File>
- <File
- RelativePath="..\Modules\cjkcodecs\_codecs_jp.c"
- >
- </File>
- <File
- RelativePath="..\Modules\cjkcodecs\_codecs_kr.c"
- >
- </File>
- <File
- RelativePath="..\Modules\cjkcodecs\_codecs_tw.c"
- >
- </File>
- <File
- RelativePath="..\Modules\_codecsmodule.c"
- >
- </File>
- <File
- RelativePath="..\Modules\_csv.c"
- >
- </File>
- <File
- RelativePath="..\Modules\_functoolsmodule.c"
- >
- </File>
- <File
- RelativePath="..\Modules\_heapqmodule.c"
- >
- </File>
- <File
- RelativePath="..\Modules\_hotshot.c"
- >
- </File>
- <File
- RelativePath="..\Modules\_localemodule.c"
- >
- </File>
- <File
- RelativePath="..\Modules\_lsprof.c"
- >
- </File>
- <File
- RelativePath="..\Modules\_randommodule.c"
- >
- </File>
- <File
- RelativePath="..\Modules\_sre.c"
- >
- </File>
- <File
- RelativePath="..\Modules\_struct.c"
- >
- </File>
- <File
- RelativePath="..\Pc\_subprocess.c"
- >
- </File>
- <File
- RelativePath="..\Modules\_weakref.c"
- >
- </File>
- <File
- RelativePath="..\Pc\_winreg.c"
- >
- </File>
- <File
- RelativePath="..\Objects\abstract.c"
- >
- </File>
- <File
- RelativePath="..\Parser\acceler.c"
- >
- </File>
- <File
- RelativePath="..\Modules\arraymodule.c"
- >
- </File>
- <File
- RelativePath="..\Python\asdl.c"
- >
- </File>
- <File
- RelativePath="..\Python\ast.c"
- >
- </File>
- <File
- RelativePath="..\Modules\audioop.c"
- >
- </File>
- <File
- RelativePath="..\Modules\binascii.c"
- >
- </File>
- <File
- RelativePath="..\Parser\bitset.c"
- >
- </File>
- <File
- RelativePath="..\Python\bltinmodule.c"
- >
- </File>
- <File
- RelativePath="..\Objects\boolobject.c"
- >
- </File>
- <File
- RelativePath="..\Objects\bufferobject.c"
- >
- </File>
- <File
- RelativePath="..\Objects\cellobject.c"
- >
- </File>
- <File
- RelativePath="..\Python\ceval.c"
- >
- </File>
- <File
- RelativePath="..\Objects\classobject.c"
- >
- </File>
- <File
- RelativePath="..\Modules\cmathmodule.c"
- >
- </File>
- <File
- RelativePath="..\Objects\cobject.c"
- >
- </File>
- <File
- RelativePath="..\Python\codecs.c"
- >
- </File>
- <File
- RelativePath="..\Objects\codeobject.c"
- >
- </File>
- <File
- RelativePath="..\Modules\collectionsmodule.c"
- >
- </File>
- <File
- RelativePath="..\Python\compile.c"
- >
- </File>
- <File
- RelativePath="..\Objects\complexobject.c"
- >
- </File>
- <File
- RelativePath="..\PC\config.c"
- >
- </File>
- <File
- RelativePath="..\Modules\cPickle.c"
- >
- </File>
- <File
- RelativePath="..\Modules\cStringIO.c"
- >
- </File>
- <File
- RelativePath="..\Modules\datetimemodule.c"
- >
- </File>
- <File
- RelativePath="..\Objects\descrobject.c"
- >
- </File>
- <File
- RelativePath="..\Objects\dictobject.c"
- >
- </File>
- <File
- RelativePath="..\PC\dl_nt.c"
- >
- </File>
- <File
- RelativePath="..\Python\dynload_win.c"
- >
- </File>
- <File
- RelativePath="..\Objects\enumobject.c"
- >
- </File>
- <File
- RelativePath="..\Modules\errnomodule.c"
- >
- </File>
- <File
- RelativePath="..\Python\errors.c"
- >
- </File>
- <File
- RelativePath="..\Objects\exceptions.c"
- >
- </File>
- <File
- RelativePath="..\Objects\fileobject.c"
- >
- </File>
- <File
- RelativePath="..\Parser\firstsets.c"
- >
- </File>
- <File
- RelativePath="..\Objects\floatobject.c"
- >
- </File>
- <File
- RelativePath="..\Objects\frameobject.c"
- >
- </File>
- <File
- RelativePath="..\Python\frozen.c"
- >
- </File>
- <File
- RelativePath="..\Objects\funcobject.c"
- >
- </File>
- <File
- RelativePath="..\Python\future.c"
- >
- </File>
- <File
- RelativePath="..\Modules\gcmodule.c"
- >
- </File>
- <File
- RelativePath="..\Objects\genobject.c"
- >
- </File>
- <File
- RelativePath="..\Python\getargs.c"
- >
- </File>
- <File
- RelativePath="..\Python\getcompiler.c"
- >
- </File>
- <File
- RelativePath="..\Python\getcopyright.c"
- >
- </File>
- <File
- RelativePath="..\Python\getmtime.c"
- >
- </File>
- <File
- RelativePath="..\Python\getopt.c"
- >
- </File>
- <File
- RelativePath="..\PC\getpathp.c"
- >
- </File>
- <File
- RelativePath="..\Python\getplatform.c"
- >
- </File>
- <File
- RelativePath="..\Python\getversion.c"
- >
- </File>
- <File
- RelativePath="..\Python\graminit.c"
- >
- </File>
- <File
- RelativePath="..\Parser\grammar.c"
- >
- </File>
- <File
- RelativePath="..\Parser\grammar1.c"
- >
- </File>
- <File
- RelativePath="..\Modules\imageop.c"
- >
- </File>
- <File
- RelativePath="..\Python\import.c"
- >
- </File>
- <File
- RelativePath="..\PC\import_nt.c"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\Python"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\Python\importdl.c"
- >
- </File>
- <File
- RelativePath="..\Objects\intobject.c"
- >
- </File>
- <File
- RelativePath="..\Objects\iterobject.c"
- >
- </File>
- <File
- RelativePath="..\Modules\itertoolsmodule.c"
- >
- </File>
- <File
- RelativePath="..\Parser\listnode.c"
- >
- </File>
- <File
- RelativePath="..\Objects\listobject.c"
- >
- </File>
- <File
- RelativePath="..\Objects\longobject.c"
- >
- </File>
- <File
- RelativePath="..\Modules\main.c"
- >
- </File>
- <File
- RelativePath="..\Python\marshal.c"
- >
- </File>
- <File
- RelativePath="..\Modules\mathmodule.c"
- >
- </File>
- <File
- RelativePath="..\Modules\md5.c"
- >
- </File>
- <File
- RelativePath="..\Modules\md5module.c"
- >
- </File>
- <File
- RelativePath="..\Parser\metagrammar.c"
- >
- </File>
- <File
- RelativePath="..\Objects\methodobject.c"
- >
- </File>
- <File
- RelativePath="..\Modules\mmapmodule.c"
- >
- </File>
- <File
- RelativePath="..\Python\modsupport.c"
- >
- </File>
- <File
- RelativePath="..\Objects\moduleobject.c"
- >
- </File>
- <File
- RelativePath="..\PC\msvcrtmodule.c"
- >
- </File>
- <File
- RelativePath="..\Modules\cjkcodecs\multibytecodec.c"
- >
- </File>
- <File
- RelativePath="..\Parser\myreadline.c"
- >
- </File>
- <File
- RelativePath="..\Python\mysnprintf.c"
- >
- </File>
- <File
- RelativePath="..\Python\mystrtoul.c"
- >
- </File>
- <File
- RelativePath="..\Parser\node.c"
- >
- </File>
- <File
- RelativePath="..\Objects\object.c"
- >
- </File>
- <File
- RelativePath="..\Objects\obmalloc.c"
- >
- </File>
- <File
- RelativePath="..\Modules\operator.c"
- >
- </File>
- <File
- RelativePath="..\Parser\parser.c"
- >
- </File>
- <File
- RelativePath="..\Modules\parsermodule.c"
- >
- </File>
- <File
- RelativePath="..\Parser\parsetok.c"
- >
- </File>
- <File
- RelativePath="..\Modules\posixmodule.c"
- >
- </File>
- <File
- RelativePath="..\Python\pyarena.c"
- >
- </File>
- <File
- RelativePath="..\Python\pyfpe.c"
- >
- </File>
- <File
- RelativePath="..\Python\pystate.c"
- >
- </File>
- <File
- RelativePath="..\Python\pystrtod.c"
- >
- </File>
- <File
- RelativePath="..\Python\Python-ast.c"
- >
- </File>
- <File
- RelativePath="..\PCbuild8\python.exe"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- CommandLine="xcopy $(InputFileName)* $(OutDir) /F /I /Y
"
- Outputs="$(OutDir)\$(InputFileName)"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\PC\python_nt.rc"
- >
- </File>
- <File
- RelativePath="..\Python\pythonrun.c"
- >
- </File>
- <File
- RelativePath="..\Objects\rangeobject.c"
- >
- </File>
- <File
- RelativePath="..\Modules\rgbimgmodule.c"
- >
- </File>
- <File
- RelativePath="..\Modules\rotatingtree.c"
- >
- </File>
- <File
- RelativePath="..\Objects\setobject.c"
- >
- </File>
- <File
- RelativePath="..\Modules\sha256module.c"
- >
- </File>
- <File
- RelativePath="..\Modules\sha512module.c"
- >
- </File>
- <File
- RelativePath="..\Modules\sha512module.c"
- >
- </File>
- <File
- RelativePath="..\Modules\shamodule.c"
- >
- </File>
- <File
- RelativePath="..\Modules\signalmodule.c"
- >
- </File>
- <File
- RelativePath="..\Modules\signalmodule.c"
- >
- </File>
- <File
- RelativePath="..\Objects\sliceobject.c"
- >
- </File>
- <File
- RelativePath="..\Objects\stringobject.c"
- >
- </File>
- <File
- RelativePath="..\Modules\stropmodule.c"
- >
- </File>
- <File
- RelativePath="..\Python\structmember.c"
- >
- </File>
- <File
- RelativePath="..\Objects\structseq.c"
- >
- </File>
- <File
- RelativePath="..\Python\symtable.c"
- >
- </File>
- <File
- RelativePath="..\Modules\symtablemodule.c"
- >
- </File>
- <File
- RelativePath="..\Python\sysmodule.c"
- >
- </File>
- <File
- RelativePath="..\Python\thread.c"
- >
- </File>
- <File
- RelativePath="..\Modules\threadmodule.c"
- >
- </File>
- <File
- RelativePath="..\Modules\timemodule.c"
- >
- </File>
- <File
- RelativePath="..\Parser\tokenizer.c"
- >
- </File>
- <File
- RelativePath="..\Python\traceback.c"
- >
- </File>
- <File
- RelativePath="..\Objects\tupleobject.c"
- >
- </File>
- <File
- RelativePath="..\Objects\typeobject.c"
- >
- </File>
- <File
- RelativePath="..\Objects\unicodectype.c"
- >
- </File>
- <File
- RelativePath="..\Objects\unicodeobject.c"
- >
- </File>
- <File
- RelativePath="..\Objects\weakrefobject.c"
- >
- </File>
- <File
- RelativePath="..\Modules\xxsubtype.c"
- >
- </File>
- <File
- RelativePath="..\Modules\yuvconvert.c"
- >
- </File>
- <File
- RelativePath="..\Modules\zipimport.c"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
Deleted: /stackless/trunk/PCbuild8/pythoncore_pgo_link.txt
==============================================================================
--- /stackless/trunk/PCbuild8/pythoncore_pgo_link.txt Sun Oct 15 16:42:33 2006
+++ (empty file)
@@ -1,311 +0,0 @@
-/OUT:".\pythoncore_pgo/python25.dll" /INCREMENTAL:NO /DLL /MANIFEST /MANIFESTFILE:".\x86-temp-release\pythoncore_pgo\python25.dll.intermediate.manifest" /NODEFAULTLIB:"libc" /DEBUG /PDB:".\pythoncore_pgo/python25.pdb" /SUBSYSTEM:WINDOWS /LTCG:PGINSTRUMENT /PGD:".\pythoncore_pgo\python25.pgd" /BASE:"0x1e000000" /IMPLIB:"pythoncore_pgo/python25.lib" /MACHINE:X86 getbuildinfo.o kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
-
-".\x86-temp-release\pythoncore_pgo\adler32.obj"
-
-".\x86-temp-release\pythoncore_pgo\compress.obj"
-
-".\x86-temp-release\pythoncore_pgo\crc32.obj"
-
-".\x86-temp-release\pythoncore_pgo\deflate.obj"
-
-".\x86-temp-release\pythoncore_pgo\gzio.obj"
-
-".\x86-temp-release\pythoncore_pgo\infback.obj"
-
-".\x86-temp-release\pythoncore_pgo\inffast.obj"
-
-".\x86-temp-release\pythoncore_pgo\inflate.obj"
-
-".\x86-temp-release\pythoncore_pgo\inftrees.obj"
-
-".\x86-temp-release\pythoncore_pgo\trees.obj"
-
-".\x86-temp-release\pythoncore_pgo\uncompr.obj"
-
-".\x86-temp-release\pythoncore_pgo\zlibmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\zutil.obj"
-
-".\x86-temp-release\pythoncore_pgo\_bisectmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\_codecs_cn.obj"
-
-".\x86-temp-release\pythoncore_pgo\_codecs_hk.obj"
-
-".\x86-temp-release\pythoncore_pgo\_codecs_iso2022.obj"
-
-".\x86-temp-release\pythoncore_pgo\_codecs_jp.obj"
-
-".\x86-temp-release\pythoncore_pgo\_codecs_kr.obj"
-
-".\x86-temp-release\pythoncore_pgo\_codecs_tw.obj"
-
-".\x86-temp-release\pythoncore_pgo\_codecsmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\_csv.obj"
-
-".\x86-temp-release\pythoncore_pgo\_functoolsmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\_heapqmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\_hotshot.obj"
-
-".\x86-temp-release\pythoncore_pgo\_localemodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\_lsprof.obj"
-
-".\x86-temp-release\pythoncore_pgo\_randommodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\_sre.obj"
-
-".\x86-temp-release\pythoncore_pgo\_struct.obj"
-
-".\x86-temp-release\pythoncore_pgo\_subprocess.obj"
-
-".\x86-temp-release\pythoncore_pgo\_weakref.obj"
-
-".\x86-temp-release\pythoncore_pgo\_winreg.obj"
-
-".\x86-temp-release\pythoncore_pgo\abstract.obj"
-
-".\x86-temp-release\pythoncore_pgo\acceler.obj"
-
-".\x86-temp-release\pythoncore_pgo\arraymodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\asdl.obj"
-
-".\x86-temp-release\pythoncore_pgo\ast.obj"
-
-".\x86-temp-release\pythoncore_pgo\audioop.obj"
-
-".\x86-temp-release\pythoncore_pgo\binascii.obj"
-
-".\x86-temp-release\pythoncore_pgo\bitset.obj"
-
-".\x86-temp-release\pythoncore_pgo\bltinmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\boolobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\bufferobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\cellobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\ceval.obj"
-
-".\x86-temp-release\pythoncore_pgo\classobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\cmathmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\cobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\codecs.obj"
-
-".\x86-temp-release\pythoncore_pgo\codeobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\collectionsmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\compile.obj"
-
-".\x86-temp-release\pythoncore_pgo\complexobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\config.obj"
-
-".\x86-temp-release\pythoncore_pgo\cPickle.obj"
-
-".\x86-temp-release\pythoncore_pgo\cStringIO.obj"
-
-".\x86-temp-release\pythoncore_pgo\datetimemodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\descrobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\dictobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\dl_nt.obj"
-
-".\x86-temp-release\pythoncore_pgo\dynload_win.obj"
-
-".\x86-temp-release\pythoncore_pgo\enumobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\errnomodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\errors.obj"
-
-".\x86-temp-release\pythoncore_pgo\exceptions.obj"
-
-".\x86-temp-release\pythoncore_pgo\fileobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\firstsets.obj"
-
-".\x86-temp-release\pythoncore_pgo\floatobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\frameobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\frozen.obj"
-
-".\x86-temp-release\pythoncore_pgo\funcobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\future.obj"
-
-".\x86-temp-release\pythoncore_pgo\gcmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\genobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\getargs.obj"
-
-".\x86-temp-release\pythoncore_pgo\getcompiler.obj"
-
-".\x86-temp-release\pythoncore_pgo\getcopyright.obj"
-
-".\x86-temp-release\pythoncore_pgo\getmtime.obj"
-
-".\x86-temp-release\pythoncore_pgo\getopt.obj"
-
-".\x86-temp-release\pythoncore_pgo\getpathp.obj"
-
-".\x86-temp-release\pythoncore_pgo\getplatform.obj"
-
-".\x86-temp-release\pythoncore_pgo\getversion.obj"
-
-".\x86-temp-release\pythoncore_pgo\graminit.obj"
-
-".\x86-temp-release\pythoncore_pgo\grammar.obj"
-
-".\x86-temp-release\pythoncore_pgo\grammar1.obj"
-
-".\x86-temp-release\pythoncore_pgo\imageop.obj"
-
-".\x86-temp-release\pythoncore_pgo\import.obj"
-
-".\x86-temp-release\pythoncore_pgo\import_nt.obj"
-
-".\x86-temp-release\pythoncore_pgo\importdl.obj"
-
-".\x86-temp-release\pythoncore_pgo\intobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\iterobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\itertoolsmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\listnode.obj"
-
-".\x86-temp-release\pythoncore_pgo\listobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\longobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\main.obj"
-
-".\x86-temp-release\pythoncore_pgo\marshal.obj"
-
-".\x86-temp-release\pythoncore_pgo\mathmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\md5.obj"
-
-".\x86-temp-release\pythoncore_pgo\md5module.obj"
-
-".\x86-temp-release\pythoncore_pgo\metagrammar.obj"
-
-".\x86-temp-release\pythoncore_pgo\methodobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\mmapmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\modsupport.obj"
-
-".\x86-temp-release\pythoncore_pgo\moduleobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\msvcrtmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\multibytecodec.obj"
-
-".\x86-temp-release\pythoncore_pgo\myreadline.obj"
-
-".\x86-temp-release\pythoncore_pgo\mysnprintf.obj"
-
-".\x86-temp-release\pythoncore_pgo\mystrtoul.obj"
-
-".\x86-temp-release\pythoncore_pgo\node.obj"
-
-".\x86-temp-release\pythoncore_pgo\object.obj"
-
-".\x86-temp-release\pythoncore_pgo\obmalloc.obj"
-
-".\x86-temp-release\pythoncore_pgo\operator.obj"
-
-".\x86-temp-release\pythoncore_pgo\parser.obj"
-
-".\x86-temp-release\pythoncore_pgo\parsermodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\parsetok.obj"
-
-".\x86-temp-release\pythoncore_pgo\posixmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\pyarena.obj"
-
-".\x86-temp-release\pythoncore_pgo\pyfpe.obj"
-
-".\x86-temp-release\pythoncore_pgo\pystate.obj"
-
-".\x86-temp-release\pythoncore_pgo\pystrtod.obj"
-
-".\x86-temp-release\pythoncore_pgo\Python-ast.obj"
-
-".\x86-temp-release\pythoncore_pgo\python_nt.res"
-
-".\x86-temp-release\pythoncore_pgo\pythonrun.obj"
-
-".\x86-temp-release\pythoncore_pgo\rangeobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\rgbimgmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\rotatingtree.obj"
-
-".\x86-temp-release\pythoncore_pgo\setobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\sha256module.obj"
-
-".\x86-temp-release\pythoncore_pgo\sha512module.obj"
-
-".\x86-temp-release\pythoncore_pgo\shamodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\signalmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\sliceobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\stringobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\stropmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\structmember.obj"
-
-".\x86-temp-release\pythoncore_pgo\structseq.obj"
-
-".\x86-temp-release\pythoncore_pgo\symtable.obj"
-
-".\x86-temp-release\pythoncore_pgo\symtablemodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\sysmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\thread.obj"
-
-".\x86-temp-release\pythoncore_pgo\threadmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\timemodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\tokenizer.obj"
-
-".\x86-temp-release\pythoncore_pgo\traceback.obj"
-
-".\x86-temp-release\pythoncore_pgo\tupleobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\typeobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\unicodectype.obj"
-
-".\x86-temp-release\pythoncore_pgo\unicodeobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\weakrefobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\xxsubtype.obj"
-
-".\x86-temp-release\pythoncore_pgo\yuvconvert.obj"
-
-".\x86-temp-release\pythoncore_pgo\zipimport.obj"
Modified: stackless/trunk/PCbuild8/pythonw.vcproj
==============================================================================
--- stackless/trunk/PCbuild8/pythonw.vcproj (original)
+++ stackless/trunk/PCbuild8/pythonw.vcproj Sun Oct 15 16:42:33 2006
@@ -4,19 +4,23 @@
Version="8,00"
Name="pythonw"
ProjectGUID="{F4229CC3-873C-49AE-9729-DD308ED4CD4A}"
+ RootNamespace="pythonw"
>
<Platforms>
<Platform
Name="Win32"
/>
+ <Platform
+ Name="x64"
+ />
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-debug\pythonw"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\pythonw"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -62,11 +66,12 @@
/>
<Tool
Name="VCLinkerTool"
- OutputFile="./pythonw_d.exe"
+ OutputFile="$(OutDir)\pythonw_d.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./pythonw_d.pdb"
+ ProgramDatabaseFile=""
SubSystem="2"
StackReserveSize="2000000"
BaseAddress="0x1d000000"
@@ -98,9 +103,9 @@
/>
</Configuration>
<Configuration
- Name="Release|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-release\pythonw"
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\pythonw"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -120,16 +125,14 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
+ Optimization="0"
AdditionalIncludeDirectories="..\Include,..\PC"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+ RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
@@ -141,7 +144,7 @@
/>
<Tool
Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
+ PreprocessorDefinitions="_DEBUG"
Culture="1033"
/>
<Tool
@@ -149,15 +152,16 @@
/>
<Tool
Name="VCLinkerTool"
- OutputFile=".\./pythonw.exe"
+ OutputFile="$(OutDir)\pythonw_d.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./pythonw.pdb"
+ ProgramDatabaseFile=""
SubSystem="2"
StackReserveSize="2000000"
BaseAddress="0x1d000000"
- TargetMachine="1"
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
@@ -185,9 +189,9 @@
/>
</Configuration>
<Configuration
- Name="ReleaseItanium|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\ia64-temp-release\pythonw"
+ Name="Release|Win32"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\pythonw"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -210,20 +214,16 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions=" /USECL:MS_ITANIUM"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\Include,..\PC"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
StringPooling="true"
- BasicRuntimeChecks="0"
RuntimeLibrary="2"
- BufferSecurityCheck="false"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
CompileAs="0"
/>
@@ -240,16 +240,16 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
- OutputFile=".\./pythonw.exe"
+ OutputFile="$(OutDir)\pythonw.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./pythonw.pdb"
+ ProgramDatabaseFile=""
SubSystem="2"
StackReserveSize="2000000"
BaseAddress="0x1d000000"
- TargetMachine="0"
+ TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
@@ -277,9 +277,9 @@
/>
</Configuration>
<Configuration
- Name="ReleaseAMD64|Win32"
- OutputDirectory="."
- IntermediateDirectory="amd64-temp-release\pythonw"
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\pythonw"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -299,23 +299,20 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions=" /USECL:MS_OPTERON"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\Include,..\PC"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
StringPooling="true"
- BasicRuntimeChecks="0"
RuntimeLibrary="2"
- BufferSecurityCheck="false"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
CompileAs="0"
/>
@@ -332,16 +329,16 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
- OutputFile=".\./pythonw.exe"
+ OutputFile="$(OutDir)\pythonw.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./pythonw.pdb"
+ ProgramDatabaseFile=""
SubSystem="2"
StackReserveSize="2000000"
BaseAddress="0x1d000000"
- TargetMachine="0"
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
Modified: stackless/trunk/PCbuild8/readme.txt
==============================================================================
--- stackless/trunk/PCbuild8/readme.txt (original)
+++ stackless/trunk/PCbuild8/readme.txt Sun Oct 15 16:42:33 2006
@@ -12,7 +12,7 @@
The proper order to build subprojects:
1) pythoncore (this builds the main Python DLL and library files,
- python25.{dll, lib} in Release mode)
+ python26.{dll, lib} in Release mode)
NOTE: in previous releases, this subproject was
named after the release number, e.g. python20.
@@ -25,8 +25,21 @@
to the subsystems they implement, or are running a Python core buildbot
test slave; see SUBPROJECTS below)
+Binary files go into PCBuild8\Win32 or \x64 directories and don't
+interfere with each other.
+
When using the Debug setting, the output files have a _d added to
-their name: python25_d.dll, python_d.exe, parser_d.pyd, and so on.
+their name: python26_d.dll, python_d.exe, parser_d.pyd, and so on.
+
+There are two special configurations for the pythoncore project and
+the solution. These are PGIRelease and PGORelease. They are for
+createing profile-guided optimized versions of python.dll.
+The former creates the instrumented binaries, and the latter
+runs python.exe with the instrumented python.dll on the performance
+testsuite, and creates a new, optimized, python.dll in
+PCBuild8\Win32\PGORelease, or in the x64 folder. Note that although
+we can cross-compile x64 binaries on a 32 bit machine, we cannot
+create the PGO binaries, since they require actually running the code.
SUBPROJECTS
-----------
@@ -37,12 +50,6 @@
pythoncore
.dll and .lib
-pythoncore_pgo
- .dll and .lib, a variant of pythoncore that is optimized through a
- Profile Guided Optimization (PGO), employing pybench as the profile
- case to optimize for. The results are produced as a python25.{dll,lib}
- in the subfolder 'pythoncore_pgo'. To use this instead of the
- standard Python dll place this dll with the python.exe.
python
.exe
pythonw
Modified: stackless/trunk/PCbuild8/select.vcproj
==============================================================================
--- stackless/trunk/PCbuild8/select.vcproj (original)
+++ stackless/trunk/PCbuild8/select.vcproj Sun Oct 15 16:42:33 2006
@@ -4,19 +4,23 @@
Version="8,00"
Name="select"
ProjectGUID="{97239A56-DBC0-41D2-BC14-C87D9B97D63B}"
+ RootNamespace="select"
>
<Platforms>
<Platform
Name="Win32"
/>
+ <Platform
+ Name="x64"
+ />
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Release|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-release\select"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\select"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -64,15 +68,16 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="wsock32.lib"
- OutputFile="./select.pyd"
+ OutputFile="$(OutDir)\select.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
IgnoreDefaultLibraryNames="libc"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./select.pdb"
+ ProgramDatabaseFile=""
SubSystem="2"
BaseAddress="0x1D110000"
- ImportLibrary=".\./select.lib"
+ ImportLibrary=""
TargetMachine="1"
/>
<Tool
@@ -101,9 +106,9 @@
/>
</Configuration>
<Configuration
- Name="Debug|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-debug\select"
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\select"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -123,13 +128,17 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- Optimization="0"
+ Optimization="2"
+ InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\Include,..\PC"
- PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"
- RuntimeLibrary="3"
+ PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
@@ -148,16 +157,17 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="wsock32.lib"
- OutputFile="./select_d.pyd"
+ OutputFile="$(OutDir)\select.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
- IgnoreDefaultLibraryNames="libc,msvcrt"
+ AdditionalLibraryDirectories="$(OutDir)"
+ IgnoreDefaultLibraryNames="libc"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./select_d.pdb"
+ ProgramDatabaseFile=""
SubSystem="2"
BaseAddress="0x1D110000"
- ImportLibrary=".\./select_d.lib"
- TargetMachine="1"
+ ImportLibrary=""
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
@@ -185,9 +195,9 @@
/>
</Configuration>
<Configuration
- Name="ReleaseItanium|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\ia64-temp-release\select"
+ Name="Debug|Win32"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\select"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -210,20 +220,13 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions=" /USECL:MS_ITANIUM"
- Optimization="2"
- InlineFunctionExpansion="1"
+ Optimization="0"
AdditionalIncludeDirectories="..\Include,..\PC"
- PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"
- StringPooling="true"
- BasicRuntimeChecks="0"
- RuntimeLibrary="2"
- BufferSecurityCheck="false"
- EnableFunctionLevelLinking="true"
+ PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"
+ RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
CompileAs="0"
/>
@@ -238,18 +241,18 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
AdditionalDependencies="wsock32.lib"
- OutputFile="./select.pyd"
+ OutputFile="$(OutDir)\select_d.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
- IgnoreDefaultLibraryNames="libc"
+ AdditionalLibraryDirectories="$(OutDir)"
+ IgnoreDefaultLibraryNames="libc,msvcrt"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./select.pdb"
+ ProgramDatabaseFile=""
SubSystem="2"
BaseAddress="0x1D110000"
- ImportLibrary=".\./select.lib"
- TargetMachine="0"
+ ImportLibrary=""
+ TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
@@ -277,9 +280,9 @@
/>
</Configuration>
<Configuration
- Name="ReleaseAMD64|Win32"
- OutputDirectory="."
- IntermediateDirectory="amd64-temp-release\select"
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\select"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -299,23 +302,17 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions=" /USECL:MS_OPTERON"
- Optimization="2"
- InlineFunctionExpansion="1"
+ Optimization="0"
AdditionalIncludeDirectories="..\Include,..\PC"
- PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"
- StringPooling="true"
- BasicRuntimeChecks="0"
- RuntimeLibrary="2"
- BufferSecurityCheck="false"
- EnableFunctionLevelLinking="true"
+ PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"
+ RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
CompileAs="0"
/>
@@ -330,18 +327,18 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
AdditionalDependencies="wsock32.lib"
- OutputFile="./select.pyd"
+ OutputFile="$(OutDir)\select_d.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
- IgnoreDefaultLibraryNames="libc"
+ AdditionalLibraryDirectories="$(OutDir)"
+ IgnoreDefaultLibraryNames="libc,msvcrt"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./select.pdb"
+ ProgramDatabaseFile=""
SubSystem="2"
BaseAddress="0x1D110000"
- ImportLibrary=".\./select.lib"
- TargetMachine="0"
+ ImportLibrary=""
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
Modified: stackless/trunk/PCbuild8/unicodedata.vcproj
==============================================================================
--- stackless/trunk/PCbuild8/unicodedata.vcproj (original)
+++ stackless/trunk/PCbuild8/unicodedata.vcproj Sun Oct 15 16:42:33 2006
@@ -4,19 +4,23 @@
Version="8,00"
Name="unicodedata"
ProjectGUID="{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}"
+ RootNamespace="unicodedata"
>
<Platforms>
<Platform
Name="Win32"
/>
+ <Platform
+ Name="x64"
+ />
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Release|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-release\unicodedata"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\unicodedata"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -63,12 +67,14 @@
/>
<Tool
Name="VCLinkerTool"
- OutputFile="./unicodedata.pyd"
+ OutputFile="$(OutDir)\unicodedata.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\./unicodedata.pdb"
+ AdditionalLibraryDirectories="$(OutDir)"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=""
BaseAddress="0x1D120000"
- ImportLibrary=".\./unicodedata.lib"
+ ImportLibrary=""
TargetMachine="1"
/>
<Tool
@@ -97,9 +103,9 @@
/>
</Configuration>
<Configuration
- Name="Debug|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-debug\unicodedata"
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\unicodedata"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -120,18 +126,20 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- Optimization="0"
+ Optimization="2"
+ InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\Include,..\PC"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
- DebugInformationFormat="3"
CompileAs="0"
/>
<Tool
@@ -145,14 +153,15 @@
/>
<Tool
Name="VCLinkerTool"
- OutputFile="./unicodedata_d.pyd"
+ OutputFile="$(OutDir)\unicodedata.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./unicodedata_d.pdb"
+ ProgramDatabaseFile=""
BaseAddress="0x1D120000"
- ImportLibrary=".\./unicodedata_d.lib"
- TargetMachine="1"
+ ImportLibrary=""
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
@@ -180,9 +189,9 @@
/>
</Configuration>
<Configuration
- Name="ReleaseItanium|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\ia64-temp-release\unicodedata"
+ Name="Debug|Win32"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\unicodedata"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -206,20 +215,14 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions=" /USECL:MS_ITANIUM"
- Optimization="2"
- InlineFunctionExpansion="1"
+ Optimization="0"
AdditionalIncludeDirectories="..\Include,..\PC"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"
- StringPooling="true"
- BasicRuntimeChecks="0"
- RuntimeLibrary="2"
- BufferSecurityCheck="false"
- EnableFunctionLevelLinking="true"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
CompileAs="0"
/>
@@ -234,14 +237,15 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
- OutputFile="./unicodedata.pyd"
+ OutputFile="$(OutDir)\unicodedata_d.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\./unicodedata.pdb"
+ AdditionalLibraryDirectories="$(OutDir)"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=""
BaseAddress="0x1D120000"
- ImportLibrary=".\./unicodedata.lib"
- TargetMachine="0"
+ ImportLibrary=""
+ TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
@@ -269,9 +273,9 @@
/>
</Configuration>
<Configuration
- Name="ReleaseAMD64|Win32"
- OutputDirectory="."
- IntermediateDirectory="amd64-temp-release\unicodedata"
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\unicodedata"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -292,23 +296,18 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions=" /USECL:MS_OPTERON /GS-"
- Optimization="2"
- InlineFunctionExpansion="1"
+ Optimization="0"
AdditionalIncludeDirectories="..\Include,..\PC"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"
- StringPooling="true"
- BasicRuntimeChecks="0"
- RuntimeLibrary="2"
- BufferSecurityCheck="false"
- EnableFunctionLevelLinking="true"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
CompileAs="0"
/>
@@ -323,14 +322,15 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
- OutputFile="./unicodedata.pyd"
+ OutputFile="$(OutDir)\unicodedata_d.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\./unicodedata.pdb"
+ AdditionalLibraryDirectories="$(OutDir)"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=""
BaseAddress="0x1D120000"
- ImportLibrary=".\./unicodedata.lib"
- TargetMachine="0"
+ ImportLibrary=""
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
Modified: stackless/trunk/PCbuild8/w9xpopen.vcproj
==============================================================================
--- stackless/trunk/PCbuild8/w9xpopen.vcproj (original)
+++ stackless/trunk/PCbuild8/w9xpopen.vcproj Sun Oct 15 16:42:33 2006
@@ -4,19 +4,23 @@
Version="8,00"
Name="w9xpopen"
ProjectGUID="{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}"
+ RootNamespace="w9xpopen"
>
<Platforms>
<Platform
Name="Win32"
/>
+ <Platform
+ Name="x64"
+ />
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-debug\w9xpopen"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\w9xpopen"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -60,11 +64,12 @@
/>
<Tool
Name="VCLinkerTool"
- OutputFile="./w9xpopen_d.exe"
+ OutputFile="$(OutDir)\w9xpopen_d.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./w9xpopen_d.pdb"
+ ProgramDatabaseFile=""
TargetMachine="1"
/>
<Tool
@@ -93,9 +98,89 @@
/>
</Configuration>
<Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\w9xpopen"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)\w9xpopen_d.exe"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=""
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
Name="Release|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-release\w9xpopen"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\w9xpopen"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -140,10 +225,12 @@
/>
<Tool
Name="VCLinkerTool"
- OutputFile=".\./w9xpopen.exe"
+ OutputFile="$(OutDir)\w9xpopen.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\./w9xpopen.pdb"
+ AdditionalLibraryDirectories="$(OutDir)"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=""
TargetMachine="1"
/>
<Tool
@@ -171,6 +258,87 @@
Name="VCPostBuildEventTool"
/>
</Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\w9xpopen"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)\w9xpopen.exe"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=""
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
</Configurations>
<References>
</References>
Modified: stackless/trunk/PCbuild8/winsound.vcproj
==============================================================================
--- stackless/trunk/PCbuild8/winsound.vcproj (original)
+++ stackless/trunk/PCbuild8/winsound.vcproj Sun Oct 15 16:42:33 2006
@@ -4,19 +4,23 @@
Version="8,00"
Name="winsound"
ProjectGUID="{51F35FAE-FB92-4B2C-9187-1542C065AD77}"
+ RootNamespace="winsound"
>
<Platforms>
<Platform
Name="Win32"
/>
+ <Platform
+ Name="x64"
+ />
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-debug\winsound"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\winsound"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -63,13 +67,14 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="winmm.lib"
- OutputFile="./winsound_d.pyd"
+ OutputFile="$(OutDir)\winsound_d.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(OutDir)"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\./winsound_d.pdb"
+ ProgramDatabaseFile=""
BaseAddress="0x1D160000"
- ImportLibrary=".\./winsound_d.lib"
+ ImportLibrary=""
TargetMachine="1"
/>
<Tool
@@ -98,9 +103,9 @@
/>
</Configuration>
<Configuration
- Name="Release|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\x86-temp-release\winsound"
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\winsound"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -121,19 +126,19 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
+ Optimization="0"
AdditionalIncludeDirectories="..\Include,..\PC"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;WINSOUND_EXPORTS"
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;WINSOUND_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
+ DebugInformationFormat="3"
CompileAs="0"
/>
<Tool
@@ -148,13 +153,15 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="winmm.lib"
- OutputFile="./winsound.pyd"
+ OutputFile="$(OutDir)\winsound_d.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\./winsound.pdb"
+ AdditionalLibraryDirectories="$(OutDir)"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=""
BaseAddress="0x1D160000"
- ImportLibrary=".\./winsound.lib"
- TargetMachine="1"
+ ImportLibrary=""
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
@@ -182,9 +189,9 @@
/>
</Configuration>
<Configuration
- Name="ReleaseItanium|Win32"
- OutputDirectory=".\."
- IntermediateDirectory=".\ia64-temp-release\winsound"
+ Name="Release|Win32"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\winsound"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -208,21 +215,16 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions=" /USECL:MS_ITANIUM"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\Include,..\PC"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;WINSOUND_EXPORTS"
StringPooling="true"
- BasicRuntimeChecks="0"
RuntimeLibrary="2"
- BufferSecurityCheck="false"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
CompileAs="0"
/>
<Tool
@@ -236,15 +238,16 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
AdditionalDependencies="winmm.lib"
- OutputFile="./winsound.pyd"
+ OutputFile="$(OutDir)\winsound.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\./winsound.pdb"
+ AdditionalLibraryDirectories="$(OutDir)"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=""
BaseAddress="0x1D160000"
- ImportLibrary=".\./winsound.lib"
- TargetMachine="0"
+ ImportLibrary=""
+ TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
@@ -272,9 +275,9 @@
/>
</Configuration>
<Configuration
- Name="ReleaseAMD64|Win32"
- OutputDirectory="."
- IntermediateDirectory="amd64-temp-release\winsound"
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\winsound"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
@@ -295,24 +298,20 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions=" /USECL:MS_OPTERON /GS-"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\Include,..\PC"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;WINSOUND_EXPORTS"
StringPooling="true"
- BasicRuntimeChecks="0"
RuntimeLibrary="2"
- BufferSecurityCheck="false"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
CompileAs="0"
/>
<Tool
@@ -326,15 +325,16 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
AdditionalDependencies="winmm.lib"
- OutputFile="./winsound.pyd"
+ OutputFile="$(OutDir)\winsound.pyd"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\./winsound.pdb"
+ AdditionalLibraryDirectories="$(OutDir)"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=""
BaseAddress="0x1D160000"
- ImportLibrary=".\./winsound.lib"
- TargetMachine="0"
+ ImportLibrary=""
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
Modified: stackless/trunk/Parser/parser.c
==============================================================================
--- stackless/trunk/Parser/parser.c (original)
+++ stackless/trunk/Parser/parser.c Sun Oct 15 16:42:33 2006
@@ -181,7 +181,7 @@
future_hack(parser_state *ps)
{
node *n = ps->p_stack.s_top->s_parent;
- node *ch;
+ node *ch, *cch;
int i;
/* from __future__ import ..., must have at least 4 children */
@@ -195,15 +195,17 @@
if (NCH(ch) == 1 && STR(CHILD(ch, 0)) &&
strcmp(STR(CHILD(ch, 0)), "__future__") != 0)
return;
- for (i = 3; i < NCH(n); i += 2) {
- /* XXX: assume we don't have parentheses in import:
- from __future__ import (x, y, z)
- */
- ch = CHILD(n, i);
- if (NCH(ch) == 1)
- ch = CHILD(ch, 0);
- if (NCH(ch) >= 1 && TYPE(CHILD(ch, 0)) == NAME &&
- strcmp(STR(CHILD(ch, 0)), "with_statement") == 0) {
+ ch = CHILD(n, 3);
+ /* ch can be a star, a parenthesis or import_as_names */
+ if (TYPE(ch) == STAR)
+ return;
+ if (TYPE(ch) == LPAR)
+ ch = CHILD(n, 4);
+
+ for (i = 0; i < NCH(ch); i += 2) {
+ cch = CHILD(ch, i);
+ if (NCH(cch) >= 1 && TYPE(CHILD(cch, 0)) == NAME &&
+ strcmp(STR(CHILD(cch, 0)), "with_statement") == 0) {
ps->p_flags |= CO_FUTURE_WITH_STATEMENT;
break;
}
Modified: stackless/trunk/Parser/parsetok.c
==============================================================================
--- stackless/trunk/Parser/parsetok.c (original)
+++ stackless/trunk/Parser/parsetok.c Sun Oct 15 16:42:33 2006
@@ -89,9 +89,7 @@
return parsetok(tok, g, start, err_ret, flags);
}
-/* Parse input coming from the given tokenizer structure.
- Return error code. */
-
+#if 0
static char with_msg[] =
"%s:%d: Warning: 'with' will become a reserved keyword in Python 2.6\n";
@@ -105,6 +103,10 @@
filename = "<string>";
PySys_WriteStderr(msg, filename, lineno);
}
+#endif
+
+/* Parse input coming from the given tokenizer structure.
+ Return error code. */
static node *
parsetok(struct tok_state *tok, grammar *g, int start, perrdetail *err_ret,
Modified: stackless/trunk/Parser/tokenizer.c
==============================================================================
--- stackless/trunk/Parser/tokenizer.c (original)
+++ stackless/trunk/Parser/tokenizer.c Sun Oct 15 16:42:33 2006
@@ -897,7 +897,7 @@
tok->cur = tok->buf + cur;
tok->line_start = tok->cur;
/* replace "\r\n" with "\n" */
- /* For Mac leave the \r, giving syntax error */
+ /* For Mac leave the \r, giving a syntax error */
pt = tok->inp - 2;
if (pt >= tok->buf && *pt == '\r') {
*pt++ = '\n';
Modified: stackless/trunk/Python/ast.c
==============================================================================
--- stackless/trunk/Python/ast.c (original)
+++ stackless/trunk/Python/ast.c Sun Oct 15 16:42:33 2006
@@ -15,12 +15,6 @@
#include <assert.h>
-/* XXX TO DO
- - re-indent this file (should be done)
- - internal error checking (freeing memory, etc.)
- - syntax errors
-*/
-
/* Data structure used internally */
struct compiling {
char *c_encoding; /* source encoding */
@@ -43,7 +37,7 @@
static PyObject *parsestrplus(struct compiling *, const node *n);
#ifndef LINENO
-#define LINENO(n) ((n)->n_lineno)
+#define LINENO(n) ((n)->n_lineno)
#endif
static identifier
@@ -68,7 +62,7 @@
{
PyObject *u = Py_BuildValue("zi", errstr, LINENO(n));
if (!u)
- return 0;
+ return 0;
PyErr_SetObject(PyExc_SyntaxError, u);
Py_DECREF(u);
return 0;
@@ -82,36 +76,36 @@
assert(PyErr_Occurred());
if (!PyErr_ExceptionMatches(PyExc_SyntaxError))
- return;
+ return;
PyErr_Fetch(&type, &value, &tback);
errstr = PyTuple_GetItem(value, 0);
if (!errstr)
- return;
+ return;
Py_INCREF(errstr);
lineno = PyInt_AsLong(PyTuple_GetItem(value, 1));
if (lineno == -1) {
- Py_DECREF(errstr);
- return;
+ Py_DECREF(errstr);
+ return;
}
Py_DECREF(value);
loc = PyErr_ProgramText(filename, lineno);
if (!loc) {
- Py_INCREF(Py_None);
- loc = Py_None;
+ Py_INCREF(Py_None);
+ loc = Py_None;
}
tmp = Py_BuildValue("(zlOO)", filename, lineno, Py_None, loc);
Py_DECREF(loc);
if (!tmp) {
- Py_DECREF(errstr);
- return;
+ Py_DECREF(errstr);
+ return;
}
value = PyTuple_Pack(2, errstr, tmp);
Py_DECREF(errstr);
Py_DECREF(tmp);
if (!value)
- return;
+ return;
PyErr_Restore(type, value, tback);
}
@@ -246,7 +240,7 @@
if (TYPE(CHILD(n, 0)) == NEWLINE) {
stmts = asdl_seq_new(1, arena);
if (!stmts)
- goto error;
+ goto error;
asdl_seq_SET(stmts, 0, Pass(n->n_lineno, n->n_col_offset,
arena));
return Interactive(stmts, arena);
@@ -256,11 +250,11 @@
num = num_stmts(n);
stmts = asdl_seq_new(num, arena);
if (!stmts)
- goto error;
+ goto error;
if (num == 1) {
- s = ast_for_stmt(&c, n);
- if (!s)
- goto error;
+ s = ast_for_stmt(&c, n);
+ if (!s)
+ goto error;
asdl_seq_SET(stmts, 0, s);
}
else {
@@ -347,38 +341,38 @@
switch (e->kind) {
case Attribute_kind:
- if (ctx == Store &&
- !strcmp(PyString_AS_STRING(e->v.Attribute.attr), "None")) {
- return ast_error(n, "assignment to None");
- }
- e->v.Attribute.ctx = ctx;
- break;
+ if (ctx == Store &&
+ !strcmp(PyString_AS_STRING(e->v.Attribute.attr), "None")) {
+ return ast_error(n, "assignment to None");
+ }
+ e->v.Attribute.ctx = ctx;
+ break;
case Subscript_kind:
- e->v.Subscript.ctx = ctx;
- break;
+ e->v.Subscript.ctx = ctx;
+ break;
case Name_kind:
- if (ctx == Store &&
- !strcmp(PyString_AS_STRING(e->v.Name.id), "None")) {
- return ast_error(n, "assignment to None");
- }
- e->v.Name.ctx = ctx;
- break;
+ if (ctx == Store &&
+ !strcmp(PyString_AS_STRING(e->v.Name.id), "None")) {
+ return ast_error(n, "assignment to None");
+ }
+ e->v.Name.ctx = ctx;
+ break;
case List_kind:
- e->v.List.ctx = ctx;
- s = e->v.List.elts;
- break;
+ e->v.List.ctx = ctx;
+ s = e->v.List.elts;
+ break;
case Tuple_kind:
if (asdl_seq_LEN(e->v.Tuple.elts) == 0)
return ast_error(n, "can't assign to ()");
- e->v.Tuple.ctx = ctx;
- s = e->v.Tuple.elts;
- break;
+ e->v.Tuple.ctx = ctx;
+ s = e->v.Tuple.elts;
+ break;
case Lambda_kind:
expr_name = "lambda";
break;
case Call_kind:
expr_name = "function call";
- break;
+ break;
case BoolOp_kind:
case BinOp_kind:
case UnaryOp_kind:
@@ -427,12 +421,12 @@
context for all the contained elements.
*/
if (s) {
- int i;
+ int i;
- for (i = 0; i < asdl_seq_LEN(s); i++) {
- if (!set_context((expr_ty)asdl_seq_GET(s, i), ctx, n))
- return 0;
- }
+ for (i = 0; i < asdl_seq_LEN(s); i++) {
+ if (!set_context((expr_ty)asdl_seq_GET(s, i), ctx, n))
+ return 0;
+ }
}
return 1;
}
@@ -483,13 +477,13 @@
*/
REQ(n, comp_op);
if (NCH(n) == 1) {
- n = CHILD(n, 0);
- switch (TYPE(n)) {
+ n = CHILD(n, 0);
+ switch (TYPE(n)) {
case LESS:
return Lt;
case GREATER:
return Gt;
- case EQEQUAL: /* == */
+ case EQEQUAL: /* == */
return Eq;
case LESSEQUAL:
return LtE;
@@ -506,11 +500,11 @@
PyErr_Format(PyExc_SystemError, "invalid comp_op: %s",
STR(n));
return (cmpop_ty)0;
- }
+ }
}
else if (NCH(n) == 2) {
- /* handle "not in" and "is not" */
- switch (TYPE(CHILD(n, 0))) {
+ /* handle "not in" and "is not" */
+ switch (TYPE(CHILD(n, 0))) {
case NAME:
if (strcmp(STR(CHILD(n, 1)), "in") == 0)
return NotIn;
@@ -520,7 +514,7 @@
PyErr_Format(PyExc_SystemError, "invalid comp_op: %s %s",
STR(CHILD(n, 0)), STR(CHILD(n, 1)));
return (cmpop_ty)0;
- }
+ }
}
PyErr_Format(PyExc_SystemError, "invalid comp_op: has %d children",
NCH(n));
@@ -535,10 +529,10 @@
expr_ty expression;
int i;
assert(TYPE(n) == testlist
- || TYPE(n) == listmaker
- || TYPE(n) == testlist_gexp
- || TYPE(n) == testlist_safe
- );
+ || TYPE(n) == listmaker
+ || TYPE(n) == testlist_gexp
+ || TYPE(n) == testlist_safe
+ );
seq = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
if (!seq)
@@ -566,20 +560,37 @@
if (!args)
return NULL;
+ /* fpdef: NAME | '(' fplist ')'
+ fplist: fpdef (',' fpdef)* [',']
+ */
REQ(n, fplist);
for (i = 0; i < len; i++) {
- const node *child = CHILD(CHILD(n, 2*i), 0);
+ const node *fpdef_node = CHILD(n, 2*i);
+ const node *child;
expr_ty arg;
+set_name:
+ /* fpdef_node is either a NAME or an fplist */
+ child = CHILD(fpdef_node, 0);
if (TYPE(child) == NAME) {
- if (!strcmp(STR(child), "None")) {
- ast_error(child, "assignment to None");
- return NULL;
- }
+ if (!strcmp(STR(child), "None")) {
+ ast_error(child, "assignment to None");
+ return NULL;
+ }
arg = Name(NEW_IDENTIFIER(child), Store, LINENO(child),
child->n_col_offset, c->c_arena);
- }
+ }
else {
- arg = compiler_complex_args(c, CHILD(CHILD(n, 2*i), 1));
+ assert(TYPE(fpdef_node) == fpdef);
+ /* fpdef_node[0] is not a name, so it must be a '(', get CHILD[1] */
+ child = CHILD(fpdef_node, 1);
+ assert(TYPE(child) == fplist);
+ /* NCH == 1 means we have (x), we need to elide the extra parens */
+ if (NCH(child) == 1) {
+ fpdef_node = CHILD(child, 0);
+ assert(TYPE(fpdef_node) == fpdef);
+ goto set_name;
+ }
+ arg = compiler_complex_args(c, child);
}
asdl_seq_SET(args, i, arg);
}
@@ -606,26 +617,26 @@
node *ch;
if (TYPE(n) == parameters) {
- if (NCH(n) == 2) /* () as argument list */
- return arguments(NULL, NULL, NULL, NULL, c->c_arena);
- n = CHILD(n, 1);
+ if (NCH(n) == 2) /* () as argument list */
+ return arguments(NULL, NULL, NULL, NULL, c->c_arena);
+ n = CHILD(n, 1);
}
REQ(n, varargslist);
/* first count the number of normal args & defaults */
for (i = 0; i < NCH(n); i++) {
- ch = CHILD(n, i);
- if (TYPE(ch) == fpdef)
- n_args++;
- if (TYPE(ch) == EQUAL)
- n_defaults++;
+ ch = CHILD(n, i);
+ if (TYPE(ch) == fpdef)
+ n_args++;
+ if (TYPE(ch) == EQUAL)
+ n_defaults++;
}
args = (n_args ? asdl_seq_new(n_args, c->c_arena) : NULL);
if (!args && n_args)
- return NULL; /* Don't need to goto error; no objects allocated */
+ return NULL; /* Don't need to goto error; no objects allocated */
defaults = (n_defaults ? asdl_seq_new(n_defaults, c->c_arena) : NULL);
if (!defaults && n_defaults)
- return NULL; /* Don't need to goto error; no objects allocated */
+ return NULL; /* Don't need to goto error; no objects allocated */
/* fpdef: NAME | '(' fplist ')'
fplist: fpdef (',' fpdef)* [',']
@@ -634,9 +645,10 @@
j = 0; /* index for defaults */
k = 0; /* index for args */
while (i < NCH(n)) {
- ch = CHILD(n, i);
- switch (TYPE(ch)) {
+ ch = CHILD(n, i);
+ switch (TYPE(ch)) {
case fpdef:
+ handle_fpdef:
/* XXX Need to worry about checking if TYPE(CHILD(n, i+1)) is
anything other than EQUAL or a comma? */
/* XXX Should NCH(n) check be made a separate check? */
@@ -647,53 +659,57 @@
assert(defaults != NULL);
asdl_seq_SET(defaults, j++, expression);
i += 2;
- found_default = 1;
+ found_default = 1;
+ }
+ else if (found_default) {
+ ast_error(n,
+ "non-default argument follows default argument");
+ goto error;
}
- else if (found_default) {
- ast_error(n,
- "non-default argument follows default argument");
- goto error;
- }
if (NCH(ch) == 3) {
- ch = CHILD(ch, 1);
- /* def foo((x)): is not complex, special case. */
- if (NCH(ch) != 1) {
- /* We have complex arguments, setup for unpacking. */
- asdl_seq_SET(args, k++, compiler_complex_args(c, ch));
- } else {
- /* def foo((x)): setup for checking NAME below. */
- ch = CHILD(ch, 0);
- }
+ ch = CHILD(ch, 1);
+ /* def foo((x)): is not complex, special case. */
+ if (NCH(ch) != 1) {
+ /* We have complex arguments, setup for unpacking. */
+ asdl_seq_SET(args, k++, compiler_complex_args(c, ch));
+ } else {
+ /* def foo((x)): setup for checking NAME below. */
+ /* Loop because there can be many parens and tuple
+ unpacking mixed in. */
+ ch = CHILD(ch, 0);
+ assert(TYPE(ch) == fpdef);
+ goto handle_fpdef;
+ }
}
if (TYPE(CHILD(ch, 0)) == NAME) {
- expr_ty name;
- if (!strcmp(STR(CHILD(ch, 0)), "None")) {
- ast_error(CHILD(ch, 0), "assignment to None");
- goto error;
- }
+ expr_ty name;
+ if (!strcmp(STR(CHILD(ch, 0)), "None")) {
+ ast_error(CHILD(ch, 0), "assignment to None");
+ goto error;
+ }
name = Name(NEW_IDENTIFIER(CHILD(ch, 0)),
Param, LINENO(ch), ch->n_col_offset,
c->c_arena);
if (!name)
goto error;
asdl_seq_SET(args, k++, name);
-
- }
+
+ }
i += 2; /* the name and the comma */
break;
case STAR:
- if (!strcmp(STR(CHILD(n, i+1)), "None")) {
- ast_error(CHILD(n, i+1), "assignment to None");
- goto error;
- }
+ if (!strcmp(STR(CHILD(n, i+1)), "None")) {
+ ast_error(CHILD(n, i+1), "assignment to None");
+ goto error;
+ }
vararg = NEW_IDENTIFIER(CHILD(n, i+1));
i += 3;
break;
case DOUBLESTAR:
- if (!strcmp(STR(CHILD(n, i+1)), "None")) {
- ast_error(CHILD(n, i+1), "assignment to None");
- goto error;
- }
+ if (!strcmp(STR(CHILD(n, i+1)), "None")) {
+ ast_error(CHILD(n, i+1), "assignment to None");
+ goto error;
+ }
kwarg = NEW_IDENTIFIER(CHILD(n, i+1));
i += 3;
break;
@@ -702,7 +718,7 @@
"unexpected node in varargslist: %d @ %d",
TYPE(ch), i);
goto error;
- }
+ }
}
return arguments(args, vararg, kwarg, defaults, c->c_arena);
@@ -731,15 +747,15 @@
return NULL;
e = Name(id, Load, lineno, col_offset, c->c_arena);
if (!e)
- return NULL;
+ return NULL;
for (i = 2; i < NCH(n); i+=2) {
id = NEW_IDENTIFIER(CHILD(n, i));
- if (!id)
- return NULL;
- e = Attribute(e, id, Load, lineno, col_offset, c->c_arena);
- if (!e)
- return NULL;
+ if (!id)
+ return NULL;
+ e = Attribute(e, id, Load, lineno, col_offset, c->c_arena);
+ if (!e)
+ return NULL;
}
return e;
@@ -758,24 +774,24 @@
name_expr = ast_for_dotted_name(c, CHILD(n, 1));
if (!name_expr)
- return NULL;
-
+ return NULL;
+
if (NCH(n) == 3) { /* No arguments */
- d = name_expr;
- name_expr = NULL;
+ d = name_expr;
+ name_expr = NULL;
}
else if (NCH(n) == 5) { /* Call with no arguments */
- d = Call(name_expr, NULL, NULL, NULL, NULL, LINENO(n),
+ d = Call(name_expr, NULL, NULL, NULL, NULL, LINENO(n),
n->n_col_offset, c->c_arena);
- if (!d)
- return NULL;
- name_expr = NULL;
+ if (!d)
+ return NULL;
+ name_expr = NULL;
}
else {
- d = ast_for_call(c, CHILD(n, 3), name_expr);
- if (!d)
- return NULL;
- name_expr = NULL;
+ d = ast_for_call(c, CHILD(n, 3), name_expr);
+ if (!d)
+ return NULL;
+ name_expr = NULL;
}
return d;
@@ -792,12 +808,12 @@
decorator_seq = asdl_seq_new(NCH(n), c->c_arena);
if (!decorator_seq)
return NULL;
-
+
for (i = 0; i < NCH(n); i++) {
d = ast_for_decorator(c, CHILD(n, i));
- if (!d)
- return NULL;
- asdl_seq_SET(decorator_seq, i, d);
+ if (!d)
+ return NULL;
+ asdl_seq_SET(decorator_seq, i, d);
}
return decorator_seq;
}
@@ -815,28 +831,28 @@
REQ(n, funcdef);
if (NCH(n) == 6) { /* decorators are present */
- decorator_seq = ast_for_decorators(c, CHILD(n, 0));
- if (!decorator_seq)
- return NULL;
- name_i = 2;
+ decorator_seq = ast_for_decorators(c, CHILD(n, 0));
+ if (!decorator_seq)
+ return NULL;
+ name_i = 2;
}
else {
- name_i = 1;
+ name_i = 1;
}
name = NEW_IDENTIFIER(CHILD(n, name_i));
if (!name)
- return NULL;
+ return NULL;
else if (!strcmp(STR(CHILD(n, name_i)), "None")) {
- ast_error(CHILD(n, name_i), "assignment to None");
- return NULL;
+ ast_error(CHILD(n, name_i), "assignment to None");
+ return NULL;
}
args = ast_for_arguments(c, CHILD(n, name_i + 1));
if (!args)
- return NULL;
+ return NULL;
body = ast_for_suite(c, CHILD(n, name_i + 3));
if (!body)
- return NULL;
+ return NULL;
return FunctionDef(name, args, body, decorator_seq, LINENO(n),
n->n_col_offset, c->c_arena);
@@ -878,17 +894,22 @@
assert(NCH(n) == 5);
body = ast_for_expr(c, CHILD(n, 0));
if (!body)
- return NULL;
+ return NULL;
expression = ast_for_expr(c, CHILD(n, 2));
if (!expression)
- return NULL;
+ return NULL;
orelse = ast_for_expr(c, CHILD(n, 4));
if (!orelse)
- return NULL;
+ return NULL;
return IfExp(expression, body, orelse, LINENO(n), n->n_col_offset,
c->c_arena);
}
+/* XXX(nnorwitz): the listcomp and genexpr code should be refactored
+ so there is only a single version. Possibly for loops can also re-use
+ the code.
+*/
+
/* Count the number of 'for' loop in a list comprehension.
Helper for ast_for_listcomp().
@@ -904,14 +925,14 @@
n_fors++;
REQ(ch, list_for);
if (NCH(ch) == 5)
- ch = CHILD(ch, 4);
+ ch = CHILD(ch, 4);
else
- return n_fors;
+ return n_fors;
count_list_iter:
REQ(ch, list_iter);
ch = CHILD(ch, 0);
if (TYPE(ch) == list_for)
- goto count_list_for;
+ goto count_list_for;
else if (TYPE(ch) == list_if) {
if (NCH(ch) == 3) {
ch = CHILD(ch, 2);
@@ -939,12 +960,12 @@
count_list_iter:
REQ(n, list_iter);
if (TYPE(CHILD(n, 0)) == list_for)
- return n_ifs;
+ return n_ifs;
n = CHILD(n, 0);
REQ(n, list_if);
n_ifs++;
if (NCH(n) == 2)
- return n_ifs;
+ return n_ifs;
n = CHILD(n, 2);
goto count_list_iter;
}
@@ -976,61 +997,65 @@
listcomps = asdl_seq_new(n_fors, c->c_arena);
if (!listcomps)
- return NULL;
+ return NULL;
ch = CHILD(n, 1);
for (i = 0; i < n_fors; i++) {
- comprehension_ty lc;
- asdl_seq *t;
+ comprehension_ty lc;
+ asdl_seq *t;
expr_ty expression;
+ node *for_ch;
- REQ(ch, list_for);
+ REQ(ch, list_for);
- t = ast_for_exprlist(c, CHILD(ch, 1), Store);
+ for_ch = CHILD(ch, 1);
+ t = ast_for_exprlist(c, for_ch, Store);
if (!t)
return NULL;
expression = ast_for_testlist(c, CHILD(ch, 3));
if (!expression)
return NULL;
- if (asdl_seq_LEN(t) == 1)
- lc = comprehension((expr_ty)asdl_seq_GET(t, 0), expression, NULL,
+ /* Check the # of children rather than the length of t, since
+ [x for x, in ... ] has 1 element in t, but still requires a Tuple. */
+ if (NCH(for_ch) == 1)
+ lc = comprehension((expr_ty)asdl_seq_GET(t, 0), expression, NULL,
c->c_arena);
- else
- lc = comprehension(Tuple(t, Store, LINENO(ch), ch->n_col_offset,
+ else
+ lc = comprehension(Tuple(t, Store, LINENO(ch), ch->n_col_offset,
c->c_arena),
expression, NULL, c->c_arena);
if (!lc)
return NULL;
- if (NCH(ch) == 5) {
- int j, n_ifs;
- asdl_seq *ifs;
+ if (NCH(ch) == 5) {
+ int j, n_ifs;
+ asdl_seq *ifs;
- ch = CHILD(ch, 4);
- n_ifs = count_list_ifs(ch);
+ ch = CHILD(ch, 4);
+ n_ifs = count_list_ifs(ch);
if (n_ifs == -1)
return NULL;
- ifs = asdl_seq_new(n_ifs, c->c_arena);
- if (!ifs)
- return NULL;
+ ifs = asdl_seq_new(n_ifs, c->c_arena);
+ if (!ifs)
+ return NULL;
- for (j = 0; j < n_ifs; j++) {
+ for (j = 0; j < n_ifs; j++) {
REQ(ch, list_iter);
- ch = CHILD(ch, 0);
- REQ(ch, list_if);
+ ch = CHILD(ch, 0);
+ REQ(ch, list_if);
- asdl_seq_SET(ifs, j, ast_for_expr(c, CHILD(ch, 1)));
- if (NCH(ch) == 3)
- ch = CHILD(ch, 2);
- }
- /* on exit, must guarantee that ch is a list_for */
- if (TYPE(ch) == list_iter)
- ch = CHILD(ch, 0);
+ asdl_seq_SET(ifs, j, ast_for_expr(c, CHILD(ch, 1)));
+ if (NCH(ch) == 3)
+ ch = CHILD(ch, 2);
+ }
+ /* on exit, must guarantee that ch is a list_for */
+ if (TYPE(ch) == list_iter)
+ ch = CHILD(ch, 0);
lc->ifs = ifs;
- }
- asdl_seq_SET(listcomps, i, lc);
+ }
+ asdl_seq_SET(listcomps, i, lc);
}
return ListComp(elt, listcomps, LINENO(n), n->n_col_offset, c->c_arena);
@@ -1045,34 +1070,34 @@
static int
count_gen_fors(const node *n)
{
- int n_fors = 0;
- node *ch = CHILD(n, 1);
+ int n_fors = 0;
+ node *ch = CHILD(n, 1);
count_gen_for:
- n_fors++;
- REQ(ch, gen_for);
- if (NCH(ch) == 5)
- ch = CHILD(ch, 4);
- else
- return n_fors;
+ n_fors++;
+ REQ(ch, gen_for);
+ if (NCH(ch) == 5)
+ ch = CHILD(ch, 4);
+ else
+ return n_fors;
count_gen_iter:
- REQ(ch, gen_iter);
- ch = CHILD(ch, 0);
- if (TYPE(ch) == gen_for)
- goto count_gen_for;
- else if (TYPE(ch) == gen_if) {
- if (NCH(ch) == 3) {
- ch = CHILD(ch, 2);
- goto count_gen_iter;
- }
- else
- return n_fors;
- }
-
- /* Should never be reached */
- PyErr_SetString(PyExc_SystemError,
- "logic error in count_gen_fors");
- return -1;
+ REQ(ch, gen_iter);
+ ch = CHILD(ch, 0);
+ if (TYPE(ch) == gen_for)
+ goto count_gen_for;
+ else if (TYPE(ch) == gen_if) {
+ if (NCH(ch) == 3) {
+ ch = CHILD(ch, 2);
+ goto count_gen_iter;
+ }
+ else
+ return n_fors;
+ }
+
+ /* Should never be reached */
+ PyErr_SetString(PyExc_SystemError,
+ "logic error in count_gen_fors");
+ return -1;
}
/* Count the number of 'if' statements in a generator expression.
@@ -1083,19 +1108,19 @@
static int
count_gen_ifs(const node *n)
{
- int n_ifs = 0;
+ int n_ifs = 0;
- while (1) {
- REQ(n, gen_iter);
- if (TYPE(CHILD(n, 0)) == gen_for)
- return n_ifs;
- n = CHILD(n, 0);
- REQ(n, gen_if);
- n_ifs++;
- if (NCH(n) == 2)
- return n_ifs;
- n = CHILD(n, 2);
- }
+ while (1) {
+ REQ(n, gen_iter);
+ if (TYPE(CHILD(n, 0)) == gen_for)
+ return n_ifs;
+ n = CHILD(n, 0);
+ REQ(n, gen_if);
+ n_ifs++;
+ if (NCH(n) == 2)
+ return n_ifs;
+ n = CHILD(n, 2);
+ }
}
/* TODO(jhylton): Combine with list comprehension code? */
@@ -1103,7 +1128,7 @@
ast_for_genexp(struct compiling *c, const node *n)
{
/* testlist_gexp: test ( gen_for | (',' test)* [','] )
- argument: [test '='] test [gen_for] # Really [keyword '='] test */
+ argument: [test '='] test [gen_for] # Really [keyword '='] test */
expr_ty elt;
asdl_seq *genexps;
int i, n_fors;
@@ -1129,17 +1154,21 @@
comprehension_ty ge;
asdl_seq *t;
expr_ty expression;
+ node *for_ch;
REQ(ch, gen_for);
- t = ast_for_exprlist(c, CHILD(ch, 1), Store);
+ for_ch = CHILD(ch, 1);
+ t = ast_for_exprlist(c, for_ch, Store);
if (!t)
return NULL;
expression = ast_for_expr(c, CHILD(ch, 3));
if (!expression)
return NULL;
- if (asdl_seq_LEN(t) == 1)
+ /* Check the # of children rather than the length of t, since
+ (x for x, in ...) has 1 element in t, but still requires a Tuple. */
+ if (NCH(for_ch) == 1)
ge = comprehension((expr_ty)asdl_seq_GET(t, 0), expression,
NULL, c->c_arena);
else
@@ -1196,96 +1225,96 @@
switch (TYPE(ch)) {
case NAME:
- /* All names start in Load context, but may later be
- changed. */
- return Name(NEW_IDENTIFIER(ch), Load, LINENO(n), n->n_col_offset, c->c_arena);
+ /* All names start in Load context, but may later be
+ changed. */
+ return Name(NEW_IDENTIFIER(ch), Load, LINENO(n), n->n_col_offset, c->c_arena);
case STRING: {
- PyObject *str = parsestrplus(c, n);
- if (!str)
- return NULL;
+ PyObject *str = parsestrplus(c, n);
+ if (!str)
+ return NULL;
- PyArena_AddPyObject(c->c_arena, str);
- return Str(str, LINENO(n), n->n_col_offset, c->c_arena);
+ PyArena_AddPyObject(c->c_arena, str);
+ return Str(str, LINENO(n), n->n_col_offset, c->c_arena);
}
case NUMBER: {
- PyObject *pynum = parsenumber(STR(ch));
- if (!pynum)
- return NULL;
+ PyObject *pynum = parsenumber(STR(ch));
+ if (!pynum)
+ return NULL;
- PyArena_AddPyObject(c->c_arena, pynum);
- return Num(pynum, LINENO(n), n->n_col_offset, c->c_arena);
+ PyArena_AddPyObject(c->c_arena, pynum);
+ return Num(pynum, LINENO(n), n->n_col_offset, c->c_arena);
}
case LPAR: /* some parenthesized expressions */
- ch = CHILD(n, 1);
-
- if (TYPE(ch) == RPAR)
- return Tuple(NULL, Load, LINENO(n), n->n_col_offset, c->c_arena);
-
- if (TYPE(ch) == yield_expr)
- return ast_for_expr(c, ch);
-
- if ((NCH(ch) > 1) && (TYPE(CHILD(ch, 1)) == gen_for))
- return ast_for_genexp(c, ch);
-
- return ast_for_testlist_gexp(c, ch);
+ ch = CHILD(n, 1);
+
+ if (TYPE(ch) == RPAR)
+ return Tuple(NULL, Load, LINENO(n), n->n_col_offset, c->c_arena);
+
+ if (TYPE(ch) == yield_expr)
+ return ast_for_expr(c, ch);
+
+ if ((NCH(ch) > 1) && (TYPE(CHILD(ch, 1)) == gen_for))
+ return ast_for_genexp(c, ch);
+
+ return ast_for_testlist_gexp(c, ch);
case LSQB: /* list (or list comprehension) */
- ch = CHILD(n, 1);
-
- if (TYPE(ch) == RSQB)
- return List(NULL, Load, LINENO(n), n->n_col_offset, c->c_arena);
-
- REQ(ch, listmaker);
- if (NCH(ch) == 1 || TYPE(CHILD(ch, 1)) == COMMA) {
- asdl_seq *elts = seq_for_testlist(c, ch);
- if (!elts)
- return NULL;
-
- return List(elts, Load, LINENO(n), n->n_col_offset, c->c_arena);
- }
- else
- return ast_for_listcomp(c, ch);
+ ch = CHILD(n, 1);
+
+ if (TYPE(ch) == RSQB)
+ return List(NULL, Load, LINENO(n), n->n_col_offset, c->c_arena);
+
+ REQ(ch, listmaker);
+ if (NCH(ch) == 1 || TYPE(CHILD(ch, 1)) == COMMA) {
+ asdl_seq *elts = seq_for_testlist(c, ch);
+ if (!elts)
+ return NULL;
+
+ return List(elts, Load, LINENO(n), n->n_col_offset, c->c_arena);
+ }
+ else
+ return ast_for_listcomp(c, ch);
case LBRACE: {
- /* dictmaker: test ':' test (',' test ':' test)* [','] */
- int i, size;
- asdl_seq *keys, *values;
-
- ch = CHILD(n, 1);
- size = (NCH(ch) + 1) / 4; /* +1 in case no trailing comma */
- keys = asdl_seq_new(size, c->c_arena);
- if (!keys)
- return NULL;
-
- values = asdl_seq_new(size, c->c_arena);
- if (!values)
- return NULL;
-
- for (i = 0; i < NCH(ch); i += 4) {
- expr_ty expression;
-
- expression = ast_for_expr(c, CHILD(ch, i));
- if (!expression)
- return NULL;
-
- asdl_seq_SET(keys, i / 4, expression);
-
- expression = ast_for_expr(c, CHILD(ch, i + 2));
- if (!expression)
- return NULL;
-
- asdl_seq_SET(values, i / 4, expression);
- }
- return Dict(keys, values, LINENO(n), n->n_col_offset, c->c_arena);
+ /* dictmaker: test ':' test (',' test ':' test)* [','] */
+ int i, size;
+ asdl_seq *keys, *values;
+
+ ch = CHILD(n, 1);
+ size = (NCH(ch) + 1) / 4; /* +1 in case no trailing comma */
+ keys = asdl_seq_new(size, c->c_arena);
+ if (!keys)
+ return NULL;
+
+ values = asdl_seq_new(size, c->c_arena);
+ if (!values)
+ return NULL;
+
+ for (i = 0; i < NCH(ch); i += 4) {
+ expr_ty expression;
+
+ expression = ast_for_expr(c, CHILD(ch, i));
+ if (!expression)
+ return NULL;
+
+ asdl_seq_SET(keys, i / 4, expression);
+
+ expression = ast_for_expr(c, CHILD(ch, i + 2));
+ if (!expression)
+ return NULL;
+
+ asdl_seq_SET(values, i / 4, expression);
+ }
+ return Dict(keys, values, LINENO(n), n->n_col_offset, c->c_arena);
}
case BACKQUOTE: { /* repr */
- expr_ty expression = ast_for_testlist(c, CHILD(n, 1));
- if (!expression)
- return NULL;
+ expr_ty expression = ast_for_testlist(c, CHILD(n, 1));
+ if (!expression)
+ return NULL;
- return Repr(expression, LINENO(n), n->n_col_offset, c->c_arena);
+ return Repr(expression, LINENO(n), n->n_col_offset, c->c_arena);
}
default:
- PyErr_Format(PyExc_SystemError, "unhandled atom %d", TYPE(ch));
- return NULL;
+ PyErr_Format(PyExc_SystemError, "unhandled atom %d", TYPE(ch));
+ return NULL;
}
}
@@ -1303,7 +1332,7 @@
*/
ch = CHILD(n, 0);
if (TYPE(ch) == DOT)
- return Ellipsis(c->c_arena);
+ return Ellipsis(c->c_arena);
if (NCH(n) == 1 && TYPE(ch) == test) {
/* 'step' variable hold no significance in terms of being used over
@@ -1312,31 +1341,31 @@
if (!step)
return NULL;
- return Index(step, c->c_arena);
+ return Index(step, c->c_arena);
}
if (TYPE(ch) == test) {
- lower = ast_for_expr(c, ch);
+ lower = ast_for_expr(c, ch);
if (!lower)
return NULL;
}
/* If there's an upper bound it's in the second or third position. */
if (TYPE(ch) == COLON) {
- if (NCH(n) > 1) {
- node *n2 = CHILD(n, 1);
+ if (NCH(n) > 1) {
+ node *n2 = CHILD(n, 1);
- if (TYPE(n2) == test) {
- upper = ast_for_expr(c, n2);
+ if (TYPE(n2) == test) {
+ upper = ast_for_expr(c, n2);
if (!upper)
return NULL;
}
- }
+ }
} else if (NCH(n) > 2) {
- node *n2 = CHILD(n, 2);
+ node *n2 = CHILD(n, 2);
- if (TYPE(n2) == test) {
- upper = ast_for_expr(c, n2);
+ if (TYPE(n2) == test) {
+ upper = ast_for_expr(c, n2);
if (!upper)
return NULL;
}
@@ -1367,13 +1396,13 @@
static expr_ty
ast_for_binop(struct compiling *c, const node *n)
{
- /* Must account for a sequence of expressions.
- How should A op B op C by represented?
- BinOp(BinOp(A, op, B), op, C).
- */
+ /* Must account for a sequence of expressions.
+ How should A op B op C by represented?
+ BinOp(BinOp(A, op, B), op, C).
+ */
- int i, nops;
- expr_ty expr1, expr2, result;
+ int i, nops;
+ expr_ty expr1, expr2, result;
operator_ty newoperator;
expr1 = ast_for_expr(c, CHILD(n, 0));
@@ -1388,17 +1417,17 @@
if (!newoperator)
return NULL;
- result = BinOp(expr1, newoperator, expr2, LINENO(n), n->n_col_offset,
+ result = BinOp(expr1, newoperator, expr2, LINENO(n), n->n_col_offset,
c->c_arena);
- if (!result)
+ if (!result)
return NULL;
- nops = (NCH(n) - 1) / 2;
- for (i = 1; i < nops; i++) {
- expr_ty tmp_result, tmp;
- const node* next_oper = CHILD(n, i * 2 + 1);
+ nops = (NCH(n) - 1) / 2;
+ for (i = 1; i < nops; i++) {
+ expr_ty tmp_result, tmp;
+ const node* next_oper = CHILD(n, i * 2 + 1);
- newoperator = get_operator(next_oper);
+ newoperator = get_operator(next_oper);
if (!newoperator)
return NULL;
@@ -1407,13 +1436,13 @@
return NULL;
tmp_result = BinOp(result, newoperator, tmp,
- LINENO(next_oper), next_oper->n_col_offset,
+ LINENO(next_oper), next_oper->n_col_offset,
c->c_arena);
- if (!tmp)
- return NULL;
- result = tmp_result;
- }
- return result;
+ if (!tmp)
+ return NULL;
+ result = tmp_result;
+ }
+ return result;
}
static expr_ty
@@ -1560,8 +1589,8 @@
tmp = ast_for_trailer(c, ch, e);
if (!tmp)
return NULL;
- tmp->lineno = e->lineno;
- tmp->col_offset = e->col_offset;
+ tmp->lineno = e->lineno;
+ tmp->col_offset = e->col_offset;
e = tmp;
}
if (TYPE(CHILD(n, NCH(n) - 1)) == factor) {
@@ -1619,8 +1648,8 @@
return ast_for_lambdef(c, CHILD(n, 0));
else if (NCH(n) > 1)
return ast_for_ifexpr(c, n);
- /* Fallthrough */
- case or_test:
+ /* Fallthrough */
+ case or_test:
case and_test:
if (NCH(n) == 1) {
n = CHILD(n, 0);
@@ -1661,7 +1690,7 @@
else {
expr_ty expression;
asdl_int_seq *ops;
- asdl_seq *cmps;
+ asdl_seq *cmps;
ops = asdl_int_seq_new(NCH(n) / 2, c->c_arena);
if (!ops)
return NULL;
@@ -1675,12 +1704,12 @@
newoperator = ast_for_comp_op(CHILD(n, i));
if (!newoperator) {
return NULL;
- }
+ }
expression = ast_for_expr(c, CHILD(n, i + 1));
if (!expression) {
return NULL;
- }
+ }
asdl_seq_SET(ops, i / 2, newoperator);
asdl_seq_SET(cmps, i / 2, expression);
@@ -1688,7 +1717,7 @@
expression = ast_for_expr(c, CHILD(n, 0));
if (!expression) {
return NULL;
- }
+ }
return Compare(expression, ops, cmps, LINENO(n),
n->n_col_offset, c->c_arena);
@@ -1711,20 +1740,20 @@
}
return ast_for_binop(c, n);
case yield_expr: {
- expr_ty exp = NULL;
- if (NCH(n) == 2) {
- exp = ast_for_testlist(c, CHILD(n, 1));
- if (!exp)
- return NULL;
- }
- return Yield(exp, LINENO(n), n->n_col_offset, c->c_arena);
- }
+ expr_ty exp = NULL;
+ if (NCH(n) == 2) {
+ exp = ast_for_testlist(c, CHILD(n, 1));
+ if (!exp)
+ return NULL;
+ }
+ return Yield(exp, LINENO(n), n->n_col_offset, c->c_arena);
+ }
case factor:
if (NCH(n) == 1) {
n = CHILD(n, 0);
goto loop;
}
- return ast_for_factor(c, n);
+ return ast_for_factor(c, n);
case power:
return ast_for_power(c, n);
default:
@@ -1741,7 +1770,7 @@
/*
arglist: (argument ',')* (argument [',']| '*' test [',' '**' test]
| '**' test)
- argument: [test '='] test [gen_for] # Really [keyword '='] test
+ argument: [test '='] test [gen_for] # Really [keyword '='] test
*/
int i, nargs, nkeywords, ngens;
@@ -1755,20 +1784,20 @@
nkeywords = 0;
ngens = 0;
for (i = 0; i < NCH(n); i++) {
- node *ch = CHILD(n, i);
- if (TYPE(ch) == argument) {
- if (NCH(ch) == 1)
- nargs++;
- else if (TYPE(CHILD(ch, 1)) == gen_for)
- ngens++;
+ node *ch = CHILD(n, i);
+ if (TYPE(ch) == argument) {
+ if (NCH(ch) == 1)
+ nargs++;
+ else if (TYPE(CHILD(ch, 1)) == gen_for)
+ ngens++;
else
- nkeywords++;
- }
+ nkeywords++;
+ }
}
if (ngens > 1 || (ngens && (nargs || nkeywords))) {
ast_error(n, "Generator expression must be parenthesized "
- "if not sole argument");
- return NULL;
+ "if not sole argument");
+ return NULL;
}
if (nargs + nkeywords + ngens > 255) {
@@ -1785,32 +1814,32 @@
nargs = 0;
nkeywords = 0;
for (i = 0; i < NCH(n); i++) {
- node *ch = CHILD(n, i);
- if (TYPE(ch) == argument) {
- expr_ty e;
- if (NCH(ch) == 1) {
- if (nkeywords) {
- ast_error(CHILD(ch, 0),
- "non-keyword arg after keyword arg");
- return NULL;
- }
- e = ast_for_expr(c, CHILD(ch, 0));
+ node *ch = CHILD(n, i);
+ if (TYPE(ch) == argument) {
+ expr_ty e;
+ if (NCH(ch) == 1) {
+ if (nkeywords) {
+ ast_error(CHILD(ch, 0),
+ "non-keyword arg after keyword arg");
+ return NULL;
+ }
+ e = ast_for_expr(c, CHILD(ch, 0));
if (!e)
return NULL;
- asdl_seq_SET(args, nargs++, e);
- }
- else if (TYPE(CHILD(ch, 1)) == gen_for) {
- e = ast_for_genexp(c, ch);
+ asdl_seq_SET(args, nargs++, e);
+ }
+ else if (TYPE(CHILD(ch, 1)) == gen_for) {
+ e = ast_for_genexp(c, ch);
if (!e)
return NULL;
- asdl_seq_SET(args, nargs++, e);
+ asdl_seq_SET(args, nargs++, e);
}
- else {
- keyword_ty kw;
- identifier key;
+ else {
+ keyword_ty kw;
+ identifier key;
- /* CHILD(ch, 0) is test, but must be an identifier? */
- e = ast_for_expr(c, CHILD(ch, 0));
+ /* CHILD(ch, 0) is test, but must be an identifier? */
+ e = ast_for_expr(c, CHILD(ch, 0));
if (!e)
return NULL;
/* f(lambda x: x[0] = 3) ends up getting parsed with
@@ -1825,24 +1854,24 @@
ast_error(CHILD(ch, 0), "keyword can't be an expression");
return NULL;
}
- key = e->v.Name.id;
- e = ast_for_expr(c, CHILD(ch, 2));
+ key = e->v.Name.id;
+ e = ast_for_expr(c, CHILD(ch, 2));
if (!e)
return NULL;
- kw = keyword(key, e, c->c_arena);
+ kw = keyword(key, e, c->c_arena);
if (!kw)
return NULL;
- asdl_seq_SET(keywords, nkeywords++, kw);
- }
- }
- else if (TYPE(ch) == STAR) {
- vararg = ast_for_expr(c, CHILD(n, i+1));
- i++;
- }
- else if (TYPE(ch) == DOUBLESTAR) {
- kwarg = ast_for_expr(c, CHILD(n, i+1));
- i++;
- }
+ asdl_seq_SET(keywords, nkeywords++, kw);
+ }
+ }
+ else if (TYPE(ch) == STAR) {
+ vararg = ast_for_expr(c, CHILD(n, i+1));
+ i++;
+ }
+ else if (TYPE(ch) == DOUBLESTAR) {
+ kwarg = ast_for_expr(c, CHILD(n, i+1));
+ i++;
+ }
}
return Call(func, args, keywords, vararg, kwarg, func->lineno, func->col_offset, c->c_arena);
@@ -1866,12 +1895,12 @@
TYPE(n) == testlist1);
}
if (NCH(n) == 1)
- return ast_for_expr(c, CHILD(n, 0));
+ return ast_for_expr(c, CHILD(n, 0));
else {
asdl_seq *tmp = seq_for_testlist(c, n);
if (!tmp)
return NULL;
- return Tuple(tmp, Load, LINENO(n), n->n_col_offset, c->c_arena);
+ return Tuple(tmp, Load, LINENO(n), n->n_col_offset, c->c_arena);
}
}
@@ -1882,7 +1911,7 @@
/* argument: test [ gen_for ] */
assert(TYPE(n) == testlist_gexp || TYPE(n) == argument);
if (NCH(n) > 1 && TYPE(CHILD(n, 1)) == gen_for)
- return ast_for_genexp(c, n);
+ return ast_for_genexp(c, n);
return ast_for_testlist(c, n);
}
@@ -1916,23 +1945,23 @@
| ('=' (yield_expr|testlist))*)
testlist: test (',' test)* [',']
augassign: '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^='
- | '<<=' | '>>=' | '**=' | '//='
+ | '<<=' | '>>=' | '**=' | '//='
test: ... here starts the operator precendence dance
*/
if (NCH(n) == 1) {
- expr_ty e = ast_for_testlist(c, CHILD(n, 0));
+ expr_ty e = ast_for_testlist(c, CHILD(n, 0));
if (!e)
return NULL;
- return Expr(e, LINENO(n), n->n_col_offset, c->c_arena);
+ return Expr(e, LINENO(n), n->n_col_offset, c->c_arena);
}
else if (TYPE(CHILD(n, 1)) == augassign) {
expr_ty expr1, expr2;
operator_ty newoperator;
- node *ch = CHILD(n, 0);
+ node *ch = CHILD(n, 0);
- expr1 = ast_for_testlist(c, ch);
+ expr1 = ast_for_testlist(c, ch);
if (!expr1)
return NULL;
/* TODO(nas): Remove duplicated error checks (set_context does it) */
@@ -1961,13 +1990,13 @@
"assignment");
return NULL;
}
- set_context(expr1, Store, ch);
+ set_context(expr1, Store, ch);
- ch = CHILD(n, 2);
- if (TYPE(ch) == testlist)
- expr2 = ast_for_testlist(c, ch);
- else
- expr2 = ast_for_expr(c, ch);
+ ch = CHILD(n, 2);
+ if (TYPE(ch) == testlist)
+ expr2 = ast_for_testlist(c, ch);
+ else
+ expr2 = ast_for_expr(c, ch);
if (!expr2)
return NULL;
@@ -1975,45 +2004,45 @@
if (!newoperator)
return NULL;
- return AugAssign(expr1, newoperator, expr2, LINENO(n), n->n_col_offset, c->c_arena);
+ return AugAssign(expr1, newoperator, expr2, LINENO(n), n->n_col_offset, c->c_arena);
}
else {
- int i;
- asdl_seq *targets;
- node *value;
+ int i;
+ asdl_seq *targets;
+ node *value;
expr_ty expression;
- /* a normal assignment */
- REQ(CHILD(n, 1), EQUAL);
- targets = asdl_seq_new(NCH(n) / 2, c->c_arena);
- if (!targets)
- return NULL;
- for (i = 0; i < NCH(n) - 2; i += 2) {
- expr_ty e;
- node *ch = CHILD(n, i);
- if (TYPE(ch) == yield_expr) {
- ast_error(ch, "assignment to yield expression not possible");
- return NULL;
- }
- e = ast_for_testlist(c, ch);
-
- /* set context to assign */
- if (!e)
- return NULL;
-
- if (!set_context(e, Store, CHILD(n, i)))
- return NULL;
-
- asdl_seq_SET(targets, i / 2, e);
- }
- value = CHILD(n, NCH(n) - 1);
- if (TYPE(value) == testlist)
- expression = ast_for_testlist(c, value);
- else
- expression = ast_for_expr(c, value);
- if (!expression)
- return NULL;
- return Assign(targets, expression, LINENO(n), n->n_col_offset, c->c_arena);
+ /* a normal assignment */
+ REQ(CHILD(n, 1), EQUAL);
+ targets = asdl_seq_new(NCH(n) / 2, c->c_arena);
+ if (!targets)
+ return NULL;
+ for (i = 0; i < NCH(n) - 2; i += 2) {
+ expr_ty e;
+ node *ch = CHILD(n, i);
+ if (TYPE(ch) == yield_expr) {
+ ast_error(ch, "assignment to yield expression not possible");
+ return NULL;
+ }
+ e = ast_for_testlist(c, ch);
+
+ /* set context to assign */
+ if (!e)
+ return NULL;
+
+ if (!set_context(e, Store, CHILD(n, i)))
+ return NULL;
+
+ asdl_seq_SET(targets, i / 2, e);
+ }
+ value = CHILD(n, NCH(n) - 1);
+ if (TYPE(value) == testlist)
+ expression = ast_for_testlist(c, value);
+ else
+ expression = ast_for_expr(c, value);
+ if (!expression)
+ return NULL;
+ return Assign(targets, expression, LINENO(n), n->n_col_offset, c->c_arena);
}
}
@@ -2030,19 +2059,19 @@
REQ(n, print_stmt);
if (NCH(n) >= 2 && TYPE(CHILD(n, 1)) == RIGHTSHIFT) {
- dest = ast_for_expr(c, CHILD(n, 2));
+ dest = ast_for_expr(c, CHILD(n, 2));
if (!dest)
return NULL;
- start = 4;
+ start = 4;
}
seq = asdl_seq_new((NCH(n) + 1 - start) / 2, c->c_arena);
if (!seq)
- return NULL;
+ return NULL;
for (i = start, j = 0; i < NCH(n); i += 2, ++j) {
expression = ast_for_expr(c, CHILD(n, i));
if (!expression)
return NULL;
- asdl_seq_SET(seq, j, expression);
+ asdl_seq_SET(seq, j, expression);
}
nl = (TYPE(CHILD(n, NCH(n) - 1)) == COMMA) ? false : true;
return Print(dest, seq, nl, LINENO(n), n->n_col_offset, c->c_arena);
@@ -2059,14 +2088,14 @@
seq = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
if (!seq)
- return NULL;
+ return NULL;
for (i = 0; i < NCH(n); i += 2) {
- e = ast_for_expr(c, CHILD(n, i));
- if (!e)
- return NULL;
- asdl_seq_SET(seq, i / 2, e);
- if (context && !set_context(e, context, CHILD(n, i)))
- return NULL;
+ e = ast_for_expr(c, CHILD(n, i));
+ if (!e)
+ return NULL;
+ asdl_seq_SET(seq, i / 2, e);
+ if (context && !set_context(e, context, CHILD(n, i)))
+ return NULL;
}
return seq;
}
@@ -2108,9 +2137,9 @@
case continue_stmt:
return Continue(LINENO(n), n->n_col_offset, c->c_arena);
case yield_stmt: { /* will reduce to yield_expr */
- expr_ty exp = ast_for_expr(c, CHILD(ch, 0));
- if (!exp)
- return NULL;
+ expr_ty exp = ast_for_expr(c, CHILD(ch, 0));
+ if (!exp)
+ return NULL;
return Expr(exp, LINENO(n), n->n_col_offset, c->c_arena);
}
case return_stmt:
@@ -2183,10 +2212,6 @@
case import_as_name:
str = NULL;
if (NCH(n) == 3) {
- if (strcmp(STR(CHILD(n, 1)), "as") != 0) {
- ast_error(n, "must use 'as' in import");
- return NULL;
- }
str = NEW_IDENTIFIER(CHILD(n, 2));
}
return alias(NEW_IDENTIFIER(CHILD(n, 0)), str, c->c_arena);
@@ -2199,10 +2224,6 @@
alias_ty a = alias_for_import_name(c, CHILD(n, 0));
if (!a)
return NULL;
- if (strcmp(STR(CHILD(n, 1)), "as") != 0) {
- ast_error(n, "must use 'as' in import");
- return NULL;
- }
assert(!a->asname);
a->asname = NEW_IDENTIFIER(CHILD(n, 2));
return a;
@@ -2237,13 +2258,13 @@
--s;
*s = '\0';
PyString_InternInPlace(&str);
- PyArena_AddPyObject(c->c_arena, str);
+ PyArena_AddPyObject(c->c_arena, str);
return alias(str, NULL, c->c_arena);
}
break;
case STAR:
- str = PyString_InternFromString("*");
- PyArena_AddPyObject(c->c_arena, str);
+ str = PyString_InternFromString("*");
+ PyArena_AddPyObject(c->c_arena, str);
return alias(str, NULL, c->c_arena);
default:
PyErr_Format(PyExc_SystemError,
@@ -2275,69 +2296,69 @@
n = CHILD(n, 0);
if (TYPE(n) == import_name) {
n = CHILD(n, 1);
- REQ(n, dotted_as_names);
- aliases = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
- if (!aliases)
- return NULL;
- for (i = 0; i < NCH(n); i += 2) {
+ REQ(n, dotted_as_names);
+ aliases = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
+ if (!aliases)
+ return NULL;
+ for (i = 0; i < NCH(n); i += 2) {
alias_ty import_alias = alias_for_import_name(c, CHILD(n, i));
if (!import_alias)
return NULL;
- asdl_seq_SET(aliases, i / 2, import_alias);
+ asdl_seq_SET(aliases, i / 2, import_alias);
}
- return Import(aliases, lineno, col_offset, c->c_arena);
+ return Import(aliases, lineno, col_offset, c->c_arena);
}
else if (TYPE(n) == import_from) {
int n_children;
- int idx, ndots = 0;
- alias_ty mod = NULL;
- identifier modname;
-
+ int idx, ndots = 0;
+ alias_ty mod = NULL;
+ identifier modname;
+
/* Count the number of dots (for relative imports) and check for the
optional module name */
- for (idx = 1; idx < NCH(n); idx++) {
- if (TYPE(CHILD(n, idx)) == dotted_name) {
- mod = alias_for_import_name(c, CHILD(n, idx));
- idx++;
- break;
- } else if (TYPE(CHILD(n, idx)) != DOT) {
- break;
- }
- ndots++;
- }
- idx++; /* skip over the 'import' keyword */
+ for (idx = 1; idx < NCH(n); idx++) {
+ if (TYPE(CHILD(n, idx)) == dotted_name) {
+ mod = alias_for_import_name(c, CHILD(n, idx));
+ idx++;
+ break;
+ } else if (TYPE(CHILD(n, idx)) != DOT) {
+ break;
+ }
+ ndots++;
+ }
+ idx++; /* skip over the 'import' keyword */
switch (TYPE(CHILD(n, idx))) {
case STAR:
/* from ... import * */
- n = CHILD(n, idx);
- n_children = 1;
- if (ndots) {
- ast_error(n, "'import *' not allowed with 'from .'");
- return NULL;
- }
- break;
- case LPAR:
- /* from ... import (x, y, z) */
- n = CHILD(n, idx + 1);
- n_children = NCH(n);
- break;
- case import_as_names:
- /* from ... import x, y, z */
- n = CHILD(n, idx);
- n_children = NCH(n);
+ n = CHILD(n, idx);
+ n_children = 1;
+ if (ndots) {
+ ast_error(n, "'import *' not allowed with 'from .'");
+ return NULL;
+ }
+ break;
+ case LPAR:
+ /* from ... import (x, y, z) */
+ n = CHILD(n, idx + 1);
+ n_children = NCH(n);
+ break;
+ case import_as_names:
+ /* from ... import x, y, z */
+ n = CHILD(n, idx);
+ n_children = NCH(n);
if (n_children % 2 == 0) {
ast_error(n, "trailing comma not allowed without"
" surrounding parentheses");
return NULL;
}
- break;
- default:
- ast_error(n, "Unexpected node-type in from-import");
- return NULL;
- }
+ break;
+ default:
+ ast_error(n, "Unexpected node-type in from-import");
+ return NULL;
+ }
- aliases = asdl_seq_new((n_children + 1) / 2, c->c_arena);
- if (!aliases)
+ aliases = asdl_seq_new((n_children + 1) / 2, c->c_arena);
+ if (!aliases)
return NULL;
/* handle "from ... import *" special b/c there's no children */
@@ -2345,14 +2366,14 @@
alias_ty import_alias = alias_for_import_name(c, n);
if (!import_alias)
return NULL;
- asdl_seq_SET(aliases, 0, import_alias);
+ asdl_seq_SET(aliases, 0, import_alias);
}
else {
- for (i = 0; i < NCH(n); i += 2) {
+ for (i = 0; i < NCH(n); i += 2) {
alias_ty import_alias = alias_for_import_name(c, CHILD(n, i));
if (!import_alias)
return NULL;
- asdl_seq_SET(aliases, i / 2, import_alias);
+ asdl_seq_SET(aliases, i / 2, import_alias);
}
}
if (mod != NULL)
@@ -2379,12 +2400,12 @@
REQ(n, global_stmt);
s = asdl_seq_new(NCH(n) / 2, c->c_arena);
if (!s)
- return NULL;
+ return NULL;
for (i = 1; i < NCH(n); i += 2) {
- name = NEW_IDENTIFIER(CHILD(n, i));
- if (!name)
- return NULL;
- asdl_seq_SET(s, i / 2, name);
+ name = NEW_IDENTIFIER(CHILD(n, i));
+ if (!name)
+ return NULL;
+ asdl_seq_SET(s, i / 2, name);
}
return Global(s, LINENO(n), n->n_col_offset, c->c_arena);
}
@@ -2429,7 +2450,7 @@
expr_ty expression = ast_for_expr(c, CHILD(n, 1));
if (!expression)
return NULL;
- return Assert(expression, NULL, LINENO(n), n->n_col_offset, c->c_arena);
+ return Assert(expression, NULL, LINENO(n), n->n_col_offset, c->c_arena);
}
else if (NCH(n) == 4) {
expr_ty expr1, expr2;
@@ -2441,7 +2462,7 @@
if (!expr2)
return NULL;
- return Assert(expr1, expr2, LINENO(n), n->n_col_offset, c->c_arena);
+ return Assert(expr1, expr2, LINENO(n), n->n_col_offset, c->c_arena);
}
PyErr_Format(PyExc_SystemError,
"improper number of parts to 'assert' statement: %d",
@@ -2463,53 +2484,53 @@
total = num_stmts(n);
seq = asdl_seq_new(total, c->c_arena);
if (!seq)
- return NULL;
+ return NULL;
if (TYPE(CHILD(n, 0)) == simple_stmt) {
- n = CHILD(n, 0);
- /* simple_stmt always ends with a NEWLINE,
- and may have a trailing SEMI
- */
- end = NCH(n) - 1;
- if (TYPE(CHILD(n, end - 1)) == SEMI)
- end--;
+ n = CHILD(n, 0);
+ /* simple_stmt always ends with a NEWLINE,
+ and may have a trailing SEMI
+ */
+ end = NCH(n) - 1;
+ if (TYPE(CHILD(n, end - 1)) == SEMI)
+ end--;
/* loop by 2 to skip semi-colons */
- for (i = 0; i < end; i += 2) {
- ch = CHILD(n, i);
- s = ast_for_stmt(c, ch);
- if (!s)
- return NULL;
- asdl_seq_SET(seq, pos++, s);
- }
+ for (i = 0; i < end; i += 2) {
+ ch = CHILD(n, i);
+ s = ast_for_stmt(c, ch);
+ if (!s)
+ return NULL;
+ asdl_seq_SET(seq, pos++, s);
+ }
}
else {
- for (i = 2; i < (NCH(n) - 1); i++) {
- ch = CHILD(n, i);
- REQ(ch, stmt);
- num = num_stmts(ch);
- if (num == 1) {
- /* small_stmt or compound_stmt with only one child */
- s = ast_for_stmt(c, ch);
- if (!s)
- return NULL;
- asdl_seq_SET(seq, pos++, s);
- }
- else {
- int j;
- ch = CHILD(ch, 0);
- REQ(ch, simple_stmt);
- for (j = 0; j < NCH(ch); j += 2) {
- /* statement terminates with a semi-colon ';' */
- if (NCH(CHILD(ch, j)) == 0) {
- assert((j + 1) == NCH(ch));
- break;
- }
- s = ast_for_stmt(c, CHILD(ch, j));
- if (!s)
- return NULL;
- asdl_seq_SET(seq, pos++, s);
- }
- }
- }
+ for (i = 2; i < (NCH(n) - 1); i++) {
+ ch = CHILD(n, i);
+ REQ(ch, stmt);
+ num = num_stmts(ch);
+ if (num == 1) {
+ /* small_stmt or compound_stmt with only one child */
+ s = ast_for_stmt(c, ch);
+ if (!s)
+ return NULL;
+ asdl_seq_SET(seq, pos++, s);
+ }
+ else {
+ int j;
+ ch = CHILD(ch, 0);
+ REQ(ch, simple_stmt);
+ for (j = 0; j < NCH(ch); j += 2) {
+ /* statement terminates with a semi-colon ';' */
+ if (NCH(CHILD(ch, j)) == 0) {
+ assert((j + 1) == NCH(ch));
+ break;
+ }
+ s = ast_for_stmt(c, CHILD(ch, j));
+ if (!s)
+ return NULL;
+ asdl_seq_SET(seq, pos++, s);
+ }
+ }
+ }
}
assert(pos == seq->size);
return seq;
@@ -2536,7 +2557,7 @@
if (!suite_seq)
return NULL;
- return If(expression, suite_seq, NULL, LINENO(n), n->n_col_offset, c->c_arena);
+ return If(expression, suite_seq, NULL, LINENO(n), n->n_col_offset, c->c_arena);
}
s = STR(CHILD(n, 4));
@@ -2558,28 +2579,28 @@
if (!seq2)
return NULL;
- return If(expression, seq1, seq2, LINENO(n), n->n_col_offset, c->c_arena);
+ return If(expression, seq1, seq2, LINENO(n), n->n_col_offset, c->c_arena);
}
else if (s[2] == 'i') {
- int i, n_elif, has_else = 0;
- asdl_seq *orelse = NULL;
- n_elif = NCH(n) - 4;
+ int i, n_elif, has_else = 0;
+ asdl_seq *orelse = NULL;
+ n_elif = NCH(n) - 4;
/* must reference the child n_elif+1 since 'else' token is third,
not fourth, child from the end. */
- if (TYPE(CHILD(n, (n_elif + 1))) == NAME
- && STR(CHILD(n, (n_elif + 1)))[2] == 's') {
- has_else = 1;
- n_elif -= 3;
- }
- n_elif /= 4;
+ if (TYPE(CHILD(n, (n_elif + 1))) == NAME
+ && STR(CHILD(n, (n_elif + 1)))[2] == 's') {
+ has_else = 1;
+ n_elif -= 3;
+ }
+ n_elif /= 4;
- if (has_else) {
+ if (has_else) {
expr_ty expression;
asdl_seq *seq1, *seq2;
- orelse = asdl_seq_new(1, c->c_arena);
- if (!orelse)
- return NULL;
+ orelse = asdl_seq_new(1, c->c_arena);
+ if (!orelse)
+ return NULL;
expression = ast_for_expr(c, CHILD(n, NCH(n) - 6));
if (!expression)
return NULL;
@@ -2590,20 +2611,20 @@
if (!seq2)
return NULL;
- asdl_seq_SET(orelse, 0, If(expression, seq1, seq2,
- LINENO(CHILD(n, NCH(n) - 6)), CHILD(n, NCH(n) - 6)->n_col_offset,
+ asdl_seq_SET(orelse, 0, If(expression, seq1, seq2,
+ LINENO(CHILD(n, NCH(n) - 6)), CHILD(n, NCH(n) - 6)->n_col_offset,
c->c_arena));
- /* the just-created orelse handled the last elif */
- n_elif--;
- }
+ /* the just-created orelse handled the last elif */
+ n_elif--;
+ }
- for (i = 0; i < n_elif; i++) {
- int off = 5 + (n_elif - i - 1) * 4;
+ for (i = 0; i < n_elif; i++) {
+ int off = 5 + (n_elif - i - 1) * 4;
expr_ty expression;
asdl_seq *suite_seq;
- asdl_seq *newobj = asdl_seq_new(1, c->c_arena);
- if (!newobj)
- return NULL;
+ asdl_seq *newobj = asdl_seq_new(1, c->c_arena);
+ if (!newobj)
+ return NULL;
expression = ast_for_expr(c, CHILD(n, off));
if (!expression)
return NULL;
@@ -2611,14 +2632,14 @@
if (!suite_seq)
return NULL;
- asdl_seq_SET(newobj, 0,
- If(expression, suite_seq, orelse,
- LINENO(CHILD(n, off)), CHILD(n, off)->n_col_offset, c->c_arena));
- orelse = newobj;
- }
- return If(ast_for_expr(c, CHILD(n, 1)),
- ast_for_suite(c, CHILD(n, 3)),
- orelse, LINENO(n), n->n_col_offset, c->c_arena);
+ asdl_seq_SET(newobj, 0,
+ If(expression, suite_seq, orelse,
+ LINENO(CHILD(n, off)), CHILD(n, off)->n_col_offset, c->c_arena));
+ orelse = newobj;
+ }
+ return If(ast_for_expr(c, CHILD(n, 1)),
+ ast_for_suite(c, CHILD(n, 3)),
+ orelse, LINENO(n), n->n_col_offset, c->c_arena);
}
PyErr_Format(PyExc_SystemError,
@@ -2642,7 +2663,7 @@
suite_seq = ast_for_suite(c, CHILD(n, 3));
if (!suite_seq)
return NULL;
- return While(expression, suite_seq, NULL, LINENO(n), n->n_col_offset, c->c_arena);
+ return While(expression, suite_seq, NULL, LINENO(n), n->n_col_offset, c->c_arena);
}
else if (NCH(n) == 7) {
expr_ty expression;
@@ -2658,7 +2679,7 @@
if (!seq2)
return NULL;
- return While(expression, seq1, seq2, LINENO(n), n->n_col_offset, c->c_arena);
+ return While(expression, seq1, seq2, LINENO(n), n->n_col_offset, c->c_arena);
}
PyErr_Format(PyExc_SystemError,
@@ -2678,7 +2699,7 @@
REQ(n, for_stmt);
if (NCH(n) == 9) {
- seq = ast_for_suite(c, CHILD(n, 8));
+ seq = ast_for_suite(c, CHILD(n, 8));
if (!seq)
return NULL;
}
@@ -2690,9 +2711,9 @@
/* Check the # of children rather than the length of _target, since
for x, in ... has 1 element in _target, but still requires a Tuple. */
if (NCH(node_target) == 1)
- target = (expr_ty)asdl_seq_GET(_target, 0);
+ target = (expr_ty)asdl_seq_GET(_target, 0);
else
- target = Tuple(_target, Store, LINENO(n), n->n_col_offset, c->c_arena);
+ target = Tuple(_target, Store, LINENO(n), n->n_col_offset, c->c_arena);
expression = ast_for_testlist(c, CHILD(n, 3));
if (!expression)
@@ -2717,7 +2738,7 @@
if (!suite_seq)
return NULL;
- return excepthandler(NULL, NULL, suite_seq, LINENO(exc),
+ return excepthandler(NULL, NULL, suite_seq, LINENO(exc),
exc->n_col_offset, c->c_arena);
}
else if (NCH(exc) == 2) {
@@ -2731,16 +2752,16 @@
if (!suite_seq)
return NULL;
- return excepthandler(expression, NULL, suite_seq, LINENO(exc),
+ return excepthandler(expression, NULL, suite_seq, LINENO(exc),
exc->n_col_offset, c->c_arena);
}
else if (NCH(exc) == 4) {
asdl_seq *suite_seq;
expr_ty expression;
- expr_ty e = ast_for_expr(c, CHILD(exc, 3));
- if (!e)
+ expr_ty e = ast_for_expr(c, CHILD(exc, 3));
+ if (!e)
return NULL;
- if (!set_context(e, Store, CHILD(exc, 3)))
+ if (!set_context(e, Store, CHILD(exc, 3)))
return NULL;
expression = ast_for_expr(c, CHILD(exc, 1));
if (!expression)
@@ -2749,7 +2770,7 @@
if (!suite_seq)
return NULL;
- return excepthandler(expression, e, suite_seq, LINENO(exc),
+ return excepthandler(expression, e, suite_seq, LINENO(exc),
exc->n_col_offset, c->c_arena);
}
@@ -2804,8 +2825,8 @@
}
if (n_except > 0) {
- int i;
- stmt_ty except_st;
+ int i;
+ stmt_ty except_st;
/* process except statements to create a try ... except */
asdl_seq *handlers = asdl_seq_new(n_except, c->c_arena);
if (handlers == NULL)
@@ -2819,17 +2840,17 @@
asdl_seq_SET(handlers, i, e);
}
- except_st = TryExcept(body, handlers, orelse, LINENO(n),
+ except_st = TryExcept(body, handlers, orelse, LINENO(n),
n->n_col_offset, c->c_arena);
if (!finally)
- return except_st;
+ return except_st;
/* if a 'finally' is present too, we nest the TryExcept within a
TryFinally to emulate try ... except ... finally */
- body = asdl_seq_new(1, c->c_arena);
- if (body == NULL)
- return NULL;
- asdl_seq_SET(body, 0, except_st);
+ body = asdl_seq_new(1, c->c_arena);
+ if (body == NULL)
+ return NULL;
+ asdl_seq_SET(body, 0, except_st);
}
/* must be a try ... finally (except clauses are in body, if any exist) */
@@ -2841,10 +2862,6 @@
ast_for_with_var(struct compiling *c, const node *n)
{
REQ(n, with_var);
- if (strcmp(STR(CHILD(n, 0)), "as") != 0) {
- ast_error(n, "expected \"with [expr] as [var]\"");
- return NULL;
- }
return ast_for_expr(c, CHILD(n, 1));
}
@@ -2864,9 +2881,9 @@
if (!optional_vars) {
return NULL;
}
- if (!set_context(optional_vars, Store, n)) {
- return NULL;
- }
+ if (!set_context(optional_vars, Store, n)) {
+ return NULL;
+ }
suite_index = 4;
}
@@ -2875,7 +2892,7 @@
return NULL;
}
return With(context_expr, optional_vars, suite_seq, LINENO(n),
- n->n_col_offset, c->c_arena);
+ n->n_col_offset, c->c_arena);
}
static stmt_ty
@@ -2887,23 +2904,23 @@
REQ(n, classdef);
if (!strcmp(STR(CHILD(n, 1)), "None")) {
- ast_error(n, "assignment to None");
- return NULL;
+ ast_error(n, "assignment to None");
+ return NULL;
}
if (NCH(n) == 4) {
s = ast_for_suite(c, CHILD(n, 3));
if (!s)
return NULL;
- return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), NULL, s, LINENO(n),
+ return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), NULL, s, LINENO(n),
n->n_col_offset, c->c_arena);
}
/* check for empty base list */
if (TYPE(CHILD(n,3)) == RPAR) {
- s = ast_for_suite(c, CHILD(n,5));
- if (!s)
- return NULL;
- return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), NULL, s, LINENO(n),
+ s = ast_for_suite(c, CHILD(n,5));
+ if (!s)
+ return NULL;
+ return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), NULL, s, LINENO(n),
n->n_col_offset, c->c_arena);
}
@@ -2923,21 +2940,21 @@
ast_for_stmt(struct compiling *c, const node *n)
{
if (TYPE(n) == stmt) {
- assert(NCH(n) == 1);
- n = CHILD(n, 0);
+ assert(NCH(n) == 1);
+ n = CHILD(n, 0);
}
if (TYPE(n) == simple_stmt) {
- assert(num_stmts(n) == 1);
- n = CHILD(n, 0);
+ assert(num_stmts(n) == 1);
+ n = CHILD(n, 0);
}
if (TYPE(n) == small_stmt) {
- REQ(n, small_stmt);
- n = CHILD(n, 0);
- /* small_stmt: expr_stmt | print_stmt | del_stmt | pass_stmt
- | flow_stmt | import_stmt | global_stmt | exec_stmt
+ REQ(n, small_stmt);
+ n = CHILD(n, 0);
+ /* small_stmt: expr_stmt | print_stmt | del_stmt | pass_stmt
+ | flow_stmt | import_stmt | global_stmt | exec_stmt
| assert_stmt
- */
- switch (TYPE(n)) {
+ */
+ switch (TYPE(n)) {
case expr_stmt:
return ast_for_expr_stmt(c, n);
case print_stmt:
@@ -2965,11 +2982,11 @@
}
else {
/* compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt
- | funcdef | classdef
- */
- node *ch = CHILD(n, 0);
- REQ(n, compound_stmt);
- switch (TYPE(ch)) {
+ | funcdef | classdef
+ */
+ node *ch = CHILD(n, 0);
+ REQ(n, compound_stmt);
+ switch (TYPE(ch)) {
case if_stmt:
return ast_for_if_stmt(c, ch);
case while_stmt:
@@ -2989,144 +3006,144 @@
"unhandled small_stmt: TYPE=%d NCH=%d\n",
TYPE(n), NCH(n));
return NULL;
- }
+ }
}
}
static PyObject *
parsenumber(const char *s)
{
- const char *end;
- long x;
- double dx;
+ const char *end;
+ long x;
+ double dx;
#ifndef WITHOUT_COMPLEX
- Py_complex c;
- int imflag;
+ Py_complex c;
+ int imflag;
#endif
- errno = 0;
- end = s + strlen(s) - 1;
+ errno = 0;
+ end = s + strlen(s) - 1;
#ifndef WITHOUT_COMPLEX
- imflag = *end == 'j' || *end == 'J';
+ imflag = *end == 'j' || *end == 'J';
#endif
- if (*end == 'l' || *end == 'L')
- return PyLong_FromString((char *)s, (char **)0, 0);
- if (s[0] == '0') {
- x = (long) PyOS_strtoul((char *)s, (char **)&end, 0);
- if (x < 0 && errno == 0) {
- return PyLong_FromString((char *)s,
- (char **)0,
- 0);
- }
- }
- else
- x = PyOS_strtol((char *)s, (char **)&end, 0);
- if (*end == '\0') {
- if (errno != 0)
- return PyLong_FromString((char *)s, (char **)0, 0);
- return PyInt_FromLong(x);
- }
- /* XXX Huge floats may silently fail */
+ if (*end == 'l' || *end == 'L')
+ return PyLong_FromString((char *)s, (char **)0, 0);
+ if (s[0] == '0') {
+ x = (long) PyOS_strtoul((char *)s, (char **)&end, 0);
+ if (x < 0 && errno == 0) {
+ return PyLong_FromString((char *)s,
+ (char **)0,
+ 0);
+ }
+ }
+ else
+ x = PyOS_strtol((char *)s, (char **)&end, 0);
+ if (*end == '\0') {
+ if (errno != 0)
+ return PyLong_FromString((char *)s, (char **)0, 0);
+ return PyInt_FromLong(x);
+ }
+ /* XXX Huge floats may silently fail */
#ifndef WITHOUT_COMPLEX
- if (imflag) {
- c.real = 0.;
- PyFPE_START_PROTECT("atof", return 0)
- c.imag = PyOS_ascii_atof(s);
- PyFPE_END_PROTECT(c)
- return PyComplex_FromCComplex(c);
- }
- else
+ if (imflag) {
+ c.real = 0.;
+ PyFPE_START_PROTECT("atof", return 0)
+ c.imag = PyOS_ascii_atof(s);
+ PyFPE_END_PROTECT(c)
+ return PyComplex_FromCComplex(c);
+ }
+ else
#endif
- {
- PyFPE_START_PROTECT("atof", return 0)
- dx = PyOS_ascii_atof(s);
- PyFPE_END_PROTECT(dx)
- return PyFloat_FromDouble(dx);
- }
+ {
+ PyFPE_START_PROTECT("atof", return 0)
+ dx = PyOS_ascii_atof(s);
+ PyFPE_END_PROTECT(dx)
+ return PyFloat_FromDouble(dx);
+ }
}
static PyObject *
decode_utf8(const char **sPtr, const char *end, char* encoding)
{
#ifndef Py_USING_UNICODE
- Py_FatalError("decode_utf8 should not be called in this build.");
+ Py_FatalError("decode_utf8 should not be called in this build.");
return NULL;
#else
- PyObject *u, *v;
- char *s, *t;
- t = s = (char *)*sPtr;
- /* while (s < end && *s != '\\') s++; */ /* inefficient for u".." */
- while (s < end && (*s & 0x80)) s++;
- *sPtr = s;
- u = PyUnicode_DecodeUTF8(t, s - t, NULL);
- if (u == NULL)
- return NULL;
- v = PyUnicode_AsEncodedString(u, encoding, NULL);
- Py_DECREF(u);
- return v;
+ PyObject *u, *v;
+ char *s, *t;
+ t = s = (char *)*sPtr;
+ /* while (s < end && *s != '\\') s++; */ /* inefficient for u".." */
+ while (s < end && (*s & 0x80)) s++;
+ *sPtr = s;
+ u = PyUnicode_DecodeUTF8(t, s - t, NULL);
+ if (u == NULL)
+ return NULL;
+ v = PyUnicode_AsEncodedString(u, encoding, NULL);
+ Py_DECREF(u);
+ return v;
#endif
}
static PyObject *
decode_unicode(const char *s, size_t len, int rawmode, const char *encoding)
{
- PyObject *v, *u;
- char *buf;
- char *p;
- const char *end;
- if (encoding == NULL) {
- buf = (char *)s;
- u = NULL;
- } else if (strcmp(encoding, "iso-8859-1") == 0) {
- buf = (char *)s;
- u = NULL;
- } else {
- /* "\XX" may become "\u005c\uHHLL" (12 bytes) */
- u = PyString_FromStringAndSize((char *)NULL, len * 4);
- if (u == NULL)
- return NULL;
- p = buf = PyString_AsString(u);
- end = s + len;
- while (s < end) {
- if (*s == '\\') {
- *p++ = *s++;
- if (*s & 0x80) {
- strcpy(p, "u005c");
- p += 5;
- }
- }
- if (*s & 0x80) { /* XXX inefficient */
- PyObject *w;
- char *r;
- Py_ssize_t rn, i;
- w = decode_utf8(&s, end, "utf-16-be");
- if (w == NULL) {
- Py_DECREF(u);
- return NULL;
- }
- r = PyString_AsString(w);
- rn = PyString_Size(w);
- assert(rn % 2 == 0);
- for (i = 0; i < rn; i += 2) {
- sprintf(p, "\\u%02x%02x",
- r[i + 0] & 0xFF,
- r[i + 1] & 0xFF);
- p += 6;
- }
- Py_DECREF(w);
- } else {
- *p++ = *s++;
- }
- }
- len = p - buf;
- s = buf;
- }
- if (rawmode)
- v = PyUnicode_DecodeRawUnicodeEscape(s, len, NULL);
- else
- v = PyUnicode_DecodeUnicodeEscape(s, len, NULL);
- Py_XDECREF(u);
- return v;
+ PyObject *v, *u;
+ char *buf;
+ char *p;
+ const char *end;
+ if (encoding == NULL) {
+ buf = (char *)s;
+ u = NULL;
+ } else if (strcmp(encoding, "iso-8859-1") == 0) {
+ buf = (char *)s;
+ u = NULL;
+ } else {
+ /* "\XX" may become "\u005c\uHHLL" (12 bytes) */
+ u = PyString_FromStringAndSize((char *)NULL, len * 4);
+ if (u == NULL)
+ return NULL;
+ p = buf = PyString_AsString(u);
+ end = s + len;
+ while (s < end) {
+ if (*s == '\\') {
+ *p++ = *s++;
+ if (*s & 0x80) {
+ strcpy(p, "u005c");
+ p += 5;
+ }
+ }
+ if (*s & 0x80) { /* XXX inefficient */
+ PyObject *w;
+ char *r;
+ Py_ssize_t rn, i;
+ w = decode_utf8(&s, end, "utf-16-be");
+ if (w == NULL) {
+ Py_DECREF(u);
+ return NULL;
+ }
+ r = PyString_AsString(w);
+ rn = PyString_Size(w);
+ assert(rn % 2 == 0);
+ for (i = 0; i < rn; i += 2) {
+ sprintf(p, "\\u%02x%02x",
+ r[i + 0] & 0xFF,
+ r[i + 1] & 0xFF);
+ p += 6;
+ }
+ Py_DECREF(w);
+ } else {
+ *p++ = *s++;
+ }
+ }
+ len = p - buf;
+ s = buf;
+ }
+ if (rawmode)
+ v = PyUnicode_DecodeRawUnicodeEscape(s, len, NULL);
+ else
+ v = PyUnicode_DecodeUnicodeEscape(s, len, NULL);
+ Py_XDECREF(u);
+ return v;
}
/* s is a Python string literal, including the bracketing quote characters,
@@ -3136,75 +3153,75 @@
static PyObject *
parsestr(const char *s, const char *encoding)
{
- size_t len;
- int quote = Py_CHARMASK(*s);
- int rawmode = 0;
- int need_encoding;
- 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;
- }
- s++;
- len = strlen(s);
- if (len > INT_MAX) {
- PyErr_SetString(PyExc_OverflowError,
- "string to parse is too long");
- return NULL;
- }
- if (s[--len] != quote) {
- PyErr_BadInternalCall();
- return NULL;
- }
- if (len >= 4 && s[0] == quote && s[1] == quote) {
- s += 2;
- len -= 2;
- if (s[--len] != quote || s[--len] != quote) {
- PyErr_BadInternalCall();
- return NULL;
- }
- }
+ size_t len;
+ int quote = Py_CHARMASK(*s);
+ int rawmode = 0;
+ int need_encoding;
+ 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;
+ }
+ s++;
+ len = strlen(s);
+ if (len > INT_MAX) {
+ PyErr_SetString(PyExc_OverflowError,
+ "string to parse is too long");
+ return NULL;
+ }
+ if (s[--len] != quote) {
+ PyErr_BadInternalCall();
+ return NULL;
+ }
+ if (len >= 4 && s[0] == quote && s[1] == quote) {
+ s += 2;
+ len -= 2;
+ if (s[--len] != quote || s[--len] != quote) {
+ PyErr_BadInternalCall();
+ return NULL;
+ }
+ }
#ifdef Py_USING_UNICODE
- if (unicode || Py_UnicodeFlag) {
- return decode_unicode(s, len, rawmode, encoding);
- }
+ if (unicode || Py_UnicodeFlag) {
+ return decode_unicode(s, len, rawmode, encoding);
+ }
#endif
- need_encoding = (encoding != NULL &&
- strcmp(encoding, "utf-8") != 0 &&
- strcmp(encoding, "iso-8859-1") != 0);
- if (rawmode || strchr(s, '\\') == NULL) {
- if (need_encoding) {
+ need_encoding = (encoding != NULL &&
+ strcmp(encoding, "utf-8") != 0 &&
+ strcmp(encoding, "iso-8859-1") != 0);
+ if (rawmode || strchr(s, '\\') == NULL) {
+ if (need_encoding) {
#ifndef Py_USING_UNICODE
- /* This should not happen - we never see any other
- encoding. */
- Py_FatalError(
+ /* This should not happen - we never see any other
+ encoding. */
+ Py_FatalError(
"cannot deal with encodings in this build.");
#else
- PyObject *v, *u = PyUnicode_DecodeUTF8(s, len, NULL);
- if (u == NULL)
- return NULL;
- v = PyUnicode_AsEncodedString(u, encoding, NULL);
- Py_DECREF(u);
- return v;
+ PyObject *v, *u = PyUnicode_DecodeUTF8(s, len, NULL);
+ if (u == NULL)
+ return NULL;
+ v = PyUnicode_AsEncodedString(u, encoding, NULL);
+ Py_DECREF(u);
+ return v;
#endif
- } else {
- return PyString_FromStringAndSize(s, len);
- }
- }
+ } else {
+ return PyString_FromStringAndSize(s, len);
+ }
+ }
- return PyString_DecodeEscape(s, len, NULL, unicode,
- need_encoding ? encoding : NULL);
+ return PyString_DecodeEscape(s, len, NULL, unicode,
+ need_encoding ? encoding : NULL);
}
/* Build a Python string object out of a STRING atom. This takes care of
@@ -3214,36 +3231,36 @@
static PyObject *
parsestrplus(struct compiling *c, const node *n)
{
- PyObject *v;
- int i;
- REQ(CHILD(n, 0), STRING);
- if ((v = parsestr(STR(CHILD(n, 0)), c->c_encoding)) != NULL) {
- /* String literal concatenation */
- for (i = 1; i < NCH(n); i++) {
- PyObject *s;
- s = parsestr(STR(CHILD(n, i)), c->c_encoding);
- if (s == NULL)
- goto onError;
- if (PyString_Check(v) && PyString_Check(s)) {
- PyString_ConcatAndDel(&v, s);
- if (v == NULL)
- goto onError;
- }
+ PyObject *v;
+ int i;
+ REQ(CHILD(n, 0), STRING);
+ if ((v = parsestr(STR(CHILD(n, 0)), c->c_encoding)) != NULL) {
+ /* String literal concatenation */
+ for (i = 1; i < NCH(n); i++) {
+ PyObject *s;
+ s = parsestr(STR(CHILD(n, i)), c->c_encoding);
+ if (s == NULL)
+ goto onError;
+ if (PyString_Check(v) && PyString_Check(s)) {
+ PyString_ConcatAndDel(&v, s);
+ if (v == NULL)
+ goto onError;
+ }
#ifdef Py_USING_UNICODE
- else {
- PyObject *temp = PyUnicode_Concat(v, s);
- Py_DECREF(s);
- Py_DECREF(v);
- v = temp;
- if (v == NULL)
- goto onError;
- }
+ else {
+ PyObject *temp = PyUnicode_Concat(v, s);
+ Py_DECREF(s);
+ Py_DECREF(v);
+ v = temp;
+ if (v == NULL)
+ goto onError;
+ }
#endif
- }
- }
- return v;
+ }
+ }
+ return v;
onError:
- Py_XDECREF(v);
- return NULL;
+ Py_XDECREF(v);
+ return NULL;
}
Modified: stackless/trunk/Python/bltinmodule.c
==============================================================================
--- stackless/trunk/Python/bltinmodule.c (original)
+++ stackless/trunk/Python/bltinmodule.c Sun Oct 15 16:42:33 2006
@@ -613,7 +613,7 @@
Evaluate the source in the context of globals and locals.\n\
The source may be a string representing a Python expression\n\
or a code object as returned by compile().\n\
-The globals must be a dictionary and locals can be any mappping,\n\
+The globals must be a dictionary and locals can be any mapping,\n\
defaulting to the current globals and locals.\n\
If only globals is given, locals defaults to it.\n");
@@ -2064,10 +2064,11 @@
}
PyDoc_STRVAR(sum_doc,
-"sum(sequence, start=0) -> value\n\
+"sum(sequence[, start]) -> value\n\
\n\
Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
-of parameter 'start'. When the sequence is empty, returns start.");
+of parameter 'start' (which defaults to 0). When the sequence is\n\
+empty, returns start.");
static PyObject *
Modified: stackless/trunk/Python/compile.c
==============================================================================
--- stackless/trunk/Python/compile.c (original)
+++ stackless/trunk/Python/compile.c Sun Oct 15 16:42:33 2006
@@ -187,6 +187,8 @@
basicblock *);
static void compiler_pop_fblock(struct compiler *, enum fblocktype,
basicblock *);
+/* Returns true if there is a loop on the fblock stack. */
+static int compiler_in_loop(struct compiler *);
static int inplace_binop(struct compiler *, operator_ty);
static int expr_constant(expr_ty e);
@@ -394,613 +396,6 @@
return dest;
}
-/* Begin: Peephole optimizations ----------------------------------------- */
-
-#define GETARG(arr, i) ((int)((arr[i+2]<<8) + arr[i+1]))
-#define UNCONDITIONAL_JUMP(op) (op==JUMP_ABSOLUTE || op==JUMP_FORWARD)
-#define ABSOLUTE_JUMP(op) (op==JUMP_ABSOLUTE || op==CONTINUE_LOOP)
-#define GETJUMPTGT(arr, i) (GETARG(arr,i) + (ABSOLUTE_JUMP(arr[i]) ? 0 : i+3))
-#define SETARG(arr, i, val) arr[i+2] = val>>8; arr[i+1] = val & 255
-#define CODESIZE(op) (HAS_ARG(op) ? 3 : 1)
-#define ISBASICBLOCK(blocks, start, bytes) \
- (blocks[start]==blocks[start+bytes-1])
-
-/* Replace LOAD_CONST c1. LOAD_CONST c2 ... LOAD_CONST cn BUILD_TUPLE n
- with LOAD_CONST (c1, c2, ... cn).
- The consts table must still be in list form so that the
- new constant (c1, c2, ... cn) can be appended.
- Called with codestr pointing to the first LOAD_CONST.
- Bails out with no change if one or more of the LOAD_CONSTs is missing.
- Also works for BUILD_LIST when followed by an "in" or "not in" test.
-*/
-static int
-tuple_of_constants(unsigned char *codestr, int n, PyObject *consts)
-{
- PyObject *newconst, *constant;
- Py_ssize_t i, arg, len_consts;
-
- /* Pre-conditions */
- assert(PyList_CheckExact(consts));
- assert(codestr[n*3] == BUILD_TUPLE || codestr[n*3] == BUILD_LIST);
- assert(GETARG(codestr, (n*3)) == n);
- for (i=0 ; i<n ; i++)
- assert(codestr[i*3] == LOAD_CONST);
-
- /* Buildup new tuple of constants */
- newconst = PyTuple_New(n);
- if (newconst == NULL)
- return 0;
- len_consts = PyList_GET_SIZE(consts);
- for (i=0 ; i<n ; i++) {
- arg = GETARG(codestr, (i*3));
- assert(arg < len_consts);
- constant = PyList_GET_ITEM(consts, arg);
- Py_INCREF(constant);
- PyTuple_SET_ITEM(newconst, i, constant);
- }
-
- /* Append folded constant onto consts */
- if (PyList_Append(consts, newconst)) {
- Py_DECREF(newconst);
- return 0;
- }
- Py_DECREF(newconst);
-
- /* Write NOPs over old LOAD_CONSTS and
- add a new LOAD_CONST newconst on top of the BUILD_TUPLE n */
- memset(codestr, NOP, n*3);
- codestr[n*3] = LOAD_CONST;
- SETARG(codestr, (n*3), len_consts);
- return 1;
-}
-
-/* Replace LOAD_CONST c1. LOAD_CONST c2 BINOP
- with LOAD_CONST binop(c1,c2)
- The consts table must still be in list form so that the
- new constant can be appended.
- Called with codestr pointing to the first LOAD_CONST.
- Abandons the transformation if the folding fails (i.e. 1+'a').
- If the new constant is a sequence, only folds when the size
- is below a threshold value. That keeps pyc files from
- becoming large in the presence of code like: (None,)*1000.
-*/
-static int
-fold_binops_on_constants(unsigned char *codestr, PyObject *consts)
-{
- PyObject *newconst, *v, *w;
- Py_ssize_t len_consts, size;
- int opcode;
-
- /* Pre-conditions */
- assert(PyList_CheckExact(consts));
- assert(codestr[0] == LOAD_CONST);
- assert(codestr[3] == LOAD_CONST);
-
- /* Create new constant */
- v = PyList_GET_ITEM(consts, GETARG(codestr, 0));
- w = PyList_GET_ITEM(consts, GETARG(codestr, 3));
- opcode = codestr[6];
- switch (opcode) {
- case BINARY_POWER:
- newconst = PyNumber_Power(v, w, Py_None);
- break;
- case BINARY_MULTIPLY:
- newconst = PyNumber_Multiply(v, w);
- break;
- case BINARY_DIVIDE:
- /* Cannot fold this operation statically since
- the result can depend on the run-time presence
- of the -Qnew flag */
- return 0;
- case BINARY_TRUE_DIVIDE:
- newconst = PyNumber_TrueDivide(v, w);
- break;
- case BINARY_FLOOR_DIVIDE:
- newconst = PyNumber_FloorDivide(v, w);
- break;
- case BINARY_MODULO:
- newconst = PyNumber_Remainder(v, w);
- break;
- case BINARY_ADD:
- newconst = PyNumber_Add(v, w);
- break;
- case BINARY_SUBTRACT:
- newconst = PyNumber_Subtract(v, w);
- break;
- case BINARY_SUBSCR:
- newconst = PyObject_GetItem(v, w);
- break;
- case BINARY_LSHIFT:
- newconst = PyNumber_Lshift(v, w);
- break;
- case BINARY_RSHIFT:
- newconst = PyNumber_Rshift(v, w);
- break;
- case BINARY_AND:
- newconst = PyNumber_And(v, w);
- break;
- case BINARY_XOR:
- newconst = PyNumber_Xor(v, w);
- break;
- case BINARY_OR:
- newconst = PyNumber_Or(v, w);
- break;
- default:
- /* Called with an unknown opcode */
- PyErr_Format(PyExc_SystemError,
- "unexpected binary operation %d on a constant",
- opcode);
- return 0;
- }
- if (newconst == NULL) {
- PyErr_Clear();
- return 0;
- }
- size = PyObject_Size(newconst);
- if (size == -1)
- PyErr_Clear();
- else if (size > 20) {
- Py_DECREF(newconst);
- return 0;
- }
-
- /* Append folded constant into consts table */
- len_consts = PyList_GET_SIZE(consts);
- if (PyList_Append(consts, newconst)) {
- Py_DECREF(newconst);
- return 0;
- }
- Py_DECREF(newconst);
-
- /* Write NOP NOP NOP NOP LOAD_CONST newconst */
- memset(codestr, NOP, 4);
- codestr[4] = LOAD_CONST;
- SETARG(codestr, 4, len_consts);
- return 1;
-}
-
-static int
-fold_unaryops_on_constants(unsigned char *codestr, PyObject *consts)
-{
- PyObject *newconst=NULL, *v;
- Py_ssize_t len_consts;
- int opcode;
-
- /* Pre-conditions */
- assert(PyList_CheckExact(consts));
- assert(codestr[0] == LOAD_CONST);
-
- /* Create new constant */
- v = PyList_GET_ITEM(consts, GETARG(codestr, 0));
- opcode = codestr[3];
- switch (opcode) {
- case UNARY_NEGATIVE:
- /* Preserve the sign of -0.0 */
- if (PyObject_IsTrue(v) == 1)
- newconst = PyNumber_Negative(v);
- break;
- case UNARY_CONVERT:
- newconst = PyObject_Repr(v);
- break;
- case UNARY_INVERT:
- newconst = PyNumber_Invert(v);
- break;
- default:
- /* Called with an unknown opcode */
- PyErr_Format(PyExc_SystemError,
- "unexpected unary operation %d on a constant",
- opcode);
- return 0;
- }
- if (newconst == NULL) {
- PyErr_Clear();
- return 0;
- }
-
- /* Append folded constant into consts table */
- len_consts = PyList_GET_SIZE(consts);
- if (PyList_Append(consts, newconst)) {
- Py_DECREF(newconst);
- return 0;
- }
- Py_DECREF(newconst);
-
- /* Write NOP LOAD_CONST newconst */
- codestr[0] = NOP;
- codestr[1] = LOAD_CONST;
- SETARG(codestr, 1, len_consts);
- return 1;
-}
-
-static unsigned int *
-markblocks(unsigned char *code, int len)
-{
- unsigned int *blocks = (unsigned int *)PyMem_Malloc(len*sizeof(int));
- int i,j, opcode, blockcnt = 0;
-
- if (blocks == NULL) {
- PyErr_NoMemory();
- return NULL;
- }
- memset(blocks, 0, len*sizeof(int));
-
- /* Mark labels in the first pass */
- for (i=0 ; i<len ; i+=CODESIZE(opcode)) {
- opcode = code[i];
- switch (opcode) {
- case FOR_ITER:
- case JUMP_FORWARD:
- case JUMP_IF_FALSE:
- case JUMP_IF_TRUE:
- case JUMP_ABSOLUTE:
- case CONTINUE_LOOP:
- case SETUP_LOOP:
- case SETUP_EXCEPT:
- case SETUP_FINALLY:
- j = GETJUMPTGT(code, i);
- blocks[j] = 1;
- break;
- }
- }
- /* Build block numbers in the second pass */
- for (i=0 ; i<len ; i++) {
- blockcnt += blocks[i]; /* increment blockcnt over labels */
- blocks[i] = blockcnt;
- }
- return blocks;
-}
-
-/* Perform basic peephole optimizations to components of a code object.
- The consts object should still be in list form to allow new constants
- to be appended.
-
- To keep the optimizer simple, it bails out (does nothing) for code
- containing extended arguments or that has a length over 32,700. That
- allows us to avoid overflow and sign issues. Likewise, it bails when
- the lineno table has complex encoding for gaps >= 255.
-
- Optimizations are restricted to simple transformations occuring within a
- single basic block. All transformations keep the code size the same or
- smaller. For those that reduce size, the gaps are initially filled with
- NOPs. Later those NOPs are removed and the jump addresses retargeted in
- a single pass. Line numbering is adjusted accordingly. */
-
-static PyObject *
-optimize_code(PyObject *code, PyObject* consts, PyObject *names,
- PyObject *lineno_obj)
-{
- Py_ssize_t i, j, codelen;
- int nops, h, adj;
- int tgt, tgttgt, opcode;
- unsigned char *codestr = NULL;
- unsigned char *lineno;
- int *addrmap = NULL;
- int new_line, cum_orig_line, last_line, tabsiz;
- int cumlc=0, lastlc=0; /* Count runs of consecutive LOAD_CONSTs */
- unsigned int *blocks = NULL;
- char *name;
-
- /* Bail out if an exception is set */
- if (PyErr_Occurred())
- goto exitUnchanged;
-
- /* Bypass optimization when the lineno table is too complex */
- assert(PyString_Check(lineno_obj));
- lineno = (unsigned char*)PyString_AS_STRING(lineno_obj);
- tabsiz = PyString_GET_SIZE(lineno_obj);
- if (memchr(lineno, 255, tabsiz) != NULL)
- goto exitUnchanged;
-
- /* Avoid situations where jump retargeting could overflow */
- assert(PyString_Check(code));
- codelen = PyString_Size(code);
- if (codelen > 32700)
- goto exitUnchanged;
-
- /* Make a modifiable copy of the code string */
- codestr = (unsigned char *)PyMem_Malloc(codelen);
- if (codestr == NULL)
- goto exitUnchanged;
- codestr = (unsigned char *)memcpy(codestr,
- PyString_AS_STRING(code), codelen);
-
- /* Verify that RETURN_VALUE terminates the codestring. This allows
- the various transformation patterns to look ahead several
- instructions without additional checks to make sure they are not
- looking beyond the end of the code string.
- */
- if (codestr[codelen-1] != RETURN_VALUE)
- goto exitUnchanged;
-
- /* Mapping to new jump targets after NOPs are removed */
- addrmap = (int *)PyMem_Malloc(codelen * sizeof(int));
- if (addrmap == NULL)
- goto exitUnchanged;
-
- blocks = markblocks(codestr, codelen);
- if (blocks == NULL)
- goto exitUnchanged;
- assert(PyList_Check(consts));
-
- for (i=0 ; i<codelen ; i += CODESIZE(codestr[i])) {
- opcode = codestr[i];
-
- lastlc = cumlc;
- cumlc = 0;
-
- switch (opcode) {
-
- /* Replace UNARY_NOT JUMP_IF_FALSE POP_TOP with
- with JUMP_IF_TRUE POP_TOP */
- case UNARY_NOT:
- if (codestr[i+1] != JUMP_IF_FALSE ||
- codestr[i+4] != POP_TOP ||
- !ISBASICBLOCK(blocks,i,5))
- continue;
- tgt = GETJUMPTGT(codestr, (i+1));
- if (codestr[tgt] != POP_TOP)
- continue;
- j = GETARG(codestr, i+1) + 1;
- codestr[i] = JUMP_IF_TRUE;
- SETARG(codestr, i, j);
- codestr[i+3] = POP_TOP;
- codestr[i+4] = NOP;
- break;
-
- /* not a is b --> a is not b
- not a in b --> a not in b
- not a is not b --> a is b
- not a not in b --> a in b
- */
- case COMPARE_OP:
- j = GETARG(codestr, i);
- if (j < 6 || j > 9 ||
- codestr[i+3] != UNARY_NOT ||
- !ISBASICBLOCK(blocks,i,4))
- continue;
- SETARG(codestr, i, (j^1));
- codestr[i+3] = NOP;
- break;
-
- /* Replace LOAD_GLOBAL/LOAD_NAME None
- with LOAD_CONST None */
- case LOAD_NAME:
- case LOAD_GLOBAL:
- j = GETARG(codestr, i);
- name = PyString_AsString(PyTuple_GET_ITEM(names, j));
- if (name == NULL || strcmp(name, "None") != 0)
- continue;
- for (j=0 ; j < PyList_GET_SIZE(consts) ; j++) {
- if (PyList_GET_ITEM(consts, j) == Py_None) {
- codestr[i] = LOAD_CONST;
- SETARG(codestr, i, j);
- cumlc = lastlc + 1;
- break;
- }
- }
- break;
-
- /* Skip over LOAD_CONST trueconst
- JUMP_IF_FALSE xx POP_TOP */
- case LOAD_CONST:
- cumlc = lastlc + 1;
- j = GETARG(codestr, i);
- if (codestr[i+3] != JUMP_IF_FALSE ||
- codestr[i+6] != POP_TOP ||
- !ISBASICBLOCK(blocks,i,7) ||
- !PyObject_IsTrue(PyList_GET_ITEM(consts, j)))
- continue;
- memset(codestr+i, NOP, 7);
- cumlc = 0;
- break;
-
- /* Try to fold tuples of constants (includes a case for lists
- which are only used for "in" and "not in" tests).
- Skip over BUILD_SEQN 1 UNPACK_SEQN 1.
- Replace BUILD_SEQN 2 UNPACK_SEQN 2 with ROT2.
- Replace BUILD_SEQN 3 UNPACK_SEQN 3 with ROT3 ROT2. */
- case BUILD_TUPLE:
- case BUILD_LIST:
- j = GETARG(codestr, i);
- h = i - 3 * j;
- if (h >= 0 &&
- j <= lastlc &&
- ((opcode == BUILD_TUPLE &&
- ISBASICBLOCK(blocks, h, 3*(j+1))) ||
- (opcode == BUILD_LIST &&
- codestr[i+3]==COMPARE_OP &&
- ISBASICBLOCK(blocks, h, 3*(j+2)) &&
- (GETARG(codestr,i+3)==6 ||
- GETARG(codestr,i+3)==7))) &&
- tuple_of_constants(&codestr[h], j, consts)) {
- assert(codestr[i] == LOAD_CONST);
- cumlc = 1;
- break;
- }
- if (codestr[i+3] != UNPACK_SEQUENCE ||
- !ISBASICBLOCK(blocks,i,6) ||
- j != GETARG(codestr, i+3))
- continue;
- if (j == 1) {
- memset(codestr+i, NOP, 6);
- } else if (j == 2) {
- codestr[i] = ROT_TWO;
- memset(codestr+i+1, NOP, 5);
- } else if (j == 3) {
- codestr[i] = ROT_THREE;
- codestr[i+1] = ROT_TWO;
- memset(codestr+i+2, NOP, 4);
- }
- break;
-
- /* Fold binary ops on constants.
- LOAD_CONST c1 LOAD_CONST c2 BINOP --> LOAD_CONST binop(c1,c2) */
- case BINARY_POWER:
- case BINARY_MULTIPLY:
- case BINARY_TRUE_DIVIDE:
- case BINARY_FLOOR_DIVIDE:
- case BINARY_MODULO:
- case BINARY_ADD:
- case BINARY_SUBTRACT:
- case BINARY_SUBSCR:
- case BINARY_LSHIFT:
- case BINARY_RSHIFT:
- case BINARY_AND:
- case BINARY_XOR:
- case BINARY_OR:
- if (lastlc >= 2 &&
- ISBASICBLOCK(blocks, i-6, 7) &&
- fold_binops_on_constants(&codestr[i-6], consts)) {
- i -= 2;
- assert(codestr[i] == LOAD_CONST);
- cumlc = 1;
- }
- break;
-
- /* Fold unary ops on constants.
- LOAD_CONST c1 UNARY_OP --> LOAD_CONST unary_op(c) */
- case UNARY_NEGATIVE:
- case UNARY_CONVERT:
- case UNARY_INVERT:
- if (lastlc >= 1 &&
- ISBASICBLOCK(blocks, i-3, 4) &&
- fold_unaryops_on_constants(&codestr[i-3], consts)) {
- i -= 2;
- assert(codestr[i] == LOAD_CONST);
- cumlc = 1;
- }
- break;
-
- /* Simplify conditional jump to conditional jump where the
- result of the first test implies the success of a similar
- test or the failure of the opposite test.
- Arises in code like:
- "if a and b:"
- "if a or b:"
- "a and b or c"
- "(a and b) and c"
- x:JUMP_IF_FALSE y y:JUMP_IF_FALSE z --> x:JUMP_IF_FALSE z
- x:JUMP_IF_FALSE y y:JUMP_IF_TRUE z --> x:JUMP_IF_FALSE y+3
- where y+3 is the instruction following the second test.
- */
- case JUMP_IF_FALSE:
- case JUMP_IF_TRUE:
- tgt = GETJUMPTGT(codestr, i);
- j = codestr[tgt];
- if (j == JUMP_IF_FALSE || j == JUMP_IF_TRUE) {
- if (j == opcode) {
- tgttgt = GETJUMPTGT(codestr, tgt) - i - 3;
- SETARG(codestr, i, tgttgt);
- } else {
- tgt -= i;
- SETARG(codestr, i, tgt);
- }
- break;
- }
- /* Intentional fallthrough */
-
- /* Replace jumps to unconditional jumps */
- case FOR_ITER:
- case JUMP_FORWARD:
- case JUMP_ABSOLUTE:
- case CONTINUE_LOOP:
- case SETUP_LOOP:
- case SETUP_EXCEPT:
- case SETUP_FINALLY:
- tgt = GETJUMPTGT(codestr, i);
- if (!UNCONDITIONAL_JUMP(codestr[tgt]))
- continue;
- tgttgt = GETJUMPTGT(codestr, tgt);
- if (opcode == JUMP_FORWARD) /* JMP_ABS can go backwards */
- opcode = JUMP_ABSOLUTE;
- if (!ABSOLUTE_JUMP(opcode))
- tgttgt -= i + 3; /* Calc relative jump addr */
- if (tgttgt < 0) /* No backward relative jumps */
- continue;
- codestr[i] = opcode;
- SETARG(codestr, i, tgttgt);
- break;
-
- case EXTENDED_ARG:
- goto exitUnchanged;
-
- /* Replace RETURN LOAD_CONST None RETURN with just RETURN */
- case RETURN_VALUE:
- if (i+4 >= codelen ||
- codestr[i+4] != RETURN_VALUE ||
- !ISBASICBLOCK(blocks,i,5))
- continue;
- memset(codestr+i+1, NOP, 4);
- break;
- }
- }
-
- /* Fixup linenotab */
- for (i=0, nops=0 ; i<codelen ; i += CODESIZE(codestr[i])) {
- addrmap[i] = i - nops;
- if (codestr[i] == NOP)
- nops++;
- }
- cum_orig_line = 0;
- last_line = 0;
- for (i=0 ; i < tabsiz ; i+=2) {
- cum_orig_line += lineno[i];
- new_line = addrmap[cum_orig_line];
- assert (new_line - last_line < 255);
- lineno[i] =((unsigned char)(new_line - last_line));
- last_line = new_line;
- }
-
- /* Remove NOPs and fixup jump targets */
- for (i=0, h=0 ; i<codelen ; ) {
- opcode = codestr[i];
- switch (opcode) {
- case NOP:
- i++;
- continue;
-
- case JUMP_ABSOLUTE:
- case CONTINUE_LOOP:
- j = addrmap[GETARG(codestr, i)];
- SETARG(codestr, i, j);
- break;
-
- case FOR_ITER:
- case JUMP_FORWARD:
- case JUMP_IF_FALSE:
- case JUMP_IF_TRUE:
- case SETUP_LOOP:
- case SETUP_EXCEPT:
- case SETUP_FINALLY:
- j = addrmap[GETARG(codestr, i) + i + 3] - addrmap[i] - 3;
- SETARG(codestr, i, j);
- break;
- }
- adj = CODESIZE(opcode);
- while (adj--)
- codestr[h++] = codestr[i++];
- }
- assert(h + nops == codelen);
-
- code = PyString_FromStringAndSize((char *)codestr, h);
- PyMem_Free(addrmap);
- PyMem_Free(codestr);
- PyMem_Free(blocks);
- return code;
-
- exitUnchanged:
- if (blocks != NULL)
- PyMem_Free(blocks);
- if (addrmap != NULL)
- PyMem_Free(addrmap);
- if (codestr != NULL)
- PyMem_Free(codestr);
- Py_INCREF(code);
- return code;
-}
-
-/* End: Peephole optimizations ----------------------------------------- */
-
/*
Leave this debugging code for just a little longer.
@@ -1175,6 +570,7 @@
if (n >= 0) {
wrapper = PyList_GET_ITEM(c->c_stack, n);
c->u = (struct compiler_unit *)PyCObject_AsVoidPtr(wrapper);
+ assert(c->u);
/* we are deleting from a list so this really shouldn't fail */
if (PySequence_DelItem(c->c_stack, n) < 0)
Py_FatalError("compiler_exit_scope()");
@@ -2288,6 +1684,8 @@
compiler_continue(struct compiler *c)
{
static const char LOOP_ERROR_MSG[] = "'continue' not properly in loop";
+ static const char IN_FINALLY_ERROR_MSG[] =
+ "'continue' not supported inside 'finally' clause";
int i;
if (!c->u->u_nfblocks)
@@ -2299,15 +1697,18 @@
break;
case EXCEPT:
case FINALLY_TRY:
- while (--i >= 0 && c->u->u_fblock[i].fb_type != LOOP)
- ;
+ while (--i >= 0 && c->u->u_fblock[i].fb_type != LOOP) {
+ /* Prevent continue anywhere under a finally
+ even if hidden in a sub-try or except. */
+ if (c->u->u_fblock[i].fb_type == FINALLY_END)
+ return compiler_error(c, IN_FINALLY_ERROR_MSG);
+ }
if (i == -1)
return compiler_error(c, LOOP_ERROR_MSG);
ADDOP_JABS(c, CONTINUE_LOOP, c->u->u_fblock[i].fb_block);
break;
case FINALLY_END:
- return compiler_error(c,
- "'continue' not supported inside 'finally' clause");
+ return compiler_error(c, IN_FINALLY_ERROR_MSG);
}
return 1;
@@ -2758,7 +2159,7 @@
case Pass_kind:
break;
case Break_kind:
- if (!c->u->u_nfblocks)
+ if (!compiler_in_loop(c))
return compiler_error(c, "'break' outside loop");
ADDOP(c, BREAK_LOOP);
break;
@@ -3748,6 +3149,16 @@
assert(u->u_fblock[u->u_nfblocks].fb_block == b);
}
+static int
+compiler_in_loop(struct compiler *c) {
+ int i;
+ struct compiler_unit *u = c->u;
+ for (i = 0; i < u->u_nfblocks; ++i) {
+ if (u->u_fblock[i].fb_type == LOOP)
+ return 1;
+ }
+ return 0;
+}
/* Raises a SyntaxError and returns 0.
If something goes wrong, a different exception may be raised.
*/
@@ -4422,7 +3833,7 @@
if (flags < 0)
goto error;
- bytecode = optimize_code(a->a_bytecode, consts, names, a->a_lnotab);
+ bytecode = PyCode_Optimize(a->a_bytecode, consts, names, a->a_lnotab);
if (!bytecode)
goto error;
Modified: stackless/trunk/Python/errors.c
==============================================================================
--- stackless/trunk/Python/errors.c (original)
+++ stackless/trunk/Python/errors.c Sun Oct 15 16:42:33 2006
@@ -551,7 +551,8 @@
goto failure;
}
if (PyDict_GetItemString(dict, "__module__") == NULL) {
- modulename = PyString_FromStringAndSize(name, (int)(dot-name));
+ modulename = PyString_FromStringAndSize(name,
+ (Py_ssize_t)(dot-name));
if (modulename == NULL)
goto failure;
if (PyDict_SetItemString(dict, "__module__", modulename) != 0)
Modified: stackless/trunk/Python/getargs.c
==============================================================================
--- stackless/trunk/Python/getargs.c (original)
+++ stackless/trunk/Python/getargs.c Sun Oct 15 16:42:33 2006
@@ -815,7 +815,7 @@
#endif
else
return converterr("string", arg, msgbuf, bufsize);
- if ((int)strlen(*p) != PyString_Size(arg))
+ if ((Py_ssize_t)strlen(*p) != PyString_Size(arg))
return converterr("string without null bytes",
arg, msgbuf, bufsize);
}
@@ -882,7 +882,7 @@
format++;
}
else if (*p != NULL &&
- (int)strlen(*p) != PyString_Size(arg))
+ (Py_ssize_t)strlen(*p) != PyString_Size(arg))
return converterr(
"string without null bytes or None",
arg, msgbuf, bufsize);
@@ -1029,7 +1029,8 @@
PyMem_Free()ing it after usage
*/
- if ((int)strlen(PyString_AS_STRING(s)) != size) {
+ if ((Py_ssize_t)strlen(PyString_AS_STRING(s))
+ != size) {
Py_DECREF(s);
return converterr(
"(encoded string without NULL bytes)",
@@ -1747,7 +1748,7 @@
/* For type constructors that don't take keyword args
*
* Sets a TypeError and returns 0 if the kwds dict is
- * not emtpy, returns 1 otherwise
+ * not empty, returns 1 otherwise
*/
int
_PyArg_NoKeywords(const char *funcname, PyObject *kw)
Modified: stackless/trunk/Python/graminit.c
==============================================================================
--- stackless/trunk/Python/graminit.c (original)
+++ stackless/trunk/Python/graminit.c Sun Oct 15 16:42:33 2006
@@ -551,9 +551,8 @@
static arc arcs_27_0[1] = {
{19, 1},
};
-static arc arcs_27_1[3] = {
+static arc arcs_27_1[2] = {
{78, 2},
- {19, 2},
{0, 1},
};
static arc arcs_27_2[1] = {
@@ -564,16 +563,15 @@
};
static state states_27[4] = {
{1, arcs_27_0},
- {3, arcs_27_1},
+ {2, arcs_27_1},
{1, arcs_27_2},
{1, arcs_27_3},
};
static arc arcs_28_0[1] = {
{12, 1},
};
-static arc arcs_28_1[3] = {
+static arc arcs_28_1[2] = {
{78, 2},
- {19, 2},
{0, 1},
};
static arc arcs_28_2[1] = {
@@ -584,7 +582,7 @@
};
static state states_28[4] = {
{1, arcs_28_0},
- {3, arcs_28_1},
+ {2, arcs_28_1},
{1, arcs_28_2},
{1, arcs_28_3},
};
@@ -912,9 +910,8 @@
{1, arcs_40_4},
{1, arcs_40_5},
};
-static arc arcs_41_0[2] = {
+static arc arcs_41_0[1] = {
{78, 1},
- {19, 1},
};
static arc arcs_41_1[1] = {
{82, 2},
@@ -923,7 +920,7 @@
{0, 2},
};
static state states_41[3] = {
- {2, arcs_41_0},
+ {1, arcs_41_0},
{1, arcs_41_1},
{1, arcs_41_2},
};
@@ -1865,7 +1862,7 @@
{296, "with_stmt", 0, 6, states_40,
"\000\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000"},
{297, "with_var", 0, 3, states_41,
- "\000\000\010\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000"},
{298, "except_clause", 0, 5, states_42,
"\000\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000"},
{299, "suite", 0, 5, states_43,
Modified: stackless/trunk/Python/import.c
==============================================================================
--- stackless/trunk/Python/import.c (original)
+++ stackless/trunk/Python/import.c Sun Oct 15 16:42:33 2006
@@ -64,9 +64,11 @@
Python 2.5b3: 62111 (fix wrong code: x += yield)
Python 2.5c1: 62121 (fix wrong lnotab with for loops and
storing constants that should have been removed)
+ Python 2.5c2: 62131 (fix wrong code: for x, in ... in listcomp/genexp)
+ Python 2.6a0: 62141 (peephole optimizations)
.
*/
-#define MAGIC (62121 | ((long)'\r'<<16) | ((long)'\n'<<24))
+#define MAGIC (62141 | ((long)'\r'<<16) | ((long)'\n'<<24))
/* Magic word as global; note that _PyImport_Init() can change the
value of this global to accommodate for alterations of how the
@@ -795,14 +797,16 @@
{
PyCodeObject *co = NULL;
mod_ty mod;
- PyArena *arena = PyArena_New();
+ PyArena *arena = PyArena_New();
+ if (arena == NULL)
+ return NULL;
mod = PyParser_ASTFromFile(fp, pathname, Py_file_input, 0, 0, 0,
NULL, arena);
if (mod) {
co = PyAST_Compile(mod, pathname, NULL, arena);
}
- PyArena_Free(arena);
+ PyArena_Free(arena);
return co;
}
@@ -1026,7 +1030,7 @@
/* Return an importer object for a sys.path/pkg.__path__ item 'p',
possibly by fetching it from the path_importer_cache dict. If it
- wasn't yet cached, traverse path_hooks until it a hook is found
+ wasn't yet cached, traverse path_hooks until a hook is found
that can handle the path item. Return None if no hook could;
this tells our caller it should fall back to the builtin
import mechanism. Cache the result in path_importer_cache.
@@ -1798,7 +1802,7 @@
/* Initialize a built-in module.
- Return 1 for succes, 0 if the module is not found, and -1 with
+ Return 1 for success, 0 if the module is not found, and -1 with
an exception set if the initialization failed. */
static int
@@ -2113,7 +2117,7 @@
size_t len;
if (lastdot == NULL && level > 0) {
PyErr_SetString(PyExc_ValueError,
- "Relative importpath too deep");
+ "Attempted relative import in non-package");
return NULL;
}
if (lastdot == NULL)
@@ -2132,7 +2136,8 @@
char *dot = strrchr(buf, '.');
if (dot == NULL) {
PyErr_SetString(PyExc_ValueError,
- "Relative importpath too deep");
+ "Attempted relative import beyond "
+ "toplevel package");
return NULL;
}
*dot = '\0';
Modified: stackless/trunk/Python/marshal.c
==============================================================================
--- stackless/trunk/Python/marshal.c (original)
+++ stackless/trunk/Python/marshal.c Sun Oct 15 16:42:33 2006
@@ -546,6 +546,11 @@
int size;
PyLongObject *ob;
n = r_long(p);
+ if (n < -INT_MAX || n > INT_MAX) {
+ PyErr_SetString(PyExc_ValueError,
+ "bad marshal data");
+ return NULL;
+ }
size = n<0 ? -n : n;
ob = _PyLong_New(size);
if (ob == NULL)
@@ -654,7 +659,7 @@
case TYPE_INTERNED:
case TYPE_STRING:
n = r_long(p);
- if (n < 0) {
+ if (n < 0 || n > INT_MAX) {
PyErr_SetString(PyExc_ValueError, "bad marshal data");
return NULL;
}
@@ -689,7 +694,7 @@
char *buffer;
n = r_long(p);
- if (n < 0) {
+ if (n < 0 || n > INT_MAX) {
PyErr_SetString(PyExc_ValueError, "bad marshal data");
return NULL;
}
@@ -710,7 +715,7 @@
case TYPE_TUPLE:
n = r_long(p);
- if (n < 0) {
+ if (n < 0 || n > INT_MAX) {
PyErr_SetString(PyExc_ValueError, "bad marshal data");
return NULL;
}
@@ -733,7 +738,7 @@
case TYPE_LIST:
n = r_long(p);
- if (n < 0) {
+ if (n < 0 || n > INT_MAX) {
PyErr_SetString(PyExc_ValueError, "bad marshal data");
return NULL;
}
@@ -831,10 +836,11 @@
v = NULL;
- argcount = r_long(p);
- nlocals = r_long(p);
- stacksize = r_long(p);
- flags = r_long(p);
+ /* XXX ignore long->int overflows for now */
+ argcount = (int)r_long(p);
+ nlocals = (int)r_long(p);
+ stacksize = (int)r_long(p);
+ flags = (int)r_long(p);
code = r_object(p);
if (code == NULL)
goto code_error;
@@ -859,7 +865,7 @@
name = r_object(p);
if (name == NULL)
goto code_error;
- firstlineno = r_long(p);
+ firstlineno = (int)r_long(p);
lnotab = r_object(p);
if (lnotab == NULL)
goto code_error;
@@ -1031,10 +1037,16 @@
wf.strings = (version > 0) ? PyDict_New() : NULL;
w_object(x, &wf);
Py_XDECREF(wf.strings);
- if (wf.str != NULL)
- _PyString_Resize(&wf.str,
- (int) (wf.ptr -
- PyString_AS_STRING((PyStringObject *)wf.str)));
+ if (wf.str != NULL) {
+ char *base = PyString_AS_STRING((PyStringObject *)wf.str);
+ if (wf.ptr - base > PY_SSIZE_T_MAX) {
+ Py_DECREF(wf.str);
+ PyErr_SetString(PyExc_OverflowError,
+ "too much marshall data for a string");
+ return NULL;
+ }
+ _PyString_Resize(&wf.str, (Py_ssize_t)(wf.ptr - base));
+ }
if (wf.error) {
Py_XDECREF(wf.str);
PyErr_SetString(PyExc_ValueError,
Modified: stackless/trunk/Python/modsupport.c
==============================================================================
--- stackless/trunk/Python/modsupport.c (original)
+++ stackless/trunk/Python/modsupport.c Sun Oct 15 16:42:33 2006
@@ -421,7 +421,7 @@
"string too long for Python string");
return NULL;
}
- n = (int)m;
+ n = (Py_ssize_t)m;
}
v = PyString_FromStringAndSize(str, n);
}
Modified: stackless/trunk/Python/mystrtoul.c
==============================================================================
--- stackless/trunk/Python/mystrtoul.c (original)
+++ stackless/trunk/Python/mystrtoul.c Sun Oct 15 16:42:33 2006
@@ -195,13 +195,10 @@
return (unsigned long)-1;
}
-/* Checking for overflow in PyOS_strtol is a PITA since C doesn't define
- * anything about what happens when a signed integer operation overflows,
- * and some compilers think they're doing you a favor by being "clever"
- * then. Python assumes a 2's-complement representation, so that the bit
- * pattern for the largest postive signed long is LONG_MAX, and for
- * the smallest negative signed long is LONG_MAX + 1.
+/* Checking for overflow in PyOS_strtol is a PITA; see comments
+ * about PY_ABS_LONG_MIN in longobject.c.
*/
+#define PY_ABS_LONG_MIN (0-(unsigned long)LONG_MIN)
long
PyOS_strtol(char *str, char **ptr, int base)
@@ -224,8 +221,7 @@
if (sign == '-')
result = -result;
}
- else if (sign == '-' && uresult == (unsigned long)LONG_MAX + 1) {
- assert(LONG_MIN == -LONG_MAX-1);
+ else if (sign == '-' && uresult == PY_ABS_LONG_MIN) {
result = LONG_MIN;
}
else {
Modified: stackless/trunk/Python/pystate.c
==============================================================================
--- stackless/trunk/Python/pystate.c (original)
+++ stackless/trunk/Python/pystate.c Sun Oct 15 16:42:33 2006
@@ -328,9 +328,14 @@
*/
#if defined(Py_DEBUG) && defined(WITH_THREAD)
if (newts) {
+ /* This can be called from PyEval_RestoreThread(). Similar
+ to it, we need to ensure errno doesn't change.
+ */
+ int err = errno;
PyThreadState *check = PyGILState_GetThisThreadState();
if (check && check->interp == newts->interp && check != newts)
Py_FatalError("Invalid thread state for this thread");
+ errno = err;
}
#endif
return oldts;
@@ -515,7 +520,7 @@
{
PyThread_delete_key(autoTLSkey);
autoTLSkey = 0;
- autoInterpreterState = NULL;;
+ autoInterpreterState = NULL;
}
/* When a thread state is created for a thread by some mechanism other than
@@ -523,7 +528,7 @@
it so it doesn't try to create another thread state for the thread (this is
a better fix for SF bug #1010677 than the first one attempted).
*/
-void
+static void
_PyGILState_NoteThreadState(PyThreadState* tstate)
{
/* If autoTLSkey is 0, this must be the very first threadstate created
Modified: stackless/trunk/Python/pythonrun.c
==============================================================================
--- stackless/trunk/Python/pythonrun.c (original)
+++ stackless/trunk/Python/pythonrun.c Sun Oct 15 16:42:33 2006
@@ -548,11 +548,15 @@
bimod = _PyImport_FindExtension("__builtin__", "__builtin__");
if (bimod != NULL) {
interp->builtins = PyModule_GetDict(bimod);
+ if (interp->builtins == NULL)
+ goto handle_error;
Py_INCREF(interp->builtins);
}
sysmod = _PyImport_FindExtension("sys", "sys");
if (bimod != NULL && sysmod != NULL) {
interp->sysdict = PyModule_GetDict(sysmod);
+ if (interp->sysdict == NULL)
+ goto handle_error;
Py_INCREF(interp->sysdict);
PySys_SetPath(Py_GetPath());
PyDict_SetItemString(interp->sysdict, "modules",
@@ -566,6 +570,7 @@
if (!PyErr_Occurred())
return tstate;
+handle_error:
/* Oops, it didn't work. Undo it all. */
PyErr_Print();
@@ -737,9 +742,16 @@
/* compute parser flags based on compiler flags */
#define PARSER_FLAGS(flags) \
((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
+ PyPARSE_DONT_IMPLY_DEDENT : 0)) : 0)
+
+#if 0
+/* Keep an example of flags with future keyword support. */
+#define PARSER_FLAGS(flags) \
+ ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
PyPARSE_DONT_IMPLY_DEDENT : 0) \
| ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
+#endif
int
PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Modified: stackless/trunk/Python/symtable.c
==============================================================================
--- stackless/trunk/Python/symtable.c (original)
+++ stackless/trunk/Python/symtable.c Sun Oct 15 16:42:33 2006
@@ -221,8 +221,8 @@
return st;
st->st_filename = filename;
st->st_future = future;
- if (!symtable_enter_block(st, GET_IDENTIFIER(top), ModuleBlock,
- (void *)mod, 0)) {
+ if (!GET_IDENTIFIER(top) ||
+ !symtable_enter_block(st, top, ModuleBlock, (void *)mod, 0)) {
PySymtable_Free(st);
return NULL;
}
@@ -1123,12 +1123,13 @@
VISIT(st, expr, e->v.UnaryOp.operand);
break;
case Lambda_kind: {
- if (!symtable_add_def(st, GET_IDENTIFIER(lambda), DEF_LOCAL))
+ if (!GET_IDENTIFIER(lambda) ||
+ !symtable_add_def(st, lambda, DEF_LOCAL))
return 0;
if (e->v.Lambda.args->defaults)
VISIT_SEQ(st, expr, e->v.Lambda.args->defaults);
/* XXX how to get line numbers for expressions */
- if (!symtable_enter_block(st, GET_IDENTIFIER(lambda),
+ if (!symtable_enter_block(st, lambda,
FunctionBlock, (void *)e, 0))
return 0;
VISIT_IN_BLOCK(st, arguments, e->v.Lambda.args, (void*)e);
@@ -1404,8 +1405,8 @@
/* Outermost iterator is evaluated in current scope */
VISIT(st, expr, outermost->iter);
/* Create generator scope for the rest */
- if (!symtable_enter_block(st, GET_IDENTIFIER(genexpr),
- FunctionBlock, (void *)e, 0)) {
+ if (!GET_IDENTIFIER(genexpr) ||
+ !symtable_enter_block(st, genexpr, FunctionBlock, (void *)e, 0)) {
return 0;
}
st->st_cur->ste_generator = 1;
@@ -1419,7 +1420,5 @@
VISIT_SEQ_TAIL_IN_BLOCK(st, comprehension,
e->v.GeneratorExp.generators, 1, (void*)e);
VISIT_IN_BLOCK(st, expr, e->v.GeneratorExp.elt, (void*)e);
- if (!symtable_exit_block(st, (void *)e))
- return 0;
- return 1;
+ return symtable_exit_block(st, (void *)e);
}
Modified: stackless/trunk/Python/sysmodule.c
==============================================================================
--- stackless/trunk/Python/sysmodule.c (original)
+++ stackless/trunk/Python/sysmodule.c Sun Oct 15 16:42:33 2006
@@ -1233,7 +1233,7 @@
p = strchr(path, delim);
if (p == NULL)
p = strchr(path, '\0'); /* End of string */
- w = PyString_FromStringAndSize(path, (int) (p - path));
+ w = PyString_FromStringAndSize(path, (Py_ssize_t) (p - path));
if (w == NULL) {
Py_DECREF(v);
return NULL;
Modified: stackless/trunk/Tools/buildbot/external.bat
==============================================================================
--- stackless/trunk/Tools/buildbot/external.bat (original)
+++ stackless/trunk/Tools/buildbot/external.bat Sun Oct 15 16:42:33 2006
@@ -28,6 +28,7 @@
cd tk8.4.12\win
nmake -f makefile.vc TCLDIR=..\..\tcl8.4.12
nmake -f makefile.vc TCLDIR=..\..\tcl8.4.12 INSTALLDIR=..\..\tcltk install
+ cd ..\..
)
@rem sqlite
Modified: stackless/trunk/Tools/msi/msi.py
==============================================================================
--- stackless/trunk/Tools/msi/msi.py (original)
+++ stackless/trunk/Tools/msi/msi.py Sun Oct 15 16:42:33 2006
@@ -872,6 +872,12 @@
version=version, language=lang)
tmpfiles.append("msvcr71.dll")
+ # Check if _ctypes.pyd exists
+ have_ctypes = os.path.exists(srcdir+"/PCBuild/_ctypes.pyd")
+ if not have_ctypes:
+ print "WARNING: _ctypes.pyd not found, ctypes will not be included"
+ extensions.remove("_ctypes.pyd")
+
# Add all .py files in Lib, except lib-tk, test
dirs={}
pydirs = [(root,"Lib")]
@@ -889,6 +895,8 @@
# data: Lib/email/test
# output: Lib/test
testsuite.set_current()
+ elif not have_ctypes and dir == "ctypes":
+ continue
else:
default_feature.set_current()
lib = PyDirectory(db, cab, parent, dir, dir, "%s|%s" % (parent.make_short(dir), dir))
@@ -913,6 +921,7 @@
lib.add_file("185test.db")
lib.add_file("audiotest.au")
lib.add_file("cfgparser.1")
+ lib.add_file("sgml_input.html")
lib.add_file("test.xml")
lib.add_file("test.xml.out")
lib.add_file("testtar.tar")
Modified: stackless/trunk/Tools/msi/uuids.py
==============================================================================
--- stackless/trunk/Tools/msi/uuids.py (original)
+++ stackless/trunk/Tools/msi/uuids.py Sun Oct 15 16:42:33 2006
@@ -22,6 +22,8 @@
'2.4.2150':'{b191e49c-ea23-43b2-b28a-14e0784069b8}', # 2.4.2
'2.4.3121':'{f669ed4d-1dce-41c4-9617-d985397187a1}', # 2.4.3c1
'2.4.3150':'{75e71add-042c-4f30-bfac-a9ec42351313}', # 2.4.3
+ '2.4.4121':'{cd2862db-22a4-4688-8772-85407ea21550}', # 2.4.4c1
+ '2.4.4150':'{60e2c8c9-6cf3-4b1a-9618-e304946c94e6}', # 2.4.4
'2.5.101': '{bc14ce3e-5e72-4a64-ac1f-bf59a571898c}', # 2.5a1
'2.5.102': '{5eed51c1-8e9d-4071-94c5-b40de5d49ba5}', # 2.5a2
'2.5.103': '{73dcd966-ffec-415f-bb39-8342c1f47017}', # 2.5a3
Modified: stackless/trunk/Tools/pybench/pybench.py
==============================================================================
--- stackless/trunk/Tools/pybench/pybench.py (original)
+++ stackless/trunk/Tools/pybench/pybench.py Sun Oct 15 16:42:33 2006
@@ -885,7 +885,7 @@
else:
bench.print_benchmark(hidenoise=hidenoise,
limitnames=limitnames)
- except IOError:
+ except IOError, reason:
print '* Error opening/reading file %s: %s' % (
repr(show_bench),
reason)
@@ -931,8 +931,13 @@
bench.name = reportfile
pickle.dump(bench,f)
f.close()
- except IOError:
+ except IOError, reason:
print '* Error opening/writing reportfile'
+ except IOError, reason:
+ print '* Error opening/writing reportfile %s: %s' % (
+ reportfile,
+ reason)
+ print
if __name__ == '__main__':
PyBenchCmdline()
Modified: stackless/trunk/Tools/scripts/findnocoding.py
==============================================================================
--- stackless/trunk/Tools/scripts/findnocoding.py (original)
+++ stackless/trunk/Tools/scripts/findnocoding.py Sun Oct 15 16:42:33 2006
@@ -5,7 +5,7 @@
Usage: nocoding.py dir1 [dir2...]
"""
-__author__ = "Oleg Broytmann, Reinhold Birkenfeld"
+__author__ = "Oleg Broytmann, Georg Brandl"
import sys, os, re, getopt
Modified: stackless/trunk/Tools/scripts/pysource.py
==============================================================================
--- stackless/trunk/Tools/scripts/pysource.py (original)
+++ stackless/trunk/Tools/scripts/pysource.py Sun Oct 15 16:42:33 2006
@@ -15,7 +15,7 @@
walk_python_files() recursively lists all Python files under the given directories.
"""
-__author__ = "Oleg Broytmann, Reinhold Birkenfeld"
+__author__ = "Oleg Broytmann, Georg Brandl"
__all__ = ["has_python_ext", "looks_like_python", "can_be_compiled", "walk_python_files"]
Modified: stackless/trunk/configure
==============================================================================
--- stackless/trunk/configure (original)
+++ stackless/trunk/configure Sun Oct 15 16:42:33 2006
@@ -1,7 +1,7 @@
#! /bin/sh
-# From configure.in Revision: 47267 .
+# From configure.in Revision: 52086 .
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59 for python 2.5.
+# Generated by GNU Autoconf 2.59 for python 2.6.
#
# Report bugs to <http://www.python.org/python-bugs>.
#
@@ -270,8 +270,8 @@
# Identity of this package.
PACKAGE_NAME='python'
PACKAGE_TARNAME='python'
-PACKAGE_VERSION='2.5'
-PACKAGE_STRING='python 2.5'
+PACKAGE_VERSION='2.6'
+PACKAGE_STRING='python 2.6'
PACKAGE_BUGREPORT='http://www.python.org/python-bugs'
ac_unique_file="Include/object.h"
@@ -781,7 +781,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures python 2.5 to adapt to many kinds of systems.
+\`configure' configures python 2.6 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -838,7 +838,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of python 2.5:";;
+ short | recursive ) echo "Configuration of python 2.6:";;
esac
cat <<\_ACEOF
@@ -993,7 +993,7 @@
test -n "$ac_init_help" && exit 0
if $ac_init_version; then
cat <<\_ACEOF
-python configure 2.5
+python configure 2.6
generated by GNU Autoconf 2.59
Copyright (C) 2003 Free Software Foundation, Inc.
@@ -1007,7 +1007,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by python $as_me 2.5, which was
+It was created by python $as_me 2.6, which was
generated by GNU Autoconf 2.59. Invocation command line was
$ $0 $@
@@ -1359,7 +1359,7 @@
mv confdefs.h.new confdefs.h
-VERSION=2.5
+VERSION=2.6
SOVERSION=1.0
@@ -1573,7 +1573,7 @@
# On OpenBSD, select(2) is not available if _XOPEN_SOURCE is defined,
# even though select is a POSIX function. Reported by J. Ribbens.
# Reconfirmed for OpenBSD 3.3 by Zachary Hamm, for 3.4 by Jason Ish.
- OpenBSD/2.* | OpenBSD/3.[0123456789])
+ OpenBSD/2.* | OpenBSD/3.[0123456789] | OpenBSD/4.[0])
define_xopen_source=no;;
# On Solaris 2.6, sys/wait.h is inconsistent in the usage
# of union __?sigval. Reported by Stuart Bishop.
@@ -4648,10 +4648,11 @@
+
for ac_header in asm/types.h conio.h curses.h direct.h dlfcn.h errno.h \
fcntl.h grp.h \
-shadow.h io.h langinfo.h libintl.h ncurses.h poll.h process.h pthread.h \
-signal.h stropts.h termios.h thread.h \
+io.h langinfo.h libintl.h ncurses.h poll.h process.h pthread.h \
+shadow.h signal.h stdint.h stropts.h termios.h thread.h \
unistd.h utime.h \
sys/audioio.h sys/bsdtty.h sys/file.h sys/loadavg.h sys/lock.h sys/mkdev.h \
sys/modem.h \
@@ -10035,20 +10036,28 @@
fi
-echo "$as_me:$LINENO: checking for uintptr_t support" >&5
-echo $ECHO_N "checking for uintptr_t support... $ECHO_C" >&6
-have_uintptr_t=no
-cat >conftest.$ac_ext <<_ACEOF
+echo "$as_me:$LINENO: checking for uintptr_t" >&5
+echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6
+if test "${ac_cv_type_uintptr_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
+#ifdef HAVE_STDINT_H
+ #include <stdint.h>
+ #endif
int
main ()
{
-uintptr_t x; x = (uintptr_t)0;
+if ((uintptr_t *) 0)
+ return 0;
+if (sizeof (uintptr_t))
+ return 0;
;
return 0;
}
@@ -10075,23 +10084,23 @@
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
-
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_UINTPTR_T 1
-_ACEOF
-
- have_uintptr_t=yes
-
+ ac_cv_type_uintptr_t=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+ac_cv_type_uintptr_t=no
fi
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $have_uintptr_t" >&5
-echo "${ECHO_T}$have_uintptr_t" >&6
-if test "$have_uintptr_t" = yes ; then
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5
+echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6
+if test $ac_cv_type_uintptr_t = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UINTPTR_T 1
+_ACEOF
+
echo "$as_me:$LINENO: checking for uintptr_t" >&5
echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6
if test "${ac_cv_type_uintptr_t+set}" = set; then
@@ -10506,6 +10515,8 @@
fi
+
+
# Hmph. AC_CHECK_SIZEOF() doesn't include <sys/types.h>.
echo "$as_me:$LINENO: checking size of off_t" >&5
echo $ECHO_N "checking size of off_t... $ECHO_C" >&6
@@ -21988,12 +21999,26 @@
int main()
{
- char buffer[4];
+ char buffer[256];
+
+#ifdef HAVE_SSIZE_T
+typedef ssize_t Py_ssize_t;
+#elif SIZEOF_VOID_P == SIZEOF_LONG
+typedef long Py_ssize_t;
+#else
+typedef int Py_ssize_t;
+#endif
if(sprintf(buffer, "%zd", (size_t)123) < 0)
return 1;
- if (strncmp(buffer, "123", 3))
+ if (strcmp(buffer, "123"))
+ return 1;
+
+ if (sprintf(buffer, "%zd", (Py_ssize_t)-123) < 0)
+ return 1;
+
+ if (strcmp(buffer, "-123"))
return 1;
return 0;
@@ -22496,7 +22521,7 @@
} >&5
cat >&5 <<_CSEOF
-This file was extended by python $as_me 2.5, which was
+This file was extended by python $as_me 2.6, which was
generated by GNU Autoconf 2.59. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -22556,7 +22581,7 @@
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-python config.status 2.5
+python config.status 2.6
configured by $0, generated by GNU Autoconf 2.59,
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
Modified: stackless/trunk/configure.in
==============================================================================
--- stackless/trunk/configure.in (original)
+++ stackless/trunk/configure.in Sun Oct 15 16:42:33 2006
@@ -1,7 +1,7 @@
dnl Process this file with autoconf 2.0 or later to make a configure script.
# Set VERSION so we only need to edit in one place (i.e., here)
-m4_define(PYTHON_VERSION, 2.5)
+m4_define(PYTHON_VERSION, 2.6)
AC_REVISION($Revision$)
AC_PREREQ(2.59)
@@ -217,7 +217,7 @@
# On OpenBSD, select(2) is not available if _XOPEN_SOURCE is defined,
# even though select is a POSIX function. Reported by J. Ribbens.
# Reconfirmed for OpenBSD 3.3 by Zachary Hamm, for 3.4 by Jason Ish.
- OpenBSD/2.* | OpenBSD/3.@<:@0123456789@:>@)
+ OpenBSD/2.* | OpenBSD/3.@<:@0123456789@:>@ | OpenBSD/4.@<:@0@:>@)
define_xopen_source=no;;
# On Solaris 2.6, sys/wait.h is inconsistent in the usage
# of union __?sigval. Reported by Stuart Bishop.
@@ -1085,8 +1085,8 @@
AC_HEADER_STDC
AC_CHECK_HEADERS(asm/types.h conio.h curses.h direct.h dlfcn.h errno.h \
fcntl.h grp.h \
-shadow.h io.h langinfo.h libintl.h ncurses.h poll.h process.h pthread.h \
-signal.h stropts.h termios.h thread.h \
+io.h langinfo.h libintl.h ncurses.h poll.h process.h pthread.h \
+shadow.h signal.h stdint.h stropts.h termios.h thread.h \
unistd.h utime.h \
sys/audioio.h sys/bsdtty.h sys/file.h sys/loadavg.h sys/lock.h sys/mkdev.h \
sys/modem.h \
@@ -1214,16 +1214,12 @@
AC_CHECK_SIZEOF(long long, 8)
fi
-AC_MSG_CHECKING(for uintptr_t support)
-have_uintptr_t=no
-AC_TRY_COMPILE([], [uintptr_t x; x = (uintptr_t)0;], [
- AC_DEFINE(HAVE_UINTPTR_T, 1, [Define this if you have the type uintptr_t.])
- have_uintptr_t=yes
-])
-AC_MSG_RESULT($have_uintptr_t)
-if test "$have_uintptr_t" = yes ; then
-AC_CHECK_SIZEOF(uintptr_t, 4)
-fi
+AC_CHECK_TYPES(uintptr_t,
+ [AC_CHECK_SIZEOF(uintptr_t, 4)],
+ [], [#ifdef HAVE_STDINT_H
+ #include <stdint.h>
+ #endif])
+
# Hmph. AC_CHECK_SIZEOF() doesn't include <sys/types.h>.
AC_MSG_CHECKING(size of off_t)
@@ -3369,14 +3365,28 @@
int main()
{
- char buffer[4];
+ char buffer[256];
+
+#ifdef HAVE_SSIZE_T
+typedef ssize_t Py_ssize_t;
+#elif SIZEOF_VOID_P == SIZEOF_LONG
+typedef long Py_ssize_t;
+#else
+typedef int Py_ssize_t;
+#endif
if(sprintf(buffer, "%zd", (size_t)123) < 0)
return 1;
- if (strncmp(buffer, "123", 3))
+ if (strcmp(buffer, "123"))
return 1;
-
+
+ if (sprintf(buffer, "%zd", (Py_ssize_t)-123) < 0)
+ return 1;
+
+ if (strcmp(buffer, "-123"))
+ return 1;
+
return 0;
}],
[AC_MSG_RESULT(yes)
Modified: stackless/trunk/pyconfig.h.in
==============================================================================
--- stackless/trunk/pyconfig.h.in (original)
+++ stackless/trunk/pyconfig.h.in Sun Oct 15 16:42:33 2006
@@ -677,7 +677,7 @@
/* Define this if you have tcl and TCL_UTF_MAX==6 */
#undef HAVE_UCS4_TCL
-/* Define this if you have the type uintptr_t. */
+/* Define to 1 if the system has the type `uintptr_t'. */
#undef HAVE_UINTPTR_T
/* Define to 1 if you have the `uname' function. */
-------------- next part --------------
_______________________________________________
Stackless-checkins mailing list
Stackless-checkins at stackless.com
http://www.stackless.com/mailman/listinfo/stackless-checkins
More information about the Stackless-checkins
mailing list