[Python-checkins] r63854 - in python/branches/tlee-ast-optimize: Doc/c-api/bytearray.rst Doc/c-api/concrete.rst Doc/c-api/file.rst Doc/c-api/string.rst Doc/c-api/type.rst Doc/includes/noddy2.c Doc/includes/noddy3.c Doc/includes/noddy4.c Doc/includes/run-func.c Doc/library/basehttpserver.rst Doc/library/cgihttpserver.rst Doc/library/cmd.rst Doc/library/codecs.rst Doc/library/commands.rst Doc/library/cookie.rst Doc/library/cookielib.rst Doc/library/easydialogs.rst Doc/library/ftplib.rst Doc/library/httplib.rst Doc/library/os.rst Doc/library/poplib.rst Doc/library/re.rst Doc/library/simplehttpserver.rst Doc/library/smtplib.rst Doc/library/socket.rst Doc/library/stdtypes.rst Doc/library/telnetlib.rst Doc/library/urllib2.rst Doc/library/userdict.rst Doc/tutorial/controlflow.rst Doc/tutorial/interpreter.rst Doc/using/cmdline.rst Doc/whatsnew/2.6.rst Include/Python.h Include/bytearrayobject.h Include/bytesobject.h Include/fileobject.h Include/floatobject.h Include/formatter_string.h Include/formatter_unicode.h Include/intobject.h Include/longobject.h Include/object.h Include/py_curses.h Include/pyerrors.h Include/pyport.h Include/pythonrun.h Include/stringobject.h Include/unicodeobject.h Include/warnings.h Lib/UserString.py Lib/bsddb/test/test_all.py Lib/collections.py Lib/commands.py Lib/ctypes/test/test_pointers.py Lib/distutils/command/bdist_wininst.py Lib/distutils/command/wininst-6.0.exe Lib/distutils/command/wininst-7.1.exe Lib/distutils/command/wininst-9.0-amd64.exe Lib/distutils/command/wininst-9.0.exe Lib/distutils/tests/test_build_ext.py Lib/ftplib.py Lib/heapq.py Lib/httplib.py Lib/lib-tk/Tkinter.py Lib/locale.py Lib/poplib.py Lib/smtplib.py Lib/socket.py Lib/sqlite3/test/dbapi.py Lib/sre_parse.py Lib/subprocess.py Lib/tarfile.py Lib/telnetlib.py Lib/test/pydoc_mod.py Lib/test/test___all__.py Lib/test/test_bsddb3.py Lib/test/test_ftplib.py Lib/test/test_httplib.py Lib/test/test_math.py Lib/test/test_poplib.py Lib/test/test_py3kwarn.py Lib/test/test_smtplib.py Lib/test/test_socket.py Lib/test/test_subprocess.py Lib/test/test_support.py Lib/test/test_sys.py Lib/test/test_tarfile.py Lib/test/test_telnetlib.py Lib/test/test_urllib.py Lib/test/test_urllib2.py Lib/test/test_urllib2net.py Lib/test/test_userstring.py Lib/urllib.py Lib/urllib2.py Lib/xmlrpclib.py Mac/Modules/MacOS.c Mac/Modules/Nav.c Mac/Modules/ae/_AEmodule.c Mac/Modules/cf/_CFmodule.c Mac/Modules/cf/pycfbridge.c Mac/Modules/file/_Filemodule.c Mac/Modules/qd/_Qdmodule.c Mac/Modules/qdoffs/_Qdoffsmodule.c Mac/Modules/res/_Resmodule.c Mac/Modules/scrap/_Scrapmodule.c Mac/Modules/snd/_Sndihooks.c Mac/Modules/win/_Winmodule.c Makefile.pre.in Misc/NEWS Modules/_bsddb.c Modules/_bytesio.c Modules/_codecsmodule.c Modules/_collectionsmodule.c Modules/_csv.c Modules/_ctypes/_ctypes.c Modules/_ctypes/callbacks.c Modules/_ctypes/callproc.c Modules/_ctypes/cfield.c Modules/_curses_panel.c Modules/_cursesmodule.c Modules/_elementtree.c Modules/_fileio.c Modules/_hashopenssl.c Modules/_heapqmodule.c Modules/_hotshot.c Modules/_json.c Modules/_localemodule.c Modules/_lsprof.c Modules/_sqlite/cache.c Modules/_sqlite/connection.c Modules/_sqlite/connection.h Modules/_sqlite/cursor.c Modules/_sqlite/cursor.h Modules/_sqlite/module.c Modules/_sqlite/row.c Modules/_sqlite/statement.c Modules/_sre.c Modules/_ssl.c Modules/_struct.c Modules/_testcapimodule.c Modules/_tkinter.c Modules/almodule.c Modules/arraymodule.c Modules/audioop.c Modules/binascii.c Modules/bsddbmodule.c Modules/bz2module.c Modules/cPickle.c Modules/cStringIO.c Modules/cdmodule.c Modules/cgensupport.c Modules/cjkcodecs/cjkcodecs.h Modules/cjkcodecs/multibytecodec.c Modules/clmodule.c Modules/datetimemodule.c Modules/dbmmodule.c Modules/dlmodule.c Modules/errnomodule.c Modules/fcntlmodule.c Modules/flmodule.c Modules/fmmodule.c Modules/gcmodule.c Modules/gdbmmodule.c Modules/glmodule.c Modules/grpmodule.c Modules/imageop.c Modules/imgfile.c Modules/itertoolsmodule.c Modules/linuxaudiodev.c Modules/main.c Modules/mathmodule.c Modules/md5module.c Modules/mmapmodule.c Modules/nismodule.c Modules/operator.c Modules/ossaudiodev.c Modules/parsermodule.c Modules/posixmodule.c Modules/pwdmodule.c Modules/pyexpat.c Modules/readline.c Modules/selectmodule.c Modules/sha256module.c Modules/sha512module.c Modules/shamodule.c Modules/socketmodule.c Modules/spwdmodule.c Modules/stropmodule.c Modules/sunaudiodev.c Modules/svmodule.c Modules/syslogmodule.c Modules/termios.c Modules/threadmodule.c Modules/timemodule.c Modules/unicodedata.c Modules/zipimport.c Modules/zlibmodule.c Objects/abstract.c Objects/boolobject.c Objects/bufferobject.c Objects/bytearrayobject.c Objects/bytes_methods.c Objects/bytesobject.c Objects/cellobject.c Objects/classobject.c Objects/codeobject.c Objects/complexobject.c Objects/descrobject.c Objects/dictobject.c Objects/exceptions.c Objects/fileobject.c Objects/floatobject.c Objects/frameobject.c Objects/funcobject.c Objects/genobject.c Objects/intobject.c Objects/listobject.c Objects/longobject.c Objects/methodobject.c Objects/moduleobject.c Objects/object.c Objects/rangeobject.c Objects/setobject.c Objects/sliceobject.c Objects/stringlib/formatter.h Objects/stringlib/string_format.h Objects/stringlib/stringdefs.h Objects/stringobject.c Objects/structseq.c Objects/tupleobject.c Objects/typeobject.c Objects/unicodeobject.c Objects/weakrefobject.c PC/VC6/pythoncore.dsp PC/VS7.1/pythoncore.vcproj PC/VS8.0/_bsddb.vcproj PC/VS8.0/_bsddb44.vcproj PC/VS8.0/_elementtree.vcproj PC/VS8.0/_hashlib.vcproj PC/VS8.0/_sqlite3.vcproj PC/VS8.0/_ssl.vcproj PC/VS8.0/_tkinter.vcproj PC/VS8.0/bdist_wininst.vcproj PC/VS8.0/debug.vsprops PC/VS8.0/kill_python.vcproj PC/VS8.0/make_versioninfo.vcproj PC/VS8.0/pcbuild.sln PC/VS8.0/pyd.vsprops PC/VS8.0/pyd_d.vsprops PC/VS8.0/pyproject.vsprops PC/VS8.0/python.vcproj PC/VS8.0/pythoncore.vcproj PC/VS8.0/release.vsprops PC/VS8.0/sqlite3.vcproj PC/VS8.0/x64.vsprops PC/_msi.c PC/_subprocess.c PC/_winreg.c PC/bdist_wininst/install.c PC/msvcrtmodule.c PC/winsound.c PCbuild/pythoncore.vcproj Parser/asdl_c.py Parser/tokenizer.c Python/Python-ast.c Python/_warnings.c Python/ast.c Python/bltinmodule.c Python/ceval.c Python/codecs.c Python/compile.c Python/errors.c Python/formatter_string.c Python/formatter_unicode.c Python/future.c Python/getargs.c Python/import.c Python/mactoolboxglue.c Python/marshal.c Python/modsupport.c Python/mysnprintf.c Python/peephole.c Python/pystrtod.c Python/pythonrun.c Python/structmember.c Python/symtable.c Python/sysmodule.c Python/traceback.c RISCOS/Modules/drawfmodule.c RISCOS/Modules/riscosmodule.c RISCOS/Modules/swimodule.c configure.in setup.py
thomas.lee
python-checkins at python.org
Sun Jun 1 17:18:22 CEST 2008
Author: thomas.lee
Date: Sun Jun 1 17:18:10 2008
New Revision: 63854
Log:
Merged revisions 63669-63853 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r63670 | thomas.heller | 2008-05-26 21:42:40 +1000 (Mon, 26 May 2008) | 4 lines
On Windows, we must build a debug version iff running a debug build of
Python
........
r63672 | christian.heimes | 2008-05-26 22:29:14 +1000 (Mon, 26 May 2008) | 4 lines
First step of the C API rename:
renamed Include/bytesobject.h to Include/bytearrayobject.h
renamed Include/stringobject.h to Include/bytesobject.h
added Include/stringobject.h with aliases
........
r63673 | benjamin.peterson | 2008-05-26 22:29:46 +1000 (Mon, 26 May 2008) | 2 lines
some updates to string formatting section in whatsnew
........
r63675 | christian.heimes | 2008-05-26 22:51:38 +1000 (Mon, 26 May 2008) | 1 line
Renamed PyString to PyBytes
........
r63677 | christian.heimes | 2008-05-26 23:01:01 +1000 (Mon, 26 May 2008) | 3 lines
Renamed bytesobject.c to bytearrayobject.c
Renamed stringobject.c to bytesobject.c
Fixed Windows builds
........
r63678 | benjamin.peterson | 2008-05-26 23:01:25 +1000 (Mon, 26 May 2008) | 2 lines
put a big note on configure.in asking people to run autoconf
........
r63679 | christian.heimes | 2008-05-26 23:15:11 +1000 (Mon, 26 May 2008) | 1 line
Updated NEWS
........
r63685 | christian.heimes | 2008-05-26 23:51:41 +1000 (Mon, 26 May 2008) | 2 lines
Used vs9to8.py to port all VS9.0 changes to 8.0
Updated VS7.1 and VC6 project files
........
r63686 | benjamin.peterson | 2008-05-27 00:02:09 +1000 (Tue, 27 May 2008) | 2 lines
note that PyString and has been aliased to PyBytes
........
r63688 | benjamin.peterson | 2008-05-27 00:29:09 +1000 (Tue, 27 May 2008) | 2 lines
fix a minor typo
........
r63690 | benjamin.peterson | 2008-05-27 00:51:54 +1000 (Tue, 27 May 2008) | 2 lines
fix typo (thank Georg)
........
r63691 | georg.brandl | 2008-05-27 01:01:48 +1000 (Tue, 27 May 2008) | 2 lines
Add renaming notices to 3.0 http package members.
........
r63696 | benjamin.peterson | 2008-05-27 01:54:26 +1000 (Tue, 27 May 2008) | 2 lines
add PyByteArray docs
........
r63698 | benjamin.peterson | 2008-05-27 02:22:27 +1000 (Tue, 27 May 2008) | 2 lines
add __all__ to test_support
........
r63704 | benjamin.peterson | 2008-05-27 03:43:53 +1000 (Tue, 27 May 2008) | 2 lines
turn PyErr_WarnPy3k into a macro
........
r63714 | gregory.p.smith | 2008-05-27 05:03:35 +1000 (Tue, 27 May 2008) | 2 lines
Define macros so that this still compiles on Python prior to r63675.
........
r63718 | gregory.p.smith | 2008-05-27 05:29:14 +1000 (Tue, 27 May 2008) | 3 lines
Allow BerlekeyDB up through 4.7. I doubt any of our unixy buildbots even have
that installed yet but the module code supports it.
........
r63719 | benjamin.peterson | 2008-05-27 05:37:11 +1000 (Tue, 27 May 2008) | 2 lines
wrap line
........
r63721 | benjamin.peterson | 2008-05-27 05:41:53 +1000 (Tue, 27 May 2008) | 2 lines
warn about some members of the commands module
........
r63724 | gregory.p.smith | 2008-05-27 06:22:14 +1000 (Tue, 27 May 2008) | 6 lines
Fixes issue2791: subprocess.Popen.communicate leaked a file descripton until
the last reference to the Popen instance was dropped. Adding explicit
close() calls fixes it.
Candidate for backport to release25-maint.
........
r63725 | benjamin.peterson | 2008-05-27 06:41:45 +1000 (Tue, 27 May 2008) | 2 lines
take Brett's advice on a few warnings
........
r63726 | benjamin.peterson | 2008-05-27 06:43:24 +1000 (Tue, 27 May 2008) | 2 lines
fix minor grammar typo
........
r63728 | gregory.p.smith | 2008-05-27 07:16:34 +1000 (Tue, 27 May 2008) | 4 lines
Fix issue2589: there was a potential integer overflow leading to
memory corruption on esoteric platforms and incorrect behavior on
normal platforms.
........
r63732 | benjamin.peterson | 2008-05-27 07:44:26 +1000 (Tue, 27 May 2008) | 2 lines
remove duplication in test module
........
r63734 | gregory.p.smith | 2008-05-27 08:07:28 +1000 (Tue, 27 May 2008) | 3 lines
Fix issue2588: Do not execute str[size-1] = '\0' when a 0 size is
passed in. (The assert won't prevent this in non-debug builds).
........
r63736 | benjamin.peterson | 2008-05-27 11:18:39 +1000 (Tue, 27 May 2008) | 2 lines
remove some __getslice__
........
r63738 | benjamin.peterson | 2008-05-27 11:42:29 +1000 (Tue, 27 May 2008) | 4 lines
Improvements for test_py3kwarn
- Always show warnings so they are always catchable
- Make test_os_path_walk faster by walking a less populous directory
........
r63742 | gregory.p.smith | 2008-05-27 18:40:09 +1000 (Tue, 27 May 2008) | 3 lines
Disable the use of BerkeleyDB 4.6 on platforms that appear to have
issues with it.
........
r63744 | lars.gustaebel | 2008-05-27 22:39:23 +1000 (Tue, 27 May 2008) | 3 lines
Do not close external file objects passed to tarfile.open(mode='w:bz2')
when the TarFile is closed.
........
r63745 | jesus.cea | 2008-05-27 23:26:02 +1000 (Tue, 27 May 2008) | 1 line
Better integration between Python testing and bsddb3
........
r63754 | benjamin.peterson | 2008-05-28 11:12:35 +1000 (Wed, 28 May 2008) | 2 lines
update tutorial function with more appropiate one from Eric Smith
........
r63755 | mark.hammond | 2008-05-28 11:54:55 +1000 (Wed, 28 May 2008) | 2 lines
bdist_wininst now works correctly when both --skip-build and --plat-name are specified.
........
r63757 | georg.brandl | 2008-05-28 21:21:39 +1000 (Wed, 28 May 2008) | 2 lines
#2989: add PyType_Modified().
........
r63758 | benjamin.peterson | 2008-05-28 21:51:41 +1000 (Wed, 28 May 2008) | 2 lines
fix spelling
........
r63760 | georg.brandl | 2008-05-29 01:41:36 +1000 (Thu, 29 May 2008) | 2 lines
#2990: prevent inconsistent state while updating method cache.
........
r63767 | brett.cannon | 2008-05-29 15:08:50 +1000 (Thu, 29 May 2008) | 4 lines
UserString.MutableString has been removed in Python 3.0.
Works on issue #2877. Thanks Quentin Gallet-Gilles for the patch.
........
r63775 | georg.brandl | 2008-05-29 17:18:17 +1000 (Thu, 29 May 2008) | 2 lines
Two fixes in bytearray docs.
........
r63776 | georg.brandl | 2008-05-29 17:18:49 +1000 (Thu, 29 May 2008) | 2 lines
#2906: accept lists for options, and some cosmetic fixes in Tkinter.
........
r63781 | georg.brandl | 2008-05-29 17:38:37 +1000 (Thu, 29 May 2008) | 2 lines
#2988: add note about catching CookieError when parsing untrusted cookie data.
........
r63782 | georg.brandl | 2008-05-29 17:45:26 +1000 (Thu, 29 May 2008) | 2 lines
#2985: allow i8 in XMLRPC responses.
........
r63784 | raymond.hettinger | 2008-05-29 18:38:23 +1000 (Thu, 29 May 2008) | 1 line
Fix two typos.
........
r63787 | georg.brandl | 2008-05-30 00:35:39 +1000 (Fri, 30 May 2008) | 2 lines
Revert #2990 patch; it's not necessary as Armin showed.
........
r63788 | facundo.batista | 2008-05-30 02:39:26 +1000 (Fri, 30 May 2008) | 6 lines
Fixed the semantic of timeout for socket.create_connection and
all the upper level libraries that use it, including urllib2.
Added and fixed some tests, and changed docs correspondingly.
Thanks to John J Lee for the patch and the pusing, :)
........
r63791 | thomas.heller | 2008-05-30 05:18:12 +1000 (Fri, 30 May 2008) | 1 line
Fix compiler warning.
........
r63792 | thomas.heller | 2008-05-30 05:42:34 +1000 (Fri, 30 May 2008) | 1 line
ctypes NULL function pointers have a boolean False value now.
........
r63799 | brett.cannon | 2008-05-30 07:23:33 +1000 (Fri, 30 May 2008) | 1 line
Turn off debugging output for building bsddb.
........
r63800 | brett.cannon | 2008-05-30 07:28:55 +1000 (Fri, 30 May 2008) | 1 line
Note that UserList and UserString were moved to 'collections' in 3.0.
........
r63802 | mark.dickinson | 2008-05-30 12:46:53 +1000 (Fri, 30 May 2008) | 2 lines
Fix typo in testSum
........
r63805 | raymond.hettinger | 2008-05-30 16:37:27 +1000 (Fri, 30 May 2008) | 1 line
Issue 2784: fix leaks in exception exit.
........
r63806 | raymond.hettinger | 2008-05-30 16:49:47 +1000 (Fri, 30 May 2008) | 1 line
Issue 2855: Fix obscure crasher by slowing down the entire module. Mimics what was done to dictionaries in r59223.
........
r63807 | raymond.hettinger | 2008-05-30 17:16:53 +1000 (Fri, 30 May 2008) | 1 line
Issue 2903: Add __name__ in globals for namedtuple namespace.
........
r63808 | georg.brandl | 2008-05-30 17:54:16 +1000 (Fri, 30 May 2008) | 2 lines
#2999: fix name of third parameter in unicode.replace()'s docstring.
........
r63814 | eric.smith | 2008-05-31 04:10:04 +1000 (Sat, 31 May 2008) | 1 line
Refactor and clean up str.format() code (and helpers) in advance of optimizations.
........
r63817 | raymond.hettinger | 2008-05-31 04:20:50 +1000 (Sat, 31 May 2008) | 8 lines
* Mark intermedidate computes values (hi, lo, yr) as volatile.
* Expand comments.
* Swap variable names in the sum_exact code so that x and y
are consistently chosen as the larger and smaller magnitude
values respectively.
........
r63818 | georg.brandl | 2008-05-31 05:12:13 +1000 (Sat, 31 May 2008) | 2 lines
getloadavg() is not available on Windows.
........
r63819 | georg.brandl | 2008-05-31 05:17:29 +1000 (Sat, 31 May 2008) | 2 lines
Better quote with single quotes.
........
r63823 | benjamin.peterson | 2008-05-31 06:44:39 +1000 (Sat, 31 May 2008) | 2 lines
fix grammar
........
r63824 | marc-andre.lemburg | 2008-05-31 06:52:18 +1000 (Sat, 31 May 2008) | 5 lines
Update the locale module alias table.
Closes #3011.
........
r63827 | raymond.hettinger | 2008-05-31 13:24:31 +1000 (Sat, 31 May 2008) | 1 line
Implement heapq in terms of less-than (to match list.sort()).
........
r63828 | mark.hammond | 2008-05-31 15:11:07 +1000 (Sat, 31 May 2008) | 2 lines
Fix bdist_wininst --user-access-control for win2k
........
r63829 | mark.summerfield | 2008-05-31 23:05:34 +1000 (Sat, 31 May 2008) | 4 lines
Added a note to [] that special forms & special chars lose their meaning
and backrefs can't be used inside []
........
r63830 | georg.brandl | 2008-06-01 00:40:09 +1000 (Sun, 01 Jun 2008) | 2 lines
#3010: clarification about stdin/use_rawinput.
........
r63831 | georg.brandl | 2008-06-01 00:45:55 +1000 (Sun, 01 Jun 2008) | 2 lines
#3005: add explaining sentence to easydialogs docs.
........
r63839 | gerhard.haering | 2008-06-01 07:33:27 +1000 (Sun, 01 Jun 2008) | 2 lines
Fixed rowcount for SELECT statements. They're -1 now (again), for better DB-API 2.0 compliance.
........
r63846 | martin.v.loewis | 2008-06-01 17:20:46 +1000 (Sun, 01 Jun 2008) | 2 lines
New environment variable PYTHONIOENCODING.
........
r63848 | martin.v.loewis | 2008-06-01 18:06:17 +1000 (Sun, 01 Jun 2008) | 2 lines
Move sys_stream and sys_isatty out of the have-langinfo block.
........
r63849 | martin.v.loewis | 2008-06-01 18:19:02 +1000 (Sun, 01 Jun 2008) | 2 lines
Typo: encoding -> codeset.
........
Added:
python/branches/tlee-ast-optimize/Doc/c-api/bytearray.rst
- copied unchanged from r63849, /python/trunk/Doc/c-api/bytearray.rst
python/branches/tlee-ast-optimize/Include/bytearrayobject.h
- copied unchanged from r63849, /python/trunk/Include/bytearrayobject.h
python/branches/tlee-ast-optimize/Include/bytesobject.h
- copied unchanged from r63849, /python/trunk/Include/bytesobject.h
python/branches/tlee-ast-optimize/Include/stringobject.h
- copied unchanged from r63849, /python/trunk/Include/stringobject.h
python/branches/tlee-ast-optimize/Objects/bytearrayobject.c
- copied unchanged from r63849, /python/trunk/Objects/bytearrayobject.c
python/branches/tlee-ast-optimize/Objects/bytesobject.c
- copied unchanged from r63849, /python/trunk/Objects/bytesobject.c
python/branches/tlee-ast-optimize/PC/VS8.0/_bsddb44.vcproj
- copied unchanged from r63849, /python/trunk/PC/VS8.0/_bsddb44.vcproj
python/branches/tlee-ast-optimize/PC/VS8.0/_hashlib.vcproj
- copied unchanged from r63849, /python/trunk/PC/VS8.0/_hashlib.vcproj
python/branches/tlee-ast-optimize/PC/VS8.0/kill_python.vcproj
- copied unchanged from r63849, /python/trunk/PC/VS8.0/kill_python.vcproj
python/branches/tlee-ast-optimize/PC/VS8.0/sqlite3.vcproj
- copied unchanged from r63849, /python/trunk/PC/VS8.0/sqlite3.vcproj
Removed:
python/branches/tlee-ast-optimize/Include/formatter_string.h
python/branches/tlee-ast-optimize/Include/formatter_unicode.h
python/branches/tlee-ast-optimize/Objects/stringobject.c
Modified:
python/branches/tlee-ast-optimize/ (props changed)
python/branches/tlee-ast-optimize/Doc/c-api/concrete.rst
python/branches/tlee-ast-optimize/Doc/c-api/file.rst
python/branches/tlee-ast-optimize/Doc/c-api/string.rst
python/branches/tlee-ast-optimize/Doc/c-api/type.rst
python/branches/tlee-ast-optimize/Doc/includes/noddy2.c
python/branches/tlee-ast-optimize/Doc/includes/noddy3.c
python/branches/tlee-ast-optimize/Doc/includes/noddy4.c
python/branches/tlee-ast-optimize/Doc/includes/run-func.c
python/branches/tlee-ast-optimize/Doc/library/basehttpserver.rst
python/branches/tlee-ast-optimize/Doc/library/cgihttpserver.rst
python/branches/tlee-ast-optimize/Doc/library/cmd.rst
python/branches/tlee-ast-optimize/Doc/library/codecs.rst
python/branches/tlee-ast-optimize/Doc/library/commands.rst
python/branches/tlee-ast-optimize/Doc/library/cookie.rst
python/branches/tlee-ast-optimize/Doc/library/cookielib.rst
python/branches/tlee-ast-optimize/Doc/library/easydialogs.rst
python/branches/tlee-ast-optimize/Doc/library/ftplib.rst
python/branches/tlee-ast-optimize/Doc/library/httplib.rst
python/branches/tlee-ast-optimize/Doc/library/os.rst
python/branches/tlee-ast-optimize/Doc/library/poplib.rst
python/branches/tlee-ast-optimize/Doc/library/re.rst
python/branches/tlee-ast-optimize/Doc/library/simplehttpserver.rst
python/branches/tlee-ast-optimize/Doc/library/smtplib.rst
python/branches/tlee-ast-optimize/Doc/library/socket.rst
python/branches/tlee-ast-optimize/Doc/library/stdtypes.rst
python/branches/tlee-ast-optimize/Doc/library/telnetlib.rst
python/branches/tlee-ast-optimize/Doc/library/urllib2.rst
python/branches/tlee-ast-optimize/Doc/library/userdict.rst
python/branches/tlee-ast-optimize/Doc/tutorial/controlflow.rst
python/branches/tlee-ast-optimize/Doc/tutorial/interpreter.rst
python/branches/tlee-ast-optimize/Doc/using/cmdline.rst
python/branches/tlee-ast-optimize/Doc/whatsnew/2.6.rst
python/branches/tlee-ast-optimize/Include/Python.h
python/branches/tlee-ast-optimize/Include/fileobject.h
python/branches/tlee-ast-optimize/Include/floatobject.h
python/branches/tlee-ast-optimize/Include/intobject.h
python/branches/tlee-ast-optimize/Include/longobject.h
python/branches/tlee-ast-optimize/Include/object.h
python/branches/tlee-ast-optimize/Include/py_curses.h
python/branches/tlee-ast-optimize/Include/pyerrors.h
python/branches/tlee-ast-optimize/Include/pyport.h
python/branches/tlee-ast-optimize/Include/pythonrun.h
python/branches/tlee-ast-optimize/Include/unicodeobject.h
python/branches/tlee-ast-optimize/Include/warnings.h
python/branches/tlee-ast-optimize/Lib/UserString.py
python/branches/tlee-ast-optimize/Lib/bsddb/test/test_all.py
python/branches/tlee-ast-optimize/Lib/collections.py
python/branches/tlee-ast-optimize/Lib/commands.py
python/branches/tlee-ast-optimize/Lib/ctypes/test/test_pointers.py
python/branches/tlee-ast-optimize/Lib/distutils/command/bdist_wininst.py
python/branches/tlee-ast-optimize/Lib/distutils/command/wininst-6.0.exe
python/branches/tlee-ast-optimize/Lib/distutils/command/wininst-7.1.exe
python/branches/tlee-ast-optimize/Lib/distutils/command/wininst-9.0-amd64.exe
python/branches/tlee-ast-optimize/Lib/distutils/command/wininst-9.0.exe
python/branches/tlee-ast-optimize/Lib/distutils/tests/test_build_ext.py
python/branches/tlee-ast-optimize/Lib/ftplib.py
python/branches/tlee-ast-optimize/Lib/heapq.py
python/branches/tlee-ast-optimize/Lib/httplib.py
python/branches/tlee-ast-optimize/Lib/lib-tk/Tkinter.py
python/branches/tlee-ast-optimize/Lib/locale.py
python/branches/tlee-ast-optimize/Lib/poplib.py
python/branches/tlee-ast-optimize/Lib/smtplib.py
python/branches/tlee-ast-optimize/Lib/socket.py
python/branches/tlee-ast-optimize/Lib/sqlite3/test/dbapi.py
python/branches/tlee-ast-optimize/Lib/sre_parse.py
python/branches/tlee-ast-optimize/Lib/subprocess.py
python/branches/tlee-ast-optimize/Lib/tarfile.py
python/branches/tlee-ast-optimize/Lib/telnetlib.py
python/branches/tlee-ast-optimize/Lib/test/pydoc_mod.py
python/branches/tlee-ast-optimize/Lib/test/test___all__.py
python/branches/tlee-ast-optimize/Lib/test/test_bsddb3.py
python/branches/tlee-ast-optimize/Lib/test/test_ftplib.py
python/branches/tlee-ast-optimize/Lib/test/test_httplib.py
python/branches/tlee-ast-optimize/Lib/test/test_math.py
python/branches/tlee-ast-optimize/Lib/test/test_poplib.py
python/branches/tlee-ast-optimize/Lib/test/test_py3kwarn.py
python/branches/tlee-ast-optimize/Lib/test/test_smtplib.py
python/branches/tlee-ast-optimize/Lib/test/test_socket.py
python/branches/tlee-ast-optimize/Lib/test/test_subprocess.py
python/branches/tlee-ast-optimize/Lib/test/test_support.py
python/branches/tlee-ast-optimize/Lib/test/test_sys.py
python/branches/tlee-ast-optimize/Lib/test/test_tarfile.py
python/branches/tlee-ast-optimize/Lib/test/test_telnetlib.py
python/branches/tlee-ast-optimize/Lib/test/test_urllib.py
python/branches/tlee-ast-optimize/Lib/test/test_urllib2.py
python/branches/tlee-ast-optimize/Lib/test/test_urllib2net.py
python/branches/tlee-ast-optimize/Lib/test/test_userstring.py
python/branches/tlee-ast-optimize/Lib/urllib.py
python/branches/tlee-ast-optimize/Lib/urllib2.py
python/branches/tlee-ast-optimize/Lib/xmlrpclib.py
python/branches/tlee-ast-optimize/Mac/Modules/MacOS.c
python/branches/tlee-ast-optimize/Mac/Modules/Nav.c
python/branches/tlee-ast-optimize/Mac/Modules/ae/_AEmodule.c
python/branches/tlee-ast-optimize/Mac/Modules/cf/_CFmodule.c
python/branches/tlee-ast-optimize/Mac/Modules/cf/pycfbridge.c
python/branches/tlee-ast-optimize/Mac/Modules/file/_Filemodule.c
python/branches/tlee-ast-optimize/Mac/Modules/qd/_Qdmodule.c
python/branches/tlee-ast-optimize/Mac/Modules/qdoffs/_Qdoffsmodule.c
python/branches/tlee-ast-optimize/Mac/Modules/res/_Resmodule.c
python/branches/tlee-ast-optimize/Mac/Modules/scrap/_Scrapmodule.c
python/branches/tlee-ast-optimize/Mac/Modules/snd/_Sndihooks.c
python/branches/tlee-ast-optimize/Mac/Modules/win/_Winmodule.c
python/branches/tlee-ast-optimize/Makefile.pre.in
python/branches/tlee-ast-optimize/Misc/NEWS
python/branches/tlee-ast-optimize/Modules/_bsddb.c
python/branches/tlee-ast-optimize/Modules/_bytesio.c
python/branches/tlee-ast-optimize/Modules/_codecsmodule.c
python/branches/tlee-ast-optimize/Modules/_collectionsmodule.c
python/branches/tlee-ast-optimize/Modules/_csv.c
python/branches/tlee-ast-optimize/Modules/_ctypes/_ctypes.c
python/branches/tlee-ast-optimize/Modules/_ctypes/callbacks.c
python/branches/tlee-ast-optimize/Modules/_ctypes/callproc.c
python/branches/tlee-ast-optimize/Modules/_ctypes/cfield.c
python/branches/tlee-ast-optimize/Modules/_curses_panel.c
python/branches/tlee-ast-optimize/Modules/_cursesmodule.c
python/branches/tlee-ast-optimize/Modules/_elementtree.c
python/branches/tlee-ast-optimize/Modules/_fileio.c
python/branches/tlee-ast-optimize/Modules/_hashopenssl.c
python/branches/tlee-ast-optimize/Modules/_heapqmodule.c
python/branches/tlee-ast-optimize/Modules/_hotshot.c
python/branches/tlee-ast-optimize/Modules/_json.c
python/branches/tlee-ast-optimize/Modules/_localemodule.c
python/branches/tlee-ast-optimize/Modules/_lsprof.c
python/branches/tlee-ast-optimize/Modules/_sqlite/cache.c
python/branches/tlee-ast-optimize/Modules/_sqlite/connection.c
python/branches/tlee-ast-optimize/Modules/_sqlite/connection.h
python/branches/tlee-ast-optimize/Modules/_sqlite/cursor.c
python/branches/tlee-ast-optimize/Modules/_sqlite/cursor.h
python/branches/tlee-ast-optimize/Modules/_sqlite/module.c
python/branches/tlee-ast-optimize/Modules/_sqlite/row.c
python/branches/tlee-ast-optimize/Modules/_sqlite/statement.c
python/branches/tlee-ast-optimize/Modules/_sre.c
python/branches/tlee-ast-optimize/Modules/_ssl.c
python/branches/tlee-ast-optimize/Modules/_struct.c
python/branches/tlee-ast-optimize/Modules/_testcapimodule.c
python/branches/tlee-ast-optimize/Modules/_tkinter.c
python/branches/tlee-ast-optimize/Modules/almodule.c
python/branches/tlee-ast-optimize/Modules/arraymodule.c
python/branches/tlee-ast-optimize/Modules/audioop.c
python/branches/tlee-ast-optimize/Modules/binascii.c
python/branches/tlee-ast-optimize/Modules/bsddbmodule.c
python/branches/tlee-ast-optimize/Modules/bz2module.c
python/branches/tlee-ast-optimize/Modules/cPickle.c
python/branches/tlee-ast-optimize/Modules/cStringIO.c
python/branches/tlee-ast-optimize/Modules/cdmodule.c
python/branches/tlee-ast-optimize/Modules/cgensupport.c
python/branches/tlee-ast-optimize/Modules/cjkcodecs/cjkcodecs.h
python/branches/tlee-ast-optimize/Modules/cjkcodecs/multibytecodec.c
python/branches/tlee-ast-optimize/Modules/clmodule.c
python/branches/tlee-ast-optimize/Modules/datetimemodule.c
python/branches/tlee-ast-optimize/Modules/dbmmodule.c
python/branches/tlee-ast-optimize/Modules/dlmodule.c
python/branches/tlee-ast-optimize/Modules/errnomodule.c
python/branches/tlee-ast-optimize/Modules/fcntlmodule.c
python/branches/tlee-ast-optimize/Modules/flmodule.c
python/branches/tlee-ast-optimize/Modules/fmmodule.c
python/branches/tlee-ast-optimize/Modules/gcmodule.c
python/branches/tlee-ast-optimize/Modules/gdbmmodule.c
python/branches/tlee-ast-optimize/Modules/glmodule.c
python/branches/tlee-ast-optimize/Modules/grpmodule.c
python/branches/tlee-ast-optimize/Modules/imageop.c
python/branches/tlee-ast-optimize/Modules/imgfile.c
python/branches/tlee-ast-optimize/Modules/itertoolsmodule.c
python/branches/tlee-ast-optimize/Modules/linuxaudiodev.c
python/branches/tlee-ast-optimize/Modules/main.c
python/branches/tlee-ast-optimize/Modules/mathmodule.c
python/branches/tlee-ast-optimize/Modules/md5module.c
python/branches/tlee-ast-optimize/Modules/mmapmodule.c
python/branches/tlee-ast-optimize/Modules/nismodule.c
python/branches/tlee-ast-optimize/Modules/operator.c
python/branches/tlee-ast-optimize/Modules/ossaudiodev.c
python/branches/tlee-ast-optimize/Modules/parsermodule.c
python/branches/tlee-ast-optimize/Modules/posixmodule.c
python/branches/tlee-ast-optimize/Modules/pwdmodule.c
python/branches/tlee-ast-optimize/Modules/pyexpat.c
python/branches/tlee-ast-optimize/Modules/readline.c
python/branches/tlee-ast-optimize/Modules/selectmodule.c
python/branches/tlee-ast-optimize/Modules/sha256module.c
python/branches/tlee-ast-optimize/Modules/sha512module.c
python/branches/tlee-ast-optimize/Modules/shamodule.c
python/branches/tlee-ast-optimize/Modules/socketmodule.c
python/branches/tlee-ast-optimize/Modules/spwdmodule.c
python/branches/tlee-ast-optimize/Modules/stropmodule.c
python/branches/tlee-ast-optimize/Modules/sunaudiodev.c
python/branches/tlee-ast-optimize/Modules/svmodule.c
python/branches/tlee-ast-optimize/Modules/syslogmodule.c
python/branches/tlee-ast-optimize/Modules/termios.c
python/branches/tlee-ast-optimize/Modules/threadmodule.c
python/branches/tlee-ast-optimize/Modules/timemodule.c
python/branches/tlee-ast-optimize/Modules/unicodedata.c
python/branches/tlee-ast-optimize/Modules/zipimport.c
python/branches/tlee-ast-optimize/Modules/zlibmodule.c
python/branches/tlee-ast-optimize/Objects/abstract.c
python/branches/tlee-ast-optimize/Objects/boolobject.c
python/branches/tlee-ast-optimize/Objects/bufferobject.c
python/branches/tlee-ast-optimize/Objects/bytes_methods.c
python/branches/tlee-ast-optimize/Objects/cellobject.c
python/branches/tlee-ast-optimize/Objects/classobject.c
python/branches/tlee-ast-optimize/Objects/codeobject.c
python/branches/tlee-ast-optimize/Objects/complexobject.c
python/branches/tlee-ast-optimize/Objects/descrobject.c
python/branches/tlee-ast-optimize/Objects/dictobject.c
python/branches/tlee-ast-optimize/Objects/exceptions.c
python/branches/tlee-ast-optimize/Objects/fileobject.c
python/branches/tlee-ast-optimize/Objects/floatobject.c
python/branches/tlee-ast-optimize/Objects/frameobject.c
python/branches/tlee-ast-optimize/Objects/funcobject.c
python/branches/tlee-ast-optimize/Objects/genobject.c
python/branches/tlee-ast-optimize/Objects/intobject.c
python/branches/tlee-ast-optimize/Objects/listobject.c
python/branches/tlee-ast-optimize/Objects/longobject.c
python/branches/tlee-ast-optimize/Objects/methodobject.c
python/branches/tlee-ast-optimize/Objects/moduleobject.c
python/branches/tlee-ast-optimize/Objects/object.c
python/branches/tlee-ast-optimize/Objects/rangeobject.c
python/branches/tlee-ast-optimize/Objects/setobject.c
python/branches/tlee-ast-optimize/Objects/sliceobject.c
python/branches/tlee-ast-optimize/Objects/stringlib/formatter.h
python/branches/tlee-ast-optimize/Objects/stringlib/string_format.h
python/branches/tlee-ast-optimize/Objects/stringlib/stringdefs.h
python/branches/tlee-ast-optimize/Objects/structseq.c
python/branches/tlee-ast-optimize/Objects/tupleobject.c
python/branches/tlee-ast-optimize/Objects/typeobject.c
python/branches/tlee-ast-optimize/Objects/unicodeobject.c
python/branches/tlee-ast-optimize/Objects/weakrefobject.c
python/branches/tlee-ast-optimize/PC/VC6/pythoncore.dsp
python/branches/tlee-ast-optimize/PC/VS7.1/pythoncore.vcproj
python/branches/tlee-ast-optimize/PC/VS8.0/_bsddb.vcproj
python/branches/tlee-ast-optimize/PC/VS8.0/_elementtree.vcproj
python/branches/tlee-ast-optimize/PC/VS8.0/_sqlite3.vcproj
python/branches/tlee-ast-optimize/PC/VS8.0/_ssl.vcproj
python/branches/tlee-ast-optimize/PC/VS8.0/_tkinter.vcproj
python/branches/tlee-ast-optimize/PC/VS8.0/bdist_wininst.vcproj
python/branches/tlee-ast-optimize/PC/VS8.0/debug.vsprops
python/branches/tlee-ast-optimize/PC/VS8.0/make_versioninfo.vcproj
python/branches/tlee-ast-optimize/PC/VS8.0/pcbuild.sln
python/branches/tlee-ast-optimize/PC/VS8.0/pyd.vsprops
python/branches/tlee-ast-optimize/PC/VS8.0/pyd_d.vsprops
python/branches/tlee-ast-optimize/PC/VS8.0/pyproject.vsprops
python/branches/tlee-ast-optimize/PC/VS8.0/python.vcproj
python/branches/tlee-ast-optimize/PC/VS8.0/pythoncore.vcproj
python/branches/tlee-ast-optimize/PC/VS8.0/release.vsprops
python/branches/tlee-ast-optimize/PC/VS8.0/x64.vsprops
python/branches/tlee-ast-optimize/PC/_msi.c
python/branches/tlee-ast-optimize/PC/_subprocess.c
python/branches/tlee-ast-optimize/PC/_winreg.c
python/branches/tlee-ast-optimize/PC/bdist_wininst/install.c
python/branches/tlee-ast-optimize/PC/msvcrtmodule.c
python/branches/tlee-ast-optimize/PC/winsound.c
python/branches/tlee-ast-optimize/PCbuild/pythoncore.vcproj
python/branches/tlee-ast-optimize/Parser/asdl_c.py
python/branches/tlee-ast-optimize/Parser/tokenizer.c
python/branches/tlee-ast-optimize/Python/Python-ast.c
python/branches/tlee-ast-optimize/Python/_warnings.c
python/branches/tlee-ast-optimize/Python/ast.c
python/branches/tlee-ast-optimize/Python/bltinmodule.c
python/branches/tlee-ast-optimize/Python/ceval.c
python/branches/tlee-ast-optimize/Python/codecs.c
python/branches/tlee-ast-optimize/Python/compile.c
python/branches/tlee-ast-optimize/Python/errors.c
python/branches/tlee-ast-optimize/Python/formatter_string.c
python/branches/tlee-ast-optimize/Python/formatter_unicode.c
python/branches/tlee-ast-optimize/Python/future.c
python/branches/tlee-ast-optimize/Python/getargs.c
python/branches/tlee-ast-optimize/Python/import.c
python/branches/tlee-ast-optimize/Python/mactoolboxglue.c
python/branches/tlee-ast-optimize/Python/marshal.c
python/branches/tlee-ast-optimize/Python/modsupport.c
python/branches/tlee-ast-optimize/Python/mysnprintf.c
python/branches/tlee-ast-optimize/Python/peephole.c
python/branches/tlee-ast-optimize/Python/pystrtod.c
python/branches/tlee-ast-optimize/Python/pythonrun.c
python/branches/tlee-ast-optimize/Python/structmember.c
python/branches/tlee-ast-optimize/Python/symtable.c
python/branches/tlee-ast-optimize/Python/sysmodule.c
python/branches/tlee-ast-optimize/Python/traceback.c
python/branches/tlee-ast-optimize/RISCOS/Modules/drawfmodule.c
python/branches/tlee-ast-optimize/RISCOS/Modules/riscosmodule.c
python/branches/tlee-ast-optimize/RISCOS/Modules/swimodule.c
python/branches/tlee-ast-optimize/configure.in
python/branches/tlee-ast-optimize/setup.py
Modified: python/branches/tlee-ast-optimize/Doc/c-api/concrete.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/c-api/concrete.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/c-api/concrete.rst Sun Jun 1 17:18:10 2008
@@ -64,6 +64,7 @@
.. toctree::
+ bytearray.rst
string.rst
unicode.rst
buffer.rst
Modified: python/branches/tlee-ast-optimize/Doc/c-api/file.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/c-api/file.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/c-api/file.rst Sun Jun 1 17:18:10 2008
@@ -130,6 +130,14 @@
.. versionadded:: 2.3
+.. cfunction:: int PyFile_SetEncodingAndErrors(PyFileObject *p, const char *enc, *errors)
+
+ Set the file's encoding for Unicode output to *enc*, and its error
+ mode to *err*. Return 1 on success and 0 on failure.
+
+ .. versionadded:: 2.6
+
+
.. cfunction:: int PyFile_SoftSpace(PyObject *p, int newflag)
.. index:: single: softspace (file attribute)
Modified: python/branches/tlee-ast-optimize/Doc/c-api/string.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/c-api/string.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/c-api/string.rst Sun Jun 1 17:18:10 2008
@@ -2,12 +2,16 @@
.. _stringobjects:
-String Objects
---------------
+String/Bytes Objects
+--------------------
These functions raise :exc:`TypeError` when expecting a string parameter and are
called with a non-string parameter.
+.. note::
+ These functions have been renamed to PyBytes_* in Python 3.x. The PyBytes
+ names are also available in 2.6.
+
.. index:: object: string
@@ -120,7 +124,7 @@
.. cfunction:: PyObject* PyString_FromFormatV(const char *format, va_list vargs)
- Identical to :func:`PyString_FromFormat` except that it takes exactly two
+ Identical to :cfunc:`PyString_FromFormat` except that it takes exactly two
arguments.
Modified: python/branches/tlee-ast-optimize/Doc/c-api/type.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/c-api/type.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/c-api/type.rst Sun Jun 1 17:18:10 2008
@@ -37,7 +37,16 @@
.. cfunction:: unsigned int PyType_ClearCache(void)
- Clears the internal lookup cache. Return the current version tag.
+ Clear the internal lookup cache. Return the current version tag.
+
+ .. versionadded:: 2.6
+
+
+.. cfunction:: void PyType_Modified(PyTypeObject *type)
+
+ Invalidate the internal lookup cache for the type and all of its
+ subtypes. This function must be called after any manual
+ modification of the attributes or base classes of the type.
.. versionadded:: 2.6
Modified: python/branches/tlee-ast-optimize/Doc/includes/noddy2.c
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/includes/noddy2.c (original)
+++ python/branches/tlee-ast-optimize/Doc/includes/noddy2.c Sun Jun 1 17:18:10 2008
@@ -23,14 +23,14 @@
self = (Noddy *)type->tp_alloc(type, 0);
if (self != NULL) {
- self->first = PyString_FromString("");
+ self->first = PyBytes_FromString("");
if (self->first == NULL)
{
Py_DECREF(self);
return NULL;
}
- self->last = PyString_FromString("");
+ self->last = PyBytes_FromString("");
if (self->last == NULL)
{
Py_DECREF(self);
@@ -90,7 +90,7 @@
PyObject *args, *result;
if (format == NULL) {
- format = PyString_FromString("%s %s");
+ format = PyBytes_FromString("%s %s");
if (format == NULL)
return NULL;
}
@@ -109,7 +109,7 @@
if (args == NULL)
return NULL;
- result = PyString_Format(format, args);
+ result = PyBytes_Format(format, args);
Py_DECREF(args);
return result;
Modified: python/branches/tlee-ast-optimize/Doc/includes/noddy3.c
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/includes/noddy3.c (original)
+++ python/branches/tlee-ast-optimize/Doc/includes/noddy3.c Sun Jun 1 17:18:10 2008
@@ -23,14 +23,14 @@
self = (Noddy *)type->tp_alloc(type, 0);
if (self != NULL) {
- self->first = PyString_FromString("");
+ self->first = PyBytes_FromString("");
if (self->first == NULL)
{
Py_DECREF(self);
return NULL;
}
- self->last = PyString_FromString("");
+ self->last = PyBytes_FromString("");
if (self->last == NULL)
{
Py_DECREF(self);
@@ -93,7 +93,7 @@
return -1;
}
- if (! PyString_Check(value)) {
+ if (! PyBytes_Check(value)) {
PyErr_SetString(PyExc_TypeError,
"The first attribute value must be a string");
return -1;
@@ -121,7 +121,7 @@
return -1;
}
- if (! PyString_Check(value)) {
+ if (! PyBytes_Check(value)) {
PyErr_SetString(PyExc_TypeError,
"The last attribute value must be a string");
return -1;
@@ -153,7 +153,7 @@
PyObject *args, *result;
if (format == NULL) {
- format = PyString_FromString("%s %s");
+ format = PyBytes_FromString("%s %s");
if (format == NULL)
return NULL;
}
@@ -162,7 +162,7 @@
if (args == NULL)
return NULL;
- result = PyString_Format(format, args);
+ result = PyBytes_Format(format, args);
Py_DECREF(args);
return result;
Modified: python/branches/tlee-ast-optimize/Doc/includes/noddy4.c
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/includes/noddy4.c (original)
+++ python/branches/tlee-ast-optimize/Doc/includes/noddy4.c Sun Jun 1 17:18:10 2008
@@ -57,14 +57,14 @@
self = (Noddy *)type->tp_alloc(type, 0);
if (self != NULL) {
- self->first = PyString_FromString("");
+ self->first = PyBytes_FromString("");
if (self->first == NULL)
{
Py_DECREF(self);
return NULL;
}
- self->last = PyString_FromString("");
+ self->last = PyBytes_FromString("");
if (self->last == NULL)
{
Py_DECREF(self);
@@ -124,7 +124,7 @@
PyObject *args, *result;
if (format == NULL) {
- format = PyString_FromString("%s %s");
+ format = PyBytes_FromString("%s %s");
if (format == NULL)
return NULL;
}
@@ -143,7 +143,7 @@
if (args == NULL)
return NULL;
- result = PyString_Format(format, args);
+ result = PyBytes_Format(format, args);
Py_DECREF(args);
return result;
Modified: python/branches/tlee-ast-optimize/Doc/includes/run-func.c
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/includes/run-func.c (original)
+++ python/branches/tlee-ast-optimize/Doc/includes/run-func.c Sun Jun 1 17:18:10 2008
@@ -13,7 +13,7 @@
}
Py_Initialize();
- pName = PyString_FromString(argv[1]);
+ pName = PyBytes_FromString(argv[1]);
/* Error checking of pName left out */
pModule = PyImport_Import(pName);
Modified: python/branches/tlee-ast-optimize/Doc/library/basehttpserver.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/library/basehttpserver.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/library/basehttpserver.rst Sun Jun 1 17:18:10 2008
@@ -1,10 +1,14 @@
-
:mod:`BaseHTTPServer` --- Basic HTTP server
===========================================
.. module:: BaseHTTPServer
:synopsis: Basic HTTP server (base class for SimpleHTTPServer and CGIHTTPServer).
+.. note::
+ The :mod:`BaseHTTPServer` module has been merged into :mod:`http.server` in
+ Python 3.0. The :term:`2to3` tool will automatically adapt imports when
+ converting your sources to 3.0.
+
.. index::
pair: WWW; server
Modified: python/branches/tlee-ast-optimize/Doc/library/cgihttpserver.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/library/cgihttpserver.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/library/cgihttpserver.rst Sun Jun 1 17:18:10 2008
@@ -1,4 +1,3 @@
-
:mod:`CGIHTTPServer` --- CGI-capable HTTP request handler
=========================================================
@@ -7,6 +6,11 @@
scripts.
.. sectionauthor:: Moshe Zadka <moshez at zadka.site.co.il>
+.. note::
+ The :mod:`CGIHTTPServer` module has been merged into :mod:`http.server` in
+ Python 3.0. The :term:`2to3` tool will automatically adapt imports when
+ converting your sources to 3.0.
+
The :mod:`CGIHTTPServer` module defines a request-handler class, interface
compatible with :class:`BaseHTTPServer.BaseHTTPRequestHandler` and inherits
Modified: python/branches/tlee-ast-optimize/Doc/library/cmd.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/library/cmd.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/library/cmd.rst Sun Jun 1 17:18:10 2008
@@ -26,7 +26,12 @@
The optional arguments *stdin* and *stdout* specify the input and output file
objects that the Cmd instance or subclass instance will use for input and
- output. If not specified, they will default to *sys.stdin* and *sys.stdout*.
+ output. If not specified, they will default to :data:`sys.stdin` and
+ :data:`sys.stdout`.
+
+ If you want a given *stdin* to be used, make sure to set the instance's
+ :attr:`use_rawinput` attribute to ``False``, otherwise *stdin* will be
+ ignored.
.. versionchanged:: 2.3
The *stdin* and *stdout* parameters were added.
Modified: python/branches/tlee-ast-optimize/Doc/library/codecs.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/library/codecs.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/library/codecs.rst Sun Jun 1 17:18:10 2008
@@ -295,7 +295,8 @@
------------------
The :mod:`codecs` module defines a set of base classes which define the
-interface and can also be used to easily write you own codecs for use in Python.
+interface and can also be used to easily write your own codecs for use in
+Python.
Each codec has to define four interfaces to make it usable as codec in Python:
stateless encoder, stateless decoder, stream reader and stream writer. The
Modified: python/branches/tlee-ast-optimize/Doc/library/commands.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/library/commands.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/library/commands.rst Sun Jun 1 17:18:10 2008
@@ -16,6 +16,12 @@
processes and retrieving their results. Using the :mod:`subprocess` module is
preferable to using the :mod:`commands` module.
+.. warning::
+
+ In 3.x, :func:`getstatus` and two undocumented functions (:func:`mk2arg` and
+ :func:`mkarg`) have been removed. Also, :func:`getstatusoutput` and
+ :func:`getoutput` have been moved to the :mod:`subprocess` module.
+
The :mod:`commands` module defines the following functions:
@@ -44,6 +50,7 @@
This function is nonobvious and useless, also the name is misleading in the
presence of :func:`getstatusoutput`.
+
Example::
>>> import commands
Modified: python/branches/tlee-ast-optimize/Doc/library/cookie.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/library/cookie.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/library/cookie.rst Sun Jun 1 17:18:10 2008
@@ -1,4 +1,3 @@
-
:mod:`Cookie` --- HTTP state management
=======================================
@@ -7,6 +6,11 @@
.. moduleauthor:: Timothy O'Malley <timo at alum.mit.edu>
.. sectionauthor:: Moshe Zadka <moshez at zadka.site.co.il>
+.. note::
+ The :mod:`Cookie` module has been renamed to :mod:`http.cookies` in Python
+ 3.0. The :term:`2to3` tool will automatically adapt imports when converting
+ your sources to 3.0.
+
The :mod:`Cookie` module defines classes for abstracting the concept of
cookies, an HTTP state management mechanism. It supports both simple string-only
@@ -18,6 +22,12 @@
MSIE 3.0x doesn't follow the character rules outlined in those specs. As a
result, the parsing rules used are a bit less strict.
+.. note::
+
+ On encountering an invalid cookie, :exc:`CookieError` is raised, so if your
+ cookie data comes from a browser you should always prepare for invalid data
+ and catch :exc:`CookieError` on parsing.
+
.. exception:: CookieError
Modified: python/branches/tlee-ast-optimize/Doc/library/cookielib.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/library/cookielib.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/library/cookielib.rst Sun Jun 1 17:18:10 2008
@@ -1,4 +1,3 @@
-
:mod:`cookielib` --- Cookie handling for HTTP clients
=====================================================
@@ -7,6 +6,11 @@
.. moduleauthor:: John J. Lee <jjl at pobox.com>
.. sectionauthor:: John J. Lee <jjl at pobox.com>
+.. note::
+ The :mod:`cookielib` module has been renamed to :mod:`http.cookiejar` in
+ Python 3.0. The :term:`2to3` tool will automatically adapt imports when
+ converting your sources to 3.0.
+
.. versionadded:: 2.4
Modified: python/branches/tlee-ast-optimize/Doc/library/easydialogs.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/library/easydialogs.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/library/easydialogs.rst Sun Jun 1 17:18:10 2008
@@ -9,10 +9,12 @@
The :mod:`EasyDialogs` module contains some simple dialogs for the Macintosh.
-All routines take an optional resource ID parameter *id* with which one can
-override the :const:`DLOG` resource used for the dialog, provided that the
-dialog items correspond (both type and item number) to those in the default
-:const:`DLOG` resource. See source code for details.
+The dialogs get launched in a separate application which appears in the dock and
+must be clicked on for the dialogs be displayed. All routines take an optional
+resource ID parameter *id* with which one can override the :const:`DLOG`
+resource used for the dialog, provided that the dialog items correspond (both
+type and item number) to those in the default :const:`DLOG` resource. See source
+code for details.
.. warning::
Modified: python/branches/tlee-ast-optimize/Doc/library/ftplib.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/library/ftplib.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/library/ftplib.rst Sun Jun 1 17:18:10 2008
@@ -44,8 +44,8 @@
the method call ``login(user, passwd, acct)`` is made (where *passwd* and
*acct* default to the empty string when not given). The optional *timeout*
parameter specifies a timeout in seconds for blocking operations like the
- connection attempt (if is not specified, or passed as None, the global
- default timeout setting will be used).
+ connection attempt (if is not specified, the global default timeout setting
+ will be used).
.. versionchanged:: 2.6
*timeout* was added.
@@ -126,10 +126,8 @@
made.
The optional *timeout* parameter specifies a timeout in seconds for the
- connection attempt. If is not specified, or passed as None, the object
- timeout is used (the timeout that you passed when instantiating the class);
- if the object timeout is also None, the global default timeout setting will
- be used.
+ connection attempt. If no *timeout* is passed, the global default timeout
+ setting will be used.
.. versionchanged:: 2.6
*timeout* was added.
Modified: python/branches/tlee-ast-optimize/Doc/library/httplib.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/library/httplib.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/library/httplib.rst Sun Jun 1 17:18:10 2008
@@ -1,10 +1,14 @@
-
:mod:`httplib` --- HTTP protocol client
=======================================
.. module:: httplib
:synopsis: HTTP and HTTPS protocol client (requires sockets).
+.. note::
+ The :mod:`httplib` module has been renamed to :mod:`http.client` in Python
+ 3.0. The :term:`2to3` tool will automatically adapt imports when converting
+ your sources to 3.0.
+
.. index::
pair: HTTP; protocol
@@ -40,7 +44,7 @@
be raised if the status line can't be parsed as a valid HTTP/1.0 or 1.1
status line. If the optional *timeout* parameter is given, blocking
operations (like connection attempts) will timeout after that many seconds
- (if it is not given or ``None``, the global default timeout setting is used).
+ (if it is not given, the global default timeout setting is used).
For example, the following calls all create instances that connect to the server
at the same host and port::
Modified: python/branches/tlee-ast-optimize/Doc/library/os.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/library/os.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/library/os.rst Sun Jun 1 17:18:10 2008
@@ -2031,7 +2031,7 @@
Return the number of processes in the system run queue averaged over the last
1, 5, and 15 minutes or raises :exc:`OSError` if the load average was
- unobtainable.
+ unobtainable. Availability: Unix.
.. versionadded:: 2.3
Modified: python/branches/tlee-ast-optimize/Doc/library/poplib.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/library/poplib.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/library/poplib.rst Sun Jun 1 17:18:10 2008
@@ -29,8 +29,8 @@
This class implements the actual POP3 protocol. The connection is created when
the instance is initialized. If *port* is omitted, the standard POP3 port (110)
is used. The optional *timeout* parameter specifies a timeout in seconds for the
- connection attempt (if not specified, or passed as None, the global default
- timeout setting will be used).
+ connection attempt (if not specified, the global default timeout setting will
+ be used).
.. versionchanged:: 2.6
*timeout* was added.
Modified: python/branches/tlee-ast-optimize/Doc/library/re.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/library/re.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/library/re.rst Sun Jun 1 17:18:10 2008
@@ -181,6 +181,12 @@
``[^5]`` will match any character except ``'5'``, and ``[^^]`` will match any
character except ``'^'``.
+ Note that inside ``[]`` the special forms and special characters lose
+ their meanings and only the syntaxes described here are valid. For
+ example, ``+``, ``*``, ``(``, ``)``, and so on are treated as
+ literals inside ``[]``, and backreferences cannot be used inside
+ ``[]``.
+
``'|'``
``A|B``, where A and B can be arbitrary REs, creates a regular expression that
will match either A or B. An arbitrary number of REs can be separated by the
Modified: python/branches/tlee-ast-optimize/Doc/library/simplehttpserver.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/library/simplehttpserver.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/library/simplehttpserver.rst Sun Jun 1 17:18:10 2008
@@ -6,6 +6,11 @@
:synopsis: This module provides a basic request handler for HTTP servers.
.. sectionauthor:: Moshe Zadka <moshez at zadka.site.co.il>
+.. note::
+ The :mod:`SimpleHTTPServer` module has been merged into :mod:`http.server` in
+ Python 3.0. The :term:`2to3` tool will automatically adapt imports when
+ converting your sources to 3.0.
+
The :mod:`SimpleHTTPServer` module defines a single class,
:class:`SimpleHTTPRequestHandler`, which is interface-compatible with
Modified: python/branches/tlee-ast-optimize/Doc/library/smtplib.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/library/smtplib.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/library/smtplib.rst Sun Jun 1 17:18:10 2008
@@ -25,8 +25,8 @@
with those parameters during initialization. An :exc:`SMTPConnectError` is
raised if the specified host doesn't respond correctly. The optional
*timeout* parameter specifies a timeout in seconds for blocking operations
- like the connection attempt (if not specified, or passed as None, the global
- default timeout setting will be used).
+ like the connection attempt (if not specified, the global default timeout
+ setting will be used).
For normal use, you should only require the initialization/connect,
:meth:`sendmail`, and :meth:`quit` methods. An example is included below.
@@ -45,8 +45,8 @@
and *certfile* are also optional, and can contain a PEM formatted private key
and certificate chain file for the SSL connection. The optional *timeout*
parameter specifies a timeout in seconds for blocking operations like the
- connection attempt (if not specified, or passed as None, the global default
- timeout setting will be used).
+ connection attempt (if not specified, the global default timeout setting
+ will be used).
.. versionchanged:: 2.6
*timeout* was added.
Modified: python/branches/tlee-ast-optimize/Doc/library/socket.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/library/socket.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/library/socket.rst Sun Jun 1 17:18:10 2008
@@ -207,12 +207,11 @@
.. function:: create_connection(address[, timeout])
- Connects to the *address* received (as usual, a ``(host, port)`` pair), with an
- optional timeout for the connection. Especially useful for higher-level
- protocols, it is not normally used directly from application-level code.
- Passing the optional *timeout* parameter will set the timeout on the socket
- instance (if it is not given or ``None``, the global default timeout setting is
- used).
+ Convenience function. Connect to *address* (a 2-tuple ``(host, port)``),
+ and return the socket object. Passing the optional *timeout* parameter will
+ set the timeout on the socket instance before attempting to connect. If no
+ *timeout* is supplied, the global default timeout setting returned by
+ :func:`getdefaulttimeout` is used.
.. versionadded:: 2.6
Modified: python/branches/tlee-ast-optimize/Doc/library/stdtypes.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/library/stdtypes.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/library/stdtypes.rst Sun Jun 1 17:18:10 2008
@@ -2165,6 +2165,13 @@
.. versionadded:: 2.3
+.. attribute:: file.errors
+
+ The Unicode error handler used to along with the encoding.
+
+ .. versionadded:: 2.6
+
+
.. attribute:: file.mode
The I/O mode for the file. If the file was created using the :func:`open`
Modified: python/branches/tlee-ast-optimize/Doc/library/telnetlib.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/library/telnetlib.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/library/telnetlib.rst Sun Jun 1 17:18:10 2008
@@ -28,6 +28,11 @@
:class:`Telnet` represents a connection to a Telnet server. The instance is
initially not connected by default; the :meth:`open` method must be used to
establish a connection. Alternatively, the host name and optional port
+ and timeout can be passed to the constructor, in which case the connection to
+ the server will be established before the constructor returns. The optional
+ *timeout* parameter specifies a timeout in seconds for the connection attempt (if
+ not specified, the global default timeout setting will be used).
+
number can be passed to the constructor, to, in which case the connection to
the server will be established before the constructor returns. The optional
*timeout* parameter specifies a timeout in seconds for blocking operations
@@ -128,8 +133,7 @@
Connect to a host. The optional second argument is the port number, which
defaults to the standard Telnet port (23). The optional *timeout* parameter
specifies a timeout in seconds for blocking operations like the connection
- attempt (if not specified, or passed as None, the global default timeout
- setting will be used).
+ attempt (if not specified, the global default timeout setting will be used).
Do not try to reopen an already connected instance.
Modified: python/branches/tlee-ast-optimize/Doc/library/urllib2.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/library/urllib2.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/library/urllib2.rst Sun Jun 1 17:18:10 2008
@@ -27,9 +27,9 @@
returns a string in this format.
The optional *timeout* parameter specifies a timeout in seconds for blocking
- operations like the connection attempt (if not specified, or passed as
- ``None``, the global default timeout setting will be used). This actually
- only works for HTTP, HTTPS, FTP and FTPS connections.
+ operations like the connection attempt (if not specified, the global default
+ timeout setting will be used). This actually only works for HTTP, HTTPS,
+ FTP and FTPS connections.
This function returns a file-like object with two additional methods:
@@ -411,9 +411,9 @@
the same as those of :func:`urlopen` (which simply calls the :meth:`open`
method on the currently installed global :class:`OpenerDirector`). The
optional *timeout* parameter specifies a timeout in seconds for blocking
- operations like the connection attempt (if not specified, or passed as
- ``None``, the global default timeout setting will be used; this actually only
- works for HTTP, HTTPS, FTP and FTPS connections).
+ operations like the connection attempt (if not specified, the global default
+ timeout setting will be usedi). The timeout feature actually works only for
+ HTTP, HTTPS, FTP and FTPS connections).
.. versionchanged:: 2.6
*timeout* was added.
Modified: python/branches/tlee-ast-optimize/Doc/library/userdict.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/library/userdict.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/library/userdict.rst Sun Jun 1 17:18:10 2008
@@ -100,6 +100,12 @@
defaulting to the empty list ``[]``. *list* can be any iterable, e.g. a
real Python list or a :class:`UserList` object.
+ .. note::
+ The :class:`UserList` class has been moved to the :mod:`collections`
+ module in Python 3.0. The :term:`2to3` tool will automatically adapt
+ imports when converting your sources to 3.0.
+
+
In addition to supporting the methods and operations of mutable sequences (see
section :ref:`typesseq`), :class:`UserList` instances provide the following
attribute:
@@ -167,6 +173,12 @@
:class:`UserString` (or a subclass) or an arbitrary sequence which can be
converted into a string using the built-in :func:`str` function.
+ .. note::
+ The :class:`UserString` class has been moved to the :mod:`collections`
+ module in Python 3.0. The :term:`2to3` tool will automatically adapt
+ imports when converting your sources to 3.0.
+
+
.. class:: MutableString([sequence])
@@ -178,6 +190,9 @@
mutable object as dictionary key, which would be otherwise very error prone and
hard to track down.
+ .. deprecated:: 2.6
+ The :class:`MutableString` class has been removed in Python 3.0.
+
In addition to supporting the methods and operations of string and Unicode
objects (see section :ref:`string-methods`), :class:`UserString` instances
provide the following attribute:
Modified: python/branches/tlee-ast-optimize/Doc/tutorial/controlflow.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/tutorial/controlflow.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/tutorial/controlflow.rst Sun Jun 1 17:18:10 2008
@@ -445,8 +445,8 @@
up in a tuple. Before the variable number of arguments, zero or more normal
arguments may occur. ::
- def fprintf(file, template, *args):
- file.write(template.format(args))
+ def write_multiple_items(file, separator, *args):
+ file.write(separator.join(args))
.. _tut-unpacking-arguments:
Modified: python/branches/tlee-ast-optimize/Doc/tutorial/interpreter.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/tutorial/interpreter.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/tutorial/interpreter.rst Sun Jun 1 17:18:10 2008
@@ -51,8 +51,8 @@
A second way of starting the interpreter is ``python -c command [arg] ...``,
which executes the statement(s) in *command*, analogous to the shell's
:option:`-c` option. Since Python statements often contain spaces or other
-characters that are special to the shell, it is best to quote *command* in its
-entirety with double quotes.
+characters that are special to the shell, it is usually advised to quote
+*command* in its entirety with single quotes.
Some Python modules are also useful as scripts. These can be invoked using
``python -m module [arg] ...``, which executes the source file for *module* as
Modified: python/branches/tlee-ast-optimize/Doc/using/cmdline.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/using/cmdline.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/using/cmdline.rst Sun Jun 1 17:18:10 2008
@@ -481,6 +481,13 @@
.. versionadded:: 2.6
+.. envvar:: PYTHONIOENCODING
+
+ Overrides the encoding used for stdin/stdout/stderr, in the syntax
+ encodingname:errorhandler, with the :errors part being optional.
+
+ .. versionadded:: 2.6
+
.. envvar:: PYTHONNOUSERSITE
Modified: python/branches/tlee-ast-optimize/Doc/whatsnew/2.6.rst
==============================================================================
--- python/branches/tlee-ast-optimize/Doc/whatsnew/2.6.rst (original)
+++ python/branches/tlee-ast-optimize/Doc/whatsnew/2.6.rst Sun Jun 1 17:18:10 2008
@@ -526,9 +526,9 @@
PEP 3101: Advanced String Formatting
=====================================================
-In Python 3.0, the `%` operator is supplemented by a more powerful
-string formatting method, :meth:`format`. Support for the
-:meth:`format` method has been backported to Python 2.6.
+In Python 3.0, the `%` operator is supplemented by a more powerful string
+formatting method, :meth:`format`. Support for the :meth:`str.format` method
+has been backported to Python 2.6.
In 2.6, both 8-bit and Unicode strings have a `.format()` method that
treats the string as a template and takes the arguments to be formatted.
@@ -649,8 +649,11 @@
.. seealso::
+ :ref:`formatstrings`
+ The reference format fields.
+
:pep:`3101` - Advanced String Formatting
- PEP written by Talin.
+ PEP written by Talin. Implemented by Eric Smith.
.. ======================================================================
Modified: python/branches/tlee-ast-optimize/Include/Python.h
==============================================================================
--- python/branches/tlee-ast-optimize/Include/Python.h (original)
+++ python/branches/tlee-ast-optimize/Include/Python.h Sun Jun 1 17:18:10 2008
@@ -94,6 +94,7 @@
/* #include "memoryobject.h" */
#include "bufferobject.h"
#include "bytesobject.h"
+#include "bytearrayobject.h"
#include "tupleobject.h"
#include "listobject.h"
#include "dictobject.h"
Modified: python/branches/tlee-ast-optimize/Include/fileobject.h
==============================================================================
--- python/branches/tlee-ast-optimize/Include/fileobject.h (original)
+++ python/branches/tlee-ast-optimize/Include/fileobject.h Sun Jun 1 17:18:10 2008
@@ -24,6 +24,7 @@
int f_newlinetypes; /* Types of newlines seen */
int f_skipnextlf; /* Skip next \n */
PyObject *f_encoding;
+ PyObject *f_errors;
PyObject *weakreflist; /* List of weak references */
int unlocked_count; /* Num. currently running sections of code
using f_fp with the GIL released. */
@@ -37,6 +38,7 @@
PyAPI_FUNC(PyObject *) PyFile_FromString(char *, char *);
PyAPI_FUNC(void) PyFile_SetBufSize(PyObject *, int);
PyAPI_FUNC(int) PyFile_SetEncoding(PyObject *, const char *);
+PyAPI_FUNC(int) PyFile_SetEncodingAndErrors(PyObject *, const char *, char *errors);
PyAPI_FUNC(PyObject *) PyFile_FromFile(FILE *, char *, char *,
int (*)(FILE *));
PyAPI_FUNC(FILE *) PyFile_AsFile(PyObject *);
Modified: python/branches/tlee-ast-optimize/Include/floatobject.h
==============================================================================
--- python/branches/tlee-ast-optimize/Include/floatobject.h (original)
+++ python/branches/tlee-ast-optimize/Include/floatobject.h Sun Jun 1 17:18:10 2008
@@ -115,6 +115,12 @@
/* free list api */
PyAPI_FUNC(void) PyFloat_CompactFreeList(size_t *, size_t *, size_t *);
+/* Format the object based on the format_spec, as defined in PEP 3101
+ (Advanced String Formatting). */
+PyAPI_FUNC(PyObject *) _PyFloat_FormatAdvanced(PyObject *obj,
+ char *format_spec,
+ Py_ssize_t format_spec_len);
+
#ifdef __cplusplus
}
#endif
Deleted: python/branches/tlee-ast-optimize/Include/formatter_string.h
==============================================================================
--- python/branches/tlee-ast-optimize/Include/formatter_string.h Sun Jun 1 17:18:10 2008
+++ (empty file)
@@ -1,12 +0,0 @@
-PyObject *
-string__format__(PyObject *self, PyObject *args);
-
-PyObject *
-string_long__format__(PyObject *self, PyObject *args);
-
-PyObject *
-string_int__format__(PyObject *self, PyObject *args);
-
-PyObject *
-string_float__format__(PyObject *self, PyObject *args);
-
Deleted: python/branches/tlee-ast-optimize/Include/formatter_unicode.h
==============================================================================
--- python/branches/tlee-ast-optimize/Include/formatter_unicode.h Sun Jun 1 17:18:10 2008
+++ (empty file)
@@ -1,12 +0,0 @@
-PyObject *
-unicode__format__(PyObject *self, PyObject *args);
-
-PyObject *
-unicode_long__format__(PyObject *self, PyObject *args);
-
-PyObject *
-unicode_int__format__(PyObject *self, PyObject *args);
-
-PyObject *
-unicode_float__format__(PyObject *self, PyObject *args);
-
Modified: python/branches/tlee-ast-optimize/Include/intobject.h
==============================================================================
--- python/branches/tlee-ast-optimize/Include/intobject.h (original)
+++ python/branches/tlee-ast-optimize/Include/intobject.h Sun Jun 1 17:18:10 2008
@@ -68,6 +68,12 @@
a leading "0" */
PyAPI_FUNC(PyObject*) _PyInt_Format(PyIntObject* v, int base, int newstyle);
+/* Format the object based on the format_spec, as defined in PEP 3101
+ (Advanced String Formatting). */
+PyAPI_FUNC(PyObject *) _PyInt_FormatAdvanced(PyObject *obj,
+ char *format_spec,
+ Py_ssize_t format_spec_len);
+
#ifdef __cplusplus
}
#endif
Modified: python/branches/tlee-ast-optimize/Include/longobject.h
==============================================================================
--- python/branches/tlee-ast-optimize/Include/longobject.h (original)
+++ python/branches/tlee-ast-optimize/Include/longobject.h Sun Jun 1 17:18:10 2008
@@ -119,6 +119,12 @@
a leading "0", instead of the prefix "0o" */
PyAPI_FUNC(PyObject *) _PyLong_Format(PyObject *aa, int base, int addL, int newstyle);
+/* Format the object based on the format_spec, as defined in PEP 3101
+ (Advanced String Formatting). */
+PyAPI_FUNC(PyObject *) _PyLong_FormatAdvanced(PyObject *obj,
+ char *format_spec,
+ Py_ssize_t format_spec_len);
+
#ifdef __cplusplus
}
#endif
Modified: python/branches/tlee-ast-optimize/Include/object.h
==============================================================================
--- python/branches/tlee-ast-optimize/Include/object.h (original)
+++ python/branches/tlee-ast-optimize/Include/object.h Sun Jun 1 17:18:10 2008
@@ -460,6 +460,7 @@
PyObject *, PyObject *);
PyAPI_FUNC(PyObject *) _PyType_Lookup(PyTypeObject *, PyObject *);
PyAPI_FUNC(unsigned int) PyType_ClearCache(void);
+PyAPI_FUNC(void) PyType_Modified(PyTypeObject *);
/* Generic operations on objects */
PyAPI_FUNC(int) PyObject_Print(PyObject *, FILE *, int);
@@ -514,7 +515,7 @@
PyAPI_FUNC(long) _Py_HashPointer(void*);
/* Helper for passing objects to printf and the like */
-#define PyObject_REPR(obj) PyString_AS_STRING(PyObject_Repr(obj))
+#define PyObject_REPR(obj) PyBytes_AS_STRING(PyObject_Repr(obj))
/* Flag bits for printing: */
#define Py_PRINT_RAW 1 /* No string quotes etc. */
@@ -608,7 +609,7 @@
#define Py_TPFLAGS_LONG_SUBCLASS (1L<<24)
#define Py_TPFLAGS_LIST_SUBCLASS (1L<<25)
#define Py_TPFLAGS_TUPLE_SUBCLASS (1L<<26)
-#define Py_TPFLAGS_STRING_SUBCLASS (1L<<27)
+#define Py_TPFLAGS_BYTES_SUBCLASS (1L<<27)
#define Py_TPFLAGS_UNICODE_SUBCLASS (1L<<28)
#define Py_TPFLAGS_DICT_SUBCLASS (1L<<29)
#define Py_TPFLAGS_BASE_EXC_SUBCLASS (1L<<30)
Modified: python/branches/tlee-ast-optimize/Include/py_curses.h
==============================================================================
--- python/branches/tlee-ast-optimize/Include/py_curses.h (original)
+++ python/branches/tlee-ast-optimize/Include/py_curses.h Sun Jun 1 17:18:10 2008
@@ -146,7 +146,7 @@
static PyObject *PyCurses_ ## X (PyObject *self) \
{ \
PyCursesInitialised \
- return PyString_FromString(X()); }
+ return PyBytes_FromString(X()); }
#define NoArgTrueFalseFunction(X) \
static PyObject *PyCurses_ ## X (PyObject *self) \
Modified: python/branches/tlee-ast-optimize/Include/pyerrors.h
==============================================================================
--- python/branches/tlee-ast-optimize/Include/pyerrors.h (original)
+++ python/branches/tlee-ast-optimize/Include/pyerrors.h Sun Jun 1 17:18:10 2008
@@ -104,7 +104,7 @@
#define PyExceptionClass_Name(x) \
(PyClass_Check((x)) \
- ? PyString_AS_STRING(((PyClassObject*)(x))->cl_name) \
+ ? PyBytes_AS_STRING(((PyClassObject*)(x))->cl_name) \
: (char *)(((PyTypeObject*)(x))->tp_name))
#define PyExceptionInstance_Class(x) \
Modified: python/branches/tlee-ast-optimize/Include/pyport.h
==============================================================================
--- python/branches/tlee-ast-optimize/Include/pyport.h (original)
+++ python/branches/tlee-ast-optimize/Include/pyport.h Sun Jun 1 17:18:10 2008
@@ -135,9 +135,9 @@
* all platforms (Python interprets the format string itself, and does whatever
* the platform C requires to convert a size_t/Py_ssize_t argument):
*
- * PyString_FromFormat
+ * PyBytes_FromFormat
* PyErr_Format
- * PyString_FromFormatV
+ * PyBytes_FromFormatV
*
* Lower-level uses require that you interpolate the correct format modifier
* yourself (e.g., calling printf, fprintf, sprintf, PyOS_snprintf); for
Modified: python/branches/tlee-ast-optimize/Include/pythonrun.h
==============================================================================
--- python/branches/tlee-ast-optimize/Include/pythonrun.h (original)
+++ python/branches/tlee-ast-optimize/Include/pythonrun.h Sun Jun 1 17:18:10 2008
@@ -125,7 +125,7 @@
PyAPI_FUNC(int) _PyFrame_Init(void);
PyAPI_FUNC(int) _PyInt_Init(void);
PyAPI_FUNC(void) _PyFloat_Init(void);
-PyAPI_FUNC(int) PyBytes_Init(void);
+PyAPI_FUNC(int) PyByteArray_Init(void);
/* Various internal finalizers */
PyAPI_FUNC(void) _PyExc_Fini(void);
@@ -137,11 +137,11 @@
PyAPI_FUNC(void) PyTuple_Fini(void);
PyAPI_FUNC(void) PyList_Fini(void);
PyAPI_FUNC(void) PySet_Fini(void);
-PyAPI_FUNC(void) PyString_Fini(void);
+PyAPI_FUNC(void) PyBytes_Fini(void);
PyAPI_FUNC(void) PyInt_Fini(void);
PyAPI_FUNC(void) PyFloat_Fini(void);
PyAPI_FUNC(void) PyOS_FiniInterrupts(void);
-PyAPI_FUNC(void) PyBytes_Fini(void);
+PyAPI_FUNC(void) PyByteArray_Fini(void);
/* Stuff with no proper home (yet) */
PyAPI_FUNC(char *) PyOS_Readline(FILE *, FILE *, char *);
Modified: python/branches/tlee-ast-optimize/Include/unicodeobject.h
==============================================================================
--- python/branches/tlee-ast-optimize/Include/unicodeobject.h (original)
+++ python/branches/tlee-ast-optimize/Include/unicodeobject.h Sun Jun 1 17:18:10 2008
@@ -553,6 +553,12 @@
PyAPI_FUNC(PyObject *) PyUnicode_FromFormatV(const char*, va_list);
PyAPI_FUNC(PyObject *) PyUnicode_FromFormat(const char*, ...);
+/* Format the object based on the format_spec, as defined in PEP 3101
+ (Advanced String Formatting). */
+PyAPI_FUNC(PyObject *) _PyUnicode_FormatAdvanced(PyObject *obj,
+ Py_UNICODE *format_spec,
+ Py_ssize_t format_spec_len);
+
/* --- wchar_t support for platforms which support it --------------------- */
#ifdef HAVE_WCHAR_H
Modified: python/branches/tlee-ast-optimize/Include/warnings.h
==============================================================================
--- python/branches/tlee-ast-optimize/Include/warnings.h (original)
+++ python/branches/tlee-ast-optimize/Include/warnings.h Sun Jun 1 17:18:10 2008
@@ -9,7 +9,9 @@
PyAPI_FUNC(int) PyErr_WarnEx(PyObject *, const char *, Py_ssize_t);
PyAPI_FUNC(int) PyErr_WarnExplicit(PyObject *, const char *, const char *, int,
const char *, PyObject *);
-PyAPI_FUNC(int) PyErr_WarnPy3k(const char *, Py_ssize_t);
+
+#define PyErr_WarnPy3k(msg, stacklevel) \
+ (Py_Py3kWarningFlag ? PyErr_WarnEx(PyExc_DeprecationWarning, msg, stacklevel) : 0)
/* DEPRECATED: Use PyErr_WarnEx() instead. */
#define PyErr_Warn(category, msg) PyErr_WarnEx(category, msg, 1)
Modified: python/branches/tlee-ast-optimize/Lib/UserString.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/UserString.py (original)
+++ python/branches/tlee-ast-optimize/Lib/UserString.py Sun Jun 1 17:18:10 2008
@@ -146,6 +146,9 @@
A faster and better solution is to rewrite your program using lists."""
def __init__(self, string=""):
+ from warnings import warnpy3k
+ warnpy3k('the class UserString.MutableString has been removed in '
+ 'Python 3.0', stacklevel=2)
self.data = string
def __hash__(self):
raise TypeError, "unhashable type (it is mutable)"
Modified: python/branches/tlee-ast-optimize/Lib/bsddb/test/test_all.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/bsddb/test/test_all.py (original)
+++ python/branches/tlee-ast-optimize/Lib/bsddb/test/test_all.py Sun Jun 1 17:18:10 2008
@@ -67,11 +67,20 @@
return path
-# NOTE: This path is overridden by a unique one and cleaned up
-# afterwards when run under regrtest via Lib/test/test_bsddb3.py.
-get_new_path.prefix="/tmp/z-Berkeley_DB"
+# This path can be overriden via "set_test_path_prefix()".
+import os, os.path
+get_new_path.prefix=os.path.join(os.sep,"tmp","z-Berkeley_DB")
get_new_path.num=0
+def get_test_path_prefix() :
+ return get_new_path.prefix
+
+def set_test_path_prefix(path) :
+ get_new_path.prefix=path
+
+def remove_test_path_directory() :
+ test_support.rmtree(get_new_path.prefix)
+
try :
import threading
get_new_path.mutex=threading.Lock()
@@ -100,12 +109,6 @@
def suite(module_prefix='', timing_check=None):
- try:
- # this is special, it used to segfault the interpreter
- import test_1413192
- except:
- pass
-
test_modules = [
'test_associate',
'test_basics',
Modified: python/branches/tlee-ast-optimize/Lib/collections.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/collections.py (original)
+++ python/branches/tlee-ast-optimize/Lib/collections.py Sun Jun 1 17:18:10 2008
@@ -88,8 +88,9 @@
if verbose:
print template
- # Execute the template string in a temporary namespace
- namespace = dict(itemgetter=_itemgetter)
+ # Execute the template string in a temporary namespace and
+ # support tracing utilities by setting a value for frame.f_globals['__name__']
+ namespace = dict(itemgetter=_itemgetter, __name__='namedtuple_%s' % typename)
try:
exec template in namespace
except SyntaxError, e:
Modified: python/branches/tlee-ast-optimize/Lib/commands.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/commands.py (original)
+++ python/branches/tlee-ast-optimize/Lib/commands.py Sun Jun 1 17:18:10 2008
@@ -63,6 +63,8 @@
# Make command argument from directory and pathname (prefix space, add quotes).
#
def mk2arg(head, x):
+ from warnings import warnpy3k
+ warnpy3k("In 3.x, mk2arg has been removed.")
import os
return mkarg(os.path.join(head, x))
@@ -75,6 +77,8 @@
# with backslash.
#
def mkarg(x):
+ from warnings import warnpy3k
+ warnpy3k("in 3.x, mkarg has been removed.")
if '\'' not in x:
return ' \'' + x + '\''
s = ' "'
Modified: python/branches/tlee-ast-optimize/Lib/ctypes/test/test_pointers.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/ctypes/test/test_pointers.py (original)
+++ python/branches/tlee-ast-optimize/Lib/ctypes/test/test_pointers.py Sun Jun 1 17:18:10 2008
@@ -175,5 +175,13 @@
self.assertRaises(TypeError, c_void_p, 3.14) # make sure floats are NOT accepted
self.assertRaises(TypeError, c_void_p, object()) # nor other objects
+ def test_pointers_bool(self):
+ # NULL pointers have a boolean False value, non-NULL pointers True.
+ self.failUnlessEqual(bool(POINTER(c_int)()), False)
+ self.failUnlessEqual(bool(pointer(c_int())), True)
+
+ self.failUnlessEqual(bool(CFUNCTYPE(None)(0)), False)
+ self.failUnlessEqual(bool(CFUNCTYPE(None)(42)), True)
+
if __name__ == '__main__':
unittest.main()
Modified: python/branches/tlee-ast-optimize/Lib/distutils/command/bdist_wininst.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/distutils/command/bdist_wininst.py (original)
+++ python/branches/tlee-ast-optimize/Lib/distutils/command/bdist_wininst.py Sun Jun 1 17:18:10 2008
@@ -79,6 +79,12 @@
def finalize_options (self):
if self.bdist_dir is None:
+ if self.skip_build and self.plat_name:
+ # If build is skipped and plat_name is overridden, bdist will
+ # not see the correct 'plat_name' - so set that up manually.
+ bdist = self.distribution.get_command_obj('bdist')
+ bdist.plat_name = self.plat_name
+ # next the command will be initialized using that name
bdist_base = self.get_finalized_command('bdist').bdist_base
self.bdist_dir = os.path.join(bdist_base, 'wininst')
if not self.target_version:
Modified: python/branches/tlee-ast-optimize/Lib/distutils/command/wininst-6.0.exe
==============================================================================
Binary files. No diff available.
Modified: python/branches/tlee-ast-optimize/Lib/distutils/command/wininst-7.1.exe
==============================================================================
Binary files. No diff available.
Modified: python/branches/tlee-ast-optimize/Lib/distutils/command/wininst-9.0-amd64.exe
==============================================================================
Binary files. No diff available.
Modified: python/branches/tlee-ast-optimize/Lib/distutils/command/wininst-9.0.exe
==============================================================================
Binary files. No diff available.
Modified: python/branches/tlee-ast-optimize/Lib/distutils/tests/test_build_ext.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/distutils/tests/test_build_ext.py (original)
+++ python/branches/tlee-ast-optimize/Lib/distutils/tests/test_build_ext.py Sun Jun 1 17:18:10 2008
@@ -28,6 +28,10 @@
dist = Distribution({'name': 'xx', 'ext_modules': [xx_ext]})
dist.package_dir = self.tmp_dir
cmd = build_ext(dist)
+ if os.name == "nt":
+ # On Windows, we must build a debug version iff running
+ # a debug build of Python
+ cmd.debug = sys.executable.endswith("_d.exe")
cmd.build_lib = self.tmp_dir
cmd.build_temp = self.tmp_dir
Modified: python/branches/tlee-ast-optimize/Lib/ftplib.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/ftplib.py (original)
+++ python/branches/tlee-ast-optimize/Lib/ftplib.py Sun Jun 1 17:18:10 2008
@@ -44,6 +44,7 @@
from socket import getfqdn; socket.getfqdn = getfqdn; del getfqdn
except ImportError:
import socket
+from socket import _GLOBAL_DEFAULT_TIMEOUT
__all__ = ["FTP","Netrc"]
@@ -71,7 +72,6 @@
# Line terminators (we always output CRLF, but accept any of CRLF, CR, LF)
CRLF = '\r\n'
-
# The class itself
class FTP:
@@ -109,14 +109,15 @@
# Initialize host to localhost, port to standard ftp port
# Optional arguments are host (for connect()),
# and user, passwd, acct (for login())
- def __init__(self, host='', user='', passwd='', acct='', timeout=None):
+ def __init__(self, host='', user='', passwd='', acct='',
+ timeout=_GLOBAL_DEFAULT_TIMEOUT):
self.timeout = timeout
if host:
self.connect(host)
if user:
self.login(user, passwd, acct)
- def connect(self, host='', port=0, timeout=None):
+ def connect(self, host='', port=0, timeout=-999):
'''Connect to host. Arguments are:
- host: hostname to connect to (string, default previous host)
- port: port to connect to (integer, default previous port)
@@ -125,7 +126,7 @@
self.host = host
if port > 0:
self.port = port
- if timeout is not None:
+ if timeout != -999:
self.timeout = timeout
self.sock = socket.create_connection((self.host, self.port), self.timeout)
self.af = self.sock.family
Modified: python/branches/tlee-ast-optimize/Lib/heapq.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/heapq.py (original)
+++ python/branches/tlee-ast-optimize/Lib/heapq.py Sun Jun 1 17:18:10 2008
@@ -167,7 +167,7 @@
def heappushpop(heap, item):
"""Fast version of a heappush followed by a heappop."""
- if heap and item > heap[0]:
+ if heap and heap[0] < item:
item, heap[0] = heap[0], item
_siftup(heap, 0)
return item
@@ -240,10 +240,11 @@
while pos > startpos:
parentpos = (pos - 1) >> 1
parent = heap[parentpos]
- if parent <= newitem:
- break
- heap[pos] = parent
- pos = parentpos
+ if newitem < parent:
+ heap[pos] = parent
+ pos = parentpos
+ continue
+ break
heap[pos] = newitem
# The child indices of heap index pos are already heaps, and we want to make
@@ -294,7 +295,7 @@
while childpos < endpos:
# Set childpos to index of smaller child.
rightpos = childpos + 1
- if rightpos < endpos and heap[rightpos] <= heap[childpos]:
+ if rightpos < endpos and not heap[childpos] < heap[rightpos]:
childpos = rightpos
# Move the smaller child up.
heap[pos] = heap[childpos]
Modified: python/branches/tlee-ast-optimize/Lib/httplib.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/httplib.py (original)
+++ python/branches/tlee-ast-optimize/Lib/httplib.py Sun Jun 1 17:18:10 2008
@@ -639,7 +639,8 @@
debuglevel = 0
strict = 0
- def __init__(self, host, port=None, strict=None, timeout=None):
+ def __init__(self, host, port=None, strict=None,
+ timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
self.timeout = timeout
self.sock = None
self._buffer = []
@@ -1055,7 +1056,7 @@
default_port = HTTPS_PORT
def __init__(self, host, port=None, key_file=None, cert_file=None,
- strict=None, timeout=None):
+ strict=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
HTTPConnection.__init__(self, host, port, strict, timeout)
self.key_file = key_file
self.cert_file = cert_file
Modified: python/branches/tlee-ast-optimize/Lib/lib-tk/Tkinter.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/lib-tk/Tkinter.py (original)
+++ python/branches/tlee-ast-optimize/Lib/lib-tk/Tkinter.py Sun Jun 1 17:18:10 2008
@@ -30,7 +30,7 @@
tk.mainloop()
"""
-__version__ = "$Revision$"
+__version__ = "$Revision: 63501 $"
import sys
if sys.platform == "win32":
@@ -1053,6 +1053,12 @@
if k[-1] == '_': k = k[:-1]
if callable(v):
v = self._register(v)
+ elif isinstance(v, (tuple, list)):
+ for item in v:
+ if not isinstance(item, (basestring, int)):
+ break
+ else:
+ v = ' '.join(map(str, v))
res = res + ('-'+k, v)
return res
def nametowidget(self, name):
@@ -1092,7 +1098,6 @@
if self._tclCommands is None:
self._tclCommands = []
self._tclCommands.append(name)
- #print '+ Tkinter created command', name
return name
register = _register
def _root(self):
@@ -1747,10 +1752,11 @@
after=widget - pack it after you have packed widget
anchor=NSEW (or subset) - position widget according to
given direction
- before=widget - pack it before you will pack widget
+ before=widget - pack it before you will pack widget
expand=bool - expand widget if parent size grows
fill=NONE or X or Y or BOTH - fill widget if widget grows
in=master - use master to contain this widget
+ in_=master - see 'in' option description
ipadx=amount - add internal padding in x direction
ipady=amount - add internal padding in y direction
padx=amount - add padding in x direction
@@ -1788,29 +1794,26 @@
Base class to use the methods place_* in every widget."""
def place_configure(self, cnf={}, **kw):
"""Place a widget in the parent widget. Use as options:
- in=master - master relative to which the widget is placed.
+ in=master - master relative to which the widget is placed
+ in_=master - see 'in' option description
x=amount - locate anchor of this widget at position x of master
y=amount - locate anchor of this widget at position y of master
relx=amount - locate anchor of this widget between 0.0 and 1.0
relative to width of master (1.0 is right edge)
- rely=amount - locate anchor of this widget between 0.0 and 1.0
+ rely=amount - locate anchor of this widget between 0.0 and 1.0
relative to height of master (1.0 is bottom edge)
- anchor=NSEW (or subset) - position anchor according to given direction
+ anchor=NSEW (or subset) - position anchor according to given direction
width=amount - width of this widget in pixel
height=amount - height of this widget in pixel
relwidth=amount - width of this widget between 0.0 and 1.0
relative to width of master (1.0 is the same width
- as the master)
- relheight=amount - height of this widget between 0.0 and 1.0
+ as the master)
+ relheight=amount - height of this widget between 0.0 and 1.0
relative to height of master (1.0 is the same
- height as the master)
- bordermode="inside" or "outside" - whether to take border width of master widget
- into account
- """
- for k in ['in_']:
- if kw.has_key(k):
- kw[k[:-1]] = kw[k]
- del kw[k]
+ height as the master)
+ bordermode="inside" or "outside" - whether to take border width of
+ master widget into account
+ """
self.tk.call(
('place', 'configure', self._w)
+ self._options(cnf, kw))
@@ -1845,6 +1848,7 @@
column=number - use cell identified with given column (starting with 0)
columnspan=number - this widget will span several columns
in=master - use master to contain this widget
+ in_=master - see 'in' option description
ipadx=amount - add internal padding in x direction
ipady=amount - add internal padding in y direction
padx=amount - add padding in x direction
Modified: python/branches/tlee-ast-optimize/Lib/locale.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/locale.py (original)
+++ python/branches/tlee-ast-optimize/Lib/locale.py Sun Jun 1 17:18:10 2008
@@ -615,6 +615,33 @@
# updated 'zh_cn.big5' -> 'zh_TW.eucTW' to 'zh_TW.big5'
# updated 'zh_tw' -> 'zh_TW.eucTW' to 'zh_TW.big5'
#
+# MAL 2008-05-30:
+# Updated alias mapping to most recent locale.alias file
+# from X.org distribution using makelocalealias.py.
+#
+# These are the differences compared to the old mapping (Python 2.5
+# and older):
+#
+# updated 'cs_cs.iso88592' -> 'cs_CZ.ISO8859-2' to 'cs_CS.ISO8859-2'
+# updated 'serbocroatian' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2'
+# updated 'sh' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2'
+# updated 'sh_hr.iso88592' -> 'sh_HR.ISO8859-2' to 'hr_HR.ISO8859-2'
+# updated 'sh_sp' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2'
+# updated 'sh_yu' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2'
+# updated 'sp' -> 'sp_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
+# updated 'sp_yu' -> 'sp_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
+# updated 'sr' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
+# updated 'sr at cyrillic' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
+# updated 'sr_sp' -> 'sr_SP.ISO8859-2' to 'sr_CS.ISO8859-2'
+# updated 'sr_yu' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
+# updated 'sr_yu.cp1251 at cyrillic' -> 'sr_YU.CP1251' to 'sr_CS.CP1251'
+# updated 'sr_yu.iso88592' -> 'sr_YU.ISO8859-2' to 'sr_CS.ISO8859-2'
+# updated 'sr_yu.iso88595' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
+# updated 'sr_yu.iso88595 at cyrillic' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
+# updated 'sr_yu.microsoftcp1251 at cyrillic' -> 'sr_YU.CP1251' to 'sr_CS.CP1251'
+# updated 'sr_yu.utf8 at cyrillic' -> 'sr_YU.UTF-8' to 'sr_CS.UTF-8'
+# updated 'sr_yu at cyrillic' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
+
locale_alias = {
'a3': 'a3_AZ.KOI8-C',
'a3_az': 'a3_AZ.KOI8-C',
@@ -623,30 +650,46 @@
'af_za': 'af_ZA.ISO8859-1',
'af_za.iso88591': 'af_ZA.ISO8859-1',
'am': 'am_ET.UTF-8',
+ 'am_et': 'am_ET.UTF-8',
'american': 'en_US.ISO8859-1',
'american.iso88591': 'en_US.ISO8859-1',
'ar': 'ar_AA.ISO8859-6',
'ar_aa': 'ar_AA.ISO8859-6',
'ar_aa.iso88596': 'ar_AA.ISO8859-6',
'ar_ae': 'ar_AE.ISO8859-6',
+ 'ar_ae.iso88596': 'ar_AE.ISO8859-6',
'ar_bh': 'ar_BH.ISO8859-6',
+ 'ar_bh.iso88596': 'ar_BH.ISO8859-6',
'ar_dz': 'ar_DZ.ISO8859-6',
+ 'ar_dz.iso88596': 'ar_DZ.ISO8859-6',
'ar_eg': 'ar_EG.ISO8859-6',
'ar_eg.iso88596': 'ar_EG.ISO8859-6',
'ar_iq': 'ar_IQ.ISO8859-6',
+ 'ar_iq.iso88596': 'ar_IQ.ISO8859-6',
'ar_jo': 'ar_JO.ISO8859-6',
+ 'ar_jo.iso88596': 'ar_JO.ISO8859-6',
'ar_kw': 'ar_KW.ISO8859-6',
+ 'ar_kw.iso88596': 'ar_KW.ISO8859-6',
'ar_lb': 'ar_LB.ISO8859-6',
+ 'ar_lb.iso88596': 'ar_LB.ISO8859-6',
'ar_ly': 'ar_LY.ISO8859-6',
+ 'ar_ly.iso88596': 'ar_LY.ISO8859-6',
'ar_ma': 'ar_MA.ISO8859-6',
+ 'ar_ma.iso88596': 'ar_MA.ISO8859-6',
'ar_om': 'ar_OM.ISO8859-6',
+ 'ar_om.iso88596': 'ar_OM.ISO8859-6',
'ar_qa': 'ar_QA.ISO8859-6',
+ 'ar_qa.iso88596': 'ar_QA.ISO8859-6',
'ar_sa': 'ar_SA.ISO8859-6',
'ar_sa.iso88596': 'ar_SA.ISO8859-6',
'ar_sd': 'ar_SD.ISO8859-6',
+ 'ar_sd.iso88596': 'ar_SD.ISO8859-6',
'ar_sy': 'ar_SY.ISO8859-6',
+ 'ar_sy.iso88596': 'ar_SY.ISO8859-6',
'ar_tn': 'ar_TN.ISO8859-6',
+ 'ar_tn.iso88596': 'ar_TN.ISO8859-6',
'ar_ye': 'ar_YE.ISO8859-6',
+ 'ar_ye.iso88596': 'ar_YE.ISO8859-6',
'arabic': 'ar_AA.ISO8859-6',
'arabic.iso88596': 'ar_AA.ISO8859-6',
'az': 'az_AZ.ISO8859-9E',
@@ -662,6 +705,7 @@
'bg_bg.iso88595': 'bg_BG.ISO8859-5',
'bg_bg.koi8r': 'bg_BG.KOI8-R',
'bg_bg.microsoftcp1251': 'bg_BG.CP1251',
+ 'bn_in': 'bn_IN.UTF-8',
'bokmal': 'nb_NO.ISO8859-1',
'bokm\xe5l': 'nb_NO.ISO8859-1',
'br': 'br_FR.ISO8859-1',
@@ -669,7 +713,12 @@
'br_fr.iso88591': 'br_FR.ISO8859-1',
'br_fr.iso885914': 'br_FR.ISO8859-14',
'br_fr.iso885915': 'br_FR.ISO8859-15',
+ 'br_fr.iso885915 at euro': 'br_FR.ISO8859-15',
+ 'br_fr.utf8 at euro': 'br_FR.UTF-8',
'br_fr at euro': 'br_FR.ISO8859-15',
+ 'bs': 'bs_BA.ISO8859-2',
+ 'bs_ba': 'bs_BA.ISO8859-2',
+ 'bs_ba.iso88592': 'bs_BA.ISO8859-2',
'bulgarian': 'bg_BG.CP1251',
'c': 'C',
'c-french': 'fr_CA.ISO8859-1',
@@ -682,6 +731,8 @@
'ca_es': 'ca_ES.ISO8859-1',
'ca_es.iso88591': 'ca_ES.ISO8859-1',
'ca_es.iso885915': 'ca_ES.ISO8859-15',
+ 'ca_es.iso885915 at euro': 'ca_ES.ISO8859-15',
+ 'ca_es.utf8 at euro': 'ca_ES.UTF-8',
'ca_es at euro': 'ca_ES.ISO8859-15',
'catalan': 'ca_ES.ISO8859-1',
'cextend': 'en_US.ISO8859-1',
@@ -691,7 +742,7 @@
'croatian': 'hr_HR.ISO8859-2',
'cs': 'cs_CZ.ISO8859-2',
'cs_cs': 'cs_CZ.ISO8859-2',
- 'cs_cs.iso88592': 'cs_CZ.ISO8859-2',
+ 'cs_cs.iso88592': 'cs_CS.ISO8859-2',
'cs_cz': 'cs_CZ.ISO8859-2',
'cs_cz.iso88592': 'cs_CZ.ISO8859-2',
'cy': 'cy_GB.ISO8859-1',
@@ -717,10 +768,14 @@
'de_at': 'de_AT.ISO8859-1',
'de_at.iso88591': 'de_AT.ISO8859-1',
'de_at.iso885915': 'de_AT.ISO8859-15',
+ 'de_at.iso885915 at euro': 'de_AT.ISO8859-15',
+ 'de_at.utf8 at euro': 'de_AT.UTF-8',
'de_at at euro': 'de_AT.ISO8859-15',
'de_be': 'de_BE.ISO8859-1',
'de_be.iso88591': 'de_BE.ISO8859-1',
'de_be.iso885915': 'de_BE.ISO8859-15',
+ 'de_be.iso885915 at euro': 'de_BE.ISO8859-15',
+ 'de_be.utf8 at euro': 'de_BE.UTF-8',
'de_be at euro': 'de_BE.ISO8859-15',
'de_ch': 'de_CH.ISO8859-1',
'de_ch.iso88591': 'de_CH.ISO8859-1',
@@ -732,10 +787,14 @@
'de_de.885915 at euro': 'de_DE.ISO8859-15',
'de_de.iso88591': 'de_DE.ISO8859-1',
'de_de.iso885915': 'de_DE.ISO8859-15',
+ 'de_de.iso885915 at euro': 'de_DE.ISO8859-15',
+ 'de_de.utf8 at euro': 'de_DE.UTF-8',
'de_de at euro': 'de_DE.ISO8859-15',
'de_lu': 'de_LU.ISO8859-1',
'de_lu.iso88591': 'de_LU.ISO8859-1',
'de_lu.iso885915': 'de_LU.ISO8859-15',
+ 'de_lu.iso885915 at euro': 'de_LU.ISO8859-15',
+ 'de_lu.utf8 at euro': 'de_LU.UTF-8',
'de_lu at euro': 'de_LU.ISO8859-15',
'deutsch': 'de_DE.ISO8859-1',
'dutch': 'nl_NL.ISO8859-1',
@@ -755,6 +814,7 @@
'en_be': 'en_BE.ISO8859-1',
'en_be at euro': 'en_BE.ISO8859-15',
'en_bw': 'en_BW.ISO8859-1',
+ 'en_bw.iso88591': 'en_BW.ISO8859-1',
'en_ca': 'en_CA.ISO8859-1',
'en_ca.iso88591': 'en_CA.ISO8859-1',
'en_gb': 'en_GB.ISO8859-1',
@@ -763,15 +823,20 @@
'en_gb.iso885915': 'en_GB.ISO8859-15',
'en_gb at euro': 'en_GB.ISO8859-15',
'en_hk': 'en_HK.ISO8859-1',
+ 'en_hk.iso88591': 'en_HK.ISO8859-1',
'en_ie': 'en_IE.ISO8859-1',
'en_ie.iso88591': 'en_IE.ISO8859-1',
'en_ie.iso885915': 'en_IE.ISO8859-15',
+ 'en_ie.iso885915 at euro': 'en_IE.ISO8859-15',
+ 'en_ie.utf8 at euro': 'en_IE.UTF-8',
'en_ie at euro': 'en_IE.ISO8859-15',
'en_in': 'en_IN.ISO8859-1',
'en_nz': 'en_NZ.ISO8859-1',
'en_nz.iso88591': 'en_NZ.ISO8859-1',
'en_ph': 'en_PH.ISO8859-1',
+ 'en_ph.iso88591': 'en_PH.ISO8859-1',
'en_sg': 'en_SG.ISO8859-1',
+ 'en_sg.iso88591': 'en_SG.ISO8859-1',
'en_uk': 'en_GB.ISO8859-1',
'en_us': 'en_US.ISO8859-1',
'en_us.88591': 'en_US.ISO8859-1',
@@ -787,6 +852,7 @@
'en_za.iso885915': 'en_ZA.ISO8859-15',
'en_za at euro': 'en_ZA.ISO8859-15',
'en_zw': 'en_ZW.ISO8859-1',
+ 'en_zw.iso88591': 'en_ZW.ISO8859-1',
'eng_gb': 'en_GB.ISO8859-1',
'eng_gb.8859': 'en_GB.ISO8859-1',
'english': 'en_EN.ISO8859-1',
@@ -822,6 +888,8 @@
'es_es.88591': 'es_ES.ISO8859-1',
'es_es.iso88591': 'es_ES.ISO8859-1',
'es_es.iso885915': 'es_ES.ISO8859-15',
+ 'es_es.iso885915 at euro': 'es_ES.ISO8859-15',
+ 'es_es.utf8 at euro': 'es_ES.UTF-8',
'es_es at euro': 'es_ES.ISO8859-15',
'es_gt': 'es_GT.ISO8859-1',
'es_gt.iso88591': 'es_GT.ISO8859-1',
@@ -850,6 +918,7 @@
'es_sv.iso885915': 'es_SV.ISO8859-15',
'es_sv at euro': 'es_SV.ISO8859-15',
'es_us': 'es_US.ISO8859-1',
+ 'es_us.iso88591': 'es_US.ISO8859-1',
'es_uy': 'es_UY.ISO8859-1',
'es_uy.iso88591': 'es_UY.ISO8859-1',
'es_uy.iso885915': 'es_UY.ISO8859-15',
@@ -870,6 +939,8 @@
'eu_es': 'eu_ES.ISO8859-1',
'eu_es.iso88591': 'eu_ES.ISO8859-1',
'eu_es.iso885915': 'eu_ES.ISO8859-15',
+ 'eu_es.iso885915 at euro': 'eu_ES.ISO8859-15',
+ 'eu_es.utf8 at euro': 'eu_ES.UTF-8',
'eu_es at euro': 'eu_ES.ISO8859-15',
'fa': 'fa_IR.UTF-8',
'fa_ir': 'fa_IR.UTF-8',
@@ -879,6 +950,7 @@
'fi_fi.88591': 'fi_FI.ISO8859-1',
'fi_fi.iso88591': 'fi_FI.ISO8859-1',
'fi_fi.iso885915': 'fi_FI.ISO8859-15',
+ 'fi_fi.iso885915 at euro': 'fi_FI.ISO8859-15',
'fi_fi.utf8 at euro': 'fi_FI.UTF-8',
'fi_fi at euro': 'fi_FI.ISO8859-15',
'finnish': 'fi_FI.ISO8859-1',
@@ -893,6 +965,8 @@
'fr_be.88591': 'fr_BE.ISO8859-1',
'fr_be.iso88591': 'fr_BE.ISO8859-1',
'fr_be.iso885915': 'fr_BE.ISO8859-15',
+ 'fr_be.iso885915 at euro': 'fr_BE.ISO8859-15',
+ 'fr_be.utf8 at euro': 'fr_BE.UTF-8',
'fr_be at euro': 'fr_BE.ISO8859-15',
'fr_ca': 'fr_CA.ISO8859-1',
'fr_ca.88591': 'fr_CA.ISO8859-1',
@@ -908,11 +982,15 @@
'fr_fr.88591': 'fr_FR.ISO8859-1',
'fr_fr.iso88591': 'fr_FR.ISO8859-1',
'fr_fr.iso885915': 'fr_FR.ISO8859-15',
+ 'fr_fr.iso885915 at euro': 'fr_FR.ISO8859-15',
+ 'fr_fr.utf8 at euro': 'fr_FR.UTF-8',
'fr_fr at euro': 'fr_FR.ISO8859-15',
'fr_lu': 'fr_LU.ISO8859-1',
'fr_lu.88591': 'fr_LU.ISO8859-1',
'fr_lu.iso88591': 'fr_LU.ISO8859-1',
'fr_lu.iso885915': 'fr_LU.ISO8859-15',
+ 'fr_lu.iso885915 at euro': 'fr_LU.ISO8859-15',
+ 'fr_lu.utf8 at euro': 'fr_LU.UTF-8',
'fr_lu at euro': 'fr_LU.ISO8859-15',
'fran\xe7ais': 'fr_FR.ISO8859-1',
'fre_fr': 'fr_FR.ISO8859-1',
@@ -926,6 +1004,8 @@
'ga_ie.iso88591': 'ga_IE.ISO8859-1',
'ga_ie.iso885914': 'ga_IE.ISO8859-14',
'ga_ie.iso885915': 'ga_IE.ISO8859-15',
+ 'ga_ie.iso885915 at euro': 'ga_IE.ISO8859-15',
+ 'ga_ie.utf8 at euro': 'ga_IE.UTF-8',
'ga_ie at euro': 'ga_IE.ISO8859-15',
'galego': 'gl_ES.ISO8859-1',
'galician': 'gl_ES.ISO8859-1',
@@ -945,9 +1025,12 @@
'gl_es': 'gl_ES.ISO8859-1',
'gl_es.iso88591': 'gl_ES.ISO8859-1',
'gl_es.iso885915': 'gl_ES.ISO8859-15',
+ 'gl_es.iso885915 at euro': 'gl_ES.ISO8859-15',
+ 'gl_es.utf8 at euro': 'gl_ES.UTF-8',
'gl_es at euro': 'gl_ES.ISO8859-15',
'greek': 'el_GR.ISO8859-7',
'greek.iso88597': 'el_GR.ISO8859-7',
+ 'gu_in': 'gu_IN.UTF-8',
'gv': 'gv_GB.ISO8859-1',
'gv_gb': 'gv_GB.ISO8859-1',
'gv_gb.iso88591': 'gv_GB.ISO8859-1',
@@ -998,6 +1081,8 @@
'it_it.88591': 'it_IT.ISO8859-1',
'it_it.iso88591': 'it_IT.ISO8859-1',
'it_it.iso885915': 'it_IT.ISO8859-15',
+ 'it_it.iso885915 at euro': 'it_IT.ISO8859-15',
+ 'it_it.utf8 at euro': 'it_IT.UTF-8',
'it_it at euro': 'it_IT.ISO8859-15',
'italian': 'it_IT.ISO8859-1',
'italian.iso88591': 'it_IT.ISO8859-1',
@@ -1037,6 +1122,8 @@
'kl_gl.iso88591': 'kl_GL.ISO8859-1',
'kl_gl.iso885915': 'kl_GL.ISO8859-15',
'kl_gl at euro': 'kl_GL.ISO8859-15',
+ 'km_kh': 'km_KH.UTF-8',
+ 'kn_in': 'kn_IN.UTF-8',
'ko': 'ko_KR.eucKR',
'ko_kr': 'ko_KR.eucKR',
'ko_kr.euc': 'ko_KR.eucKR',
@@ -1049,6 +1136,8 @@
'kw_gb.iso885914': 'kw_GB.ISO8859-14',
'kw_gb.iso885915': 'kw_GB.ISO8859-15',
'kw_gb at euro': 'kw_GB.ISO8859-15',
+ 'ky': 'ky_KG.UTF-8',
+ 'ky_kg': 'ky_KG.UTF-8',
'lithuanian': 'lt_LT.ISO8859-13',
'lo': 'lo_LA.MULELAO-1',
'lo_la': 'lo_LA.MULELAO-1',
@@ -1071,6 +1160,7 @@
'mk_mk.cp1251': 'mk_MK.CP1251',
'mk_mk.iso88595': 'mk_MK.ISO8859-5',
'mk_mk.microsoftcp1251': 'mk_MK.CP1251',
+ 'mr_in': 'mr_IN.UTF-8',
'ms': 'ms_MY.ISO8859-1',
'ms_my': 'ms_MY.ISO8859-1',
'ms_my.iso88591': 'ms_MY.ISO8859-1',
@@ -1088,11 +1178,15 @@
'nl_be.88591': 'nl_BE.ISO8859-1',
'nl_be.iso88591': 'nl_BE.ISO8859-1',
'nl_be.iso885915': 'nl_BE.ISO8859-15',
+ 'nl_be.iso885915 at euro': 'nl_BE.ISO8859-15',
+ 'nl_be.utf8 at euro': 'nl_BE.UTF-8',
'nl_be at euro': 'nl_BE.ISO8859-15',
'nl_nl': 'nl_NL.ISO8859-1',
'nl_nl.88591': 'nl_NL.ISO8859-1',
'nl_nl.iso88591': 'nl_NL.ISO8859-1',
'nl_nl.iso885915': 'nl_NL.ISO8859-15',
+ 'nl_nl.iso885915 at euro': 'nl_NL.ISO8859-15',
+ 'nl_nl.utf8 at euro': 'nl_NL.UTF-8',
'nl_nl at euro': 'nl_NL.ISO8859-15',
'nn': 'nn_NO.ISO8859-1',
'nn_no': 'nn_NO.ISO8859-1',
@@ -1109,6 +1203,12 @@
'no_no at euro': 'no_NO.ISO8859-15',
'norwegian': 'no_NO.ISO8859-1',
'norwegian.iso88591': 'no_NO.ISO8859-1',
+ 'nr': 'nr_ZA.ISO8859-1',
+ 'nr_za': 'nr_ZA.ISO8859-1',
+ 'nr_za.iso88591': 'nr_ZA.ISO8859-1',
+ 'nso': 'nso_ZA.ISO8859-15',
+ 'nso_za': 'nso_ZA.ISO8859-15',
+ 'nso_za.iso885915': 'nso_ZA.ISO8859-15',
'ny': 'ny_NO.ISO8859-1',
'ny_no': 'ny_NO.ISO8859-1',
'ny_no.88591': 'ny_NO.ISO8859-1',
@@ -1121,6 +1221,7 @@
'oc_fr.iso88591': 'oc_FR.ISO8859-1',
'oc_fr.iso885915': 'oc_FR.ISO8859-15',
'oc_fr at euro': 'oc_FR.ISO8859-15',
+ 'pa_in': 'pa_IN.UTF-8',
'pd': 'pd_US.ISO8859-1',
'pd_de': 'pd_DE.ISO8859-1',
'pd_de.iso88591': 'pd_DE.ISO8859-1',
@@ -1156,6 +1257,7 @@
'pt_pt.88591': 'pt_PT.ISO8859-1',
'pt_pt.iso88591': 'pt_PT.ISO8859-1',
'pt_pt.iso885915': 'pt_PT.ISO8859-15',
+ 'pt_pt.iso885915 at euro': 'pt_PT.ISO8859-15',
'pt_pt.utf8 at euro': 'pt_PT.UTF-8',
'pt_pt at euro': 'pt_PT.ISO8859-15',
'ro': 'ro_RO.ISO8859-2',
@@ -1174,13 +1276,19 @@
'ru_ua.microsoftcp1251': 'ru_UA.CP1251',
'rumanian': 'ro_RO.ISO8859-2',
'russian': 'ru_RU.ISO8859-5',
+ 'rw': 'rw_RW.ISO8859-1',
+ 'rw_rw': 'rw_RW.ISO8859-1',
+ 'rw_rw.iso88591': 'rw_RW.ISO8859-1',
'se_no': 'se_NO.UTF-8',
- 'serbocroatian': 'sh_YU.ISO8859-2',
- 'sh': 'sh_YU.ISO8859-2',
+ 'serbocroatian': 'sr_CS.ISO8859-2',
+ 'sh': 'sr_CS.ISO8859-2',
'sh_hr': 'sh_HR.ISO8859-2',
- 'sh_hr.iso88592': 'sh_HR.ISO8859-2',
- 'sh_sp': 'sh_YU.ISO8859-2',
- 'sh_yu': 'sh_YU.ISO8859-2',
+ 'sh_hr.iso88592': 'hr_HR.ISO8859-2',
+ 'sh_sp': 'sr_CS.ISO8859-2',
+ 'sh_yu': 'sr_CS.ISO8859-2',
+ 'si': 'si_LK.UTF-8',
+ 'si_lk': 'si_LK.UTF-8',
+ 'sinhala': 'si_LK.UTF-8',
'sk': 'sk_SK.ISO8859-2',
'sk_sk': 'sk_SK.ISO8859-2',
'sk_sk.iso88592': 'sk_SK.ISO8859-2',
@@ -1191,8 +1299,8 @@
'slovak': 'sk_SK.ISO8859-2',
'slovene': 'sl_SI.ISO8859-2',
'slovenian': 'sl_SI.ISO8859-2',
- 'sp': 'sp_YU.ISO8859-5',
- 'sp_yu': 'sp_YU.ISO8859-5',
+ 'sp': 'sr_CS.ISO8859-5',
+ 'sp_yu': 'sr_CS.ISO8859-5',
'spanish': 'es_ES.ISO8859-1',
'spanish.iso88591': 'es_ES.ISO8859-1',
'spanish_spain': 'es_ES.ISO8859-1',
@@ -1200,21 +1308,35 @@
'sq': 'sq_AL.ISO8859-2',
'sq_al': 'sq_AL.ISO8859-2',
'sq_al.iso88592': 'sq_AL.ISO8859-2',
- 'sr': 'sr_YU.ISO8859-5',
- 'sr at cyrillic': 'sr_YU.ISO8859-5',
- 'sr_sp': 'sr_SP.ISO8859-2',
- 'sr_yu': 'sr_YU.ISO8859-5',
- 'sr_yu.cp1251 at cyrillic': 'sr_YU.CP1251',
- 'sr_yu.iso88592': 'sr_YU.ISO8859-2',
- 'sr_yu.iso88595': 'sr_YU.ISO8859-5',
- 'sr_yu.iso88595 at cyrillic': 'sr_YU.ISO8859-5',
- 'sr_yu.microsoftcp1251 at cyrillic': 'sr_YU.CP1251',
- 'sr_yu.utf8 at cyrillic': 'sr_YU.UTF-8',
- 'sr_yu at cyrillic': 'sr_YU.ISO8859-5',
+ 'sr': 'sr_CS.ISO8859-5',
+ 'sr at cyrillic': 'sr_CS.ISO8859-5',
+ 'sr at latn': 'sr_CS.ISO8859-2',
+ 'sr_cs.iso88592': 'sr_CS.ISO8859-2',
+ 'sr_cs.iso88592 at latn': 'sr_CS.ISO8859-2',
+ 'sr_cs.iso88595': 'sr_CS.ISO8859-5',
+ 'sr_cs.utf8 at latn': 'sr_CS.UTF-8',
+ 'sr_cs at latn': 'sr_CS.ISO8859-2',
+ 'sr_sp': 'sr_CS.ISO8859-2',
+ 'sr_yu': 'sr_CS.ISO8859-5',
+ 'sr_yu.cp1251 at cyrillic': 'sr_CS.CP1251',
+ 'sr_yu.iso88592': 'sr_CS.ISO8859-2',
+ 'sr_yu.iso88595': 'sr_CS.ISO8859-5',
+ 'sr_yu.iso88595 at cyrillic': 'sr_CS.ISO8859-5',
+ 'sr_yu.microsoftcp1251 at cyrillic': 'sr_CS.CP1251',
+ 'sr_yu.utf8 at cyrillic': 'sr_CS.UTF-8',
+ 'sr_yu at cyrillic': 'sr_CS.ISO8859-5',
+ 'ss': 'ss_ZA.ISO8859-1',
+ 'ss_za': 'ss_ZA.ISO8859-1',
+ 'ss_za.iso88591': 'ss_ZA.ISO8859-1',
+ 'st': 'st_ZA.ISO8859-1',
+ 'st_za': 'st_ZA.ISO8859-1',
+ 'st_za.iso88591': 'st_ZA.ISO8859-1',
'sv': 'sv_SE.ISO8859-1',
'sv_fi': 'sv_FI.ISO8859-1',
'sv_fi.iso88591': 'sv_FI.ISO8859-1',
'sv_fi.iso885915': 'sv_FI.ISO8859-15',
+ 'sv_fi.iso885915 at euro': 'sv_FI.ISO8859-15',
+ 'sv_fi.utf8 at euro': 'sv_FI.UTF-8',
'sv_fi at euro': 'sv_FI.ISO8859-15',
'sv_se': 'sv_SE.ISO8859-1',
'sv_se.88591': 'sv_SE.ISO8859-1',
@@ -1239,9 +1361,15 @@
'tl': 'tl_PH.ISO8859-1',
'tl_ph': 'tl_PH.ISO8859-1',
'tl_ph.iso88591': 'tl_PH.ISO8859-1',
+ 'tn': 'tn_ZA.ISO8859-15',
+ 'tn_za': 'tn_ZA.ISO8859-15',
+ 'tn_za.iso885915': 'tn_ZA.ISO8859-15',
'tr': 'tr_TR.ISO8859-9',
'tr_tr': 'tr_TR.ISO8859-9',
'tr_tr.iso88599': 'tr_TR.ISO8859-9',
+ 'ts': 'ts_ZA.ISO8859-1',
+ 'ts_za': 'ts_ZA.ISO8859-1',
+ 'ts_za.iso88591': 'ts_ZA.ISO8859-1',
'tt': 'tt_RU.TATAR-CYR',
'tt_ru': 'tt_RU.TATAR-CYR',
'tt_ru.koi8c': 'tt_RU.KOI8-C',
@@ -1263,6 +1391,11 @@
'ur_pk.microsoftcp1256': 'ur_PK.CP1256',
'uz': 'uz_UZ.UTF-8',
'uz_uz': 'uz_UZ.UTF-8',
+ 'uz_uz.iso88591': 'uz_UZ.ISO8859-1',
+ 'uz_uz.utf8 at cyrillic': 'uz_UZ.UTF-8',
+ 'uz_uz at cyrillic': 'uz_UZ.UTF-8',
+ 've': 've_ZA.UTF-8',
+ 've_za': 've_ZA.UTF-8',
'vi': 'vi_VN.TCVN',
'vi_vn': 'vi_VN.TCVN',
'vi_vn.tcvn': 'vi_VN.TCVN',
@@ -1273,7 +1406,11 @@
'wa_be': 'wa_BE.ISO8859-1',
'wa_be.iso88591': 'wa_BE.ISO8859-1',
'wa_be.iso885915': 'wa_BE.ISO8859-15',
+ 'wa_be.iso885915 at euro': 'wa_BE.ISO8859-15',
'wa_be at euro': 'wa_BE.ISO8859-15',
+ 'xh': 'xh_ZA.ISO8859-1',
+ 'xh_za': 'xh_ZA.ISO8859-1',
+ 'xh_za.iso88591': 'xh_ZA.ISO8859-1',
'yi': 'yi_US.CP1255',
'yi_us': 'yi_US.CP1255',
'yi_us.cp1255': 'yi_US.CP1255',
@@ -1291,6 +1428,10 @@
'zh_tw': 'zh_TW.big5',
'zh_tw.big5': 'zh_TW.big5',
'zh_tw.euc': 'zh_TW.eucTW',
+ 'zh_tw.euctw': 'zh_TW.eucTW',
+ 'zu': 'zu_ZA.ISO8859-1',
+ 'zu_za': 'zu_ZA.ISO8859-1',
+ 'zu_za.iso88591': 'zu_ZA.ISO8859-1',
}
#
Modified: python/branches/tlee-ast-optimize/Lib/poplib.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/poplib.py (original)
+++ python/branches/tlee-ast-optimize/Lib/poplib.py Sun Jun 1 17:18:10 2008
@@ -76,7 +76,8 @@
"""
- def __init__(self, host, port=POP3_PORT, timeout=None):
+ def __init__(self, host, port=POP3_PORT,
+ timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
self.host = host
self.port = port
self.sock = socket.create_connection((host, port), timeout)
Modified: python/branches/tlee-ast-optimize/Lib/smtplib.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/smtplib.py (original)
+++ python/branches/tlee-ast-optimize/Lib/smtplib.py Sun Jun 1 17:18:10 2008
@@ -220,7 +220,8 @@
ehlo_resp = None
does_esmtp = 0
- def __init__(self, host='', port=0, local_hostname=None, timeout=None):
+ def __init__(self, host='', port=0, local_hostname=None,
+ timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
"""Initialize a new instance.
If specified, `host' is the name of the remote host to which to
@@ -741,7 +742,8 @@
certificate chain file for the SSL connection.
"""
def __init__(self, host='', port=0, local_hostname=None,
- keyfile=None, certfile=None, timeout=None):
+ keyfile=None, certfile=None,
+ timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
self.keyfile = keyfile
self.certfile = certfile
SMTP.__init__(self, host, port, local_hostname, timeout)
Modified: python/branches/tlee-ast-optimize/Lib/socket.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/socket.py (original)
+++ python/branches/tlee-ast-optimize/Lib/socket.py Sun Jun 1 17:18:10 2008
@@ -480,14 +480,17 @@
raise StopIteration
return line
+_GLOBAL_DEFAULT_TIMEOUT = object()
-def create_connection(address, timeout=None):
- """Connect to address (host, port) with an optional timeout.
+def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT):
+ """Connect to *address* and return the socket object.
- Provides access to socketobject timeout for higher-level
- protocols. Passing a timeout will set the timeout on the
- socket instance (if not present, or passed as None, the
- default global timeout setting will be used).
+ Convenience function. Connect to *address* (a 2-tuple ``(host,
+ port)``) and return the socket object. Passing the optional
+ *timeout* parameter will set the timeout on the socket instance
+ before attempting to connect. If no *timeout* is supplied, the
+ global default timeout setting returned by :func:`getdefaulttimeout`
+ is used.
"""
msg = "getaddrinfo returns an empty list"
@@ -497,7 +500,7 @@
sock = None
try:
sock = socket(af, socktype, proto)
- if timeout is not None:
+ if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
sock.settimeout(timeout)
sock.connect(sa)
return sock
Modified: python/branches/tlee-ast-optimize/Lib/sqlite3/test/dbapi.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/sqlite3/test/dbapi.py (original)
+++ python/branches/tlee-ast-optimize/Lib/sqlite3/test/dbapi.py Sun Jun 1 17:18:10 2008
@@ -297,6 +297,15 @@
self.cu.execute("update test set name='bar'")
self.failUnlessEqual(self.cu.rowcount, 2)
+ def CheckRowcountSelect(self):
+ """
+ pysqlite does not know the rowcount of SELECT statements, because we
+ don't fetch all rows after executing the select statement. The rowcount
+ has thus to be -1.
+ """
+ self.cu.execute("select 5 union select 6")
+ self.failUnlessEqual(self.cu.rowcount, -1)
+
def CheckRowcountExecutemany(self):
self.cu.execute("delete from test")
self.cu.executemany("insert into test(name) values (?)", [(1,), (2,), (3,)])
Modified: python/branches/tlee-ast-optimize/Lib/sre_parse.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/sre_parse.py (original)
+++ python/branches/tlee-ast-optimize/Lib/sre_parse.py Sun Jun 1 17:18:10 2008
@@ -139,8 +139,6 @@
return self.data[index]
def __setitem__(self, index, code):
self.data[index] = code
- def __getslice__(self, start, stop):
- return SubPattern(self.pattern, self.data[start:stop])
def insert(self, index, code):
self.data.insert(index, code)
def append(self, code):
Modified: python/branches/tlee-ast-optimize/Lib/subprocess.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/subprocess.py (original)
+++ python/branches/tlee-ast-optimize/Lib/subprocess.py Sun Jun 1 17:18:10 2008
@@ -661,8 +661,10 @@
self.stdin.close()
elif self.stdout:
stdout = self.stdout.read()
+ self.stdout.close()
elif self.stderr:
stderr = self.stderr.read()
+ self.stderr.close()
self.wait()
return (stdout, stderr)
Modified: python/branches/tlee-ast-optimize/Lib/tarfile.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/tarfile.py (original)
+++ python/branches/tlee-ast-optimize/Lib/tarfile.py Sun Jun 1 17:18:10 2008
@@ -692,7 +692,6 @@
if self.mode == "w":
raw = self.bz2obj.flush()
self.fileobj.write(raw)
- self.fileobj.close()
# class _BZ2Proxy
#------------------------
Modified: python/branches/tlee-ast-optimize/Lib/telnetlib.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/telnetlib.py (original)
+++ python/branches/tlee-ast-optimize/Lib/telnetlib.py Sun Jun 1 17:18:10 2008
@@ -184,13 +184,13 @@
"""
- def __init__(self, host=None, port=0, timeout=None):
+ def __init__(self, host=None, port=0,
+ timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
"""Constructor.
When called without arguments, create an unconnected instance.
- With a hostname argument, it connects the instance; a port
- number is optional.
-
+ With a hostname argument, it connects the instance; port number
+ and timeout are optional.
"""
self.debuglevel = DEBUGLEVEL
self.host = host
@@ -208,23 +208,21 @@
if host is not None:
self.open(host, port, timeout)
- def open(self, host, port=0, timeout=None):
+ def open(self, host, port=0, timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
"""Connect to a host.
The optional second argument is the port number, which
defaults to the standard telnet port (23).
Don't try to reopen an already connected instance.
-
"""
self.eof = 0
if not port:
port = TELNET_PORT
self.host = host
self.port = port
- if timeout is not None:
- self.timeout = timeout
- self.sock = socket.create_connection((host, port), self.timeout)
+ self.timeout = timeout
+ self.sock = socket.create_connection((host, port), timeout)
def __del__(self):
"""Destructor -- close the connection."""
Modified: python/branches/tlee-ast-optimize/Lib/test/pydoc_mod.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/test/pydoc_mod.py (original)
+++ python/branches/tlee-ast-optimize/Lib/test/pydoc_mod.py Sun Jun 1 17:18:10 2008
@@ -25,30 +25,3 @@
def nodoc_func():
pass
-"""This is a test module for test_pydoc"""
-
-__author__ = "Benjamin Peterson"
-__credits__ = "Nobody"
-__version__ = "1.2.3.4"
-
-
-class A:
- """Hello and goodbye"""
- def __init__():
- """Wow, I have no function!"""
- pass
-
-class B(object):
- NO_MEANING = "eggs"
- pass
-
-def doc_func():
- """
- This function solves all of the world's problems:
- hunger
- lack of Python
- war
- """
-
-def nodoc_func():
- pass
Modified: python/branches/tlee-ast-optimize/Lib/test/test___all__.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/test/test___all__.py (original)
+++ python/branches/tlee-ast-optimize/Lib/test/test___all__.py Sun Jun 1 17:18:10 2008
@@ -144,6 +144,7 @@
self.check_all("tarfile")
self.check_all("telnetlib")
self.check_all("tempfile")
+ self.check_all("test.test_support")
self.check_all("textwrap")
self.check_all("threading")
self.check_all("timeit")
Modified: python/branches/tlee-ast-optimize/Lib/test/test_bsddb3.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/test/test_bsddb3.py (original)
+++ python/branches/tlee-ast-optimize/Lib/test/test_bsddb3.py Sun Jun 1 17:18:10 2008
@@ -52,13 +52,13 @@
def test_main():
from bsddb import db
from bsddb.test import test_all
- test_all.get_new_path.prefix = os.path.join(tempfile.gettempdir(),
- 'z-test_bsddb3-%s' %
- os.getpid())
+ test_all.set_test_path_prefix(os.path.join(tempfile.gettempdir(),
+ 'z-test_bsddb3-%s' %
+ os.getpid()))
# Please leave this print in, having this show up in the buildbots
# makes diagnosing problems a lot easier.
print >>sys.stderr, db.DB_VERSION_STRING
- print >>sys.stderr, 'Test path prefix: ', test_all.get_new_path.prefix
+ print >>sys.stderr, 'Test path prefix: ', test_all.get_test_path_prefix()
try:
run_unittest(test_all.suite(module_prefix='bsddb.test.',
timing_check=TimingCheck))
@@ -67,7 +67,7 @@
# one lying around. This might be by a different user, so just
# ignore errors. We should always make a unique name now.
try:
- rmtree(test_all.get_new_path.prefix)
+ test_all.remove_test_path_directory()
except:
pass
Modified: python/branches/tlee-ast-optimize/Lib/test/test_ftplib.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/test/test_ftplib.py (original)
+++ python/branches/tlee-ast-optimize/Lib/test/test_ftplib.py Sun Jun 1 17:18:10 2008
@@ -53,35 +53,52 @@
# connects
ftp = ftplib.FTP(HOST)
self.evt.wait()
- ftp.sock.close()
+ ftp.close()
def testTimeoutDefault(self):
- # default
- ftp = ftplib.FTP(HOST)
+ # default -- use global socket timeout
+ self.assert_(socket.getdefaulttimeout() is None)
+ socket.setdefaulttimeout(30)
+ try:
+ ftp = ftplib.FTP("localhost")
+ finally:
+ socket.setdefaulttimeout(None)
+ self.assertEqual(ftp.sock.gettimeout(), 30)
+ self.evt.wait()
+ ftp.close()
+
+ def testTimeoutNone(self):
+ # no timeout -- do not use global socket timeout
+ self.assert_(socket.getdefaulttimeout() is None)
+ socket.setdefaulttimeout(30)
+ try:
+ ftp = ftplib.FTP("localhost", timeout=None)
+ finally:
+ socket.setdefaulttimeout(None)
self.assertTrue(ftp.sock.gettimeout() is None)
self.evt.wait()
- ftp.sock.close()
+ ftp.close()
def testTimeoutValue(self):
# a value
ftp = ftplib.FTP(HOST, timeout=30)
self.assertEqual(ftp.sock.gettimeout(), 30)
self.evt.wait()
- ftp.sock.close()
+ ftp.close()
def testTimeoutConnect(self):
ftp = ftplib.FTP()
ftp.connect(HOST, timeout=30)
self.assertEqual(ftp.sock.gettimeout(), 30)
self.evt.wait()
- ftp.sock.close()
+ ftp.close()
def testTimeoutDifferentOrder(self):
ftp = ftplib.FTP(timeout=30)
ftp.connect(HOST)
self.assertEqual(ftp.sock.gettimeout(), 30)
self.evt.wait()
- ftp.sock.close()
+ ftp.close()
def testTimeoutDirectAccess(self):
ftp = ftplib.FTP()
@@ -89,18 +106,6 @@
ftp.connect(HOST)
self.assertEqual(ftp.sock.gettimeout(), 30)
self.evt.wait()
- ftp.sock.close()
-
- def testTimeoutNone(self):
- # None, having other default
- previous = socket.getdefaulttimeout()
- socket.setdefaulttimeout(30)
- try:
- ftp = ftplib.FTP(HOST, timeout=None)
- finally:
- socket.setdefaulttimeout(previous)
- self.assertEqual(ftp.sock.gettimeout(), 30)
- self.evt.wait()
ftp.close()
Modified: python/branches/tlee-ast-optimize/Lib/test/test_httplib.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/test/test_httplib.py (original)
+++ python/branches/tlee-ast-optimize/Lib/test/test_httplib.py Sun Jun 1 17:18:10 2008
@@ -214,27 +214,32 @@
'''This will prove that the timeout gets through
HTTPConnection and into the socket.
'''
- # default
- httpConn = httplib.HTTPConnection(HOST, TimeoutTest.PORT)
- httpConn.connect()
- self.assertTrue(httpConn.sock.gettimeout() is None)
- httpConn.close()
-
- # a value
- httpConn = httplib.HTTPConnection(HOST, TimeoutTest.PORT, timeout=30)
- httpConn.connect()
+ # default -- use global socket timeout
+ self.assert_(socket.getdefaulttimeout() is None)
+ socket.setdefaulttimeout(30)
+ try:
+ httpConn = httplib.HTTPConnection(HOST, TimeoutTest.PORT)
+ httpConn.connect()
+ finally:
+ socket.setdefaulttimeout(None)
self.assertEqual(httpConn.sock.gettimeout(), 30)
httpConn.close()
- # None, having other default
- previous = socket.getdefaulttimeout()
+ # no timeout -- do not use global socket default
+ self.assert_(socket.getdefaulttimeout() is None)
socket.setdefaulttimeout(30)
try:
httpConn = httplib.HTTPConnection(HOST, TimeoutTest.PORT,
timeout=None)
httpConn.connect()
finally:
- socket.setdefaulttimeout(previous)
+ socket.setdefaulttimeout(None)
+ self.assertEqual(httpConn.sock.gettimeout(), None)
+ httpConn.close()
+
+ # a value
+ httpConn = httplib.HTTPConnection(HOST, TimeoutTest.PORT, timeout=30)
+ httpConn.connect()
self.assertEqual(httpConn.sock.gettimeout(), 30)
httpConn.close()
Modified: python/branches/tlee-ast-optimize/Lib/test/test_math.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/test/test_math.py (original)
+++ python/branches/tlee-ast-optimize/Lib/test/test_math.py Sun Jun 1 17:18:10 2008
@@ -740,7 +740,7 @@
OverflowError),
([2.**1023, 2.**1023, -1e307], OverflowError),
([1e16, 1., 1e-16], 10000000000000002.0),
- ([1e16-2., 1.-2.**53, -(1e16-2.), -(1.-2.**53)], 0.0),
+ ([1e16-2., 1.-2.**-53, -(1e16-2.), -(1.-2.**-53)], 0.0),
]
for i, (vals, s) in enumerate(test_values):
Modified: python/branches/tlee-ast-optimize/Lib/test/test_poplib.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/test/test_poplib.py (original)
+++ python/branches/tlee-ast-optimize/Lib/test/test_poplib.py Sun Jun 1 17:18:10 2008
@@ -40,28 +40,29 @@
pop.sock.close()
def testTimeoutDefault(self):
- # default
- pop = poplib.POP3(HOST, self.port)
- self.assertTrue(pop.sock.gettimeout() is None)
- pop.sock.close()
-
- def testTimeoutValue(self):
- # a value
- pop = poplib.POP3(HOST, self.port, timeout=30)
+ self.assertTrue(socket.getdefaulttimeout() is None)
+ socket.setdefaulttimeout(30)
+ try:
+ pop = poplib.POP3("localhost", self.port)
+ finally:
+ socket.setdefaulttimeout(None)
self.assertEqual(pop.sock.gettimeout(), 30)
pop.sock.close()
def testTimeoutNone(self):
- # None, having other default
- previous = socket.getdefaulttimeout()
+ self.assertTrue(socket.getdefaulttimeout() is None)
socket.setdefaulttimeout(30)
try:
pop = poplib.POP3(HOST, self.port, timeout=None)
finally:
- socket.setdefaulttimeout(previous)
- self.assertEqual(pop.sock.gettimeout(), 30)
+ socket.setdefaulttimeout(None)
+ self.assertTrue(pop.sock.gettimeout() is None)
pop.sock.close()
+ def testTimeoutValue(self):
+ pop = poplib.POP3("localhost", self.port, timeout=30)
+ self.assertEqual(pop.sock.gettimeout(), 30)
+ pop.sock.close()
def test_main(verbose=None):
Modified: python/branches/tlee-ast-optimize/Lib/test/test_py3kwarn.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/test/test_py3kwarn.py (original)
+++ python/branches/tlee-ast-optimize/Lib/test/test_py3kwarn.py Sun Jun 1 17:18:10 2008
@@ -207,15 +207,32 @@
for path_mod in ("ntpath", "macpath", "os2emxpath", "posixpath"):
mod = __import__(path_mod)
with catch_warning() as w:
- # Since os3exmpath just imports it from ntpath
- warnings.simplefilter("always")
- mod.walk(".", dumbo, None)
+ mod.walk("crashers", dumbo, None)
self.assertEquals(str(w.message), msg)
+ def test_commands_members(self):
+ import commands
+ members = {"mk2arg" : 2, "mkarg" : 1, "getstatus" : 1}
+ for name, arg_count in members.items():
+ with catch_warning(record=False):
+ warnings.filterwarnings("error")
+ func = getattr(commands, name)
+ self.assertRaises(DeprecationWarning, func, *([None]*arg_count))
+
+ def test_mutablestring_removal(self):
+ # UserString.MutableString has been removed in 3.0.
+ import UserString
+ with catch_warning(record=False):
+ warnings.filterwarnings("error", ".*MutableString",
+ DeprecationWarning)
+ self.assertRaises(DeprecationWarning, UserString.MutableString)
+
def test_main():
- run_unittest(TestPy3KWarnings,
- TestStdlibRemovals)
+ with catch_warning(record=True):
+ warnings.simplefilter("always")
+ run_unittest(TestPy3KWarnings,
+ TestStdlibRemovals)
if __name__ == '__main__':
test_main()
Modified: python/branches/tlee-ast-optimize/Lib/test/test_smtplib.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/test/test_smtplib.py (original)
+++ python/branches/tlee-ast-optimize/Lib/test/test_smtplib.py Sun Jun 1 17:18:10 2008
@@ -54,41 +54,43 @@
def testBasic1(self):
# connects
smtp = smtplib.SMTP(HOST, self.port)
- smtp.sock.close()
+ smtp.close()
def testBasic2(self):
# connects, include port in host name
smtp = smtplib.SMTP("%s:%s" % (HOST, self.port))
- smtp.sock.close()
+ smtp.close()
def testLocalHostName(self):
# check that supplied local_hostname is used
smtp = smtplib.SMTP(HOST, self.port, local_hostname="testhost")
self.assertEqual(smtp.local_hostname, "testhost")
- smtp.sock.close()
+ smtp.close()
def testTimeoutDefault(self):
- # default
- smtp = smtplib.SMTP(HOST, self.port)
- self.assertTrue(smtp.sock.gettimeout() is None)
- smtp.sock.close()
-
- def testTimeoutValue(self):
- # a value
- smtp = smtplib.SMTP(HOST, self.port, timeout=30)
+ self.assertTrue(socket.getdefaulttimeout() is None)
+ socket.setdefaulttimeout(30)
+ try:
+ smtp = smtplib.SMTP(HOST, self.port)
+ finally:
+ socket.setdefaulttimeout(None)
self.assertEqual(smtp.sock.gettimeout(), 30)
- smtp.sock.close()
+ smtp.close()
def testTimeoutNone(self):
- # None, having other default
- previous = socket.getdefaulttimeout()
+ self.assertTrue(socket.getdefaulttimeout() is None)
socket.setdefaulttimeout(30)
try:
smtp = smtplib.SMTP(HOST, self.port, timeout=None)
finally:
- socket.setdefaulttimeout(previous)
+ socket.setdefaulttimeout(None)
+ self.assertTrue(smtp.sock.gettimeout() is None)
+ smtp.close()
+
+ def testTimeoutValue(self):
+ smtp = smtplib.SMTP(HOST, self.port, timeout=30)
self.assertEqual(smtp.sock.gettimeout(), 30)
- smtp.sock.close()
+ smtp.close()
# Test server thread using the specified SMTP server class
Modified: python/branches/tlee-ast-optimize/Lib/test/test_socket.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/test/test_socket.py (original)
+++ python/branches/tlee-ast-optimize/Lib/test/test_socket.py Sun Jun 1 17:18:10 2008
@@ -901,8 +901,25 @@
testTimeoutDefault = _justAccept
def _testTimeoutDefault(self):
- self.cli = socket.create_connection((HOST, self.port))
- self.assertTrue(self.cli.gettimeout() is None)
+ # passing no explicit timeout uses socket's global default
+ self.assert_(socket.getdefaulttimeout() is None)
+ socket.setdefaulttimeout(42)
+ try:
+ self.cli = socket.create_connection((HOST, self.port))
+ finally:
+ socket.setdefaulttimeout(None)
+ self.assertEquals(self.cli.gettimeout(), 42)
+
+ testTimeoutNone = _justAccept
+ def _testTimeoutNone(self):
+ # None timeout means the same as sock.settimeout(None)
+ self.assert_(socket.getdefaulttimeout() is None)
+ socket.setdefaulttimeout(30)
+ try:
+ self.cli = socket.create_connection((HOST, self.port), timeout=None)
+ finally:
+ socket.setdefaulttimeout(None)
+ self.assertEqual(self.cli.gettimeout(), None)
testTimeoutValueNamed = _justAccept
def _testTimeoutValueNamed(self):
@@ -914,17 +931,6 @@
self.cli = socket.create_connection((HOST, self.port), 30)
self.assertEqual(self.cli.gettimeout(), 30)
- testTimeoutNone = _justAccept
- def _testTimeoutNone(self):
- previous = socket.getdefaulttimeout()
- socket.setdefaulttimeout(30)
- try:
- self.cli = socket.create_connection((HOST, self.port), timeout=None)
- finally:
- socket.setdefaulttimeout(previous)
- self.assertEqual(self.cli.gettimeout(), 30)
-
-
class NetworkConnectionBehaviourTest(SocketTCPTest, ThreadableTest):
def __init__(self, methodName='runTest'):
Modified: python/branches/tlee-ast-optimize/Lib/test/test_subprocess.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/test/test_subprocess.py (original)
+++ python/branches/tlee-ast-optimize/Lib/test/test_subprocess.py Sun Jun 1 17:18:10 2008
@@ -287,14 +287,12 @@
stderr=subprocess.PIPE)
(stdout, stderr) = p.communicate()
self.assertEqual(stdout, None)
- # When running with a pydebug build, the # of references is outputted
- # to stderr, so just check if stderr at least started with "pinapple"
- self.assert_(stderr.startswith("pineapple"))
+ self.assertEqual(remove_stderr_debug_decorations(stderr), "pineapple")
def test_communicate(self):
p = subprocess.Popen([sys.executable, "-c",
- 'import sys,os;' \
- 'sys.stderr.write("pineapple");' \
+ 'import sys,os;'
+ 'sys.stderr.write("pineapple");'
'sys.stdout.write(sys.stdin.read())'],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
@@ -304,6 +302,22 @@
self.assertEqual(remove_stderr_debug_decorations(stderr),
"pineapple")
+ # This test is Linux specific for simplicity to at least have
+ # some coverage. It is not a platform specific bug.
+ if os.path.isdir('/proc/%d/fd' % os.getpid()):
+ # Test for the fd leak reported in http://bugs.python.org/issue2791.
+ def test_communicate_pipe_fd_leak(self):
+ fd_directory = '/proc/%d/fd' % os.getpid()
+ num_fds_before_popen = len(os.listdir(fd_directory))
+ p = subprocess.Popen([sys.executable, '-c', 'print()'],
+ stdout=subprocess.PIPE)
+ p.communicate()
+ num_fds_after_communicate = len(os.listdir(fd_directory))
+ del p
+ num_fds_after_destruction = len(os.listdir(fd_directory))
+ self.assertEqual(num_fds_before_popen, num_fds_after_destruction)
+ self.assertEqual(num_fds_before_popen, num_fds_after_communicate)
+
def test_communicate_returns(self):
# communicate() should return None if no redirection is active
p = subprocess.Popen([sys.executable, "-c",
Modified: python/branches/tlee-ast-optimize/Lib/test/test_support.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/test/test_support.py (original)
+++ python/branches/tlee-ast-optimize/Lib/test/test_support.py Sun Jun 1 17:18:10 2008
@@ -13,6 +13,19 @@
import warnings
import unittest
+__all__ = ["Error", "TestFailed", "TestSkipped", "ResourceDenied", "import_module",
+ "verbose", "use_resources", "max_memuse", "record_original_stdout",
+ "get_original_stdout", "unload", "unlink", "rmtree", "forget",
+ "is_resource_enabled", "requires", "find_unused_port", "bind_port",
+ "fcmp", "have_unicode", "is_jython", "TESTFN", "HOST", "FUZZ",
+ "findfile", "verify", "vereq", "sortdict", "check_syntax_error",
+ "open_urlresource", "WarningMessage", "catch_warning", "CleanImport",
+ "EnvironmentVarGuard", "TransientResource", "captured_output",
+ "captured_stdout", "TransientResource", "transient_internet",
+ "run_with_locale", "set_memlimit", "bigmemtest", "bigaddrspacetest",
+ "BasicTestRunner", "run_unittest", "run_doctest", "threading_setup",
+ "threading_cleanup", "reap_children"]
+
class Error(Exception):
"""Base class for regression test exceptions."""
@@ -584,11 +597,7 @@
_1G = 1024 * _1M
_2G = 2 * _1G
-# Hack to get at the maximum value an internal index can take.
-class _Dummy:
- def __getslice__(self, i, j):
- return j
-MAX_Py_ssize_t = _Dummy()[:]
+MAX_Py_ssize_t = sys.maxsize
def set_memlimit(limit):
import re
Modified: python/branches/tlee-ast-optimize/Lib/test/test_sys.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/test/test_sys.py (original)
+++ python/branches/tlee-ast-optimize/Lib/test/test_sys.py Sun Jun 1 17:18:10 2008
@@ -385,6 +385,26 @@
## self.assert_(r[0][2] > 100, r[0][2])
## self.assert_(r[1][2] > 100, r[1][2])
+ def test_ioencoding(self):
+ import subprocess,os
+ env = dict(os.environ)
+
+ # Test character: cent sign, encoded as 0x4A (ASCII J) in CP424,
+ # not representable in ASCII.
+
+ env["PYTHONIOENCODING"] = "cp424"
+ p = subprocess.Popen([sys.executable, "-c", 'print unichr(0xa2)'],
+ stdout = subprocess.PIPE, env=env)
+ out = p.stdout.read().strip()
+ self.assertEqual(out, unichr(0xa2).encode("cp424"))
+
+ env["PYTHONIOENCODING"] = "ascii:replace"
+ p = subprocess.Popen([sys.executable, "-c", 'print unichr(0xa2)'],
+ stdout = subprocess.PIPE, env=env)
+ out = p.stdout.read().strip()
+ self.assertEqual(out, '?')
+
+
def test_main():
test.test_support.run_unittest(SysModuleTest)
Modified: python/branches/tlee-ast-optimize/Lib/test/test_tarfile.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/test/test_tarfile.py (original)
+++ python/branches/tlee-ast-optimize/Lib/test/test_tarfile.py Sun Jun 1 17:18:10 2008
@@ -529,7 +529,19 @@
self.assertEqual(float(tarinfo.pax_headers["ctime"]), 1041808783.0)
-class WriteTest(unittest.TestCase):
+class WriteTestBase(unittest.TestCase):
+ # Put all write tests in here that are supposed to be tested
+ # in all possible mode combinations.
+
+ def test_fileobj_no_close(self):
+ fobj = StringIO.StringIO()
+ tar = tarfile.open(fileobj=fobj, mode=self.mode)
+ tar.addfile(tarfile.TarInfo("foo"))
+ tar.close()
+ self.assert_(fobj.closed is False, "external fileobjs must never closed")
+
+
+class WriteTest(WriteTestBase):
mode = "w:"
@@ -652,7 +664,7 @@
shutil.rmtree(tempdir)
-class StreamWriteTest(unittest.TestCase):
+class StreamWriteTest(WriteTestBase):
mode = "w|"
Modified: python/branches/tlee-ast-optimize/Lib/test/test_telnetlib.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/test/test_telnetlib.py (original)
+++ python/branches/tlee-ast-optimize/Lib/test/test_telnetlib.py Sun Jun 1 17:18:10 2008
@@ -40,34 +40,36 @@
telnet.sock.close()
def testTimeoutDefault(self):
- # default
- telnet = telnetlib.Telnet(HOST, self.port)
- self.assertTrue(telnet.sock.gettimeout() is None)
- telnet.sock.close()
-
- def testTimeoutValue(self):
- # a value
- telnet = telnetlib.Telnet(HOST, self.port, timeout=30)
- self.assertEqual(telnet.sock.gettimeout(), 30)
- telnet.sock.close()
-
- def testTimeoutDifferentOrder(self):
- telnet = telnetlib.Telnet(timeout=30)
- telnet.open(HOST, self.port)
+ self.assertTrue(socket.getdefaulttimeout() is None)
+ socket.setdefaulttimeout(30)
+ try:
+ telnet = telnetlib.Telnet("localhost", self.port)
+ finally:
+ socket.setdefaulttimeout(None)
self.assertEqual(telnet.sock.gettimeout(), 30)
telnet.sock.close()
def testTimeoutNone(self):
# None, having other default
- previous = socket.getdefaulttimeout()
+ self.assertTrue(socket.getdefaulttimeout() is None)
socket.setdefaulttimeout(30)
try:
telnet = telnetlib.Telnet(HOST, self.port, timeout=None)
finally:
- socket.setdefaulttimeout(previous)
+ socket.setdefaulttimeout(None)
+ self.assertTrue(telnet.sock.gettimeout() is None)
+ telnet.sock.close()
+
+ def testTimeoutValue(self):
+ telnet = telnetlib.Telnet("localhost", self.port, timeout=30)
self.assertEqual(telnet.sock.gettimeout(), 30)
telnet.sock.close()
+ def testTimeoutOpen(self):
+ telnet = telnetlib.Telnet()
+ telnet.open("localhost", self.port, timeout=30)
+ self.assertEqual(telnet.sock.gettimeout(), 30)
+ telnet.sock.close()
def test_main(verbose=None):
Modified: python/branches/tlee-ast-optimize/Lib/test/test_urllib.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/test/test_urllib.py (original)
+++ python/branches/tlee-ast-optimize/Lib/test/test_urllib.py Sun Jun 1 17:18:10 2008
@@ -568,6 +568,7 @@
# . Facundo
#
# def server(evt):
+# import socket, time
# serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# serv.settimeout(3)
# serv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
@@ -592,6 +593,7 @@
# class FTPWrapperTests(unittest.TestCase):
#
# def setUp(self):
+# import ftplib, time, threading
# ftplib.FTP.port = 9093
# self.evt = threading.Event()
# threading.Thread(target=server, args=(self.evt,)).start()
@@ -603,31 +605,37 @@
# def testBasic(self):
# # connects
# ftp = urllib.ftpwrapper("myuser", "mypass", "localhost", 9093, [])
-# ftp.ftp.sock.close()
+# ftp.close()
#
-# def testTimeoutDefault(self):
-# # default
-# ftp = urllib.ftpwrapper("myuser", "mypass", "localhost", 9093, [])
-# self.assertTrue(ftp.ftp.sock.gettimeout() is None)
-# ftp.ftp.sock.close()
-#
-# def testTimeoutValue(self):
-# # a value
-# ftp = urllib.ftpwrapper("myuser", "mypass", "localhost", 9093, [], timeout=30)
+# def testTimeoutNone(self):
+# # global default timeout is ignored
+# import socket
+# self.assert_(socket.getdefaulttimeout() is None)
+# socket.setdefaulttimeout(30)
+# try:
+# ftp = urllib.ftpwrapper("myuser", "mypass", "localhost", 9093, [])
+# finally:
+# socket.setdefaulttimeout(None)
# self.assertEqual(ftp.ftp.sock.gettimeout(), 30)
-# ftp.ftp.sock.close()
+# ftp.close()
#
-# def testTimeoutNone(self):
-# # None, having other default
-# previous = socket.getdefaulttimeout()
+# def testTimeoutDefault(self):
+# # global default timeout is used
+# import socket
+# self.assert_(socket.getdefaulttimeout() is None)
# socket.setdefaulttimeout(30)
# try:
# ftp = urllib.ftpwrapper("myuser", "mypass", "localhost", 9093, [])
# finally:
-# socket.setdefaulttimeout(previous)
+# socket.setdefaulttimeout(None)
# self.assertEqual(ftp.ftp.sock.gettimeout(), 30)
-# ftp.ftp.close()
+# ftp.close()
#
+# def testTimeoutValue(self):
+# ftp = urllib.ftpwrapper("myuser", "mypass", "localhost", 9093, [],
+# timeout=30)
+# self.assertEqual(ftp.ftp.sock.gettimeout(), 30)
+# ftp.close()
Modified: python/branches/tlee-ast-optimize/Lib/test/test_urllib2.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/test/test_urllib2.py (original)
+++ python/branches/tlee-ast-optimize/Lib/test/test_urllib2.py Sun Jun 1 17:18:10 2008
@@ -2,6 +2,7 @@
from test import test_support
import os
+import socket
import StringIO
import urllib2
@@ -551,14 +552,15 @@
class NullFTPHandler(urllib2.FTPHandler):
def __init__(self, data): self.data = data
- def connect_ftp(self, user, passwd, host, port, dirs, timeout=None):
+ def connect_ftp(self, user, passwd, host, port, dirs,
+ timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
self.user, self.passwd = user, passwd
self.host, self.port = host, port
self.dirs = dirs
self.ftpwrapper = MockFTPWrapper(self.data)
return self.ftpwrapper
- import ftplib, socket
+ import ftplib
data = "rheum rhaponicum"
h = NullFTPHandler(data)
o = h.parent = MockOpener()
@@ -691,7 +693,7 @@
self.req_headers = []
self.data = None
self.raise_on_endheaders = False
- def __call__(self, host, timeout=None):
+ def __call__(self, host, timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
self.host = host
self.timeout = timeout
return self
Modified: python/branches/tlee-ast-optimize/Lib/test/test_urllib2net.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/test/test_urllib2net.py (original)
+++ python/branches/tlee-ast-optimize/Lib/test/test_urllib2net.py Sun Jun 1 17:18:10 2008
@@ -189,46 +189,58 @@
class TimeoutTest(unittest.TestCase):
def test_http_basic(self):
+ self.assertTrue(socket.getdefaulttimeout() is None)
u = _urlopen_with_retry("http://www.python.org")
self.assertTrue(u.fp._sock.fp._sock.gettimeout() is None)
- def test_http_NoneWithdefault(self):
- prev = socket.getdefaulttimeout()
+ def test_http_default_timeout(self):
+ self.assertTrue(socket.getdefaulttimeout() is None)
+ socket.setdefaulttimeout(60)
+ try:
+ u = _urlopen_with_retry("http://www.python.org")
+ finally:
+ socket.setdefaulttimeout(None)
+ self.assertEqual(u.fp._sock.fp._sock.gettimeout(), 60)
+
+ def test_http_no_timeout(self):
+ self.assertTrue(socket.getdefaulttimeout() is None)
socket.setdefaulttimeout(60)
try:
u = _urlopen_with_retry("http://www.python.org", timeout=None)
- self.assertEqual(u.fp._sock.fp._sock.gettimeout(), 60)
finally:
- socket.setdefaulttimeout(prev)
+ socket.setdefaulttimeout(None)
+ self.assertTrue(u.fp._sock.fp._sock.gettimeout() is None)
- def test_http_Value(self):
+ def test_http_timeout(self):
u = _urlopen_with_retry("http://www.python.org", timeout=120)
self.assertEqual(u.fp._sock.fp._sock.gettimeout(), 120)
- def test_http_NoneNodefault(self):
- u = _urlopen_with_retry("http://www.python.org", timeout=None)
- self.assertTrue(u.fp._sock.fp._sock.gettimeout() is None)
-
FTP_HOST = "ftp://ftp.mirror.nl/pub/mirror/gnu/"
def test_ftp_basic(self):
+ self.assertTrue(socket.getdefaulttimeout() is None)
u = _urlopen_with_retry(self.FTP_HOST)
self.assertTrue(u.fp.fp._sock.gettimeout() is None)
- def test_ftp_NoneWithdefault(self):
- prev = socket.getdefaulttimeout()
+ def test_ftp_default_timeout(self):
+ self.assertTrue(socket.getdefaulttimeout() is None)
socket.setdefaulttimeout(60)
try:
- u = _urlopen_with_retry(self.FTP_HOST, timeout=None)
- self.assertEqual(u.fp.fp._sock.gettimeout(), 60)
+ u = _urlopen_with_retry(self.FTP_HOST)
finally:
- socket.setdefaulttimeout(prev)
+ socket.setdefaulttimeout(None)
+ self.assertEqual(u.fp.fp._sock.gettimeout(), 60)
- def test_ftp_NoneNodefault(self):
- u = _urlopen_with_retry(self.FTP_HOST, timeout=None)
+ def test_ftp_no_timeout(self):
+ self.assertTrue(socket.getdefaulttimeout() is None)
+ socket.setdefaulttimeout(60)
+ try:
+ u = _urlopen_with_retry(self.FTP_HOST, timeout=None)
+ finally:
+ socket.setdefaulttimeout(None)
self.assertTrue(u.fp.fp._sock.gettimeout() is None)
- def test_ftp_Value(self):
+ def test_ftp_timeout(self):
u = _urlopen_with_retry(self.FTP_HOST, timeout=60)
self.assertEqual(u.fp.fp._sock.gettimeout(), 60)
Modified: python/branches/tlee-ast-optimize/Lib/test/test_userstring.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/test/test_userstring.py (original)
+++ python/branches/tlee-ast-optimize/Lib/test/test_userstring.py Sun Jun 1 17:18:10 2008
@@ -4,8 +4,8 @@
import string
from test import test_support, string_tests
-
from UserString import UserString, MutableString
+import warnings
class UserStringTest(
string_tests.CommonTest,
@@ -135,7 +135,10 @@
self.assertEqual(s, "")
def test_main():
- test_support.run_unittest(UserStringTest, MutableStringTest)
+ with test_support.catch_warning(record=False):
+ warnings.filterwarnings("ignore", ".*MutableString",
+ DeprecationWarning)
+ test_support.run_unittest(UserStringTest, MutableStringTest)
if __name__ == "__main__":
test_main()
Modified: python/branches/tlee-ast-optimize/Lib/urllib.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/urllib.py (original)
+++ python/branches/tlee-ast-optimize/Lib/urllib.py Sun Jun 1 17:18:10 2008
@@ -832,7 +832,8 @@
class ftpwrapper:
"""Class used by open_ftp() for cache of open FTP connections."""
- def __init__(self, user, passwd, host, port, dirs, timeout=None):
+ def __init__(self, user, passwd, host, port, dirs,
+ timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
self.user = user
self.passwd = passwd
self.host = host
Modified: python/branches/tlee-ast-optimize/Lib/urllib2.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/urllib2.py (original)
+++ python/branches/tlee-ast-optimize/Lib/urllib2.py Sun Jun 1 17:18:10 2008
@@ -117,7 +117,7 @@
__version__ = sys.version[:3]
_opener = None
-def urlopen(url, data=None, timeout=None):
+def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
global _opener
if _opener is None:
_opener = build_opener()
@@ -359,7 +359,7 @@
if result is not None:
return result
- def open(self, fullurl, data=None, timeout=None):
+ def open(self, fullurl, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
# accept a URL or a Request object
if isinstance(fullurl, basestring):
req = Request(fullurl, data)
Modified: python/branches/tlee-ast-optimize/Lib/xmlrpclib.py
==============================================================================
--- python/branches/tlee-ast-optimize/Lib/xmlrpclib.py (original)
+++ python/branches/tlee-ast-optimize/Lib/xmlrpclib.py Sun Jun 1 17:18:10 2008
@@ -897,6 +897,7 @@
self.append(int(data))
self._value = 0
dispatch["i4"] = end_int
+ dispatch["i8"] = end_int
dispatch["int"] = end_int
def end_double(self, data):
Modified: python/branches/tlee-ast-optimize/Mac/Modules/MacOS.c
==============================================================================
--- python/branches/tlee-ast-optimize/Mac/Modules/MacOS.c (original)
+++ python/branches/tlee-ast-optimize/Mac/Modules/MacOS.c Sun Jun 1 17:18:10 2008
@@ -77,17 +77,17 @@
if (!PyArg_ParseTuple(args, "l", &n))
return NULL;
- v = PyString_FromStringAndSize((char *)NULL, n);
+ v = PyBytes_FromStringAndSize((char *)NULL, n);
if (v == NULL)
return NULL;
- err = FSRead(self->fRefNum, &n, PyString_AsString(v));
+ err = FSRead(self->fRefNum, &n, PyBytes_AsString(v));
if (err && err != eofErr) {
PyMac_Error(err);
Py_DECREF(v);
return NULL;
}
- _PyString_Resize(&v, n);
+ _PyBytes_Resize(&v, n);
return v;
}
@@ -301,8 +301,8 @@
return NULL;
if ((err = FSpGetFInfo(&fss, &info)) != noErr)
return PyErr_Mac(MacOS_Error, err);
- creator = PyString_FromStringAndSize((char *)&info.fdCreator, 4);
- type = PyString_FromStringAndSize((char *)&info.fdType, 4);
+ creator = PyBytes_FromStringAndSize((char *)&info.fdCreator, 4);
+ type = PyBytes_FromStringAndSize((char *)&info.fdType, 4);
res = Py_BuildValue("OO", creator, type);
Py_DECREF(creator);
Py_DECREF(type);
@@ -623,7 +623,7 @@
** some of the image and sound processing interfaces on the mac:-(
*/
{
- PyStringObject *p = 0;
+ PyBytesObject *p = 0;
long off = (long)&(p->ob_sval[0]);
if( PyDict_SetItemString(d, "string_id_to_buffer", Py_BuildValue("i", off)) != 0)
Modified: python/branches/tlee-ast-optimize/Mac/Modules/Nav.c
==============================================================================
--- python/branches/tlee-ast-optimize/Mac/Modules/Nav.c (original)
+++ python/branches/tlee-ast-optimize/Mac/Modules/Nav.c Sun Jun 1 17:18:10 2008
@@ -139,11 +139,11 @@
NavGetDefaultDialogOptions(opt);
while ( PyDict_Next(d, &pos, &key, &value) ) {
- if ( !key || !value || !PyString_Check(key) ) {
+ if ( !key || !value || !PyBytes_Check(key) ) {
PyErr_SetString(ErrorObject, "DialogOption has non-string key");
return 0;
}
- keystr = PyString_AsString(key);
+ keystr = PyBytes_AsString(key);
if( strcmp(keystr, "defaultLocation") == 0 ) {
if ( (defaultLocation_storage = PyMem_NEW(AEDesc, 1)) == NULL ) {
PyErr_NoMemory();
@@ -932,7 +932,7 @@
/* Add some symbolic constants to the module */
d = PyModule_GetDict(m);
- ErrorObject = PyString_FromString("Nav.error");
+ ErrorObject = PyBytes_FromString("Nav.error");
PyDict_SetItemString(d, "error", ErrorObject);
/* XXXX Add constants here */
Modified: python/branches/tlee-ast-optimize/Mac/Modules/ae/_AEmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Mac/Modules/ae/_AEmodule.c (original)
+++ python/branches/tlee-ast-optimize/Mac/Modules/ae/_AEmodule.c Sun Jun 1 17:18:10 2008
@@ -835,9 +835,9 @@
OSErr err;
size = AEGetDescDataSize(&self->ob_itself);
- if ( (res = PyString_FromStringAndSize(NULL, size)) == NULL )
+ if ( (res = PyBytes_FromStringAndSize(NULL, size)) == NULL )
return NULL;
- if ( (ptr = PyString_AsString(res)) == NULL )
+ if ( (ptr = PyBytes_AsString(res)) == NULL )
return NULL;
if ( (err=AEGetDescData(&self->ob_itself, ptr, size)) < 0 )
return PyMac_Error(err);
Modified: python/branches/tlee-ast-optimize/Mac/Modules/cf/_CFmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Mac/Modules/cf/_CFmodule.c (original)
+++ python/branches/tlee-ast-optimize/Mac/Modules/cf/_CFmodule.c Sun Jun 1 17:18:10 2008
@@ -392,7 +392,7 @@
{
char buf[100];
sprintf(buf, "<CFTypeRef type-%d object at 0x%8.8x for 0x%8.8x>", (int)CFGetTypeID(self->ob_itself), (unsigned)self, (unsigned)self->ob_itself);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
static int CFTypeRefObj_hash(CFTypeRefObject *self)
@@ -596,7 +596,7 @@
{
char buf[100];
sprintf(buf, "<CFArrayRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
static int CFArrayRefObj_hash(CFArrayRefObject *self)
@@ -836,7 +836,7 @@
{
char buf[100];
sprintf(buf, "<CFMutableArrayRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
static int CFMutableArrayRefObj_hash(CFMutableArrayRefObject *self)
@@ -1029,7 +1029,7 @@
{
char buf[100];
sprintf(buf, "<CFDictionaryRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
static int CFDictionaryRefObj_hash(CFDictionaryRefObject *self)
@@ -1206,7 +1206,7 @@
{
char buf[100];
sprintf(buf, "<CFMutableDictionaryRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
static int CFMutableDictionaryRefObj_hash(CFMutableDictionaryRefObject *self)
@@ -1327,10 +1327,10 @@
{
if (v == Py_None) { *p_itself = NULL; return 1; }
- if (PyString_Check(v)) {
+ if (PyBytes_Check(v)) {
char *cStr;
Py_ssize_t cLen;
- if( PyString_AsStringAndSize(v, &cStr, &cLen) < 0 ) return 0;
+ if( PyBytes_AsStringAndSize(v, &cStr, &cLen) < 0 ) return 0;
*p_itself = CFDataCreate((CFAllocatorRef)NULL, (unsigned char *)cStr, cLen);
return 1;
}
@@ -1405,7 +1405,7 @@
int size = CFDataGetLength(_self->ob_itself);
char *data = (char *)CFDataGetBytePtr(_self->ob_itself);
- _res = (PyObject *)PyString_FromStringAndSize(data, size);
+ _res = (PyObject *)PyBytes_FromStringAndSize(data, size);
return _res;
}
@@ -1437,7 +1437,7 @@
{
char buf[100];
sprintf(buf, "<CFDataRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
static int CFDataRefObj_hash(CFDataRefObject *self)
@@ -1702,7 +1702,7 @@
{
char buf[100];
sprintf(buf, "<CFMutableDataRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
static int CFMutableDataRefObj_hash(CFMutableDataRefObject *self)
@@ -1823,7 +1823,7 @@
{
if (v == Py_None) { *p_itself = NULL; return 1; }
- if (PyString_Check(v)) {
+ if (PyBytes_Check(v)) {
char *cStr;
if (!PyArg_Parse(v, "es", "ascii", &cStr))
return 0;
@@ -2344,7 +2344,7 @@
if( data == NULL ) return PyErr_NoMemory();
if ( CFStringGetCString(_self->ob_itself, data, size, 0) ) {
- _res = (PyObject *)PyString_FromString(data);
+ _res = (PyObject *)PyBytes_FromString(data);
} else {
PyErr_SetString(PyExc_RuntimeError, "CFStringGetCString could not fit the string");
_res = NULL;
@@ -2445,7 +2445,7 @@
{
char buf[100];
sprintf(buf, "<CFStringRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
static int CFStringRefObj_hash(CFStringRefObject *self)
@@ -2833,7 +2833,7 @@
{
char buf[100];
sprintf(buf, "<CFMutableStringRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
static int CFMutableStringRefObj_hash(CFMutableStringRefObject *self)
@@ -3485,7 +3485,7 @@
{
char buf[100];
sprintf(buf, "<CFURL object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
static int CFURLRefObj_hash(CFURLRefObject *self)
Modified: python/branches/tlee-ast-optimize/Mac/Modules/cf/pycfbridge.c
==============================================================================
--- python/branches/tlee-ast-optimize/Mac/Modules/cf/pycfbridge.c (original)
+++ python/branches/tlee-ast-optimize/Mac/Modules/cf/pycfbridge.c Sun Jun 1 17:18:10 2008
@@ -146,7 +146,7 @@
int
PyCF_Python2CF(PyObject *src, CFTypeRef *dst) {
- if (PyString_Check(src) || PyUnicode_Check(src))
+ if (PyBytes_Check(src) || PyUnicode_Check(src))
return PyCF_Python2CF_simple(src, dst);
if (PySequence_Check(src))
return PyCF_Python2CF_sequence(src, (CFArrayRef *)dst);
@@ -249,7 +249,7 @@
return (*dst != NULL);
}
#endif
- if (PyString_Check(src) || PyUnicode_Check(src))
+ if (PyBytes_Check(src) || PyUnicode_Check(src))
return PyCF_Python2CF_string(src, (CFStringRef *)dst);
if (PyBool_Check(src)) {
if (src == Py_True)
@@ -281,7 +281,7 @@
CFIndex size;
UniChar *unichars;
- if (PyString_Check(src)) {
+ if (PyBytes_Check(src)) {
if (!PyArg_Parse(src, "es", "ascii", &chars))
return 0; /* This error is more descriptive than the general one below */
*dst = CFStringCreateWithCString((CFAllocatorRef)NULL, chars, kCFStringEncodingASCII);
Modified: python/branches/tlee-ast-optimize/Mac/Modules/file/_Filemodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Mac/Modules/file/_Filemodule.c (original)
+++ python/branches/tlee-ast-optimize/Mac/Modules/file/_Filemodule.c Sun Jun 1 17:18:10 2008
@@ -915,7 +915,7 @@
size = GetHandleSize((Handle)self->ob_itself);
HLock((Handle)self->ob_itself);
- rv = PyString_FromStringAndSize(*(Handle)self->ob_itself, size);
+ rv = PyBytes_FromStringAndSize(*(Handle)self->ob_itself, size);
HUnlock((Handle)self->ob_itself);
return rv;
@@ -1315,7 +1315,7 @@
PyMac_Error(err);
return NULL;
}
- _res = PyString_FromString(strbuf);
+ _res = PyBytes_FromString(strbuf);
return _res;
}
@@ -1372,7 +1372,7 @@
static PyObject *FSSpec_get_data(FSSpecObject *self, void *closure)
{
- return PyString_FromStringAndSize((char *)&self->ob_itself, sizeof(self->ob_itself));
+ return PyBytes_FromStringAndSize((char *)&self->ob_itself, sizeof(self->ob_itself));
}
#define FSSpec_set_data NULL
@@ -1393,7 +1393,7 @@
self->ob_itself.vRefNum,
self->ob_itself.parID,
self->ob_itself.name[0], self->ob_itself.name+1);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
#define FSSpec_hash NULL
@@ -1925,7 +1925,7 @@
static PyObject *FSRef_get_data(FSRefObject *self, void *closure)
{
- return PyString_FromStringAndSize((char *)&self->ob_itself, sizeof(self->ob_itself));
+ return PyBytes_FromStringAndSize((char *)&self->ob_itself, sizeof(self->ob_itself));
}
#define FSRef_set_data NULL
@@ -3038,7 +3038,7 @@
if (!PyArg_ParseTuple(_args, "O", &obj))
return NULL;
- if (PyString_Check(obj)) {
+ if (PyBytes_Check(obj)) {
Py_INCREF(obj);
return obj;
}
@@ -3201,7 +3201,7 @@
}
/* On OSX we now try a pathname */
- if ( PyString_Check(v) || PyUnicode_Check(v)) {
+ if ( PyBytes_Check(v) || PyUnicode_Check(v)) {
char *path = NULL;
if (!PyArg_Parse(v, "et", Py_FileSystemDefaultEncoding, &path))
return 0;
Modified: python/branches/tlee-ast-optimize/Mac/Modules/qd/_Qdmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Mac/Modules/qd/_Qdmodule.c (original)
+++ python/branches/tlee-ast-optimize/Mac/Modules/qd/_Qdmodule.c Sun Jun 1 17:18:10 2008
@@ -1457,7 +1457,7 @@
if ( !PyArg_ParseTuple(_args, "ii", &from, &length) )
return NULL;
cp = _self->ob_itself->baseAddr+from;
- _res = PyString_FromStringAndSize(cp, length);
+ _res = PyBytes_FromStringAndSize(cp, length);
return _res;
}
@@ -1510,14 +1510,14 @@
static PyObject *BMObj_get_bitmap_data(BitMapObject *self, void *closure)
{
- return PyString_FromStringAndSize((char *)self->ob_itself, sizeof(BitMap));
+ return PyBytes_FromStringAndSize((char *)self->ob_itself, sizeof(BitMap));
}
#define BMObj_set_bitmap_data NULL
static PyObject *BMObj_get_pixmap_data(BitMapObject *self, void *closure)
{
- return PyString_FromStringAndSize((char *)self->ob_itself, sizeof(PixMap));
+ return PyBytes_FromStringAndSize((char *)self->ob_itself, sizeof(PixMap));
}
#define BMObj_set_pixmap_data NULL
@@ -6500,10 +6500,10 @@
int rowbytes;
char *data;
- if ( !PyArg_ParseTuple(_args, "O!iO&", &PyString_Type, &source, &rowbytes, PyMac_GetRect,
+ if ( !PyArg_ParseTuple(_args, "O!iO&", &PyBytes_Type, &source, &rowbytes, PyMac_GetRect,
&bounds) )
return NULL;
- data = PyString_AsString(source);
+ data = PyBytes_AsString(source);
if ((ptr=(BitMap *)malloc(sizeof(BitMap))) == NULL )
return PyErr_NoMemory();
ptr->baseAddr = (Ptr)data;
@@ -6527,15 +6527,15 @@
BitMap *ptr;
PyObject *source;
- if ( !PyArg_ParseTuple(_args, "O!", &PyString_Type, &source) )
+ if ( !PyArg_ParseTuple(_args, "O!", &PyBytes_Type, &source) )
return NULL;
- if ( PyString_Size(source) != sizeof(BitMap) && PyString_Size(source) != sizeof(PixMap) ) {
+ if ( PyBytes_Size(source) != sizeof(BitMap) && PyBytes_Size(source) != sizeof(PixMap) ) {
PyErr_Format(PyExc_TypeError,
"Argument size was %ld, should be %lu (sizeof BitMap) or %lu (sizeof PixMap)",
- PyString_Size(source), sizeof(BitMap), sizeof(PixMap));
+ PyBytes_Size(source), sizeof(BitMap), sizeof(PixMap));
return NULL;
}
- ptr = (BitMapPtr)PyString_AsString(source);
+ ptr = (BitMapPtr)PyBytes_AsString(source);
if ( (_res = BMObj_New(ptr)) == NULL ) {
return NULL;
}
Modified: python/branches/tlee-ast-optimize/Mac/Modules/qdoffs/_Qdoffsmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Mac/Modules/qdoffs/_Qdoffsmodule.c (original)
+++ python/branches/tlee-ast-optimize/Mac/Modules/qdoffs/_Qdoffsmodule.c Sun Jun 1 17:18:10 2008
@@ -608,7 +608,7 @@
if ( !PyArg_ParseTuple(_args, "O&ii", ResObj_Convert, &pm, &from, &length) )
return NULL;
cp = GetPixBaseAddr(pm)+from;
- _res = PyString_FromStringAndSize(cp, length);
+ _res = PyBytes_FromStringAndSize(cp, length);
return _res;
}
Modified: python/branches/tlee-ast-optimize/Mac/Modules/res/_Resmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Mac/Modules/res/_Resmodule.c (original)
+++ python/branches/tlee-ast-optimize/Mac/Modules/res/_Resmodule.c Sun Jun 1 17:18:10 2008
@@ -520,7 +520,7 @@
state = HGetState(self->ob_itself);
HLock(self->ob_itself);
- res = PyString_FromStringAndSize(
+ res = PyBytes_FromStringAndSize(
*self->ob_itself,
GetHandleSize(self->ob_itself));
HUnlock(self->ob_itself);
@@ -537,10 +537,10 @@
if ( v == NULL )
return -1;
- if ( !PyString_Check(v) )
+ if ( !PyBytes_Check(v) )
return -1;
- size = PyString_Size(v);
- data = PyString_AsString(v);
+ size = PyBytes_Size(v);
+ data = PyBytes_AsString(v);
/* XXXX Do I need the GetState/SetState calls? */
SetHandleSize(self->ob_itself, size);
if ( MemError())
Modified: python/branches/tlee-ast-optimize/Mac/Modules/scrap/_Scrapmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Mac/Modules/scrap/_Scrapmodule.c (original)
+++ python/branches/tlee-ast-optimize/Mac/Modules/scrap/_Scrapmodule.c Sun Jun 1 17:18:10 2008
@@ -105,12 +105,12 @@
flavorType,
&byteCount);
if (_err != noErr) return PyMac_Error(_err);
- _res = PyString_FromStringAndSize(NULL, (int)byteCount);
+ _res = PyBytes_FromStringAndSize(NULL, (int)byteCount);
if ( _res == NULL ) return NULL;
_err = GetScrapFlavorData(_self->ob_itself,
flavorType,
&byteCount,
- PyString_AS_STRING(_res));
+ PyBytes_AS_STRING(_res));
if (_err != noErr) {
Py_XDECREF(_res);
return PyMac_Error(_err);
Modified: python/branches/tlee-ast-optimize/Mac/Modules/snd/_Sndihooks.c
==============================================================================
--- python/branches/tlee-ast-optimize/Mac/Modules/snd/_Sndihooks.c (original)
+++ python/branches/tlee-ast-optimize/Mac/Modules/snd/_Sndihooks.c Sun Jun 1 17:18:10 2008
@@ -500,7 +500,7 @@
/* Add some symbolic constants to the module */
d = PyModule_GetDict(m);
- ErrorObject = PyString_FromString("Sndihooks.error");
+ ErrorObject = PyBytes_FromString("Sndihooks.error");
PyDict_SetItemString(d, "error", ErrorObject);
/* XXXX Add constants here */
Modified: python/branches/tlee-ast-optimize/Mac/Modules/win/_Winmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Mac/Modules/win/_Winmodule.c (original)
+++ python/branches/tlee-ast-optimize/Mac/Modules/win/_Winmodule.c Sun Jun 1 17:18:10 2008
@@ -2580,7 +2580,7 @@
{
char buf[100];
sprintf(buf, "<Window object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
static int WinObj_hash(WindowObject *self)
Modified: python/branches/tlee-ast-optimize/Makefile.pre.in
==============================================================================
--- python/branches/tlee-ast-optimize/Makefile.pre.in (original)
+++ python/branches/tlee-ast-optimize/Makefile.pre.in Sun Jun 1 17:18:10 2008
@@ -303,6 +303,7 @@
Objects/boolobject.o \
Objects/bufferobject.o \
Objects/bytes_methods.o \
+ Objects/bytearrayobject.o \
Objects/bytesobject.o \
Objects/cellobject.o \
Objects/classobject.o \
@@ -329,7 +330,6 @@
Objects/rangeobject.o \
Objects/setobject.o \
Objects/sliceobject.o \
- Objects/stringobject.o \
Objects/structseq.o \
Objects/tupleobject.o \
Objects/typeobject.o \
@@ -585,6 +585,7 @@
Include/bitset.h \
Include/boolobject.h \
Include/bytes_methods.h \
+ Include/bytearrayobject.h \
Include/bytesobject.h \
Include/bufferobject.h \
Include/cellobject.h \
Modified: python/branches/tlee-ast-optimize/Misc/NEWS
==============================================================================
--- python/branches/tlee-ast-optimize/Misc/NEWS (original)
+++ python/branches/tlee-ast-optimize/Misc/NEWS Sun Jun 1 17:18:10 2008
@@ -12,6 +12,8 @@
Core and Builtins
-----------------
+- New environment variable PYTHONIOENCODING.
+
- Patch #2488: Add sys.maxsize.
- Issue #2353: file.xreadlines() now emits a Py3k warning.
@@ -36,6 +38,9 @@
Extension Modules
-----------------
+- The heapq module does comparisons using LT instead of LE. This
+ makes its implementation match that used by list.sort().
+
- Issue #2819: add full-precision summation function to math module,
based on Hettinger's ASPN Python Cookbook recipe.
@@ -63,6 +68,21 @@
Library
-------
+- Issue #3011: locale module alias table was updated to the latest version
+ from the X.org locale.alias file
+
+- Issue #1797 (partial fix): ctypes NULL function pointers have a
+ False boolean value now.
+
+- Issue #2985: Allow 64-bit integer responses (``<i8>``) in XMLRPC
+ transfers.
+
+- Issue #2877: The UserString.MutableString class has been removed in
+ Python 3.0.
+
+- Do not close external file objects passed to tarfile.open(mode='w:bz2')
+ when the TarFile is closed.
+
- Issue #2959: For consistency with other file-like objects, gzip's
GzipFile.close() can now be called multiple times without raising
an exception.
@@ -233,6 +253,17 @@
- ``Lib/lib-old`` is now added to sys.path.
+C API
+-----
+
+- Add ``PyType_Modified()`` as a public API to clear the type cache.
+
+- The PyBytes functions have been renamed to PyByteArray.
+
+- The PyString functions have been renamed to PyBytes. A batch of
+ defines were added so that the linker still sees the original
+ PyString names.
+
What's New in Python 2.6 alpha 3?
=================================
@@ -400,8 +431,7 @@
which provide the functions through their libm. The files also
contains several helpers and constants for math.
-- Added a new convenience function, PyErr_WarnPy3k, for issuing Py3k
- warnings.
+- Added a new convenience macro, PyErr_WarnPy3k, for issuing Py3k warnings.
What's New in Python 2.6 alpha 2?
Modified: python/branches/tlee-ast-optimize/Modules/_bsddb.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_bsddb.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_bsddb.c Sun Jun 1 17:18:10 2008
@@ -104,6 +104,17 @@
typedef int Py_ssize_t;
#endif
+#if (PY_VERSION_HEX < 0x02060000) /* really: before python trunk r63675 */
+/* This code now uses PyBytes* API function names instead of PyString*.
+ * These #defines map to their equivalent on earlier python versions. */
+#define PyBytes_FromStringAndSize PyString_FromStringAndSize
+#define PyBytes_FromString PyString_FromString
+#define PyBytes_AsStringAndSize PyString_AsStringAndSize
+#define PyBytes_Check PyString_Check
+#define PyBytes_GET_SIZE PyString_GET_SIZE
+#define PyBytes_AS_STRING PyString_AS_STRING
+#endif
+
#ifdef WITH_THREAD
/* These are for when calling Python --> C */
@@ -398,7 +409,7 @@
/* no need to do anything, the structure has already been zeroed */
}
- else if (PyString_Check(keyobj)) {
+ else if (PyBytes_Check(keyobj)) {
/* verify access method type */
type = _DB_get_type(self);
if (type == -1)
@@ -417,15 +428,15 @@
* the code check for DB_THREAD and forceably set DBT_MALLOC
* when we otherwise would leave flags 0 to indicate that.
*/
- key->data = malloc(PyString_GET_SIZE(keyobj));
+ key->data = malloc(PyBytes_GET_SIZE(keyobj));
if (key->data == NULL) {
PyErr_SetString(PyExc_MemoryError, "Key memory allocation failed");
return 0;
}
- memcpy(key->data, PyString_AS_STRING(keyobj),
- PyString_GET_SIZE(keyobj));
+ memcpy(key->data, PyBytes_AS_STRING(keyobj),
+ PyBytes_GET_SIZE(keyobj));
key->flags = DB_DBT_REALLOC;
- key->size = PyString_GET_SIZE(keyobj);
+ key->size = PyBytes_GET_SIZE(keyobj);
}
else if (PyInt_Check(keyobj)) {
@@ -535,7 +546,7 @@
p=DummyString;
assert(s==0);
}
- return PyString_FromStringAndSize(p,s);
+ return PyBytes_FromStringAndSize(p,s);
}
static PyObject *BuildValue_S(const void *p,int s)
@@ -1291,12 +1302,12 @@
else if (PyInt_Check(result)) {
retval = PyInt_AsLong(result);
}
- else if (PyString_Check(result)) {
+ else if (PyBytes_Check(result)) {
char* data;
Py_ssize_t size;
CLEAR_DBT(*secKey);
- PyString_AsStringAndSize(result, &data, &size);
+ PyBytes_AsStringAndSize(result, &data, &size);
secKey->flags = DB_DBT_APPMALLOC; /* DB will free */
secKey->data = malloc(size); /* TODO, check this */
if (secKey->data) {
@@ -4412,7 +4423,7 @@
if (!retp) break;
flags=DB_NEXT; /* Prepare for next loop pass */
for (i=0; i<retp; i++) {
- gid=PyString_FromStringAndSize((char *)(preplist[i].gid),
+ gid=PyBytes_FromStringAndSize((char *)(preplist[i].gid),
DB_XIDDATASIZE);
if (!gid) {
Py_DECREF(list);
@@ -4870,7 +4881,7 @@
if (log_list) {
char **log_list_start;
for (log_list_start = log_list; *log_list != NULL; ++log_list) {
- item = PyString_FromString (*log_list);
+ item = PyBytes_FromString (*log_list);
if (item == NULL) {
Py_DECREF(list);
list = NULL;
@@ -6296,7 +6307,7 @@
if (home == NULL) {
RETURN_NONE();
}
- return PyString_FromString(home);
+ return PyBytes_FromString(home);
}
return Py_FindMethod(DBEnv_methods, (PyObject* )self, name);
@@ -6612,9 +6623,9 @@
{
PyObject* m;
PyObject* d;
- PyObject* pybsddb_version_s = PyString_FromString( PY_BSDDB_VERSION );
- PyObject* db_version_s = PyString_FromString( DB_VERSION_STRING );
- PyObject* cvsid_s = PyString_FromString( rcs_id );
+ PyObject* pybsddb_version_s = PyBytes_FromString( PY_BSDDB_VERSION );
+ PyObject* db_version_s = PyBytes_FromString( DB_VERSION_STRING );
+ PyObject* cvsid_s = PyBytes_FromString( rcs_id );
PyObject* py_api;
/* Initialize the type of the new type objects here; doing it here
Modified: python/branches/tlee-ast-optimize/Modules/_bytesio.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_bytesio.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_bytesio.c Sun Jun 1 17:18:10 2008
@@ -175,7 +175,7 @@
bytesio_getvalue(BytesIOObject *self)
{
CHECK_CLOSED(self);
- return PyString_FromStringAndSize(self->buf, self->string_size);
+ return PyBytes_FromStringAndSize(self->buf, self->string_size);
}
PyDoc_STRVAR(isatty_doc,
@@ -244,7 +244,7 @@
output = self->buf + self->pos;
self->pos += size;
- return PyString_FromStringAndSize(output, size);
+ return PyBytes_FromStringAndSize(output, size);
}
@@ -307,7 +307,7 @@
self->pos -= size;
}
- return PyString_FromStringAndSize(output, n);
+ return PyBytes_FromStringAndSize(output, n);
}
PyDoc_STRVAR(readlines_doc,
@@ -349,7 +349,7 @@
return NULL;
while ((n = get_line(self, &output)) != 0) {
- line = PyString_FromStringAndSize(output, n);
+ line = PyBytes_FromStringAndSize(output, n);
if (!line)
goto on_error;
if (PyList_Append(result, line) == -1) {
@@ -455,7 +455,7 @@
if (!next || n == 0)
return NULL;
- return PyString_FromStringAndSize(next, n);
+ return PyBytes_FromStringAndSize(next, n);
}
PyDoc_STRVAR(seek_doc,
Modified: python/branches/tlee-ast-optimize/Modules/_codecsmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_codecsmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_codecsmodule.c Sun Jun 1 17:18:10 2008
@@ -168,7 +168,7 @@
if (!PyArg_ParseTuple(args, "s#|z:escape_decode",
&data, &size, &errors))
return NULL;
- return codec_tuple(PyString_DecodeEscape(data, size, errors, 0, NULL),
+ return codec_tuple(PyBytes_DecodeEscape(data, size, errors, 0, NULL),
size);
}
@@ -182,21 +182,21 @@
Py_ssize_t len;
if (!PyArg_ParseTuple(args, "O!|z:escape_encode",
- &PyString_Type, &str, &errors))
+ &PyBytes_Type, &str, &errors))
return NULL;
- str = PyString_Repr(str, 0);
+ str = PyBytes_Repr(str, 0);
if (!str)
return NULL;
/* The string will be quoted. Unquote, similar to unicode-escape. */
- buf = PyString_AS_STRING (str);
- len = PyString_GET_SIZE (str);
+ buf = PyBytes_AS_STRING (str);
+ len = PyBytes_GET_SIZE (str);
memmove(buf, buf+1, len-2);
- if (_PyString_Resize(&str, len-2) < 0)
+ if (_PyBytes_Resize(&str, len-2) < 0)
return NULL;
- return codec_tuple(str, PyString_Size(str));
+ return codec_tuple(str, PyBytes_Size(str));
}
#ifdef Py_USING_UNICODE
@@ -640,7 +640,7 @@
&data, &size, &errors))
return NULL;
- return codec_tuple(PyString_FromStringAndSize(data, size),
+ return codec_tuple(PyBytes_FromStringAndSize(data, size),
size);
}
@@ -656,7 +656,7 @@
&data, &size, &errors))
return NULL;
- return codec_tuple(PyString_FromStringAndSize(data, size),
+ return codec_tuple(PyBytes_FromStringAndSize(data, size),
size);
}
@@ -676,13 +676,13 @@
if (PyUnicode_Check(obj)) {
data = PyUnicode_AS_DATA(obj);
size = PyUnicode_GET_DATA_SIZE(obj);
- return codec_tuple(PyString_FromStringAndSize(data, size),
+ return codec_tuple(PyBytes_FromStringAndSize(data, size),
size);
}
else {
if (PyObject_AsReadBuffer(obj, (const void **)&data, &size))
return NULL;
- return codec_tuple(PyString_FromStringAndSize(data, size),
+ return codec_tuple(PyBytes_FromStringAndSize(data, size),
size);
}
}
Modified: python/branches/tlee-ast-optimize/Modules/_collectionsmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_collectionsmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_collectionsmodule.c Sun Jun 1 17:18:10 2008
@@ -668,7 +668,7 @@
if (i != 0) {
if (i < 0)
return NULL;
- return PyString_FromString("[...]");
+ return PyBytes_FromString("[...]");
}
aslist = PySequence_List(deque);
@@ -677,16 +677,16 @@
return NULL;
}
if (((dequeobject *)deque)->maxlen != -1)
- fmt = PyString_FromFormat("deque(%%r, maxlen=%i)",
+ fmt = PyBytes_FromFormat("deque(%%r, maxlen=%i)",
((dequeobject *)deque)->maxlen);
else
- fmt = PyString_FromString("deque(%r)");
+ fmt = PyBytes_FromString("deque(%r)");
if (fmt == NULL) {
Py_DECREF(aslist);
Py_ReprLeave(deque);
return NULL;
}
- result = PyString_Format(fmt, aslist);
+ result = PyBytes_Format(fmt, aslist);
Py_DECREF(fmt);
Py_DECREF(aslist);
Py_ReprLeave(deque);
@@ -1298,14 +1298,14 @@
if (baserepr == NULL)
return NULL;
if (dd->default_factory == NULL)
- defrepr = PyString_FromString("None");
+ defrepr = PyBytes_FromString("None");
else
{
int status = Py_ReprEnter(dd->default_factory);
if (status != 0) {
if (status < 0)
return NULL;
- defrepr = PyString_FromString("...");
+ defrepr = PyBytes_FromString("...");
}
else
defrepr = PyObject_Repr(dd->default_factory);
@@ -1315,9 +1315,9 @@
Py_DECREF(baserepr);
return NULL;
}
- result = PyString_FromFormat("defaultdict(%s, %s)",
- PyString_AS_STRING(defrepr),
- PyString_AS_STRING(baserepr));
+ result = PyBytes_FromFormat("defaultdict(%s, %s)",
+ PyBytes_AS_STRING(defrepr),
+ PyBytes_AS_STRING(baserepr));
Py_DECREF(defrepr);
Py_DECREF(baserepr);
return result;
Modified: python/branches/tlee-ast-optimize/Modules/_csv.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_csv.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_csv.c Sun Jun 1 17:18:10 2008
@@ -176,7 +176,7 @@
return Py_None;
}
else
- return PyString_FromStringAndSize((char*)&c, 1);
+ return PyBytes_FromStringAndSize((char*)&c, 1);
}
static PyObject *
@@ -235,16 +235,16 @@
if (src == NULL)
*target = dflt;
else {
- if (src == Py_None || PyString_Size(src) == 0)
+ if (src == Py_None || PyBytes_Size(src) == 0)
*target = '\0';
- else if (!PyString_Check(src) || PyString_Size(src) != 1) {
+ else if (!PyBytes_Check(src) || PyBytes_Size(src) != 1) {
PyErr_Format(PyExc_TypeError,
"\"%s\" must be an 1-character string",
name);
return -1;
}
else {
- char *s = PyString_AsString(src);
+ char *s = PyBytes_AsString(src);
if (s == NULL)
return -1;
*target = s[0];
@@ -257,7 +257,7 @@
_set_str(const char *name, PyObject **target, PyObject *src, const char *dflt)
{
if (src == NULL)
- *target = PyString_FromString(dflt);
+ *target = PyBytes_FromString(dflt);
else {
if (src == Py_None)
*target = NULL;
@@ -528,7 +528,7 @@
{
PyObject *field;
- field = PyString_FromStringAndSize(self->field, self->field_len);
+ field = PyBytes_FromStringAndSize(self->field, self->field_len);
if (field == NULL)
return -1;
self->field_len = 0;
@@ -787,8 +787,8 @@
}
++self->line_num;
- line = PyString_AsString(lineobj);
- linelen = PyString_Size(lineobj);
+ line = PyBytes_AsString(lineobj);
+ linelen = PyBytes_Size(lineobj);
if (line == NULL || linelen < 0) {
Py_DECREF(lineobj);
@@ -976,7 +976,7 @@
rec_len++;\
} while(0)
- lineterm = PyString_AsString(dialect->lineterminator);
+ lineterm = PyBytes_AsString(dialect->lineterminator);
if (lineterm == NULL)
return -1;
@@ -1101,7 +1101,7 @@
int terminator_len;
char *terminator;
- terminator_len = PyString_Size(self->dialect->lineterminator);
+ terminator_len = PyBytes_Size(self->dialect->lineterminator);
if (terminator_len == -1)
return 0;
@@ -1109,7 +1109,7 @@
if (!join_check_rec_size(self, self->rec_len + terminator_len))
return 0;
- terminator = PyString_AsString(self->dialect->lineterminator);
+ terminator = PyBytes_AsString(self->dialect->lineterminator);
if (terminator == NULL)
return 0;
memmove(self->rec + self->rec_len, terminator, terminator_len);
@@ -1161,9 +1161,9 @@
break;
}
- if (PyString_Check(field)) {
+ if (PyBytes_Check(field)) {
append_ok = join_append(self,
- PyString_AS_STRING(field),
+ PyBytes_AS_STRING(field),
"ed, len == 1);
Py_DECREF(field);
}
@@ -1179,7 +1179,7 @@
if (str == NULL)
return NULL;
- append_ok = join_append(self, PyString_AS_STRING(str),
+ append_ok = join_append(self, PyBytes_AS_STRING(str),
"ed, len == 1);
Py_DECREF(str);
}
Modified: python/branches/tlee-ast-optimize/Modules/_ctypes/_ctypes.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_ctypes/_ctypes.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_ctypes/_ctypes.c Sun Jun 1 17:18:10 2008
@@ -477,7 +477,7 @@
static PyObject *
CDataType_from_buffer_copy(PyObject *type, PyObject *args)
{
- void *buffer;
+ const void *buffer;
Py_ssize_t buffer_len;
Py_ssize_t offset = 0;
PyObject *obj, *result;
@@ -684,8 +684,8 @@
if (-1 == PyType_Type.tp_setattro(self, key, value))
return -1;
- if (value && PyString_Check(key) &&
- 0 == strcmp(PyString_AS_STRING(key), "_fields_"))
+ if (value && PyBytes_Check(key) &&
+ 0 == strcmp(PyBytes_AS_STRING(key), "_fields_"))
return StructUnionType_update_stgdict(self, value, 1);
return 0;
}
@@ -698,8 +698,8 @@
if (-1 == PyObject_GenericSetAttr(self, key, value))
return -1;
- if (PyString_Check(key) &&
- 0 == strcmp(PyString_AS_STRING(key), "_fields_"))
+ if (PyBytes_Check(key) &&
+ 0 == strcmp(PyBytes_AS_STRING(key), "_fields_"))
return StructUnionType_update_stgdict(self, value, 0);
return 0;
}
@@ -1025,7 +1025,7 @@
size = Py_TYPE(value)->tp_as_buffer->bf_getreadbuffer(value, 0, (void *)&ptr);
if (size < 0)
return -1;
- } else if (-1 == PyString_AsStringAndSize(value, &ptr, &size)) {
+ } else if (-1 == PyBytes_AsStringAndSize(value, &ptr, &size)) {
return -1;
}
if (size > self->b_size) {
@@ -1042,7 +1042,7 @@
static PyObject *
CharArray_get_raw(CDataObject *self)
{
- return PyString_FromStringAndSize(self->b_ptr, self->b_size);
+ return PyBytes_FromStringAndSize(self->b_ptr, self->b_size);
}
static PyObject *
@@ -1053,7 +1053,7 @@
for (i = 0; i < self->b_size; ++i)
if (*ptr++ == '\0')
break;
- return PyString_FromStringAndSize(self->b_ptr, i);
+ return PyBytes_FromStringAndSize(self->b_ptr, i);
}
static int
@@ -1074,14 +1074,14 @@
conversion_mode_errors);
if (!value)
return -1;
- } else if (!PyString_Check(value)) {
+ } else if (!PyBytes_Check(value)) {
PyErr_Format(PyExc_TypeError,
"string expected instead of %s instance",
Py_TYPE(value)->tp_name);
return -1;
} else
Py_INCREF(value);
- size = PyString_GET_SIZE(value);
+ size = PyBytes_GET_SIZE(value);
if (size > self->b_size) {
PyErr_SetString(PyExc_ValueError,
"string too long");
@@ -1089,7 +1089,7 @@
return -1;
}
- ptr = PyString_AS_STRING(value);
+ ptr = PyBytes_AS_STRING(value);
memcpy(self->b_ptr, ptr, size);
if (size < self->b_size)
self->b_ptr[size] = '\0';
@@ -1128,7 +1128,7 @@
"can't delete attribute");
return -1;
}
- if (PyString_Check(value)) {
+ if (PyBytes_Check(value)) {
value = PyUnicode_FromEncodedObject(value,
conversion_mode_encoding,
conversion_mode_errors);
@@ -1402,7 +1402,7 @@
Py_INCREF(Py_None);
return Py_None;
}
- if (PyUnicode_Check(value) || PyString_Check(value)) {
+ if (PyUnicode_Check(value) || PyBytes_Check(value)) {
PyCArgObject *parg;
struct fielddesc *fd = getentry("Z");
@@ -1466,7 +1466,7 @@
Py_INCREF(Py_None);
return Py_None;
}
- if (PyString_Check(value) || PyUnicode_Check(value)) {
+ if (PyBytes_Check(value) || PyUnicode_Check(value)) {
PyCArgObject *parg;
struct fielddesc *fd = getentry("z");
@@ -1552,7 +1552,7 @@
return (PyObject *)parg;
}
/* string */
- if (PyString_Check(value)) {
+ if (PyBytes_Check(value)) {
PyCArgObject *parg;
struct fielddesc *fd = getentry("z");
@@ -1623,10 +1623,10 @@
}
/* c_char_p, c_wchar_p */
stgd = PyObject_stgdict(value);
- if (stgd && CDataObject_Check(value) && stgd->proto && PyString_Check(stgd->proto)) {
+ if (stgd && CDataObject_Check(value) && stgd->proto && PyBytes_Check(stgd->proto)) {
PyCArgObject *parg;
- switch (PyString_AS_STRING(stgd->proto)[0]) {
+ switch (PyBytes_AS_STRING(stgd->proto)[0]) {
case 'z': /* c_char_p */
case 'Z': /* c_wchar_p */
parg = new_CArgObject();
@@ -1683,13 +1683,13 @@
if (suffix == NULL)
#ifdef WORDS_BIGENDIAN
- suffix = PyString_InternFromString("_le");
+ suffix = PyBytes_InternFromString("_le");
#else
- suffix = PyString_InternFromString("_be");
+ suffix = PyBytes_InternFromString("_be");
#endif
Py_INCREF(name);
- PyString_Concat(&name, suffix);
+ PyBytes_Concat(&name, suffix);
if (name == NULL)
return NULL;
@@ -1744,7 +1744,7 @@
dict = PyObject_stgdict((PyObject *)self);
assert(dict); /* Cannot be NULL for CDataObject instances */
- fmt = PyString_AsString(dict->proto);
+ fmt = PyBytes_AsString(dict->proto);
assert(fmt);
fd = getentry(fmt);
@@ -1779,9 +1779,9 @@
proto = PyObject_GetAttrString((PyObject *)result, "_type_"); /* new ref */
if (!proto
- || !PyString_Check(proto)
- || 1 != strlen(PyString_AS_STRING(proto))
- || !strchr(SIMPLE_TYPE_CHARS, PyString_AS_STRING(proto)[0])) {
+ || !PyBytes_Check(proto)
+ || 1 != strlen(PyBytes_AS_STRING(proto))
+ || !strchr(SIMPLE_TYPE_CHARS, PyBytes_AS_STRING(proto)[0])) {
PyErr_Format(PyExc_AttributeError,
"class must define a '_type_' attribute which must be\n"
"a single character string containing one of '%s'.",
@@ -1790,12 +1790,12 @@
Py_DECREF(result);
return NULL;
}
- fmt = getentry(PyString_AS_STRING(proto));
+ fmt = getentry(PyBytes_AS_STRING(proto));
if (fmt == NULL) {
Py_DECREF(result);
PyErr_Format(PyExc_ValueError,
"_type_ '%s' not supported",
- PyString_AS_STRING(proto));
+ PyBytes_AS_STRING(proto));
return NULL;
}
@@ -1835,7 +1835,7 @@
Overrides the SimpleType_from_param generic method.
*/
if (result->tp_base == &Simple_Type) {
- switch (PyString_AS_STRING(proto)[0]) {
+ switch (PyBytes_AS_STRING(proto)[0]) {
case 'z': /* c_char_p */
ml = &c_char_p_method;
stgdict->flags |= TYPEFLAG_ISPOINTER;
@@ -1940,7 +1940,7 @@
assert(dict);
/* I think we can rely on this being a one-character string */
- fmt = PyString_AsString(dict->proto);
+ fmt = PyBytes_AsString(dict->proto);
assert(fmt);
fd = getentry(fmt);
@@ -2290,7 +2290,7 @@
#endif
target = target->b_base;
}
- return PyString_FromStringAndSize(string, cp-string);
+ return PyBytes_FromStringAndSize(string, cp-string);
}
/*
@@ -2435,7 +2435,7 @@
_unpickle,
Py_TYPE(_self),
PyObject_GetAttrString(_self, "__dict__"),
- PyString_FromStringAndSize(self->b_ptr, self->b_size));
+ PyBytes_FromStringAndSize(self->b_ptr, self->b_size));
}
static PyObject *
@@ -2984,9 +2984,9 @@
dict = PyType_stgdict(arg);
if (dict
/* simple pointer types, c_void_p, c_wchar_p, BSTR, ... */
- && PyString_Check(dict->proto)
+ && PyBytes_Check(dict->proto)
/* We only allow c_void_p, c_char_p and c_wchar_p as a simple output parameter type */
- && (strchr("PzZ", PyString_AS_STRING(dict->proto)[0]))) {
+ && (strchr("PzZ", PyBytes_AS_STRING(dict->proto)[0]))) {
return 1;
}
@@ -3071,8 +3071,8 @@
return 1;
}
#endif
- if (PyString_Check(obj) || PyUnicode_Check(obj)) {
- *pname = PyString_AsString(obj);
+ if (PyBytes_Check(obj) || PyUnicode_Check(obj)) {
+ *pname = PyBytes_AsString(obj);
return *pname ? 1 : 0;
}
PyErr_SetString(PyExc_TypeError,
@@ -3422,7 +3422,7 @@
/* We HAVE already checked that the tuple can be parsed with "i|zO", so... */
Py_ssize_t tsize = PyTuple_GET_SIZE(item);
flag = PyInt_AS_LONG(PyTuple_GET_ITEM(item, 0));
- name = tsize > 1 ? PyString_AS_STRING(PyTuple_GET_ITEM(item, 1)) : NULL;
+ name = tsize > 1 ? PyBytes_AS_STRING(PyTuple_GET_ITEM(item, 1)) : NULL;
defval = tsize > 2 ? PyTuple_GET_ITEM(item, 2) : NULL;
switch (flag & (PARAMFLAG_FIN | PARAMFLAG_FOUT | PARAMFLAG_FLCID)) {
@@ -3476,7 +3476,7 @@
"NULL stgdict unexpected");
goto error;
}
- if (PyString_Check(dict->proto)) {
+ if (PyBytes_Check(dict->proto)) {
PyErr_Format(
PyExc_TypeError,
"%s 'out' parameter must be passed as default value",
@@ -3774,16 +3774,36 @@
{
#ifdef MS_WIN32
if (self->index)
- return PyString_FromFormat("<COM method offset %d: %s at %p>",
+ return PyBytes_FromFormat("<COM method offset %d: %s at %p>",
self->index - 0x1000,
Py_TYPE(self)->tp_name,
self);
#endif
- return PyString_FromFormat("<%s object at %p>",
+ return PyBytes_FromFormat("<%s object at %p>",
Py_TYPE(self)->tp_name,
self);
}
+static int
+Pointer_nonzero(CDataObject *self)
+{
+ return *(void **)self->b_ptr != NULL;
+}
+
+static PyNumberMethods Pointer_as_number = {
+ 0, /* nb_add */
+ 0, /* nb_subtract */
+ 0, /* nb_multiply */
+ 0, /* nb_divide */
+ 0, /* nb_remainder */
+ 0, /* nb_divmod */
+ 0, /* nb_power */
+ 0, /* nb_negative */
+ 0, /* nb_positive */
+ 0, /* nb_absolute */
+ (inquiry)Pointer_nonzero, /* nb_nonzero */
+};
+
PyTypeObject CFuncPtr_Type = {
PyVarObject_HEAD_INIT(NULL, 0)
"_ctypes.CFuncPtr",
@@ -3795,7 +3815,7 @@
0, /* tp_setattr */
0, /* tp_compare */
(reprfunc)CFuncPtr_repr, /* tp_repr */
- 0, /* tp_as_number */
+ &Pointer_as_number, /* tp_as_number */
0, /* tp_as_sequence */
0, /* tp_as_mapping */
0, /* tp_hash */
@@ -3888,7 +3908,7 @@
}
if (kwds && PyDict_GetItem(kwds, name)) {
- char *field = PyString_AsString(name);
+ char *field = PyBytes_AsString(name);
if (field == NULL) {
PyErr_Clear();
field = "???";
@@ -4090,7 +4110,7 @@
type, so this cannot be NULL */
if (itemdict->getfunc == getentry("c")->getfunc) {
char *ptr = (char *)self->b_ptr;
- return PyString_FromStringAndSize(ptr + ilow, len);
+ return PyBytes_FromStringAndSize(ptr + ilow, len);
#ifdef CTYPES_UNICODE
} else if (itemdict->getfunc == getentry("u")->getfunc) {
wchar_t *ptr = (wchar_t *)self->b_ptr;
@@ -4147,9 +4167,9 @@
char *dest;
if (slicelen <= 0)
- return PyString_FromString("");
+ return PyBytes_FromString("");
if (step == 1) {
- return PyString_FromStringAndSize(ptr + start,
+ return PyBytes_FromStringAndSize(ptr + start,
slicelen);
}
dest = (char *)PyMem_Malloc(slicelen);
@@ -4162,7 +4182,7 @@
dest[i] = ptr[cur];
}
- np = PyString_FromStringAndSize(dest, slicelen);
+ np = PyBytes_FromStringAndSize(dest, slicelen);
PyMem_Free(dest);
return np;
}
@@ -4572,12 +4592,12 @@
static PyObject *format;
if (Py_TYPE(self)->tp_base != &Simple_Type) {
- return PyString_FromFormat("<%s object at %p>",
+ return PyBytes_FromFormat("<%s object at %p>",
Py_TYPE(self)->tp_name, self);
}
if (format == NULL) {
- format = PyString_InternFromString("%s(%r)");
+ format = PyBytes_InternFromString("%s(%r)");
if (format == NULL)
return NULL;
}
@@ -4586,7 +4606,7 @@
if (val == NULL)
return NULL;
- name = PyString_FromString(Py_TYPE(self)->tp_name);
+ name = PyBytes_FromString(Py_TYPE(self)->tp_name);
if (name == NULL) {
Py_DECREF(val);
return NULL;
@@ -4598,7 +4618,7 @@
if (args == NULL)
return NULL;
- result = PyString_Format(format, args);
+ result = PyBytes_Format(format, args);
Py_DECREF(args);
return result;
}
@@ -4832,7 +4852,7 @@
assert(itemdict);
if (itemdict->getfunc == getentry("c")->getfunc) {
char *ptr = *(char **)self->b_ptr;
- return PyString_FromStringAndSize(ptr + ilow, len);
+ return PyBytes_FromStringAndSize(ptr + ilow, len);
#ifdef CTYPES_UNICODE
} else if (itemdict->getfunc == getentry("u")->getfunc) {
wchar_t *ptr = *(wchar_t **)self->b_ptr;
@@ -4929,9 +4949,9 @@
char *dest;
if (len <= 0)
- return PyString_FromString("");
+ return PyBytes_FromString("");
if (step == 1) {
- return PyString_FromStringAndSize(ptr + start,
+ return PyBytes_FromStringAndSize(ptr + start,
len);
}
dest = (char *)PyMem_Malloc(len);
@@ -4940,7 +4960,7 @@
for (cur = start, i = 0; i < len; cur += step, i++) {
dest[i] = ptr[cur];
}
- np = PyString_FromStringAndSize(dest, len);
+ np = PyBytes_FromStringAndSize(dest, len);
PyMem_Free(dest);
return np;
}
@@ -5003,26 +5023,6 @@
Pointer_subscript,
};
-static int
-Pointer_nonzero(CDataObject *self)
-{
- return *(void **)self->b_ptr != NULL;
-}
-
-static PyNumberMethods Pointer_as_number = {
- 0, /* nb_add */
- 0, /* nb_subtract */
- 0, /* nb_multiply */
- 0, /* nb_divide */
- 0, /* nb_remainder */
- 0, /* nb_divmod */
- 0, /* nb_power */
- 0, /* nb_negative */
- 0, /* nb_positive */
- 0, /* nb_absolute */
- (inquiry)Pointer_nonzero, /* nb_nonzero */
-};
-
PyTypeObject Pointer_Type = {
PyVarObject_HEAD_INIT(NULL, 0)
"_ctypes._Pointer",
@@ -5140,7 +5140,7 @@
++methods;
}
- s = PyString_FromString(comerror_doc);
+ s = PyBytes_FromString(comerror_doc);
if (s == NULL)
goto error;
status = PyDict_SetItemString(dict, "__doc__", s);
@@ -5166,8 +5166,8 @@
string_at(const char *ptr, int size)
{
if (size == -1)
- return PyString_FromString(ptr);
- return PyString_FromStringAndSize(ptr, size);
+ return PyBytes_FromString(ptr);
+ return PyBytes_FromStringAndSize(ptr, size);
}
static int
@@ -5181,8 +5181,8 @@
return 1;
dict = PyType_stgdict(arg);
if (dict) {
- if (PyString_Check(dict->proto)
- && (strchr("sPzUZXO", PyString_AS_STRING(dict->proto)[0]))) {
+ if (PyBytes_Check(dict->proto)
+ && (strchr("sPzUZXO", PyBytes_AS_STRING(dict->proto)[0]))) {
/* simple pointer types, c_void_p, c_wchar_p, BSTR, ... */
return 1;
}
Modified: python/branches/tlee-ast-optimize/Modules/_ctypes/callbacks.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_ctypes/callbacks.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_ctypes/callbacks.c Sun Jun 1 17:18:10 2008
@@ -107,15 +107,15 @@
PyCodeObject *py_code = 0;
PyFrameObject *py_frame = 0;
- py_srcfile = PyString_FromString(filename);
+ py_srcfile = PyBytes_FromString(filename);
if (!py_srcfile) goto bad;
- py_funcname = PyString_FromString(funcname);
+ py_funcname = PyBytes_FromString(funcname);
if (!py_funcname) goto bad;
py_globals = PyDict_New();
if (!py_globals) goto bad;
empty_tuple = PyTuple_New(0);
if (!empty_tuple) goto bad;
- empty_string = PyString_FromString("");
+ empty_string = PyBytes_FromString("");
if (!empty_string) goto bad;
py_code = PyCode_New(
0, /*int argcount,*/
@@ -460,7 +460,7 @@
static PyObject *context;
if (context == NULL)
- context = PyString_InternFromString("_ctypes.DllGetClassObject");
+ context = PyBytes_InternFromString("_ctypes.DllGetClassObject");
mod = PyImport_ImportModuleNoBlock("ctypes");
if (!mod) {
@@ -539,7 +539,7 @@
static PyObject *context;
if (context == NULL)
- context = PyString_InternFromString("_ctypes.DllCanUnloadNow");
+ context = PyBytes_InternFromString("_ctypes.DllCanUnloadNow");
mod = PyImport_ImportModuleNoBlock("ctypes");
if (!mod) {
Modified: python/branches/tlee-ast-optimize/Modules/_ctypes/callproc.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_ctypes/callproc.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_ctypes/callproc.c Sun Jun 1 17:18:10 2008
@@ -370,7 +370,7 @@
self->tag, self);
break;
}
- return PyString_FromString(buffer);
+ return PyBytes_FromString(buffer);
}
static PyMemberDef PyCArgType_members[] = {
@@ -518,9 +518,9 @@
return 0;
}
- if (PyString_Check(obj)) {
+ if (PyBytes_Check(obj)) {
pa->ffi_type = &ffi_type_pointer;
- pa->value.p = PyString_AS_STRING(obj);
+ pa->value.p = PyBytes_AS_STRING(obj);
Py_INCREF(obj);
pa->keep = obj;
return 0;
@@ -781,7 +781,7 @@
PyObject *tp, *v, *tb, *s, *cls_str, *msg_str;
va_start(vargs, fmt);
- s = PyString_FromFormatV(fmt, vargs);
+ s = PyBytes_FromFormatV(fmt, vargs);
va_end(vargs);
if (!s)
return;
@@ -790,18 +790,18 @@
PyErr_NormalizeException(&tp, &v, &tb);
cls_str = PyObject_Str(tp);
if (cls_str) {
- PyString_ConcatAndDel(&s, cls_str);
- PyString_ConcatAndDel(&s, PyString_FromString(": "));
+ PyBytes_ConcatAndDel(&s, cls_str);
+ PyBytes_ConcatAndDel(&s, PyBytes_FromString(": "));
if (s == NULL)
goto error;
} else
PyErr_Clear();
msg_str = PyObject_Str(v);
if (msg_str)
- PyString_ConcatAndDel(&s, msg_str);
+ PyBytes_ConcatAndDel(&s, msg_str);
else {
PyErr_Clear();
- PyString_ConcatAndDel(&s, PyString_FromString("???"));
+ PyBytes_ConcatAndDel(&s, PyBytes_FromString("???"));
if (s == NULL)
goto error;
}
@@ -1105,7 +1105,7 @@
if (!PyArg_ParseTuple(args, "O|O:LoadLibrary", &nameobj, &ignored))
return NULL;
#ifdef _UNICODE
- name = alloca((PyString_Size(nameobj) + 1) * sizeof(WCHAR));
+ name = alloca((PyBytes_Size(nameobj) + 1) * sizeof(WCHAR));
if (!name) {
PyErr_NoMemory();
return NULL;
@@ -1113,14 +1113,14 @@
{
int r;
- char *aname = PyString_AsString(nameobj);
+ char *aname = PyBytes_AsString(nameobj);
if(!aname)
return NULL;
- r = MultiByteToWideChar(CP_ACP, 0, aname, -1, name, PyString_Size(nameobj) + 1);
+ r = MultiByteToWideChar(CP_ACP, 0, aname, -1, name, PyBytes_Size(nameobj) + 1);
name[r] = 0;
}
#else
- name = PyString_AsString(nameobj);
+ name = PyBytes_AsString(nameobj);
if(!name)
return NULL;
#endif
@@ -1613,9 +1613,9 @@
Py_INCREF(result);
return result;
}
- if (PyString_CheckExact(cls)) {
- buf = alloca(strlen(PyString_AS_STRING(cls)) + 3 + 1);
- sprintf(buf, "LP_%s", PyString_AS_STRING(cls));
+ if (PyBytes_CheckExact(cls)) {
+ buf = alloca(strlen(PyBytes_AS_STRING(cls)) + 3 + 1);
+ sprintf(buf, "LP_%s", PyBytes_AS_STRING(cls));
result = PyObject_CallFunction((PyObject *)Py_TYPE(&Pointer_Type),
"s(O){}",
buf,
Modified: python/branches/tlee-ast-optimize/Modules/_ctypes/cfield.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_ctypes/cfield.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_ctypes/cfield.c Sun Jun 1 17:18:10 2008
@@ -272,7 +272,7 @@
name = ((PyTypeObject *)self->proto)->tp_name;
if (bits)
- result = PyString_FromFormat(
+ result = PyBytes_FromFormat(
#if (PY_VERSION_HEX < 0x02050000)
"<Field type=%s, ofs=%d:%d, bits=%d>",
#else
@@ -280,7 +280,7 @@
#endif
name, self->offset, size, bits);
else
- result = PyString_FromFormat(
+ result = PyBytes_FromFormat(
#if (PY_VERSION_HEX < 0x02050000)
"<Field type=%s, ofs=%d, size=%d>",
#else
@@ -1164,12 +1164,12 @@
static PyObject *
c_set(void *ptr, PyObject *value, Py_ssize_t size)
{
- if (!PyString_Check(value) || (1 != PyString_Size(value))) {
+ if (!PyBytes_Check(value) || (1 != PyBytes_Size(value))) {
PyErr_Format(PyExc_TypeError,
"one character string expected");
return NULL;
}
- *(char *)ptr = PyString_AS_STRING(value)[0];
+ *(char *)ptr = PyBytes_AS_STRING(value)[0];
_RET(value);
}
@@ -1177,7 +1177,7 @@
static PyObject *
c_get(void *ptr, Py_ssize_t size)
{
- return PyString_FromStringAndSize((char *)ptr, 1);
+ return PyBytes_FromStringAndSize((char *)ptr, 1);
}
#ifdef CTYPES_UNICODE
@@ -1187,7 +1187,7 @@
{
Py_ssize_t len;
- if (PyString_Check(value)) {
+ if (PyBytes_Check(value)) {
value = PyUnicode_FromEncodedObject(value,
conversion_mode_encoding,
conversion_mode_errors);
@@ -1262,7 +1262,7 @@
/* It's easier to calculate in characters than in bytes */
length /= sizeof(wchar_t);
- if (PyString_Check(value)) {
+ if (PyBytes_Check(value)) {
value = PyUnicode_FromEncodedObject(value,
conversion_mode_encoding,
conversion_mode_errors);
@@ -1301,21 +1301,21 @@
PyObject *result;
size_t slen;
- result = PyString_FromString((char *)ptr);
+ result = PyBytes_FromString((char *)ptr);
if (!result)
return NULL;
/* chop off at the first NUL character, if any.
* On error, result will be deallocated and set to NULL.
*/
- slen = strlen(PyString_AS_STRING(result));
+ slen = strlen(PyBytes_AS_STRING(result));
size = min(size, (Py_ssize_t)slen);
if (result->ob_refcnt == 1) {
/* shorten the result */
- _PyString_Resize(&result, size);
+ _PyBytes_Resize(&result, size);
return result;
} else
/* cannot shorten the result */
- return PyString_FromStringAndSize(ptr, size);
+ return PyBytes_FromStringAndSize(ptr, size);
}
static PyObject *
@@ -1324,7 +1324,7 @@
char *data;
Py_ssize_t size;
- data = PyString_AsString(value);
+ data = PyBytes_AsString(value);
if (!data)
return NULL;
size = strlen(data);
@@ -1356,8 +1356,8 @@
Py_INCREF(value);
return value;
}
- if (PyString_Check(value)) {
- *(char **)ptr = PyString_AS_STRING(value);
+ if (PyBytes_Check(value)) {
+ *(char **)ptr = PyBytes_AS_STRING(value);
Py_INCREF(value);
return value;
} else if (PyUnicode_Check(value)) {
@@ -1366,7 +1366,7 @@
conversion_mode_errors);
if (str == NULL)
return NULL;
- *(char **)ptr = PyString_AS_STRING(str);
+ *(char **)ptr = PyBytes_AS_STRING(str);
return str;
} else if (PyInt_Check(value) || PyLong_Check(value)) {
#if SIZEOF_VOID_P == SIZEOF_LONG_LONG
@@ -1395,7 +1395,7 @@
return NULL;
}
#endif
- return PyString_FromString(*(char **)ptr);
+ return PyBytes_FromString(*(char **)ptr);
} else {
Py_INCREF(Py_None);
return Py_None;
@@ -1411,7 +1411,7 @@
Py_INCREF(value);
return value;
}
- if (PyString_Check(value)) {
+ if (PyBytes_Check(value)) {
value = PyUnicode_FromEncodedObject(value,
conversion_mode_encoding,
conversion_mode_errors);
@@ -1502,7 +1502,7 @@
/* convert value into a PyUnicodeObject or NULL */
if (Py_None == value) {
value = NULL;
- } else if (PyString_Check(value)) {
+ } else if (PyBytes_Check(value)) {
value = PyUnicode_FromEncodedObject(value,
conversion_mode_encoding,
conversion_mode_errors);
Modified: python/branches/tlee-ast-optimize/Modules/_curses_panel.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_curses_panel.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_curses_panel.c Sun Jun 1 17:18:10 2008
@@ -472,7 +472,7 @@
PyDict_SetItemString(d, "error", PyCursesError);
/* Make the version available */
- v = PyString_FromString(PyCursesVersion);
+ v = PyBytes_FromString(PyCursesVersion);
PyDict_SetItemString(d, "version", v);
PyDict_SetItemString(d, "__version__", v);
Py_DECREF(v);
Modified: python/branches/tlee-ast-optimize/Modules/_cursesmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_cursesmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_cursesmodule.c Sun Jun 1 17:18:10 2008
@@ -198,9 +198,9 @@
{
if (PyInt_Check(obj)) {
*ch = (chtype) PyInt_AsLong(obj);
- } else if(PyString_Check(obj)
- && (PyString_Size(obj) == 1)) {
- *ch = (chtype) *PyString_AsString(obj);
+ } else if(PyBytes_Check(obj)
+ && (PyBytes_Size(obj) == 1)) {
+ *ch = (chtype) *PyBytes_AsString(obj);
} else {
return 0;
}
@@ -886,9 +886,9 @@
return Py_BuildValue("c", rtn);
else
#if defined(__NetBSD__)
- return PyString_FromString(unctrl(rtn));
+ return PyBytes_FromString(unctrl(rtn));
#else
- return PyString_FromString((char *)keyname(rtn));
+ return PyBytes_FromString((char *)keyname(rtn));
#endif
}
@@ -943,7 +943,7 @@
}
if (rtn2 == ERR)
rtn[0] = 0;
- return PyString_FromString(rtn);
+ return PyBytes_FromString(rtn);
}
static PyObject *
@@ -1095,7 +1095,7 @@
}
if (rtn2 == ERR)
rtn[0] = 0;
- return PyString_FromString(rtn);
+ return PyBytes_FromString(rtn);
}
static PyObject *
@@ -1757,7 +1757,7 @@
ch = erasechar();
- return PyString_FromStringAndSize(&ch, 1);
+ return PyBytes_FromStringAndSize(&ch, 1);
}
static PyObject *
@@ -2114,7 +2114,7 @@
}
knp = keyname(ch);
- return PyString_FromString((knp == NULL) ? "" : (char *)knp);
+ return PyBytes_FromString((knp == NULL) ? "" : (char *)knp);
}
#endif
@@ -2125,7 +2125,7 @@
ch = killchar();
- return PyString_FromStringAndSize(&ch, 1);
+ return PyBytes_FromStringAndSize(&ch, 1);
}
static PyObject *
@@ -2496,7 +2496,7 @@
Py_INCREF(Py_None);
return Py_None;
}
- return PyString_FromString( capname );
+ return PyBytes_FromString( capname );
}
static PyObject *
@@ -2520,7 +2520,7 @@
return NULL;
}
- return PyString_FromString(result);
+ return PyBytes_FromString(result);
}
static PyObject *
@@ -2547,14 +2547,14 @@
if (PyInt_Check(temp))
ch = (chtype) PyInt_AsLong(temp);
- else if (PyString_Check(temp))
- ch = (chtype) *PyString_AsString(temp);
+ else if (PyBytes_Check(temp))
+ ch = (chtype) *PyBytes_AsString(temp);
else {
PyErr_SetString(PyExc_TypeError, "argument must be a ch or an int");
return NULL;
}
- return PyString_FromString(unctrl(ch));
+ return PyBytes_FromString(unctrl(ch));
}
static PyObject *
@@ -2569,8 +2569,8 @@
if (PyInt_Check(temp))
ch = (int) PyInt_AsLong(temp);
- else if (PyString_Check(temp))
- ch = (int) *PyString_AsString(temp);
+ else if (PyBytes_Check(temp))
+ ch = (int) *PyBytes_AsString(temp);
else {
PyErr_SetString(PyExc_TypeError, "argument must be a ch or an int");
return NULL;
@@ -2753,7 +2753,7 @@
PyDict_SetItemString(d, "error", PyCursesError);
/* Make the version available */
- v = PyString_FromString(PyCursesVersion);
+ v = PyBytes_FromString(PyCursesVersion);
PyDict_SetItemString(d, "version", v);
PyDict_SetItemString(d, "__version__", v);
Py_DECREF(v);
Modified: python/branches/tlee-ast-optimize/Modules/_elementtree.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_elementtree.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_elementtree.c Sun Jun 1 17:18:10 2008
@@ -103,7 +103,7 @@
#define PyDict_CheckExact PyDict_Check
#if (PY_VERSION_HEX < 0x02020000)
#define PyList_CheckExact PyList_Check
-#define PyString_CheckExact PyString_Check
+#define PyBytes_CheckExact PyBytes_Check
#if (PY_VERSION_HEX >= 0x01060000)
#define Py_USING_UNICODE /* always enabled for 2.0 and 2.1 */
#endif
@@ -173,7 +173,7 @@
switch (PyList_GET_SIZE(list)) {
case 0:
Py_DECREF(list);
- return PyString_FromString("");
+ return PyBytes_FromString("");
case 1:
result = PyList_GET_ITEM(list, 0);
Py_INCREF(result);
@@ -748,9 +748,9 @@
return 0;
}
#endif
- if (PyString_Check(tag)) {
- char *p = PyString_AS_STRING(tag);
- for (i = 0; i < PyString_GET_SIZE(tag); i++) {
+ if (PyBytes_Check(tag)) {
+ char *p = PyBytes_AS_STRING(tag);
+ for (i = 0; i < PyBytes_GET_SIZE(tag); i++) {
if (p[i] == '{')
check = 0;
else if (p[i] == '}')
@@ -818,7 +818,7 @@
if (Element_CheckExact(item) && !PyObject_Compare(item->tag, tag)) {
PyObject* text = element_get_text(item);
if (text == Py_None)
- return PyString_FromString("");
+ return PyBytes_FromString("");
Py_XINCREF(text);
return text;
}
@@ -1154,12 +1154,12 @@
PyObject* repr;
char buffer[100];
- repr = PyString_FromString("<Element ");
+ repr = PyBytes_FromString("<Element ");
- PyString_ConcatAndDel(&repr, PyObject_Repr(self->tag));
+ PyBytes_ConcatAndDel(&repr, PyObject_Repr(self->tag));
sprintf(buffer, " at %p>", self);
- PyString_ConcatAndDel(&repr, PyString_FromString(buffer));
+ PyBytes_ConcatAndDel(&repr, PyBytes_FromString(buffer));
return repr;
}
@@ -1617,14 +1617,14 @@
Py_INCREF(data); self->data = data;
} else {
/* more than one item; use a list to collect items */
- if (PyString_CheckExact(self->data) && Py_REFCNT(self->data) == 1 &&
- PyString_CheckExact(data) && PyString_GET_SIZE(data) == 1) {
+ if (PyBytes_CheckExact(self->data) && Py_REFCNT(self->data) == 1 &&
+ PyBytes_CheckExact(data) && PyBytes_GET_SIZE(data) == 1) {
/* expat often generates single character data sections; handle
the most common case by resizing the existing string... */
- Py_ssize_t size = PyString_GET_SIZE(self->data);
- if (_PyString_Resize(&self->data, size + 1) < 0)
+ Py_ssize_t size = PyBytes_GET_SIZE(self->data);
+ if (_PyBytes_Resize(&self->data, size + 1) < 0)
return NULL;
- PyString_AS_STRING(self->data)[size] = PyString_AS_STRING(data)[0];
+ PyBytes_AS_STRING(self->data)[size] = PyBytes_AS_STRING(data)[0];
} else if (PyList_CheckExact(self->data)) {
if (PyList_Append(self->data, data) < 0)
return NULL;
@@ -1896,7 +1896,7 @@
return PyUnicode_DecodeUTF8(string, size, "strict");
#endif
- return PyString_FromStringAndSize(string, size);
+ return PyBytes_FromStringAndSize(string, size);
}
LOCAL(PyObject*)
@@ -1910,7 +1910,7 @@
PyObject* value;
/* look the 'raw' name up in the names dictionary */
- key = PyString_FromStringAndSize(string, size);
+ key = PyBytes_FromStringAndSize(string, size);
if (!key)
return NULL;
@@ -1932,8 +1932,8 @@
break;
if (i != size) {
/* convert to universal name */
- tag = PyString_FromStringAndSize(NULL, size+1);
- p = PyString_AS_STRING(tag);
+ tag = PyBytes_FromStringAndSize(NULL, size+1);
+ p = PyBytes_AS_STRING(tag);
p[0] = '{';
memcpy(p+1, string, size);
size++;
@@ -1947,7 +1947,7 @@
#if defined(Py_USING_UNICODE)
/* inline makestring, to avoid duplicating the source string if
it's not an utf-8 string */
- p = PyString_AS_STRING(tag);
+ p = PyBytes_AS_STRING(tag);
if (checkstring(p, size)) {
value = PyUnicode_DecodeUTF8(p, size, "strict");
Py_DECREF(tag);
@@ -2004,7 +2004,7 @@
} else {
PyErr_Format(
PyExc_SyntaxError, "undefined entity &%s;: line %ld, column %ld",
- PyString_AS_STRING(key),
+ PyBytes_AS_STRING(key),
EXPAT(GetErrorLineNumber)(self->parser),
EXPAT(GetErrorColumnNumber)(self->parser)
);
@@ -2435,13 +2435,13 @@
return NULL;
}
- if (!PyString_CheckExact(buffer) || PyString_GET_SIZE(buffer) == 0) {
+ if (!PyBytes_CheckExact(buffer) || PyBytes_GET_SIZE(buffer) == 0) {
Py_DECREF(buffer);
break;
}
res = expat_parse(
- self, PyString_AS_STRING(buffer), PyString_GET_SIZE(buffer), 0
+ self, PyBytes_AS_STRING(buffer), PyBytes_GET_SIZE(buffer), 0
);
Py_DECREF(buffer);
@@ -2503,7 +2503,7 @@
if (event_set == Py_None) {
/* default is "end" only */
- target->end_event_obj = PyString_FromString("end");
+ target->end_event_obj = PyBytes_FromString("end");
Py_RETURN_NONE;
}
@@ -2513,9 +2513,9 @@
for (i = 0; i < PyTuple_GET_SIZE(event_set); i++) {
PyObject* item = PyTuple_GET_ITEM(event_set, i);
char* event;
- if (!PyString_Check(item))
+ if (!PyBytes_Check(item))
goto error;
- event = PyString_AS_STRING(item);
+ event = PyBytes_AS_STRING(item);
if (strcmp(event, "start") == 0) {
Py_INCREF(item);
target->start_event_obj = item;
@@ -2587,7 +2587,7 @@
char buffer[100];
sprintf(buffer, "Expat %d.%d.%d", XML_MAJOR_VERSION,
XML_MINOR_VERSION, XML_MICRO_VERSION);
- return PyString_FromString(buffer);
+ return PyBytes_FromString(buffer);
} else {
PyErr_SetString(PyExc_AttributeError, name);
return NULL;
Modified: python/branches/tlee-ast-optimize/Modules/_fileio.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_fileio.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_fileio.c Sun Jun 1 17:18:10 2008
@@ -392,14 +392,14 @@
Py_ssize_t total = 0;
int n;
- result = PyString_FromStringAndSize(NULL, DEFAULT_BUFFER_SIZE);
+ result = PyBytes_FromStringAndSize(NULL, DEFAULT_BUFFER_SIZE);
if (result == NULL)
return NULL;
while (1) {
Py_ssize_t newsize = total + DEFAULT_BUFFER_SIZE;
- if (PyString_GET_SIZE(result) < newsize) {
- if (_PyString_Resize(&result, newsize) < 0) {
+ if (PyBytes_GET_SIZE(result) < newsize) {
+ if (_PyBytes_Resize(&result, newsize) < 0) {
if (total == 0) {
Py_DECREF(result);
return NULL;
@@ -411,7 +411,7 @@
Py_BEGIN_ALLOW_THREADS
errno = 0;
n = read(self->fd,
- PyString_AS_STRING(result) + total,
+ PyBytes_AS_STRING(result) + total,
newsize - total);
Py_END_ALLOW_THREADS
if (n == 0)
@@ -430,8 +430,8 @@
total += n;
}
- if (PyString_GET_SIZE(result) > total) {
- if (_PyString_Resize(&result, total) < 0) {
+ if (PyBytes_GET_SIZE(result) > total) {
+ if (_PyBytes_Resize(&result, total) < 0) {
/* This should never happen, but just in case */
Py_DECREF(result);
return NULL;
@@ -460,10 +460,10 @@
return fileio_readall(self);
}
- bytes = PyString_FromStringAndSize(NULL, size);
+ bytes = PyBytes_FromStringAndSize(NULL, size);
if (bytes == NULL)
return NULL;
- ptr = PyString_AS_STRING(bytes);
+ ptr = PyBytes_AS_STRING(bytes);
Py_BEGIN_ALLOW_THREADS
errno = 0;
@@ -478,7 +478,7 @@
}
if (n != size) {
- if (_PyString_Resize(&bytes, n) < 0) {
+ if (_PyBytes_Resize(&bytes, n) < 0) {
Py_DECREF(bytes);
return NULL;
}
@@ -690,9 +690,9 @@
fileio_repr(PyFileIOObject *self)
{
if (self->fd < 0)
- return PyString_FromFormat("_fileio._FileIO(-1)");
+ return PyBytes_FromFormat("_fileio._FileIO(-1)");
- return PyString_FromFormat("_fileio._FileIO(%d, '%s')",
+ return PyBytes_FromFormat("_fileio._FileIO(%d, '%s')",
self->fd, mode_string(self));
}
@@ -816,7 +816,7 @@
static PyObject *
get_mode(PyFileIOObject *self, void *closure)
{
- return PyString_FromString(mode_string(self));
+ return PyBytes_FromString(mode_string(self));
}
static PyGetSetDef fileio_getsetlist[] = {
Modified: python/branches/tlee-ast-optimize/Modules/_hashopenssl.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_hashopenssl.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_hashopenssl.c Sun Jun 1 17:18:10 2008
@@ -103,7 +103,7 @@
digest_size = EVP_MD_CTX_size(&temp_ctx);
EVP_DigestFinal(&temp_ctx, digest, NULL);
- retval = PyString_FromStringAndSize((const char *)digest, digest_size);
+ retval = PyBytes_FromStringAndSize((const char *)digest, digest_size);
EVP_MD_CTX_cleanup(&temp_ctx);
return retval;
}
@@ -130,10 +130,10 @@
/* Create a new string */
/* NOTE: not thread safe! modifying an already created string object */
/* (not a problem because we hold the GIL by default) */
- retval = PyString_FromStringAndSize(NULL, digest_size * 2);
+ retval = PyBytes_FromStringAndSize(NULL, digest_size * 2);
if (!retval)
return NULL;
- hex_digest = PyString_AsString(retval);
+ hex_digest = PyBytes_AsString(retval);
if (!hex_digest) {
Py_DECREF(retval);
return NULL;
@@ -220,8 +220,8 @@
{
char buf[100];
PyOS_snprintf(buf, sizeof(buf), "<%s HASH object @ %p>",
- PyString_AsString(((EVPobject *)self)->name), self);
- return PyString_FromString(buf);
+ PyBytes_AsString(((EVPobject *)self)->name), self);
+ return PyBytes_FromString(buf);
}
#if HASH_OBJ_CONSTRUCTOR
@@ -421,7 +421,7 @@
/* used in the init function to setup a constructor */
#define INIT_CONSTRUCTOR_CONSTANTS(NAME) do { \
- CONST_ ## NAME ## _name_obj = PyString_FromString(#NAME); \
+ CONST_ ## NAME ## _name_obj = PyBytes_FromString(#NAME); \
if (EVP_get_digestbyname(#NAME)) { \
CONST_new_ ## NAME ## _ctx_p = &CONST_new_ ## NAME ## _ctx; \
EVP_DigestInit(CONST_new_ ## NAME ## _ctx_p, EVP_get_digestbyname(#NAME)); \
Modified: python/branches/tlee-ast-optimize/Modules/_heapqmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_heapqmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_heapqmodule.c Sun Jun 1 17:18:10 2008
@@ -28,12 +28,12 @@
while (pos > startpos){
parentpos = (pos - 1) >> 1;
parent = PyList_GET_ITEM(heap, parentpos);
- cmp = PyObject_RichCompareBool(parent, newitem, Py_LE);
+ cmp = PyObject_RichCompareBool(newitem, parent, Py_LT);
if (cmp == -1) {
Py_DECREF(newitem);
return -1;
}
- if (cmp == 1)
+ if (cmp == 0)
break;
Py_INCREF(parent);
Py_DECREF(PyList_GET_ITEM(heap, pos));
@@ -69,14 +69,14 @@
rightpos = childpos + 1;
if (rightpos < endpos) {
cmp = PyObject_RichCompareBool(
- PyList_GET_ITEM(heap, rightpos),
PyList_GET_ITEM(heap, childpos),
- Py_LE);
+ PyList_GET_ITEM(heap, rightpos),
+ Py_LT);
if (cmp == -1) {
Py_DECREF(newitem);
return -1;
}
- if (cmp == 1)
+ if (cmp == 0)
childpos = rightpos;
}
/* Move the smaller child up. */
@@ -214,10 +214,10 @@
return item;
}
- cmp = PyObject_RichCompareBool(item, PyList_GET_ITEM(heap, 0), Py_LE);
+ cmp = PyObject_RichCompareBool(PyList_GET_ITEM(heap, 0), item, Py_LT);
if (cmp == -1)
return NULL;
- if (cmp == 1) {
+ if (cmp == 0) {
Py_INCREF(item);
return item;
}
@@ -270,6 +270,7 @@
{
PyObject *heap=NULL, *elem, *iterable, *sol, *it, *oldelem;
Py_ssize_t i, n;
+ int cmp;
if (!PyArg_ParseTuple(args, "nO:nlargest", &n, &iterable))
return NULL;
@@ -312,7 +313,12 @@
else
goto sortit;
}
- if (PyObject_RichCompareBool(elem, sol, Py_LE)) {
+ cmp = PyObject_RichCompareBool(sol, elem, Py_LT);
+ if (cmp == -1) {
+ Py_DECREF(elem);
+ goto fail;
+ }
+ if (cmp == 0) {
Py_DECREF(elem);
continue;
}
@@ -362,12 +368,12 @@
while (pos > startpos){
parentpos = (pos - 1) >> 1;
parent = PyList_GET_ITEM(heap, parentpos);
- cmp = PyObject_RichCompareBool(newitem, parent, Py_LE);
+ cmp = PyObject_RichCompareBool(parent, newitem, Py_LT);
if (cmp == -1) {
Py_DECREF(newitem);
return -1;
}
- if (cmp == 1)
+ if (cmp == 0)
break;
Py_INCREF(parent);
Py_DECREF(PyList_GET_ITEM(heap, pos));
@@ -403,14 +409,14 @@
rightpos = childpos + 1;
if (rightpos < endpos) {
cmp = PyObject_RichCompareBool(
- PyList_GET_ITEM(heap, childpos),
PyList_GET_ITEM(heap, rightpos),
- Py_LE);
+ PyList_GET_ITEM(heap, childpos),
+ Py_LT);
if (cmp == -1) {
Py_DECREF(newitem);
return -1;
}
- if (cmp == 1)
+ if (cmp == 0)
childpos = rightpos;
}
/* Move the smaller child up. */
@@ -434,6 +440,7 @@
{
PyObject *heap=NULL, *elem, *iterable, *los, *it, *oldelem;
Py_ssize_t i, n;
+ int cmp;
if (!PyArg_ParseTuple(args, "nO:nsmallest", &n, &iterable))
return NULL;
@@ -477,7 +484,12 @@
else
goto sortit;
}
- if (PyObject_RichCompareBool(los, elem, Py_LE)) {
+ cmp = PyObject_RichCompareBool(elem, los, Py_LT);
+ if (cmp == -1) {
+ Py_DECREF(elem);
+ goto fail;
+ }
+ if (cmp == 0) {
Py_DECREF(elem);
continue;
}
@@ -658,6 +670,6 @@
m = Py_InitModule3("_heapq", heapq_methods, module_doc);
if (m == NULL)
return;
- PyModule_AddObject(m, "__about__", PyString_FromString(__about__));
+ PyModule_AddObject(m, "__about__", PyBytes_FromString(__about__));
}
Modified: python/branches/tlee-ast-optimize/Modules/_hotshot.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_hotshot.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_hotshot.c Sun Jun 1 17:18:10 2008
@@ -326,7 +326,7 @@
return ERR_EOF;
}
}
- *pvalue = PyString_FromStringAndSize(buf, len);
+ *pvalue = PyBytes_FromStringAndSize(buf, len);
free(buf);
if (*pvalue == NULL) {
return ERR_EXCEPTION;
@@ -562,7 +562,7 @@
self->index - written);
self->index -= written;
if (written == 0) {
- char *s = PyString_AsString(self->logfilename);
+ char *s = PyBytes_AsString(self->logfilename);
PyErr_SetFromErrnoWithFilename(PyExc_IOError, s);
do_stop(self);
return -1;
@@ -570,7 +570,7 @@
}
if (written > 0) {
if (fflush(self->logfp)) {
- char *s = PyString_AsString(self->logfilename);
+ char *s = PyBytes_AsString(self->logfilename);
PyErr_SetFromErrnoWithFilename(PyExc_IOError, s);
do_stop(self);
return -1;
@@ -792,7 +792,7 @@
self->next_fileno++;
Py_DECREF(obj);
if (pack_define_file(self, fileno,
- PyString_AS_STRING(fcode->co_filename)) < 0)
+ PyBytes_AS_STRING(fcode->co_filename)) < 0)
return -1;
}
else {
@@ -810,7 +810,7 @@
PyObject *name = PyDict_GetItem(dict, obj);
if (name == NULL) {
if (pack_define_func(self, fileno, fcode->co_firstlineno,
- PyString_AS_STRING(fcode->co_name)) < 0) {
+ PyBytes_AS_STRING(fcode->co_name)) < 0) {
Py_DECREF(obj);
return -1;
}
@@ -1471,7 +1471,7 @@
len = PyList_GET_SIZE(temp);
for (i = 0; i < len; ++i) {
PyObject *item = PyList_GET_ITEM(temp, i);
- buffer = PyString_AsString(item);
+ buffer = PyBytes_AsString(item);
if (buffer == NULL) {
pack_add_info(self, "sys-path-entry", "<non-string-path-entry>");
PyErr_Clear();
Modified: python/branches/tlee-ast-optimize/Modules/_json.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_json.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_json.c Sun Jun 1 17:18:10 2008
@@ -70,11 +70,11 @@
input_unicode = PyUnicode_AS_UNICODE(pystr);
/* One char input can be up to 6 chars output, estimate 4 of these */
output_size = 2 + (MIN_EXPANSION * 4) + input_chars;
- rval = PyString_FromStringAndSize(NULL, output_size);
+ rval = PyBytes_FromStringAndSize(NULL, output_size);
if (rval == NULL) {
return NULL;
}
- output = PyString_AS_STRING(rval);
+ output = PyBytes_AS_STRING(rval);
chars = 0;
output[chars++] = '"';
for (i = 0; i < input_chars; i++) {
@@ -92,14 +92,14 @@
if (output_size > 2 + (input_chars * MAX_EXPANSION)) {
output_size = 2 + (input_chars * MAX_EXPANSION);
}
- if (_PyString_Resize(&rval, output_size) == -1) {
+ if (_PyBytes_Resize(&rval, output_size) == -1) {
return NULL;
}
- output = PyString_AS_STRING(rval);
+ output = PyBytes_AS_STRING(rval);
}
}
output[chars++] = '"';
- if (_PyString_Resize(&rval, chars) == -1) {
+ if (_PyBytes_Resize(&rval, chars) == -1) {
return NULL;
}
return rval;
@@ -116,15 +116,15 @@
char *output;
char *input_str;
- input_chars = PyString_GET_SIZE(pystr);
- input_str = PyString_AS_STRING(pystr);
+ input_chars = PyBytes_GET_SIZE(pystr);
+ input_str = PyBytes_AS_STRING(pystr);
/* One char input can be up to 6 chars output, estimate 4 of these */
output_size = 2 + (MIN_EXPANSION * 4) + input_chars;
- rval = PyString_FromStringAndSize(NULL, output_size);
+ rval = PyBytes_FromStringAndSize(NULL, output_size);
if (rval == NULL) {
return NULL;
}
- output = PyString_AS_STRING(rval);
+ output = PyBytes_AS_STRING(rval);
chars = 0;
output[chars++] = '"';
for (i = 0; i < input_chars; i++) {
@@ -154,14 +154,14 @@
if (output_size > 2 + (input_chars * MIN_EXPANSION)) {
output_size = 2 + (input_chars * MIN_EXPANSION);
}
- if (_PyString_Resize(&rval, output_size) == -1) {
+ if (_PyBytes_Resize(&rval, output_size) == -1) {
return NULL;
}
- output = PyString_AS_STRING(rval);
+ output = PyBytes_AS_STRING(rval);
}
}
output[chars++] = '"';
- if (_PyString_Resize(&rval, chars) == -1) {
+ if (_PyBytes_Resize(&rval, chars) == -1) {
return NULL;
}
return rval;
@@ -215,7 +215,7 @@
ustr = PyUnicode_FromUnicode(&c, 0);
}
if (joinstr == NULL) {
- joinstr = PyString_InternFromString("join");
+ joinstr = PyBytes_InternFromString("join");
}
if (joinstr == NULL || ustr == NULL) {
return NULL;
@@ -227,10 +227,10 @@
scanstring_str(PyObject *pystr, Py_ssize_t end, char *encoding, int strict)
{
PyObject *rval;
- Py_ssize_t len = PyString_GET_SIZE(pystr);
+ Py_ssize_t len = PyBytes_GET_SIZE(pystr);
Py_ssize_t begin = end - 1;
Py_ssize_t next = begin;
- char *buf = PyString_AS_STRING(pystr);
+ char *buf = PyBytes_AS_STRING(pystr);
PyObject *chunks = PyList_New(0);
if (chunks == NULL) {
goto bail;
@@ -555,7 +555,7 @@
if (encoding == NULL) {
encoding = DEFAULT_ENCODING;
}
- if (PyString_Check(pystr)) {
+ if (PyBytes_Check(pystr)) {
return scanstring_str(pystr, end, encoding, strict);
}
else if (PyUnicode_Check(pystr)) {
@@ -576,7 +576,7 @@
py_encode_basestring_ascii(PyObject* self, PyObject *pystr)
{
/* METH_O */
- if (PyString_Check(pystr)) {
+ if (PyBytes_Check(pystr)) {
return ascii_escape_str(pystr);
}
else if (PyUnicode_Check(pystr)) {
Modified: python/branches/tlee-ast-optimize/Modules/_localemodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_localemodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_localemodule.c Sun Jun 1 17:18:10 2008
@@ -119,7 +119,7 @@
if (isupper(c))
ul[n++] = c;
}
- ulo = PyString_FromStringAndSize((const char *)ul, n);
+ ulo = PyBytes_FromStringAndSize((const char *)ul, n);
if (!ulo)
return;
if (string)
@@ -134,7 +134,7 @@
if (islower(c))
ul[n++] = c;
}
- ulo = PyString_FromStringAndSize((const char *)ul, n);
+ ulo = PyBytes_FromStringAndSize((const char *)ul, n);
if (!ulo)
return;
if (string)
@@ -149,7 +149,7 @@
if (isalpha(c))
ul[n++] = c;
}
- ulo = PyString_FromStringAndSize((const char *)ul, n);
+ ulo = PyBytes_FromStringAndSize((const char *)ul, n);
if (!ulo)
return;
if (string)
@@ -175,7 +175,7 @@
PyErr_SetString(Error, "unsupported locale setting");
return NULL;
}
- result_object = PyString_FromString(result);
+ result_object = PyBytes_FromString(result);
if (!result_object)
return NULL;
/* record changes to LC_CTYPE */
@@ -190,7 +190,7 @@
PyErr_SetString(Error, "locale query failed");
return NULL;
}
- result_object = PyString_FromString(result);
+ result_object = PyBytes_FromString(result);
}
return result_object;
}
@@ -216,7 +216,7 @@
involved herein */
#define RESULT_STRING(s)\
- x = PyString_FromString(l->s);\
+ x = PyBytes_FromString(l->s);\
if (!x) goto failed;\
PyDict_SetItemString(result, #s, x);\
Py_XDECREF(x)
@@ -284,9 +284,9 @@
if (!PyArg_UnpackTuple(args, "strcoll", 2, 2, &os1, &os2))
return NULL;
/* If both arguments are byte strings, use strcoll. */
- if (PyString_Check(os1) && PyString_Check(os2))
- return PyInt_FromLong(strcoll(PyString_AS_STRING(os1),
- PyString_AS_STRING(os2)));
+ if (PyBytes_Check(os1) && PyBytes_Check(os2))
+ return PyInt_FromLong(strcoll(PyBytes_AS_STRING(os1),
+ PyBytes_AS_STRING(os2)));
/* If neither argument is unicode, it's an error. */
if (!PyUnicode_Check(os1) && !PyUnicode_Check(os2)) {
PyErr_SetString(PyExc_ValueError, "strcoll arguments must be strings");
@@ -368,7 +368,7 @@
return PyErr_NoMemory();
strxfrm(buf, s, n2);
}
- result = PyString_FromString(buf);
+ result = PyBytes_FromString(buf);
PyMem_Free(buf);
return result;
}
@@ -563,13 +563,13 @@
return NULL;
/* Check whether this is a supported constant. GNU libc sometimes
returns numeric values in the char* return value, which would
- crash PyString_FromString. */
+ crash PyBytes_FromString. */
for (i = 0; langinfo_constants[i].name; i++)
if (langinfo_constants[i].value == item) {
/* Check NULL as a workaround for GNU libc's returning NULL
instead of an empty string for nl_langinfo(ERA). */
const char *result = nl_langinfo(item);
- return PyString_FromString(result != NULL ? result : "");
+ return PyBytes_FromString(result != NULL ? result : "");
}
PyErr_SetString(PyExc_ValueError, "unsupported langinfo constant");
return NULL;
@@ -588,7 +588,7 @@
char *in;
if (!PyArg_ParseTuple(args, "z", &in))
return 0;
- return PyString_FromString(gettext(in));
+ return PyBytes_FromString(gettext(in));
}
PyDoc_STRVAR(dgettext__doc__,
@@ -601,7 +601,7 @@
char *domain, *in;
if (!PyArg_ParseTuple(args, "zz", &domain, &in))
return 0;
- return PyString_FromString(dgettext(domain, in));
+ return PyBytes_FromString(dgettext(domain, in));
}
PyDoc_STRVAR(dcgettext__doc__,
@@ -615,7 +615,7 @@
int category;
if (!PyArg_ParseTuple(args, "zzi", &domain, &msgid, &category))
return 0;
- return PyString_FromString(dcgettext(domain,msgid,category));
+ return PyBytes_FromString(dcgettext(domain,msgid,category));
}
PyDoc_STRVAR(textdomain__doc__,
@@ -633,7 +633,7 @@
PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
- return PyString_FromString(domain);
+ return PyBytes_FromString(domain);
}
PyDoc_STRVAR(bindtextdomain__doc__,
@@ -651,7 +651,7 @@
PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
- return PyString_FromString(dirname);
+ return PyBytes_FromString(dirname);
}
#ifdef HAVE_BIND_TEXTDOMAIN_CODESET
@@ -667,7 +667,7 @@
return NULL;
codeset = bind_textdomain_codeset(domain, codeset);
if (codeset)
- return PyString_FromString(codeset);
+ return PyBytes_FromString(codeset);
Py_RETURN_NONE;
}
#endif
@@ -760,7 +760,7 @@
Error = PyErr_NewException("locale.Error", NULL, NULL);
PyDict_SetItemString(d, "Error", Error);
- x = PyString_FromString(locale__doc__);
+ x = PyBytes_FromString(locale__doc__);
PyDict_SetItemString(d, "__doc__", x);
Py_XDECREF(x);
Modified: python/branches/tlee-ast-optimize/Modules/_lsprof.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_lsprof.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_lsprof.c Sun Jun 1 17:18:10 2008
@@ -179,8 +179,8 @@
/* built-in function: look up the module name */
PyObject *mod = fn->m_module;
char *modname;
- if (mod && PyString_Check(mod)) {
- modname = PyString_AS_STRING(mod);
+ if (mod && PyBytes_Check(mod)) {
+ modname = PyBytes_AS_STRING(mod);
}
else if (mod && PyModule_Check(mod)) {
modname = PyModule_GetName(mod);
@@ -193,11 +193,11 @@
modname = "__builtin__";
}
if (strcmp(modname, "__builtin__") != 0)
- return PyString_FromFormat("<%s.%s>",
+ return PyBytes_FromFormat("<%s.%s>",
modname,
fn->m_ml->ml_name);
else
- return PyString_FromFormat("<%s>",
+ return PyBytes_FromFormat("<%s>",
fn->m_ml->ml_name);
}
else {
@@ -205,7 +205,7 @@
repr(getattr(type(__self__), __name__))
*/
PyObject *self = fn->m_self;
- PyObject *name = PyString_FromString(fn->m_ml->ml_name);
+ PyObject *name = PyBytes_FromString(fn->m_ml->ml_name);
if (name != NULL) {
PyObject *mo = _PyType_Lookup(Py_TYPE(self), name);
Py_XINCREF(mo);
@@ -218,7 +218,7 @@
}
}
PyErr_Clear();
- return PyString_FromFormat("<built-in method %s>",
+ return PyBytes_FromFormat("<built-in method %s>",
fn->m_ml->ml_name);
}
}
Modified: python/branches/tlee-ast-optimize/Modules/_sqlite/cache.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_sqlite/cache.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_sqlite/cache.c Sun Jun 1 17:18:10 2008
@@ -241,12 +241,12 @@
if (!fmt_args) {
return NULL;
}
- template = PyString_FromString("%s <- %s ->%s\n");
+ template = PyBytes_FromString("%s <- %s ->%s\n");
if (!template) {
Py_DECREF(fmt_args);
return NULL;
}
- display_str = PyString_Format(template, fmt_args);
+ display_str = PyBytes_Format(template, fmt_args);
Py_DECREF(template);
Py_DECREF(fmt_args);
if (!display_str) {
Modified: python/branches/tlee-ast-optimize/Modules/_sqlite/connection.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_sqlite/connection.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_sqlite/connection.c Sun Jun 1 17:18:10 2008
@@ -84,8 +84,8 @@
Py_INCREF(&PyUnicode_Type);
self->text_factory = (PyObject*)&PyUnicode_Type;
- if (PyString_Check(database) || PyUnicode_Check(database)) {
- if (PyString_Check(database)) {
+ if (PyBytes_Check(database) || PyUnicode_Check(database)) {
+ if (PyBytes_Check(database)) {
database_utf8 = database;
Py_INCREF(database_utf8);
} else {
@@ -96,7 +96,7 @@
}
Py_BEGIN_ALLOW_THREADS
- rc = sqlite3_open(PyString_AsString(database_utf8), &self->db);
+ rc = sqlite3_open(PyBytes_AsString(database_utf8), &self->db);
Py_END_ALLOW_THREADS
Py_DECREF(database_utf8);
@@ -111,7 +111,7 @@
if (class_attr) {
class_attr_str = PyObject_Str(class_attr);
if (class_attr_str) {
- if (strcmp(PyString_AsString(class_attr_str), "<type 'apsw.Connection'>") == 0) {
+ if (strcmp(PyBytes_AsString(class_attr_str), "<type 'apsw.Connection'>") == 0) {
/* In the APSW Connection object, the first entry after
* PyObject_HEAD is the sqlite3* we want to get hold of.
* Luckily, this is the same layout as we have in our
@@ -134,7 +134,7 @@
}
if (!isolation_level) {
- isolation_level = PyString_FromString("");
+ isolation_level = PyBytes_FromString("");
if (!isolation_level) {
return -1;
}
@@ -499,12 +499,12 @@
} else {
sqlite3_result_blob(context, buffer, buflen, SQLITE_TRANSIENT);
}
- } else if (PyString_Check(py_val)) {
- sqlite3_result_text(context, PyString_AsString(py_val), -1, SQLITE_TRANSIENT);
+ } else if (PyBytes_Check(py_val)) {
+ sqlite3_result_text(context, PyBytes_AsString(py_val), -1, SQLITE_TRANSIENT);
} else if (PyUnicode_Check(py_val)) {
stringval = PyUnicode_AsUTF8String(py_val);
if (stringval) {
- sqlite3_result_text(context, PyString_AsString(stringval), -1, SQLITE_TRANSIENT);
+ sqlite3_result_text(context, PyBytes_AsString(stringval), -1, SQLITE_TRANSIENT);
Py_DECREF(stringval);
}
} else {
@@ -963,21 +963,21 @@
Py_INCREF(isolation_level);
self->isolation_level = isolation_level;
- begin_statement = PyString_FromString("BEGIN ");
+ begin_statement = PyBytes_FromString("BEGIN ");
if (!begin_statement) {
return -1;
}
- PyString_Concat(&begin_statement, isolation_level);
+ PyBytes_Concat(&begin_statement, isolation_level);
if (!begin_statement) {
return -1;
}
- self->begin_statement = PyMem_Malloc(PyString_Size(begin_statement) + 2);
+ self->begin_statement = PyMem_Malloc(PyBytes_Size(begin_statement) + 2);
if (!self->begin_statement) {
return -1;
}
- strcpy(self->begin_statement, PyString_AsString(begin_statement));
+ strcpy(self->begin_statement, PyBytes_AsString(begin_statement));
Py_DECREF(begin_statement);
}
@@ -1152,8 +1152,8 @@
goto finally;
}
- string1 = PyString_FromStringAndSize((const char*)text1_data, text1_length);
- string2 = PyString_FromStringAndSize((const char*)text2_data, text2_length);
+ string1 = PyBytes_FromStringAndSize((const char*)text1_data, text1_length);
+ string2 = PyBytes_FromStringAndSize((const char*)text2_data, text2_length);
if (!string1 || !string2) {
goto finally; /* failed to allocate strings */
@@ -1259,7 +1259,7 @@
goto finally;
}
- if (!PyArg_ParseTuple(args, "O!O:create_collation(name, callback)", &PyString_Type, &name, &callable)) {
+ if (!PyArg_ParseTuple(args, "O!O:create_collation(name, callback)", &PyBytes_Type, &name, &callable)) {
goto finally;
}
@@ -1268,7 +1268,7 @@
goto finally;
}
- chk = PyString_AsString(uppercase_name);
+ chk = PyBytes_AsString(uppercase_name);
while (*chk) {
if ((*chk >= '0' && *chk <= '9')
|| (*chk >= 'A' && *chk <= 'Z')
@@ -1293,7 +1293,7 @@
}
rc = sqlite3_create_collation(self->db,
- PyString_AsString(uppercase_name),
+ PyBytes_AsString(uppercase_name),
SQLITE_UTF8,
(callable != Py_None) ? callable : NULL,
(callable != Py_None) ? pysqlite_collation_callback : NULL);
Modified: python/branches/tlee-ast-optimize/Modules/_sqlite/connection.h
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_sqlite/connection.h (original)
+++ python/branches/tlee-ast-optimize/Modules/_sqlite/connection.h Sun Jun 1 17:18:10 2008
@@ -80,7 +80,7 @@
/* Determines how bytestrings from SQLite are converted to Python objects:
* - PyUnicode_Type: Python Unicode objects are constructed from UTF-8 bytestrings
* - OptimizedUnicode: Like before, but for ASCII data, only PyStrings are created.
- * - PyString_Type: PyStrings are created as-is.
+ * - PyBytes_Type: PyStrings are created as-is.
* - Any custom callable: Any object returned from the callable called with the bytestring
* as single parameter.
*/
Modified: python/branches/tlee-ast-optimize/Modules/_sqlite/cursor.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_sqlite/cursor.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_sqlite/cursor.c Sun Jun 1 17:18:10 2008
@@ -101,10 +101,7 @@
self->arraysize = 1;
- self->rowcount = PyInt_FromLong(-1L);
- if (!self->rowcount) {
- return -1;
- }
+ self->rowcount = -1L;
Py_INCREF(Py_None);
self->row_factory = Py_None;
@@ -130,7 +127,6 @@
Py_XDECREF(self->row_cast_map);
Py_XDECREF(self->description);
Py_XDECREF(self->lastrowid);
- Py_XDECREF(self->rowcount);
Py_XDECREF(self->row_factory);
Py_XDECREF(self->next_row);
@@ -182,7 +178,7 @@
if (*pos == '[') {
type_start = pos + 1;
} else if (*pos == ']' && type_start != (const char*)-1) {
- key = PyString_FromStringAndSize(type_start, pos - type_start);
+ key = PyBytes_FromStringAndSize(type_start, pos - type_start);
if (!key) {
/* creating a string failed, but it is too complicated
* to propagate the error here, we just assume there is
@@ -207,7 +203,7 @@
* 'NUMBER(10)' to be treated as 'NUMBER', for example.
* In other words, it will work as people expect it to work.*/
if (*pos == ' ' || *pos == '(' || *pos == 0) {
- py_decltype = PyString_FromStringAndSize(decltype, pos - decltype);
+ py_decltype = PyBytes_FromStringAndSize(decltype, pos - decltype);
if (!py_decltype) {
return -1;
}
@@ -252,7 +248,7 @@
if ((*pos == '[') && (pos > colname) && (*(pos-1) == ' ')) {
pos--;
}
- return PyString_FromStringAndSize(colname, pos - colname);
+ return PyBytes_FromStringAndSize(colname, pos - colname);
}
}
}
@@ -277,7 +273,7 @@
}
if (is_ascii) {
- return PyString_FromString(val_str);
+ return PyBytes_FromString(val_str);
} else {
return PyUnicode_DecodeUTF8(val_str, strlen(val_str), NULL);
}
@@ -331,7 +327,7 @@
Py_INCREF(Py_None);
converted = Py_None;
} else {
- item = PyString_FromStringAndSize(val_str, nbytes);
+ item = PyBytes_FromStringAndSize(val_str, nbytes);
if (!item) {
return NULL;
}
@@ -374,8 +370,8 @@
colname , val_str);
PyErr_SetString(pysqlite_OperationalError, buf);
}
- } else if (self->connection->text_factory == (PyObject*)&PyString_Type) {
- converted = PyString_FromString(val_str);
+ } else if (self->connection->text_factory == (PyObject*)&PyBytes_Type) {
+ converted = PyBytes_FromString(val_str);
} else {
converted = PyObject_CallFunction(self->connection->text_factory, "s", val_str);
}
@@ -427,12 +423,12 @@
int statement_type;
PyObject* descriptor;
PyObject* second_argument = NULL;
- long rowcount = 0;
int allow_8bit_chars;
if (!pysqlite_check_thread(self->connection) || !pysqlite_check_connection(self->connection)) {
return NULL;
}
+
/* Make shooting yourself in the foot with not utf-8 decodable 8-bit-strings harder */
allow_8bit_chars = ((self->connection->text_factory != (PyObject*)&PyUnicode_Type) &&
(self->connection->text_factory != (PyObject*)&PyUnicode_Type && pysqlite_OptimizedUnicode));
@@ -446,7 +442,7 @@
return NULL;
}
- if (!PyString_Check(operation) && !PyUnicode_Check(operation)) {
+ if (!PyBytes_Check(operation) && !PyUnicode_Check(operation)) {
PyErr_SetString(PyExc_ValueError, "operation parameter must be str or unicode");
return NULL;
}
@@ -468,7 +464,7 @@
return NULL;
}
- if (!PyString_Check(operation) && !PyUnicode_Check(operation)) {
+ if (!PyBytes_Check(operation) && !PyUnicode_Check(operation)) {
PyErr_SetString(PyExc_ValueError, "operation parameter must be str or unicode");
return NULL;
}
@@ -503,21 +499,22 @@
rc = pysqlite_statement_reset(self->statement);
}
- if (PyString_Check(operation)) {
- operation_cstr = PyString_AsString(operation);
+ if (PyBytes_Check(operation)) {
+ operation_cstr = PyBytes_AsString(operation);
} else {
operation_bytestr = PyUnicode_AsUTF8String(operation);
if (!operation_bytestr) {
goto error;
}
- operation_cstr = PyString_AsString(operation_bytestr);
+ operation_cstr = PyBytes_AsString(operation_bytestr);
}
- /* reset description */
+ /* reset description and rowcount */
Py_DECREF(self->description);
Py_INCREF(Py_None);
self->description = Py_None;
+ self->rowcount = -1L;
func_args = PyTuple_New(1);
if (!func_args) {
@@ -693,7 +690,10 @@
case STATEMENT_DELETE:
case STATEMENT_INSERT:
case STATEMENT_REPLACE:
- rowcount += (long)sqlite3_changes(self->connection->db);
+ if (self->rowcount == -1L) {
+ self->rowcount = 0L;
+ }
+ self->rowcount += (long)sqlite3_changes(self->connection->db);
}
Py_DECREF(self->lastrowid);
@@ -728,13 +728,9 @@
Py_XDECREF(parameters_list);
if (PyErr_Occurred()) {
- Py_DECREF(self->rowcount);
- self->rowcount = PyInt_FromLong(-1L);
+ self->rowcount = -1L;
return NULL;
} else {
- Py_DECREF(self->rowcount);
- self->rowcount = PyInt_FromLong(rowcount);
-
Py_INCREF(self);
return (PyObject*)self;
}
@@ -768,15 +764,15 @@
return NULL;
}
- if (PyString_Check(script_obj)) {
- script_cstr = PyString_AsString(script_obj);
+ if (PyBytes_Check(script_obj)) {
+ script_cstr = PyBytes_AsString(script_obj);
} else if (PyUnicode_Check(script_obj)) {
script_str = PyUnicode_AsUTF8String(script_obj);
if (!script_str) {
return NULL;
}
- script_cstr = PyString_AsString(script_str);
+ script_cstr = PyBytes_AsString(script_str);
} else {
PyErr_SetString(PyExc_ValueError, "script argument must be unicode or string.");
return NULL;
@@ -1028,7 +1024,7 @@
{"description", T_OBJECT, offsetof(pysqlite_Cursor, description), RO},
{"arraysize", T_INT, offsetof(pysqlite_Cursor, arraysize), 0},
{"lastrowid", T_OBJECT, offsetof(pysqlite_Cursor, lastrowid), RO},
- {"rowcount", T_OBJECT, offsetof(pysqlite_Cursor, rowcount), RO},
+ {"rowcount", T_LONG, offsetof(pysqlite_Cursor, rowcount), RO},
{"row_factory", T_OBJECT, offsetof(pysqlite_Cursor, row_factory), 0},
{NULL}
};
Modified: python/branches/tlee-ast-optimize/Modules/_sqlite/cursor.h
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_sqlite/cursor.h (original)
+++ python/branches/tlee-ast-optimize/Modules/_sqlite/cursor.h Sun Jun 1 17:18:10 2008
@@ -37,7 +37,7 @@
PyObject* row_cast_map;
int arraysize;
PyObject* lastrowid;
- PyObject* rowcount;
+ long rowcount;
PyObject* row_factory;
pysqlite_Statement* statement;
Modified: python/branches/tlee-ast-optimize/Modules/_sqlite/module.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_sqlite/module.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_sqlite/module.c Sun Jun 1 17:18:10 2008
@@ -137,7 +137,7 @@
/* a basic type is adapted; there's a performance optimization if that's not the case
* (99 % of all usages) */
if (type == &PyInt_Type || type == &PyLong_Type || type == &PyFloat_Type
- || type == &PyString_Type || type == &PyUnicode_Type || type == &PyBuffer_Type) {
+ || type == &PyBytes_Type || type == &PyUnicode_Type || type == &PyBuffer_Type) {
pysqlite_BaseTypeAdapted = 1;
}
@@ -367,13 +367,13 @@
Py_DECREF(tmp_obj);
}
- if (!(tmp_obj = PyString_FromString(PYSQLITE_VERSION))) {
+ if (!(tmp_obj = PyBytes_FromString(PYSQLITE_VERSION))) {
goto error;
}
PyDict_SetItemString(dict, "version", tmp_obj);
Py_DECREF(tmp_obj);
- if (!(tmp_obj = PyString_FromString(sqlite3_libversion()))) {
+ if (!(tmp_obj = PyBytes_FromString(sqlite3_libversion()))) {
goto error;
}
PyDict_SetItemString(dict, "sqlite_version", tmp_obj);
Modified: python/branches/tlee-ast-optimize/Modules/_sqlite/row.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_sqlite/row.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_sqlite/row.c Sun Jun 1 17:18:10 2008
@@ -86,13 +86,13 @@
item = PyTuple_GetItem(self->data, _idx);
Py_XINCREF(item);
return item;
- } else if (PyString_Check(idx)) {
- key = PyString_AsString(idx);
+ } else if (PyBytes_Check(idx)) {
+ key = PyBytes_AsString(idx);
nitems = PyTuple_Size(self->description);
for (i = 0; i < nitems; i++) {
- compare_key = PyString_AsString(PyTuple_GET_ITEM(PyTuple_GET_ITEM(self->description, i), 0));
+ compare_key = PyBytes_AsString(PyTuple_GET_ITEM(PyTuple_GET_ITEM(self->description, i), 0));
if (!compare_key) {
return NULL;
}
Modified: python/branches/tlee-ast-optimize/Modules/_sqlite/statement.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_sqlite/statement.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_sqlite/statement.c Sun Jun 1 17:18:10 2008
@@ -60,7 +60,7 @@
self->st = NULL;
self->in_use = 0;
- if (PyString_Check(sql)) {
+ if (PyBytes_Check(sql)) {
sql_str = sql;
Py_INCREF(sql_str);
} else if (PyUnicode_Check(sql)) {
@@ -77,7 +77,7 @@
self->in_weakreflist = NULL;
self->sql = sql_str;
- sql_cstr = PyString_AsString(sql_str);
+ sql_cstr = PyBytes_AsString(sql_str);
rc = sqlite3_prepare(connection->db,
sql_cstr,
@@ -119,7 +119,7 @@
paramtype = TYPE_LONG;
} else if (PyFloat_CheckExact(parameter)) {
paramtype = TYPE_FLOAT;
- } else if (PyString_CheckExact(parameter)) {
+ } else if (PyBytes_CheckExact(parameter)) {
paramtype = TYPE_STRING;
} else if (PyUnicode_CheckExact(parameter)) {
paramtype = TYPE_UNICODE;
@@ -131,7 +131,7 @@
paramtype = TYPE_LONG;
} else if (PyFloat_Check(parameter)) {
paramtype = TYPE_FLOAT;
- } else if (PyString_Check(parameter)) {
+ } else if (PyBytes_Check(parameter)) {
paramtype = TYPE_STRING;
} else if (PyUnicode_Check(parameter)) {
paramtype = TYPE_UNICODE;
@@ -140,7 +140,7 @@
}
if (paramtype == TYPE_STRING && !allow_8bit_chars) {
- string = PyString_AS_STRING(parameter);
+ string = PyBytes_AS_STRING(parameter);
for (c = string; *c != 0; c++) {
if (*c & 0x80) {
PyErr_SetString(pysqlite_ProgrammingError, "You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings.");
@@ -164,12 +164,12 @@
rc = sqlite3_bind_double(self->st, pos, PyFloat_AsDouble(parameter));
break;
case TYPE_STRING:
- string = PyString_AS_STRING(parameter);
+ string = PyBytes_AS_STRING(parameter);
rc = sqlite3_bind_text(self->st, pos, string, -1, SQLITE_TRANSIENT);
break;
case TYPE_UNICODE:
stringval = PyUnicode_AsUTF8String(parameter);
- string = PyString_AsString(stringval);
+ string = PyBytes_AsString(stringval);
rc = sqlite3_bind_text(self->st, pos, string, -1, SQLITE_TRANSIENT);
Py_DECREF(stringval);
break;
@@ -197,7 +197,7 @@
}
if (PyInt_CheckExact(obj) || PyLong_CheckExact(obj)
- || PyFloat_CheckExact(obj) || PyString_CheckExact(obj)
+ || PyFloat_CheckExact(obj) || PyBytes_CheckExact(obj)
|| PyUnicode_CheckExact(obj) || PyBuffer_Check(obj)) {
return 0;
} else {
@@ -326,7 +326,7 @@
char* sql_cstr;
sqlite3_stmt* new_st;
- sql_cstr = PyString_AsString(self->sql);
+ sql_cstr = PyBytes_AsString(self->sql);
rc = sqlite3_prepare(self->db,
sql_cstr,
Modified: python/branches/tlee-ast-optimize/Modules/_sre.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_sre.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_sre.c Sun Jun 1 17:18:10 2008
@@ -1715,7 +1715,7 @@
size = PyObject_Length(string);
#endif
- if (PyString_Check(string) || bytes == size)
+ if (PyBytes_Check(string) || bytes == size)
charsize = 1;
#if defined(HAVE_UNICODE)
else if (bytes == (Py_ssize_t) (size * sizeof(Py_UNICODE)))
@@ -1949,7 +1949,7 @@
if (!args)
return NULL;
- name = PyString_FromString(module);
+ name = PyBytes_FromString(module);
if (!name)
return NULL;
mod = PyImport_Import(name);
@@ -3416,7 +3416,7 @@
Py_DECREF(x);
}
- x = PyString_FromString(copyright);
+ x = PyBytes_FromString(copyright);
if (x) {
PyDict_SetItemString(d, "copyright", x);
Py_DECREF(x);
Modified: python/branches/tlee-ast-optimize/Modules/_ssl.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_ssl.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_ssl.c Sun Jun 1 17:18:10 2008
@@ -491,13 +491,13 @@
static PyObject *
PySSL_server(PySSLObject *self)
{
- return PyString_FromString(self->server);
+ return PyBytes_FromString(self->server);
}
static PyObject *
PySSL_issuer(PySSLObject *self)
{
- return PyString_FromString(self->issuer);
+ return PyBytes_FromString(self->issuer);
}
static PyObject *
@@ -515,7 +515,7 @@
_setSSLError(NULL, 0, __FILE__, __LINE__);
goto fail;
}
- name_obj = PyString_FromStringAndSize(namebuf, buflen);
+ name_obj = PyBytes_FromStringAndSize(namebuf, buflen);
if (name_obj == NULL)
goto fail;
@@ -603,8 +603,8 @@
/*
fprintf(stderr, "RDN level %d, attribute %s: %s\n",
entry->set,
- PyString_AS_STRING(PyTuple_GET_ITEM(attr, 0)),
- PyString_AS_STRING(PyTuple_GET_ITEM(attr, 1)));
+ PyBytes_AS_STRING(PyTuple_GET_ITEM(attr, 0)),
+ PyBytes_AS_STRING(PyTuple_GET_ITEM(attr, 1)));
*/
if (attr == NULL)
goto fail1;
@@ -711,7 +711,7 @@
goto fail;
}
- v = PyString_FromString("DirName");
+ v = PyBytes_FromString("DirName");
if (v == NULL) {
Py_DECREF(t);
goto fail;
@@ -742,13 +742,13 @@
t = PyTuple_New(2);
if (t == NULL)
goto fail;
- v = PyString_FromStringAndSize(buf, (vptr - buf));
+ v = PyBytes_FromStringAndSize(buf, (vptr - buf));
if (v == NULL) {
Py_DECREF(t);
goto fail;
}
PyTuple_SET_ITEM(t, 0, v);
- v = PyString_FromStringAndSize((vptr + 1), (len - (vptr - buf + 1)));
+ v = PyBytes_FromStringAndSize((vptr + 1), (len - (vptr - buf + 1)));
if (v == NULL) {
Py_DECREF(t);
goto fail;
@@ -849,7 +849,7 @@
_setSSLError(NULL, 0, __FILE__, __LINE__);
goto fail1;
}
- sn_obj = PyString_FromStringAndSize(buf, len);
+ sn_obj = PyBytes_FromStringAndSize(buf, len);
if (sn_obj == NULL)
goto fail1;
if (PyDict_SetItemString(retval, "serialNumber", sn_obj) < 0) {
@@ -866,7 +866,7 @@
_setSSLError(NULL, 0, __FILE__, __LINE__);
goto fail1;
}
- pnotBefore = PyString_FromStringAndSize(buf, len);
+ pnotBefore = PyBytes_FromStringAndSize(buf, len);
if (pnotBefore == NULL)
goto fail1;
if (PyDict_SetItemString(retval, "notBefore", pnotBefore) < 0) {
@@ -884,7 +884,7 @@
_setSSLError(NULL, 0, __FILE__, __LINE__);
goto fail1;
}
- pnotAfter = PyString_FromStringAndSize(buf, len);
+ pnotAfter = PyBytes_FromStringAndSize(buf, len);
if (pnotAfter == NULL)
goto fail1;
if (PyDict_SetItemString(retval, "notAfter", pnotAfter) < 0) {
@@ -981,7 +981,7 @@
PySSL_SetError(self, len, __FILE__, __LINE__);
return NULL;
}
- retval = PyString_FromStringAndSize((const char *) bytes_buf, len);
+ retval = PyBytes_FromStringAndSize((const char *) bytes_buf, len);
OPENSSL_free(bytes_buf);
return retval;
@@ -1028,7 +1028,7 @@
if (cipher_name == NULL) {
PyTuple_SET_ITEM(retval, 0, Py_None);
} else {
- v = PyString_FromString(cipher_name);
+ v = PyBytes_FromString(cipher_name);
if (v == NULL)
goto fail0;
PyTuple_SET_ITEM(retval, 0, v);
@@ -1037,7 +1037,7 @@
if (cipher_protocol == NULL) {
PyTuple_SET_ITEM(retval, 1, Py_None);
} else {
- v = PyString_FromString(cipher_protocol);
+ v = PyBytes_FromString(cipher_protocol);
if (v == NULL)
goto fail0;
PyTuple_SET_ITEM(retval, 1, v);
@@ -1211,7 +1211,7 @@
if (!PyArg_ParseTuple(args, "|i:read", &len))
return NULL;
- if (!(buf = PyString_FromStringAndSize((char *) 0, len)))
+ if (!(buf = PyBytes_FromStringAndSize((char *) 0, len)))
return NULL;
/* first check if there are bytes ready to be read */
@@ -1233,14 +1233,14 @@
return NULL;
} else if (sockstate == SOCKET_HAS_BEEN_CLOSED) {
/* should contain a zero-length string */
- _PyString_Resize(&buf, 0);
+ _PyBytes_Resize(&buf, 0);
return buf;
}
}
do {
err = 0;
PySSL_BEGIN_ALLOW_THREADS
- count = SSL_read(self->ssl, PyString_AsString(buf), len);
+ count = SSL_read(self->ssl, PyBytes_AsString(buf), len);
err = SSL_get_error(self->ssl, count);
PySSL_END_ALLOW_THREADS
if(PyErr_CheckSignals()) {
@@ -1257,7 +1257,7 @@
(SSL_get_shutdown(self->ssl) ==
SSL_RECEIVED_SHUTDOWN))
{
- _PyString_Resize(&buf, 0);
+ _PyBytes_Resize(&buf, 0);
return buf;
} else {
sockstate = SOCKET_OPERATION_OK;
@@ -1276,7 +1276,7 @@
return PySSL_SetError(self, count, __FILE__, __LINE__);
}
if (count != len)
- _PyString_Resize(&buf, count);
+ _PyBytes_Resize(&buf, count);
return buf;
}
@@ -1362,11 +1362,11 @@
{
int bytes;
- if (!PyString_Check(arg))
+ if (!PyBytes_Check(arg))
return PyErr_Format(PyExc_TypeError,
"RAND_egd() expected string, found %s",
Py_TYPE(arg)->tp_name);
- bytes = RAND_egd(PyString_AS_STRING(arg));
+ bytes = RAND_egd(PyBytes_AS_STRING(arg));
if (bytes == -1) {
PyErr_SetString(PySSLErrorObject,
"EGD connection failed or EGD did not return "
Modified: python/branches/tlee-ast-optimize/Modules/_struct.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_struct.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_struct.c Sun Jun 1 17:18:10 2008
@@ -413,7 +413,7 @@
if (msg == NULL)
return -1;
rval = PyErr_WarnEx(PyExc_DeprecationWarning,
- PyString_AS_STRING(msg), 2);
+ PyBytes_AS_STRING(msg), 2);
Py_DECREF(msg);
if (rval == 0)
return 0;
@@ -446,7 +446,7 @@
static PyObject *
nu_char(const char *p, const formatdef *f)
{
- return PyString_FromStringAndSize(p, 1);
+ return PyBytes_FromStringAndSize(p, 1);
}
static PyObject *
@@ -610,12 +610,12 @@
static int
np_char(char *p, PyObject *v, const formatdef *f)
{
- if (!PyString_Check(v) || PyString_Size(v) != 1) {
+ if (!PyBytes_Check(v) || PyBytes_Size(v) != 1) {
PyErr_SetString(StructError,
"char format require string of length 1");
return -1;
}
- *p = *PyString_AsString(v);
+ *p = *PyBytes_AsString(v);
return 0;
}
@@ -1335,7 +1335,7 @@
char c;
Py_ssize_t size, len, num, itemsize, x;
- fmt = PyString_AS_STRING(self->s_format);
+ fmt = PyBytes_AS_STRING(self->s_format);
f = whichtable((char **)&fmt);
@@ -1503,12 +1503,12 @@
const formatdef *e = code->fmtdef;
const char *res = startfrom + code->offset;
if (e->format == 's') {
- v = PyString_FromStringAndSize(res, code->size);
+ v = PyBytes_FromStringAndSize(res, code->size);
} else if (e->format == 'p') {
Py_ssize_t n = *(unsigned char*)res;
if (n >= code->size)
n = code->size - 1;
- v = PyString_FromStringAndSize(res + 1, n);
+ v = PyBytes_FromStringAndSize(res + 1, n);
} else {
v = e->unpack(res, e);
}
@@ -1542,9 +1542,9 @@
assert(soself->s_codes != NULL);
if (inputstr == NULL)
goto fail;
- if (PyString_Check(inputstr) &&
- PyString_GET_SIZE(inputstr) == soself->s_size) {
- return s_unpack_internal(soself, PyString_AS_STRING(inputstr));
+ if (PyBytes_Check(inputstr) &&
+ PyBytes_GET_SIZE(inputstr) == soself->s_size) {
+ return s_unpack_internal(soself, PyBytes_AS_STRING(inputstr));
}
args = PyTuple_Pack(1, inputstr);
if (args == NULL)
@@ -1637,27 +1637,27 @@
const formatdef *e = code->fmtdef;
char *res = buf + code->offset;
if (e->format == 's') {
- if (!PyString_Check(v)) {
+ if (!PyBytes_Check(v)) {
PyErr_SetString(StructError,
"argument for 's' must be a string");
return -1;
}
- n = PyString_GET_SIZE(v);
+ n = PyBytes_GET_SIZE(v);
if (n > code->size)
n = code->size;
if (n > 0)
- memcpy(res, PyString_AS_STRING(v), n);
+ memcpy(res, PyBytes_AS_STRING(v), n);
} else if (e->format == 'p') {
- if (!PyString_Check(v)) {
+ if (!PyBytes_Check(v)) {
PyErr_SetString(StructError,
"argument for 'p' must be a string");
return -1;
}
- n = PyString_GET_SIZE(v);
+ n = PyBytes_GET_SIZE(v);
if (n > (code->size - 1))
n = code->size - 1;
if (n > 0)
- memcpy(res + 1, PyString_AS_STRING(v), n);
+ memcpy(res + 1, PyBytes_AS_STRING(v), n);
if (n > 255)
n = 255;
*res = Py_SAFE_DOWNCAST(n, Py_ssize_t, unsigned char);
@@ -1700,12 +1700,12 @@
}
/* Allocate a new string */
- result = PyString_FromStringAndSize((char *)NULL, soself->s_size);
+ result = PyBytes_FromStringAndSize((char *)NULL, soself->s_size);
if (result == NULL)
return NULL;
/* Call the guts */
- if ( s_pack_internal(soself, args, 0, PyString_AS_STRING(result)) != 0 ) {
+ if ( s_pack_internal(soself, args, 0, PyBytes_AS_STRING(result)) != 0 ) {
Py_DECREF(result);
return NULL;
}
@@ -2061,7 +2061,7 @@
{
PyObject *ver, *m;
- ver = PyString_FromString("0.2");
+ ver = PyBytes_FromString("0.2");
if (ver == NULL)
return;
Modified: python/branches/tlee-ast-optimize/Modules/_testcapimodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_testcapimodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_testcapimodule.c Sun Jun 1 17:18:10 2008
@@ -691,7 +691,7 @@
}
#endif
-/* Some tests of PyString_FromFormat(). This needs more tests. */
+/* Some tests of PyBytes_FromFormat(). This needs more tests. */
static PyObject *
test_string_from_format(PyObject *self, PyObject *args)
{
@@ -699,10 +699,10 @@
char *msg;
#define CHECK_1_FORMAT(FORMAT, TYPE) \
- result = PyString_FromFormat(FORMAT, (TYPE)1); \
+ result = PyBytes_FromFormat(FORMAT, (TYPE)1); \
if (result == NULL) \
return NULL; \
- if (strcmp(PyString_AsString(result), "1")) { \
+ if (strcmp(PyBytes_AsString(result), "1")) { \
msg = FORMAT " failed at 1"; \
goto Fail; \
} \
Modified: python/branches/tlee-ast-optimize/Modules/_tkinter.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/_tkinter.c (original)
+++ python/branches/tlee-ast-optimize/Modules/_tkinter.c Sun Jun 1 17:18:10 2008
@@ -335,8 +335,8 @@
static char *
AsString(PyObject *value, PyObject *tmp)
{
- if (PyString_Check(value))
- return PyString_AsString(value);
+ if (PyBytes_Check(value))
+ return PyBytes_AsString(value);
#ifdef Py_USING_UNICODE
else if (PyUnicode_Check(value)) {
PyObject *v = PyUnicode_AsUTF8String(value);
@@ -347,7 +347,7 @@
return NULL;
}
Py_DECREF(v);
- return PyString_AsString(v);
+ return PyBytes_AsString(v);
}
#endif
else {
@@ -359,7 +359,7 @@
return NULL;
}
Py_DECREF(v);
- return PyString_AsString(v);
+ return PyBytes_AsString(v);
}
}
@@ -462,13 +462,13 @@
* Could be a quoted string containing funnies, e.g. {"}.
* Return the string itself.
*/
- return PyString_FromString(list);
+ return PyBytes_FromString(list);
}
if (argc == 0)
- v = PyString_FromString("");
+ v = PyBytes_FromString("");
else if (argc == 1)
- v = PyString_FromString(argv[0]);
+ v = PyBytes_FromString(argv[0]);
else if ((v = PyTuple_New(argc)) != NULL) {
int i;
PyObject *w;
@@ -530,10 +530,10 @@
return result;
/* Fall through, returning arg. */
}
- else if (PyString_Check(arg)) {
+ else if (PyBytes_Check(arg)) {
int argc;
char **argv;
- char *list = PyString_AsString(arg);
+ char *list = PyBytes_AsString(arg);
if (Tcl_SplitList((Tcl_Interp *)NULL, list, &argc, &argv) != TCL_OK) {
Py_INCREF(arg);
@@ -541,7 +541,7 @@
}
Tcl_Free(FREECAST argv);
if (argc > 1)
- return Split(PyString_AsString(arg));
+ return Split(PyBytes_AsString(arg));
/* Fall through, returning arg. */
}
Py_INCREF(arg);
@@ -747,12 +747,12 @@
static PyObject *
PyTclObject_str(PyTclObject *self)
{
- if (self->string && PyString_Check(self->string)) {
+ if (self->string && PyBytes_Check(self->string)) {
Py_INCREF(self->string);
return self->string;
}
/* XXX Could cache value if it is an ASCII string. */
- return PyString_FromString(Tcl_GetString(self->value));
+ return PyBytes_FromString(Tcl_GetString(self->value));
}
static char*
@@ -778,16 +778,16 @@
#ifdef Py_USING_UNICODE
if (i == len)
/* It is an ASCII string. */
- self->string = PyString_FromStringAndSize(s, len);
+ self->string = PyBytes_FromStringAndSize(s, len);
else {
self->string = PyUnicode_DecodeUTF8(s, len, "strict");
if (!self->string) {
PyErr_Clear();
- self->string = PyString_FromStringAndSize(s, len);
+ self->string = PyBytes_FromStringAndSize(s, len);
}
}
#else
- self->string = PyString_FromStringAndSize(s, len);
+ self->string = PyBytes_FromStringAndSize(s, len);
#endif
if (!self->string)
return NULL;
@@ -820,7 +820,7 @@
char buf[50];
PyOS_snprintf(buf, 50, "<%s object at %p>",
self->value->typePtr->name, self->value);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
static int
@@ -839,7 +839,7 @@
static PyObject*
get_typename(PyTclObject* obj, void* ignored)
{
- return PyString_FromString(obj->value->typePtr->name);
+ return PyBytes_FromString(obj->value->typePtr->name);
}
@@ -908,9 +908,9 @@
{
Tcl_Obj *result;
- if (PyString_Check(value))
- return Tcl_NewStringObj(PyString_AS_STRING(value),
- PyString_GET_SIZE(value));
+ if (PyBytes_Check(value))
+ return Tcl_NewStringObj(PyBytes_AS_STRING(value),
+ PyBytes_GET_SIZE(value));
else if (PyBool_Check(value))
return Tcl_NewBooleanObj(PyObject_IsTrue(value));
else if (PyInt_Check(value))
@@ -999,17 +999,17 @@
}
if (i == value->length)
- result = PyString_FromStringAndSize(s, len);
+ result = PyBytes_FromStringAndSize(s, len);
else {
/* Convert UTF-8 to Unicode string */
result = PyUnicode_DecodeUTF8(s, len, "strict");
if (result == NULL) {
PyErr_Clear();
- result = PyString_FromStringAndSize(s, len);
+ result = PyBytes_FromStringAndSize(s, len);
}
}
#else
- result = PyString_FromStringAndSize(value->bytes, value->length);
+ result = PyBytes_FromStringAndSize(value->bytes, value->length);
#endif
return result;
}
@@ -1023,7 +1023,7 @@
if (value->typePtr == app->ByteArrayType) {
int size;
char *data = (char*)Tcl_GetByteArrayFromObj(value, &size);
- return PyString_FromStringAndSize(data, size);
+ return PyBytes_FromStringAndSize(data, size);
}
if (value->typePtr == app->DoubleType) {
@@ -1092,7 +1092,7 @@
int size;
char *c;
c = Tcl_GetStringFromObj(value, &size);
- return PyString_FromStringAndSize(c, size);
+ return PyBytes_FromStringAndSize(c, size);
#endif
}
@@ -1204,19 +1204,19 @@
}
if (*p == '\0')
- res = PyString_FromStringAndSize(s, (int)(p-s));
+ res = PyBytes_FromStringAndSize(s, (int)(p-s));
else {
/* Convert UTF-8 to Unicode string */
p = strchr(p, '\0');
res = PyUnicode_DecodeUTF8(s, (int)(p-s), "strict");
if (res == NULL) {
PyErr_Clear();
- res = PyString_FromStringAndSize(s, (int)(p-s));
+ res = PyBytes_FromStringAndSize(s, (int)(p-s));
}
}
#else
p = strchr(p, '\0');
- res = PyString_FromStringAndSize(s, (int)(p-s));
+ res = PyBytes_FromStringAndSize(s, (int)(p-s));
#endif
}
return res;
@@ -1370,7 +1370,7 @@
if (err == TCL_ERROR)
res = Tkinter_Error(self);
else
- res = PyString_FromString(Tkapp_Result(self));
+ res = PyBytes_FromString(Tkapp_Result(self));
LEAVE_OVERLAP_TCL
ckfree(cmd);
}
@@ -1396,7 +1396,7 @@
if (err == TCL_ERROR)
res = Tkinter_Error(self);
else
- res = PyString_FromString(Tkapp_Result(self));
+ res = PyBytes_FromString(Tkapp_Result(self));
LEAVE_OVERLAP_TCL
return res;
}
@@ -1419,7 +1419,7 @@
if (err == TCL_ERROR)
res = Tkinter_Error(self);
else
- res = PyString_FromString(Tkapp_Result(self));
+ res = PyBytes_FromString(Tkapp_Result(self));
LEAVE_OVERLAP_TCL
return res;
}
@@ -1443,7 +1443,7 @@
res = Tkinter_Error(self);
else
- res = PyString_FromString(Tkapp_Result(self));
+ res = PyBytes_FromString(Tkapp_Result(self));
LEAVE_OVERLAP_TCL
return res;
}
@@ -1466,7 +1466,7 @@
if (err == TCL_ERROR)
res = Tkinter_Error(self);
else
- res = PyString_FromString(Tkapp_Result(self));
+ res = PyBytes_FromString(Tkapp_Result(self));
LEAVE_OVERLAP_TCL
return res;
}
@@ -1511,8 +1511,8 @@
varname_converter(PyObject *in, void *_out)
{
char **out = (char**)_out;
- if (PyString_Check(in)) {
- *out = PyString_AsString(in);
+ if (PyBytes_Check(in)) {
+ *out = PyBytes_AsString(in);
return 1;
}
if (PyTclObject_Check(in)) {
@@ -1676,7 +1676,7 @@
res = FromObj(self, tres);
}
else {
- res = PyString_FromString(Tcl_GetString(tres));
+ res = PyBytes_FromString(Tcl_GetString(tres));
}
}
LEAVE_OVERLAP_TCL
@@ -1920,7 +1920,7 @@
goto finally;
for (i = 0; i < argc; i++) {
- PyObject *s = PyString_FromString(argv[i]);
+ PyObject *s = PyBytes_FromString(argv[i]);
if (!s || PyTuple_SetItem(v, i, s)) {
Py_DECREF(v);
v = NULL;
@@ -1961,7 +1961,7 @@
PyObject *res = NULL;
if (s) {
- res = PyString_FromString(s);
+ res = PyBytes_FromString(s);
ckfree(s);
}
@@ -2011,7 +2011,7 @@
return PythonCmd_Error(interp);
for (i = 0; i < (argc - 1); i++) {
- PyObject *s = PyString_FromString(argv[i + 1]);
+ PyObject *s = PyBytes_FromString(argv[i + 1]);
if (!s || PyTuple_SetItem(arg, i, s)) {
Py_DECREF(arg);
return PythonCmd_Error(interp);
@@ -2406,7 +2406,7 @@
PyOS_snprintf(buf, sizeof(buf), "<tktimertoken at %p%s>", v,
v->func == NULL ? ", handler deleted" : "");
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
static PyObject *
@@ -3087,7 +3087,7 @@
static void
ins_string(PyObject *d, char *name, char *val)
{
- PyObject *v = PyString_FromString(val);
+ PyObject *v = PyBytes_FromString(val);
if (v) {
PyDict_SetItemString(d, name, v);
Py_DECREF(v);
Modified: python/branches/tlee-ast-optimize/Modules/almodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/almodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/almodule.c Sun Jun 1 17:18:10 2008
@@ -84,7 +84,7 @@
Py_INCREF(Py_None);
return Py_None;
}
- return PyString_FromString((char *) value.ptr);
+ return PyBytes_FromString((char *) value.ptr);
default:
PyErr_SetString(ErrorObject, "unknown element type");
return NULL;
@@ -149,12 +149,12 @@
PyErr_SetString(ErrorObject, "unknown element type");
return -1;
}
- if (!PyString_Check(value)) {
+ if (!PyBytes_Check(value)) {
PyErr_BadArgument();
return -1;
}
- param->value.ptr = PyString_AS_STRING(value);
- param->sizeIn = PyString_GET_SIZE(value)+1; /*account for NUL*/
+ param->value.ptr = PyBytes_AS_STRING(value);
+ param->sizeIn = PyBytes_GET_SIZE(value)+1; /*account for NUL*/
break;
case AL_SET_VAL:
case AL_VECTOR_VAL:
@@ -765,12 +765,12 @@
return NULL;
}
size *= ch;
- v = PyString_FromStringAndSize((char *) NULL, size * framecount);
+ v = PyBytes_FromStringAndSize((char *) NULL, size * framecount);
if (v == NULL)
return NULL;
Py_BEGIN_ALLOW_THREADS
- alReadFrames(self->port, (void *) PyString_AS_STRING(v), framecount);
+ alReadFrames(self->port, (void *) PyBytes_AS_STRING(v), framecount);
Py_END_ALLOW_THREADS
return v;
@@ -1068,12 +1068,12 @@
width = ALgetwidth(c);
#endif /* AL_405 */
ALfreeconfig(c);
- v = PyString_FromStringAndSize((char *)NULL, width * count);
+ v = PyBytes_FromStringAndSize((char *)NULL, width * count);
if (v == NULL)
return NULL;
Py_BEGIN_ALLOW_THREADS
- ret = ALreadsamps(self->port, (void *) PyString_AsString(v), count);
+ ret = ALreadsamps(self->port, (void *) PyBytes_AsString(v), count);
Py_END_ALLOW_THREADS
if (ret == -1) {
Py_DECREF(v);
@@ -1498,7 +1498,7 @@
Py_INCREF(item);
break;
case AL_STRING_VAL:
- item = PyString_FromString(pvs[i].value.ptr);
+ item = PyBytes_FromString(pvs[i].value.ptr);
PyMem_DEL(pvs[i].value.ptr);
break;
case AL_MATRIX_VAL:
@@ -1725,7 +1725,7 @@
PyDict_SetItemString(v, "elementType", item);
Py_DECREF(item);
- item = PyString_FromString(pinfo.name);
+ item = PyBytes_FromString(pinfo.name);
PyDict_SetItemString(v, "name", item);
Py_DECREF(item);
@@ -1920,7 +1920,7 @@
return NULL;
if ((name = ALgetname(device, descriptor)) == NULL)
return NULL;
- return PyString_FromString(name);
+ return PyBytes_FromString(name);
}
static PyObject *
Modified: python/branches/tlee-ast-optimize/Modules/arraymodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/arraymodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/arraymodule.c Sun Jun 1 17:18:10 2008
@@ -104,7 +104,7 @@
static PyObject *
c_getitem(arrayobject *ap, Py_ssize_t i)
{
- return PyString_FromStringAndSize(&((char *)ap->ob_item)[i], 1);
+ return PyBytes_FromStringAndSize(&((char *)ap->ob_item)[i], 1);
}
static int
@@ -1414,7 +1414,7 @@
static PyObject *
array_tostring(arrayobject *self, PyObject *unused)
{
- return PyString_FromStringAndSize(self->ob_item,
+ return PyBytes_FromStringAndSize(self->ob_item,
Py_SIZE(self) * self->ob_descr->itemsize);
}
@@ -1494,7 +1494,7 @@
array_get_typecode(arrayobject *a, void *closure)
{
char tc = a->ob_descr->typecode;
- return PyString_FromStringAndSize(&tc, 1);
+ return PyBytes_FromStringAndSize(&tc, 1);
}
static PyObject *
@@ -1578,7 +1578,7 @@
typecode = a->ob_descr->typecode;
if (len == 0) {
PyOS_snprintf(buf, sizeof(buf), "array('%c')", typecode);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
if (typecode == 'c')
@@ -1593,9 +1593,9 @@
Py_XDECREF(v);
PyOS_snprintf(buf, sizeof(buf), "array('%c', ", typecode);
- s = PyString_FromString(buf);
- PyString_ConcatAndDel(&s, t);
- PyString_ConcatAndDel(&s, PyString_FromString(")"));
+ s = PyBytes_FromString(buf);
+ PyBytes_ConcatAndDel(&s, t);
+ PyBytes_ConcatAndDel(&s, PyBytes_FromString(")"));
return s;
}
@@ -1881,7 +1881,7 @@
return NULL;
if (!(initial == NULL || PyList_Check(initial)
- || PyString_Check(initial) || PyTuple_Check(initial)
+ || PyBytes_Check(initial) || PyTuple_Check(initial)
|| (c == 'u' && PyUnicode_Check(initial)))) {
it = PyObject_GetIter(initial);
if (it == NULL)
@@ -1924,7 +1924,7 @@
}
Py_DECREF(v);
}
- } else if (initial != NULL && PyString_Check(initial)) {
+ } else if (initial != NULL && PyBytes_Check(initial)) {
PyObject *t_initial, *v;
t_initial = PyTuple_Pack(1, initial);
if (t_initial == NULL) {
Modified: python/branches/tlee-ast-optimize/Modules/audioop.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/audioop.c (original)
+++ python/branches/tlee-ast-optimize/Modules/audioop.c Sun Jun 1 17:18:10 2008
@@ -474,7 +474,7 @@
/* Passing a short** for an 's' argument is correct only
if the string contents is aligned for interpretation
- as short[]. Due to the definition of PyStringObject,
+ as short[]. Due to the definition of PyBytesObject,
this is currently (Python 2.6) the case. */
if ( !PyArg_ParseTuple(args, "s#s#:findfit",
(char**)&cp1, &len1, (char**)&cp2, &len2) )
@@ -759,10 +759,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, len);
+ rv = PyBytes_FromStringAndSize(NULL, len);
if ( rv == 0 )
return 0;
- ncp = (signed char *)PyString_AsString(rv);
+ ncp = (signed char *)PyBytes_AsString(rv);
for ( i=0; i < len; i += size ) {
@@ -801,10 +801,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, len/2);
+ rv = PyBytes_FromStringAndSize(NULL, len/2);
if ( rv == 0 )
return 0;
- ncp = (signed char *)PyString_AsString(rv);
+ ncp = (signed char *)PyBytes_AsString(rv);
for ( i=0; i < len; i += size*2 ) {
@@ -846,10 +846,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, len*2);
+ rv = PyBytes_FromStringAndSize(NULL, len*2);
if ( rv == 0 )
return 0;
- ncp = (signed char *)PyString_AsString(rv);
+ ncp = (signed char *)PyBytes_AsString(rv);
for ( i=0; i < len; i += size ) {
@@ -903,10 +903,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, len1);
+ rv = PyBytes_FromStringAndSize(NULL, len1);
if ( rv == 0 )
return 0;
- ncp = (signed char *)PyString_AsString(rv);
+ ncp = (signed char *)PyBytes_AsString(rv);
for ( i=0; i < len1; i += size ) {
if ( size == 1 ) val1 = (int)*CHARP(cp1, i);
@@ -949,10 +949,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, len);
+ rv = PyBytes_FromStringAndSize(NULL, len);
if ( rv == 0 )
return 0;
- ncp = (signed char *)PyString_AsString(rv);
+ ncp = (signed char *)PyBytes_AsString(rv);
for ( i=0; i < len; i += size ) {
@@ -985,10 +985,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, len);
+ rv = PyBytes_FromStringAndSize(NULL, len);
if ( rv == 0 )
return 0;
- ncp = (unsigned char *)PyString_AsString(rv);
+ ncp = (unsigned char *)PyBytes_AsString(rv);
for ( i=0; i < len; i += size ) {
if ( size == 1 ) val = ((int)*CHARP(cp, i)) << 8;
@@ -1023,10 +1023,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, (len/size)*size2);
+ rv = PyBytes_FromStringAndSize(NULL, (len/size)*size2);
if ( rv == 0 )
return 0;
- ncp = (unsigned char *)PyString_AsString(rv);
+ ncp = (unsigned char *)PyBytes_AsString(rv);
for ( i=0, j=0; i < len; i += size, j += size2 ) {
if ( size == 1 ) val = ((int)*CHARP(cp, i)) << 8;
@@ -1157,7 +1157,7 @@
nbytes / bytes_per_frame != ceiling)
str = NULL;
else
- str = PyString_FromStringAndSize(NULL, nbytes);
+ str = PyBytes_FromStringAndSize(NULL, nbytes);
if (str == NULL) {
PyErr_SetString(PyExc_MemoryError,
@@ -1165,7 +1165,7 @@
goto exit;
}
}
- ncp = PyString_AsString(str);
+ ncp = PyBytes_AsString(str);
for (;;) {
while (d < 0) {
@@ -1182,13 +1182,13 @@
goto exit;
/* We have checked before that the length
* of the string fits into int. */
- len = (int)(ncp - PyString_AsString(str));
+ len = (int)(ncp - PyBytes_AsString(str));
if (len == 0) {
/*don't want to resize to zero length*/
- rv = PyString_FromStringAndSize("", 0);
+ rv = PyBytes_FromStringAndSize("", 0);
Py_DECREF(str);
str = rv;
- } else if (_PyString_Resize(&str, len) < 0)
+ } else if (_PyBytes_Resize(&str, len) < 0)
goto exit;
rv = Py_BuildValue("(O(iO))", str, d, samps);
Py_DECREF(samps);
@@ -1255,10 +1255,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, len/size);
+ rv = PyBytes_FromStringAndSize(NULL, len/size);
if ( rv == 0 )
return 0;
- ncp = (unsigned char *)PyString_AsString(rv);
+ ncp = (unsigned char *)PyBytes_AsString(rv);
for ( i=0; i < len; i += size ) {
if ( size == 1 ) val = ((int)*CHARP(cp, i)) << 8;
@@ -1289,10 +1289,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, len*size);
+ rv = PyBytes_FromStringAndSize(NULL, len*size);
if ( rv == 0 )
return 0;
- ncp = (signed char *)PyString_AsString(rv);
+ ncp = (signed char *)PyBytes_AsString(rv);
for ( i=0; i < len*size; i += size ) {
cval = *cp++;
@@ -1323,10 +1323,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, len/size);
+ rv = PyBytes_FromStringAndSize(NULL, len/size);
if ( rv == 0 )
return 0;
- ncp = (unsigned char *)PyString_AsString(rv);
+ ncp = (unsigned char *)PyBytes_AsString(rv);
for ( i=0; i < len; i += size ) {
if ( size == 1 ) val = ((int)*CHARP(cp, i)) << 8;
@@ -1357,10 +1357,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, len*size);
+ rv = PyBytes_FromStringAndSize(NULL, len*size);
if ( rv == 0 )
return 0;
- ncp = (signed char *)PyString_AsString(rv);
+ ncp = (signed char *)PyBytes_AsString(rv);
for ( i=0; i < len*size; i += size ) {
cval = *cp++;
@@ -1393,10 +1393,10 @@
return 0;
}
- str = PyString_FromStringAndSize(NULL, len/(size*2));
+ str = PyBytes_FromStringAndSize(NULL, len/(size*2));
if ( str == 0 )
return 0;
- ncp = (signed char *)PyString_AsString(str);
+ ncp = (signed char *)PyBytes_AsString(str);
/* Decode state, should have (value, step) */
if ( state == Py_None ) {
@@ -1509,10 +1509,10 @@
} else if ( !PyArg_ParseTuple(state, "ii", &valpred, &index) )
return 0;
- str = PyString_FromStringAndSize(NULL, len*size*2);
+ str = PyBytes_FromStringAndSize(NULL, len*size*2);
if ( str == 0 )
return 0;
- ncp = (signed char *)PyString_AsString(str);
+ ncp = (signed char *)PyBytes_AsString(str);
step = stepsizeTable[index];
bufferstep = 0;
Modified: python/branches/tlee-ast-optimize/Modules/binascii.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/binascii.c (original)
+++ python/branches/tlee-ast-optimize/Modules/binascii.c Sun Jun 1 17:18:10 2008
@@ -141,7 +141,7 @@
#define BASE64_PAD '='
/* Max binary chunk size; limited only by available memory */
-#define BASE64_MAXBIN (INT_MAX/2 - sizeof(PyStringObject) - 3)
+#define BASE64_MAXBIN (INT_MAX/2 - sizeof(PyBytesObject) - 3)
static unsigned char table_b2a_base64[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
@@ -203,9 +203,9 @@
ascii_len--;
/* Allocate the buffer */
- if ( (rv=PyString_FromStringAndSize(NULL, bin_len)) == NULL )
+ if ( (rv=PyBytes_FromStringAndSize(NULL, bin_len)) == NULL )
return NULL;
- bin_data = (unsigned char *)PyString_AsString(rv);
+ bin_data = (unsigned char *)PyBytes_AsString(rv);
for( ; bin_len > 0 ; ascii_len--, ascii_data++ ) {
/* XXX is it really best to add NULs if there's no more data */
@@ -280,9 +280,9 @@
}
/* We're lazy and allocate to much (fixed up later) */
- if ( (rv=PyString_FromStringAndSize(NULL, bin_len*2+2)) == NULL )
+ if ( (rv=PyBytes_FromStringAndSize(NULL, bin_len*2+2)) == NULL )
return NULL;
- ascii_data = (unsigned char *)PyString_AsString(rv);
+ ascii_data = (unsigned char *)PyBytes_AsString(rv);
/* Store the length */
*ascii_data++ = ' ' + (bin_len & 077);
@@ -304,8 +304,8 @@
}
*ascii_data++ = '\n'; /* Append a courtesy newline */
- _PyString_Resize(&rv, (ascii_data -
- (unsigned char *)PyString_AsString(rv)));
+ _PyBytes_Resize(&rv, (ascii_data -
+ (unsigned char *)PyBytes_AsString(rv)));
return rv;
}
@@ -354,9 +354,9 @@
bin_len = ((ascii_len+3)/4)*3; /* Upper bound, corrected later */
/* Allocate the buffer */
- if ( (rv=PyString_FromStringAndSize(NULL, bin_len)) == NULL )
+ if ( (rv=PyBytes_FromStringAndSize(NULL, bin_len)) == NULL )
return NULL;
- bin_data = (unsigned char *)PyString_AsString(rv);
+ bin_data = (unsigned char *)PyBytes_AsString(rv);
bin_len = 0;
for( ; ascii_len > 0; ascii_len--, ascii_data++) {
@@ -415,13 +415,13 @@
/* And set string size correctly. If the result string is empty
** (because the input was all invalid) return the shared empty
- ** string instead; _PyString_Resize() won't do this for us.
+ ** string instead; _PyBytes_Resize() won't do this for us.
*/
if (bin_len > 0)
- _PyString_Resize(&rv, bin_len);
+ _PyBytes_Resize(&rv, bin_len);
else {
Py_DECREF(rv);
- rv = PyString_FromString("");
+ rv = PyBytes_FromString("");
}
return rv;
}
@@ -448,9 +448,9 @@
/* We're lazy and allocate too much (fixed up later).
"+3" leaves room for up to two pad characters and a trailing
newline. Note that 'b' gets encoded as 'Yg==\n' (1 in, 5 out). */
- if ( (rv=PyString_FromStringAndSize(NULL, bin_len*2 + 3)) == NULL )
+ if ( (rv=PyBytes_FromStringAndSize(NULL, bin_len*2 + 3)) == NULL )
return NULL;
- ascii_data = (unsigned char *)PyString_AsString(rv);
+ ascii_data = (unsigned char *)PyBytes_AsString(rv);
for( ; bin_len > 0 ; bin_len--, bin_data++ ) {
/* Shift the data into our buffer */
@@ -474,8 +474,8 @@
}
*ascii_data++ = '\n'; /* Append a courtesy newline */
- _PyString_Resize(&rv, (ascii_data -
- (unsigned char *)PyString_AsString(rv)));
+ _PyBytes_Resize(&rv, (ascii_data -
+ (unsigned char *)PyBytes_AsString(rv)));
return rv;
}
@@ -498,9 +498,9 @@
/* Allocate a string that is too big (fixed later)
Add two to the initial length to prevent interning which
would preclude subsequent resizing. */
- if ( (rv=PyString_FromStringAndSize(NULL, len+2)) == NULL )
+ if ( (rv=PyBytes_FromStringAndSize(NULL, len+2)) == NULL )
return NULL;
- bin_data = (unsigned char *)PyString_AsString(rv);
+ bin_data = (unsigned char *)PyBytes_AsString(rv);
for( ; len > 0 ; len--, ascii_data++ ) {
/* Get the byte and look it up */
@@ -534,8 +534,8 @@
Py_DECREF(rv);
return NULL;
}
- _PyString_Resize(
- &rv, (bin_data - (unsigned char *)PyString_AsString(rv)));
+ _PyBytes_Resize(
+ &rv, (bin_data - (unsigned char *)PyBytes_AsString(rv)));
if (rv) {
PyObject *rrv = Py_BuildValue("Oi", rv, done);
Py_DECREF(rv);
@@ -559,9 +559,9 @@
return NULL;
/* Worst case: output is twice as big as input (fixed later) */
- if ( (rv=PyString_FromStringAndSize(NULL, len*2+2)) == NULL )
+ if ( (rv=PyBytes_FromStringAndSize(NULL, len*2+2)) == NULL )
return NULL;
- out_data = (unsigned char *)PyString_AsString(rv);
+ out_data = (unsigned char *)PyBytes_AsString(rv);
for( in=0; in<len; in++) {
ch = in_data[in];
@@ -587,8 +587,8 @@
}
}
}
- _PyString_Resize(&rv, (out_data -
- (unsigned char *)PyString_AsString(rv)));
+ _PyBytes_Resize(&rv, (out_data -
+ (unsigned char *)PyBytes_AsString(rv)));
return rv;
}
@@ -608,9 +608,9 @@
return NULL;
/* Allocate a buffer that is at least large enough */
- if ( (rv=PyString_FromStringAndSize(NULL, len*2+2)) == NULL )
+ if ( (rv=PyBytes_FromStringAndSize(NULL, len*2+2)) == NULL )
return NULL;
- ascii_data = (unsigned char *)PyString_AsString(rv);
+ ascii_data = (unsigned char *)PyBytes_AsString(rv);
for( ; len > 0 ; len--, bin_data++ ) {
/* Shift into our buffer, and output any 6bits ready */
@@ -627,8 +627,8 @@
leftchar <<= (6-leftbits);
*ascii_data++ = table_b2a_hqx[leftchar & 0x3f];
}
- _PyString_Resize(&rv, (ascii_data -
- (unsigned char *)PyString_AsString(rv)));
+ _PyBytes_Resize(&rv, (ascii_data -
+ (unsigned char *)PyBytes_AsString(rv)));
return rv;
}
@@ -647,14 +647,14 @@
/* Empty string is a special case */
if ( in_len == 0 )
- return PyString_FromString("");
+ return PyBytes_FromString("");
/* Allocate a buffer of reasonable size. Resized when needed */
out_len = in_len*2;
- if ( (rv=PyString_FromStringAndSize(NULL, out_len)) == NULL )
+ if ( (rv=PyBytes_FromStringAndSize(NULL, out_len)) == NULL )
return NULL;
out_len_left = out_len;
- out_data = (unsigned char *)PyString_AsString(rv);
+ out_data = (unsigned char *)PyBytes_AsString(rv);
/*
** We need two macros here to get/put bytes and handle
@@ -673,9 +673,9 @@
#define OUTBYTE(b) \
do { \
if ( --out_len_left < 0 ) { \
- _PyString_Resize(&rv, 2*out_len); \
+ _PyBytes_Resize(&rv, 2*out_len); \
if ( rv == NULL ) return NULL; \
- out_data = (unsigned char *)PyString_AsString(rv) \
+ out_data = (unsigned char *)PyBytes_AsString(rv) \
+ out_len; \
out_len_left = out_len-1; \
out_len = out_len * 2; \
@@ -723,8 +723,8 @@
OUTBYTE(in_byte);
}
}
- _PyString_Resize(&rv, (out_data -
- (unsigned char *)PyString_AsString(rv)));
+ _PyBytes_Resize(&rv, (out_data -
+ (unsigned char *)PyBytes_AsString(rv)));
return rv;
}
@@ -923,10 +923,10 @@
if (!PyArg_ParseTuple(args, "s#:b2a_hex", &argbuf, &arglen))
return NULL;
- retval = PyString_FromStringAndSize(NULL, arglen*2);
+ retval = PyBytes_FromStringAndSize(NULL, arglen*2);
if (!retval)
return NULL;
- retbuf = PyString_AsString(retval);
+ retbuf = PyBytes_AsString(retval);
if (!retbuf)
goto finally;
@@ -989,10 +989,10 @@
return NULL;
}
- retval = PyString_FromStringAndSize(NULL, (arglen/2));
+ retval = PyBytes_FromStringAndSize(NULL, (arglen/2));
if (!retval)
return NULL;
- retbuf = PyString_AsString(retval);
+ retbuf = PyBytes_AsString(retval);
if (!retbuf)
goto finally;
@@ -1106,7 +1106,7 @@
out++;
}
}
- if ((rv = PyString_FromStringAndSize((char *)odata, out)) == NULL) {
+ if ((rv = PyBytes_FromStringAndSize((char *)odata, out)) == NULL) {
PyMem_Free(odata);
return NULL;
}
@@ -1306,7 +1306,7 @@
}
}
}
- if ((rv = PyString_FromStringAndSize((char *)odata, out)) == NULL) {
+ if ((rv = PyBytes_FromStringAndSize((char *)odata, out)) == NULL) {
PyMem_Free(odata);
return NULL;
}
@@ -1354,7 +1354,7 @@
return;
d = PyModule_GetDict(m);
- x = PyString_FromString(doc_binascii);
+ x = PyBytes_FromString(doc_binascii);
PyDict_SetItemString(d, "__doc__", x);
Py_XDECREF(x);
Modified: python/branches/tlee-ast-optimize/Modules/bsddbmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/bsddbmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/bsddbmodule.c Sun Jun 1 17:18:10 2008
@@ -312,7 +312,7 @@
return NULL;
}
- result = PyString_FromStringAndSize(data, (int)drec.size);
+ result = PyBytes_FromStringAndSize(data, (int)drec.size);
if (data != buf) free(data);
return result;
}
@@ -424,7 +424,7 @@
if (dp->di_type == DB_RECNO)
item = PyInt_FromLong(*((int*)data));
else
- item = PyString_FromStringAndSize(data,
+ item = PyBytes_FromStringAndSize(data,
(int)krec.size);
if (data != buf) free(data);
if (item == NULL) {
Modified: python/branches/tlee-ast-optimize/Modules/bz2module.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/bz2module.c (original)
+++ python/branches/tlee-ast-optimize/Modules/bz2module.c Sun Jun 1 17:18:10 2008
@@ -34,7 +34,7 @@
#error "Large file support, but neither off_t nor fpos_t is large enough."
#endif
-#define BUF(v) PyString_AS_STRING((PyStringObject *)v)
+#define BUF(v) PyBytes_AS_STRING((PyBytesObject *)v)
#define MODE_CLOSED 0
#define MODE_READ 1
@@ -241,7 +241,7 @@
int univ_newline = f->f_univ_newline;
total_v_size = n > 0 ? n : 100;
- v = PyString_FromStringAndSize((char *)NULL, total_v_size);
+ v = PyBytes_FromStringAndSize((char *)NULL, total_v_size);
if (v == NULL)
return NULL;
@@ -307,7 +307,7 @@
Py_DECREF(v);
return NULL;
}
- if (_PyString_Resize(&v, total_v_size) < 0)
+ if (_PyBytes_Resize(&v, total_v_size) < 0)
return NULL;
buf = BUF(v) + used_v_size;
end = BUF(v) + total_v_size;
@@ -315,7 +315,7 @@
used_v_size = buf - BUF(v);
if (used_v_size != total_v_size)
- _PyString_Resize(&v, used_v_size);
+ _PyBytes_Resize(&v, used_v_size);
return v;
}
@@ -438,10 +438,10 @@
/* This is a hacked version of Python's
* fileobject.c:readahead_get_line_skip(). */
-static PyStringObject *
+static PyBytesObject *
Util_ReadAheadGetLineSkip(BZ2FileObject *f, int skip, int bufsize)
{
- PyStringObject* s;
+ PyBytesObject* s;
char *bufptr;
char *buf;
int len;
@@ -452,17 +452,17 @@
len = f->f_bufend - f->f_bufptr;
if (len == 0)
- return (PyStringObject *)
- PyString_FromStringAndSize(NULL, skip);
+ return (PyBytesObject *)
+ PyBytes_FromStringAndSize(NULL, skip);
bufptr = memchr(f->f_bufptr, '\n', len);
if (bufptr != NULL) {
bufptr++; /* Count the '\n' */
len = bufptr - f->f_bufptr;
- s = (PyStringObject *)
- PyString_FromStringAndSize(NULL, skip+len);
+ s = (PyBytesObject *)
+ PyBytes_FromStringAndSize(NULL, skip+len);
if (s == NULL)
return NULL;
- memcpy(PyString_AS_STRING(s)+skip, f->f_bufptr, len);
+ memcpy(PyBytes_AS_STRING(s)+skip, f->f_bufptr, len);
f->f_bufptr = bufptr;
if (bufptr == f->f_bufend)
Util_DropReadAhead(f);
@@ -476,7 +476,7 @@
PyMem_Free(buf);
return NULL;
}
- memcpy(PyString_AS_STRING(s)+skip, bufptr, len);
+ memcpy(PyBytes_AS_STRING(s)+skip, bufptr, len);
PyMem_Free(buf);
}
return s;
@@ -509,7 +509,7 @@
case MODE_READ:
break;
case MODE_READ_EOF:
- ret = PyString_FromString("");
+ ret = PyBytes_FromString("");
goto cleanup;
case MODE_CLOSED:
PyErr_SetString(PyExc_ValueError,
@@ -531,7 +531,7 @@
"more than a Python string can hold");
goto cleanup;
}
- ret = PyString_FromStringAndSize((char *)NULL, buffersize);
+ ret = PyBytes_FromStringAndSize((char *)NULL, buffersize);
if (ret == NULL)
goto cleanup;
bytesread = 0;
@@ -557,14 +557,14 @@
}
if (bytesrequested < 0) {
buffersize = Util_NewBufferSize(buffersize);
- if (_PyString_Resize(&ret, buffersize) < 0)
+ if (_PyBytes_Resize(&ret, buffersize) < 0)
goto cleanup;
} else {
break;
}
}
if (bytesread != buffersize)
- _PyString_Resize(&ret, bytesread);
+ _PyBytes_Resize(&ret, bytesread);
cleanup:
RELEASE_LOCK(self);
@@ -594,7 +594,7 @@
case MODE_READ:
break;
case MODE_READ_EOF:
- ret = PyString_FromString("");
+ ret = PyBytes_FromString("");
goto cleanup;
case MODE_CLOSED:
PyErr_SetString(PyExc_ValueError,
@@ -607,7 +607,7 @@
}
if (sizehint == 0)
- ret = PyString_FromString("");
+ ret = PyBytes_FromString("");
else
ret = Util_GetLine(self, (sizehint < 0) ? 0 : sizehint);
@@ -701,17 +701,17 @@
}
if (big_buffer == NULL) {
/* Create the big buffer */
- big_buffer = PyString_FromStringAndSize(
+ big_buffer = PyBytes_FromStringAndSize(
NULL, buffersize);
if (big_buffer == NULL)
goto error;
- buffer = PyString_AS_STRING(big_buffer);
+ buffer = PyBytes_AS_STRING(big_buffer);
memcpy(buffer, small_buffer, nfilled);
}
else {
/* Grow the big buffer */
- _PyString_Resize(&big_buffer, buffersize);
- buffer = PyString_AS_STRING(big_buffer);
+ _PyBytes_Resize(&big_buffer, buffersize);
+ buffer = PyBytes_AS_STRING(big_buffer);
}
continue;
}
@@ -720,7 +720,7 @@
while (p != NULL) {
/* Process complete lines */
p++;
- line = PyString_FromStringAndSize(q, p-q);
+ line = PyBytes_FromStringAndSize(q, p-q);
if (line == NULL)
goto error;
err = PyList_Append(list, line);
@@ -743,7 +743,7 @@
}
if (nfilled != 0) {
/* Partial last line */
- line = PyString_FromStringAndSize(buffer, nfilled);
+ line = PyBytes_FromStringAndSize(buffer, nfilled);
if (line == NULL)
goto error;
if (sizehint > 0) {
@@ -753,7 +753,7 @@
Py_DECREF(line);
goto error;
}
- PyString_Concat(&line, rest);
+ PyBytes_Concat(&line, rest);
Py_DECREF(rest);
if (line == NULL)
goto error;
@@ -915,7 +915,7 @@
could potentially execute Python code. */
for (i = 0; i < j; i++) {
PyObject *v = PyList_GET_ITEM(list, i);
- if (!PyString_Check(v)) {
+ if (!PyBytes_Check(v)) {
const char *buffer;
Py_ssize_t len;
if (PyObject_AsCharBuffer(v, &buffer, &len)) {
@@ -926,7 +926,7 @@
"strings");
goto error;
}
- line = PyString_FromStringAndSize(buffer,
+ line = PyBytes_FromStringAndSize(buffer,
len);
if (line == NULL)
goto error;
@@ -942,9 +942,9 @@
Py_BEGIN_ALLOW_THREADS
for (i = 0; i < j; i++) {
line = PyList_GET_ITEM(list, i);
- len = PyString_GET_SIZE(line);
+ len = PyBytes_GET_SIZE(line);
BZ2_bzWrite (&bzerror, self->fp,
- PyString_AS_STRING(line), len);
+ PyBytes_AS_STRING(line), len);
if (bzerror != BZ_OK) {
Py_BLOCK_THREADS
Util_CatchBZ2Error(bzerror);
@@ -1224,13 +1224,13 @@
Py_INCREF(Py_None);
return Py_None;
case NEWLINE_CR:
- return PyString_FromString("\r");
+ return PyBytes_FromString("\r");
case NEWLINE_LF:
- return PyString_FromString("\n");
+ return PyBytes_FromString("\n");
case NEWLINE_CR|NEWLINE_LF:
return Py_BuildValue("(ss)", "\r", "\n");
case NEWLINE_CRLF:
- return PyString_FromString("\r\n");
+ return PyBytes_FromString("\r\n");
case NEWLINE_CR|NEWLINE_CRLF:
return Py_BuildValue("(ss)", "\r", "\r\n");
case NEWLINE_LF|NEWLINE_CRLF:
@@ -1448,7 +1448,7 @@
static PyObject *
BZ2File_iternext(BZ2FileObject *self)
{
- PyStringObject* ret;
+ PyBytesObject* ret;
ACQUIRE_LOCK(self);
if (self->mode == MODE_CLOSED) {
PyErr_SetString(PyExc_ValueError,
@@ -1457,7 +1457,7 @@
}
ret = Util_ReadAheadGetLineSkip(self, 0, READAHEAD_BUFSIZE);
RELEASE_LOCK(self);
- if (ret == NULL || PyString_GET_SIZE(ret) == 0) {
+ if (ret == NULL || PyBytes_GET_SIZE(ret) == 0) {
Py_XDECREF(ret);
return NULL;
}
@@ -1559,7 +1559,7 @@
return NULL;
if (datasize == 0)
- return PyString_FromString("");
+ return PyBytes_FromString("");
ACQUIRE_LOCK(self);
if (!self->running) {
@@ -1568,7 +1568,7 @@
goto error;
}
- ret = PyString_FromStringAndSize(NULL, bufsize);
+ ret = PyBytes_FromStringAndSize(NULL, bufsize);
if (!ret)
goto error;
@@ -1591,7 +1591,7 @@
break; /* no more input data */
if (bzs->avail_out == 0) {
bufsize = Util_NewBufferSize(bufsize);
- if (_PyString_Resize(&ret, bufsize) < 0) {
+ if (_PyBytes_Resize(&ret, bufsize) < 0) {
BZ2_bzCompressEnd(bzs);
goto error;
}
@@ -1601,7 +1601,7 @@
}
}
- _PyString_Resize(&ret, (Py_ssize_t)(BZS_TOTAL_OUT(bzs) - totalout));
+ _PyBytes_Resize(&ret, (Py_ssize_t)(BZS_TOTAL_OUT(bzs) - totalout));
RELEASE_LOCK(self);
return ret;
@@ -1636,7 +1636,7 @@
}
self->running = 0;
- ret = PyString_FromStringAndSize(NULL, bufsize);
+ ret = PyBytes_FromStringAndSize(NULL, bufsize);
if (!ret)
goto error;
@@ -1657,7 +1657,7 @@
}
if (bzs->avail_out == 0) {
bufsize = Util_NewBufferSize(bufsize);
- if (_PyString_Resize(&ret, bufsize) < 0)
+ if (_PyBytes_Resize(&ret, bufsize) < 0)
goto error;
bzs->next_out = BUF(ret);
bzs->next_out = BUF(ret) + (BZS_TOTAL_OUT(bzs)
@@ -1667,7 +1667,7 @@
}
if (bzs->avail_out != 0)
- _PyString_Resize(&ret, (Py_ssize_t)(BZS_TOTAL_OUT(bzs) - totalout));
+ _PyBytes_Resize(&ret, (Py_ssize_t)(BZS_TOTAL_OUT(bzs) - totalout));
RELEASE_LOCK(self);
return ret;
@@ -1849,7 +1849,7 @@
goto error;
}
- ret = PyString_FromStringAndSize(NULL, bufsize);
+ ret = PyBytes_FromStringAndSize(NULL, bufsize);
if (!ret)
goto error;
@@ -1868,7 +1868,7 @@
if (bzs->avail_in != 0) {
Py_DECREF(self->unused_data);
self->unused_data =
- PyString_FromStringAndSize(bzs->next_in,
+ PyBytes_FromStringAndSize(bzs->next_in,
bzs->avail_in);
}
self->running = 0;
@@ -1882,7 +1882,7 @@
break; /* no more input data */
if (bzs->avail_out == 0) {
bufsize = Util_NewBufferSize(bufsize);
- if (_PyString_Resize(&ret, bufsize) < 0) {
+ if (_PyBytes_Resize(&ret, bufsize) < 0) {
BZ2_bzDecompressEnd(bzs);
goto error;
}
@@ -1894,7 +1894,7 @@
}
if (bzs->avail_out != 0)
- _PyString_Resize(&ret, (Py_ssize_t)(BZS_TOTAL_OUT(bzs) - totalout));
+ _PyBytes_Resize(&ret, (Py_ssize_t)(BZS_TOTAL_OUT(bzs) - totalout));
RELEASE_LOCK(self);
return ret;
@@ -1930,7 +1930,7 @@
}
#endif
- self->unused_data = PyString_FromString("");
+ self->unused_data = PyBytes_FromString("");
if (!self->unused_data)
goto error;
@@ -2063,7 +2063,7 @@
* data in one shot. We will check it later anyway. */
bufsize = datasize + (datasize/100+1) + 600;
- ret = PyString_FromStringAndSize(NULL, bufsize);
+ ret = PyBytes_FromStringAndSize(NULL, bufsize);
if (!ret)
return NULL;
@@ -2095,7 +2095,7 @@
}
if (bzs->avail_out == 0) {
bufsize = Util_NewBufferSize(bufsize);
- if (_PyString_Resize(&ret, bufsize) < 0) {
+ if (_PyBytes_Resize(&ret, bufsize) < 0) {
BZ2_bzCompressEnd(bzs);
Py_DECREF(ret);
return NULL;
@@ -2106,7 +2106,7 @@
}
if (bzs->avail_out != 0)
- _PyString_Resize(&ret, (Py_ssize_t)BZS_TOTAL_OUT(bzs));
+ _PyBytes_Resize(&ret, (Py_ssize_t)BZS_TOTAL_OUT(bzs));
BZ2_bzCompressEnd(bzs);
return ret;
@@ -2134,9 +2134,9 @@
return NULL;
if (datasize == 0)
- return PyString_FromString("");
+ return PyBytes_FromString("");
- ret = PyString_FromStringAndSize(NULL, bufsize);
+ ret = PyBytes_FromStringAndSize(NULL, bufsize);
if (!ret)
return NULL;
@@ -2175,7 +2175,7 @@
}
if (bzs->avail_out == 0) {
bufsize = Util_NewBufferSize(bufsize);
- if (_PyString_Resize(&ret, bufsize) < 0) {
+ if (_PyBytes_Resize(&ret, bufsize) < 0) {
BZ2_bzDecompressEnd(bzs);
Py_DECREF(ret);
return NULL;
@@ -2186,7 +2186,7 @@
}
if (bzs->avail_out != 0)
- _PyString_Resize(&ret, (Py_ssize_t)BZS_TOTAL_OUT(bzs));
+ _PyBytes_Resize(&ret, (Py_ssize_t)BZS_TOTAL_OUT(bzs));
BZ2_bzDecompressEnd(bzs);
return ret;
@@ -2223,7 +2223,7 @@
if (m == NULL)
return;
- PyModule_AddObject(m, "__author__", PyString_FromString(__author__));
+ PyModule_AddObject(m, "__author__", PyBytes_FromString(__author__));
Py_INCREF(&BZ2File_Type);
PyModule_AddObject(m, "BZ2File", (PyObject *)&BZ2File_Type);
Modified: python/branches/tlee-ast-optimize/Modules/cPickle.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/cPickle.c (original)
+++ python/branches/tlee-ast-optimize/Modules/cPickle.c Sun Jun 1 17:18:10 2008
@@ -393,13 +393,13 @@
if (format) args = Py_VaBuildValue(format, va);
va_end(va);
if (format && ! args) return NULL;
- if (stringformat && !(retval=PyString_FromString(stringformat)))
+ if (stringformat && !(retval=PyBytes_FromString(stringformat)))
return NULL;
if (retval) {
if (args) {
PyObject *v;
- v=PyString_Format(retval, args);
+ v=PyBytes_Format(retval, args);
Py_DECREF(retval);
Py_DECREF(args);
if (! v) return NULL;
@@ -477,7 +477,7 @@
n = (int)_n;
if (s == NULL) {
if (!( self->buf_size )) return 0;
- py_str = PyString_FromStringAndSize(self->write_buf,
+ py_str = PyBytes_FromStringAndSize(self->write_buf,
self->buf_size);
if (!py_str)
return -1;
@@ -490,7 +490,7 @@
if (n > WRITE_BUF_SIZE) {
if (!( py_str =
- PyString_FromStringAndSize(s, n)))
+ PyBytes_FromStringAndSize(s, n)))
return -1;
}
else {
@@ -655,7 +655,7 @@
Py_XDECREF(self->last_string);
self->last_string = str;
- if (! (*s = PyString_AsString(str))) return -1;
+ if (! (*s = PyBytes_AsString(str))) return -1;
return n;
}
@@ -670,13 +670,13 @@
return -1;
}
- if ((str_size = PyString_Size(str)) < 0)
+ if ((str_size = PyBytes_Size(str)) < 0)
return -1;
Py_XDECREF(self->last_string);
self->last_string = str;
- if (! (*s = PyString_AsString(str)))
+ if (! (*s = PyBytes_AsString(str)))
return -1;
return str_size;
@@ -1078,9 +1078,9 @@
"to pickle");
goto finally;
}
- repr = PyString_FromStringAndSize(NULL, (int)nbytes);
+ repr = PyBytes_FromStringAndSize(NULL, (int)nbytes);
if (repr == NULL) goto finally;
- pdata = (unsigned char *)PyString_AS_STRING(repr);
+ pdata = (unsigned char *)PyBytes_AS_STRING(repr);
i = _PyLong_AsByteArray((PyLongObject *)args,
pdata, nbytes,
1 /* little endian */, 1 /* signed */);
@@ -1121,14 +1121,14 @@
if (!( repr = PyObject_Repr(args)))
goto finally;
- if ((size = PyString_Size(repr)) < 0)
+ if ((size = PyBytes_Size(repr)) < 0)
goto finally;
if (self->write_func(self, &l, 1) < 0)
goto finally;
if (self->write_func(self,
- PyString_AS_STRING((PyStringObject *)repr),
+ PyBytes_AS_STRING((PyBytesObject *)repr),
size) < 0)
goto finally;
@@ -1177,7 +1177,7 @@
int size, len;
PyObject *repr=0;
- if ((size = PyString_Size(args)) < 0)
+ if ((size = PyBytes_Size(args)) < 0)
return -1;
if (!self->bin) {
@@ -1188,9 +1188,9 @@
if (!( repr = PyObject_Repr(args)))
return -1;
- if ((len = PyString_Size(repr)) < 0)
+ if ((len = PyBytes_Size(repr)) < 0)
goto err;
- repr_str = PyString_AS_STRING((PyStringObject *)repr);
+ repr_str = PyBytes_AS_STRING((PyBytesObject *)repr);
if (self->write_func(self, &string, 1) < 0)
goto err;
@@ -1207,7 +1207,7 @@
int i;
char c_str[5];
- if ((size = PyString_Size(args)) < 0)
+ if ((size = PyBytes_Size(args)) < 0)
return -1;
if (size < 256) {
@@ -1233,8 +1233,8 @@
}
else {
if (self->write_func(self,
- PyString_AS_STRING(
- (PyStringObject *)args),
+ PyBytes_AS_STRING(
+ (PyBytesObject *)args),
size) < 0)
return -1;
}
@@ -1264,13 +1264,13 @@
static const char *hexdigit = "0123456789ABCDEF";
- repr = PyString_FromStringAndSize(NULL, 6 * size);
+ repr = PyBytes_FromStringAndSize(NULL, 6 * size);
if (repr == NULL)
return NULL;
if (size == 0)
return repr;
- p = q = PyString_AS_STRING(repr);
+ p = q = PyBytes_AS_STRING(repr);
while (size-- > 0) {
Py_UNICODE ch = *s++;
/* Map 16-bit characters to '\uxxxx' */
@@ -1287,7 +1287,7 @@
*p++ = (char) ch;
}
*p = '\0';
- _PyString_Resize(&repr, p - q);
+ _PyBytes_Resize(&repr, p - q);
return repr;
}
@@ -1310,9 +1310,9 @@
if (!repr)
return -1;
- if ((len = PyString_Size(repr)) < 0)
+ if ((len = PyBytes_Size(repr)) < 0)
goto err;
- repr_str = PyString_AS_STRING((PyStringObject *)repr);
+ repr_str = PyBytes_AS_STRING((PyBytesObject *)repr);
if (self->write_func(self, &string, 1) < 0)
goto err;
@@ -1332,7 +1332,7 @@
if (!( repr = PyUnicode_AsUTF8String(args)))
return -1;
- if ((size = PyString_Size(repr)) < 0)
+ if ((size = PyBytes_Size(repr)) < 0)
goto err;
if (size > INT_MAX)
return -1; /* string too large */
@@ -1351,7 +1351,7 @@
PDATA_APPEND(self->file, repr, -1);
}
else {
- if (self->write_func(self, PyString_AS_STRING(repr),
+ if (self->write_func(self, PyBytes_AS_STRING(repr),
size) < 0)
goto err;
}
@@ -1861,12 +1861,12 @@
goto finally;
- if ((module_size = PyString_Size(module)) < 0 ||
- (name_size = PyString_Size(name)) < 0)
+ if ((module_size = PyBytes_Size(module)) < 0 ||
+ (name_size = PyBytes_Size(name)) < 0)
goto finally;
- module_str = PyString_AS_STRING((PyStringObject *)module);
- name_str = PyString_AS_STRING((PyStringObject *)name);
+ module_str = PyBytes_AS_STRING((PyBytesObject *)module);
+ name_str = PyBytes_AS_STRING((PyBytesObject *)name);
if (self->write_func(self, &inst, 1) < 0)
goto finally;
@@ -1961,12 +1961,12 @@
if (!( module = whichmodule(args, global_name)))
goto finally;
- if ((module_size = PyString_Size(module)) < 0 ||
- (name_size = PyString_Size(global_name)) < 0)
+ if ((module_size = PyBytes_Size(module)) < 0 ||
+ (name_size = PyBytes_Size(global_name)) < 0)
goto finally;
- module_str = PyString_AS_STRING((PyStringObject *)module);
- name_str = PyString_AS_STRING((PyStringObject *)global_name);
+ module_str = PyBytes_AS_STRING((PyBytesObject *)module);
+ name_str = PyBytes_AS_STRING((PyBytesObject *)global_name);
/* XXX This can be doing a relative import. Clearly it shouldn't,
but I don't know how to stop it. :-( */
@@ -2099,7 +2099,7 @@
if (pid != Py_None) {
if (!self->bin) {
- if (!PyString_Check(pid)) {
+ if (!PyBytes_Check(pid)) {
PyErr_SetString(PicklingError,
"persistent id must be string");
goto finally;
@@ -2108,12 +2108,12 @@
if (self->write_func(self, &persid, 1) < 0)
goto finally;
- if ((size = PyString_Size(pid)) < 0)
+ if ((size = PyBytes_Size(pid)) < 0)
goto finally;
if (self->write_func(self,
- PyString_AS_STRING(
- (PyStringObject *)pid),
+ PyBytes_AS_STRING(
+ (PyBytesObject *)pid),
size) < 0)
goto finally;
@@ -2194,8 +2194,8 @@
use_newobj = 0;
}
else {
- use_newobj = PyString_Check(temp) &&
- strcmp(PyString_AS_STRING(temp),
+ use_newobj = PyBytes_Check(temp) &&
+ strcmp(PyBytes_AS_STRING(temp),
"__newobj__") == 0;
Py_DECREF(temp);
}
@@ -2362,14 +2362,14 @@
break;
case 's':
- if ((type == &PyString_Type) && (PyString_GET_SIZE(args) < 2)) {
+ if ((type == &PyBytes_Type) && (PyBytes_GET_SIZE(args) < 2)) {
res = save_string(self, args, 0);
goto finally;
}
#ifdef Py_USING_UNICODE
case 'u':
- if ((type == &PyUnicode_Type) && (PyString_GET_SIZE(args) < 2)) {
+ if ((type == &PyUnicode_Type) && (PyBytes_GET_SIZE(args) < 2)) {
res = save_unicode(self, args, 0);
goto finally;
}
@@ -2391,7 +2391,7 @@
switch (type->tp_name[0]) {
case 's':
- if (type == &PyString_Type) {
+ if (type == &PyBytes_Type) {
res = save_string(self, args, 1);
goto finally;
}
@@ -2526,7 +2526,7 @@
if (t == NULL)
goto finally;
- if (PyString_Check(t)) {
+ if (PyBytes_Check(t)) {
res = save_global(self, args, t);
goto finally;
}
@@ -2640,8 +2640,8 @@
for (rsize = 0, i = l; --i >= 0; ) {
k = data->data[i];
- if (PyString_Check(k))
- rsize += PyString_GET_SIZE(k);
+ if (PyBytes_Check(k))
+ rsize += PyBytes_GET_SIZE(k);
else if (PyInt_Check(k)) { /* put */
ik = PyInt_AS_LONG((PyIntObject*)k);
@@ -2676,17 +2676,17 @@
}
/* Now generate the result */
- r = PyString_FromStringAndSize(NULL, rsize);
+ r = PyBytes_FromStringAndSize(NULL, rsize);
if (r == NULL) goto err;
- s = PyString_AS_STRING((PyStringObject *)r);
+ s = PyBytes_AS_STRING((PyBytesObject *)r);
for (i = 0; i < l; i++) {
k = data->data[i];
- if (PyString_Check(k)) {
- ssize = PyString_GET_SIZE(k);
+ if (PyBytes_Check(k)) {
+ ssize = PyBytes_GET_SIZE(k);
if (ssize) {
- p=PyString_AS_STRING((PyStringObject *)k);
+ p=PyBytes_AS_STRING((PyBytesObject *)k);
while (--ssize >= 0)
*s++ = *p++;
}
@@ -3410,7 +3410,7 @@
goto insecure;
/********************************************/
- str = PyString_DecodeEscape(p, len, NULL, 0, NULL);
+ str = PyBytes_DecodeEscape(p, len, NULL, 0, NULL);
free(s);
if (str) {
PDATA_PUSH(self->stack, str, -1);
@@ -3439,7 +3439,7 @@
if (self->read_func(self, &s, l) < 0)
return -1;
- if (!( py_string = PyString_FromStringAndSize(s, l)))
+ if (!( py_string = PyBytes_FromStringAndSize(s, l)))
return -1;
PDATA_PUSH(self->stack, py_string, -1);
@@ -3461,7 +3461,7 @@
if (self->read_func(self, &s, l) < 0) return -1;
- if (!( py_string = PyString_FromStringAndSize(s, l))) return -1;
+ if (!( py_string = PyBytes_FromStringAndSize(s, l))) return -1;
PDATA_PUSH(self->stack, py_string, -1);
return 0;
@@ -3688,12 +3688,12 @@
if ((len = self->readline_func(self, &s)) < 0) return -1;
if (len < 2) return bad_readline();
- module_name = PyString_FromStringAndSize(s, len - 1);
+ module_name = PyBytes_FromStringAndSize(s, len - 1);
if (!module_name) return -1;
if ((len = self->readline_func(self, &s)) >= 0) {
if (len < 2) return bad_readline();
- if ((class_name = PyString_FromStringAndSize(s, len - 1))) {
+ if ((class_name = PyBytes_FromStringAndSize(s, len - 1))) {
class = find_class(module_name, class_name,
self->find_class);
Py_DECREF(class_name);
@@ -3772,7 +3772,7 @@
if ((len = self->readline_func(self, &s)) < 0) return -1;
if (len < 2) return bad_readline();
- module_name = PyString_FromStringAndSize(s, len - 1);
+ module_name = PyBytes_FromStringAndSize(s, len - 1);
if (!module_name) return -1;
if ((len = self->readline_func(self, &s)) >= 0) {
@@ -3780,7 +3780,7 @@
Py_DECREF(module_name);
return bad_readline();
}
- if ((class_name = PyString_FromStringAndSize(s, len - 1))) {
+ if ((class_name = PyBytes_FromStringAndSize(s, len - 1))) {
class = find_class(module_name, class_name,
self->find_class);
Py_DECREF(class_name);
@@ -3805,7 +3805,7 @@
if ((len = self->readline_func(self, &s)) < 0) return -1;
if (len < 2) return bad_readline();
- pid = PyString_FromStringAndSize(s, len - 1);
+ pid = PyBytes_FromStringAndSize(s, len - 1);
if (!pid) return -1;
if (PyList_Check(self->pers_func)) {
@@ -3938,7 +3938,7 @@
if ((len = self->readline_func(self, &s)) < 0) return -1;
if (len < 2) return bad_readline();
- if (!( py_str = PyString_FromStringAndSize(s, len - 1))) return -1;
+ if (!( py_str = PyBytes_FromStringAndSize(s, len - 1))) return -1;
value = PyDict_GetItem(self->memo, py_str);
if (! value) {
@@ -4064,8 +4064,8 @@
* confirm that pair is really a 2-tuple of strings.
*/
if (!PyTuple_Check(pair) || PyTuple_Size(pair) != 2 ||
- !PyString_Check(module_name = PyTuple_GET_ITEM(pair, 0)) ||
- !PyString_Check(class_name = PyTuple_GET_ITEM(pair, 1))) {
+ !PyBytes_Check(module_name = PyTuple_GET_ITEM(pair, 0)) ||
+ !PyBytes_Check(class_name = PyTuple_GET_ITEM(pair, 1))) {
Py_DECREF(py_code);
PyErr_Format(PyExc_ValueError, "_inverted_registry[%ld] "
"isn't a 2-tuple of strings", code);
@@ -4098,7 +4098,7 @@
if ((l = self->readline_func(self, &s)) < 0) return -1;
if (l < 2) return bad_readline();
if (!( len=self->stack->length )) return stackUnderflow();
- if (!( py_str = PyString_FromStringAndSize(s, l - 1))) return -1;
+ if (!( py_str = PyBytes_FromStringAndSize(s, l - 1))) return -1;
value=self->stack->data[len-1];
l=PyDict_SetItem(self->memo, py_str, value);
Py_DECREF(py_str);
@@ -5568,7 +5568,7 @@
{
PyObject *copyreg, *t, *r;
-#define INIT_STR(S) if (!( S ## _str=PyString_InternFromString(#S))) return -1;
+#define INIT_STR(S) if (!( S ## _str=PyBytes_InternFromString(#S))) return -1;
if (PyType_Ready(&Unpicklertype) < 0)
return -1;
@@ -5736,7 +5736,7 @@
/* Add some symbolic constants to the module */
d = PyModule_GetDict(m);
- v = PyString_FromString(rev);
+ v = PyBytes_FromString(rev);
PyDict_SetItemString(d, "__version__", v);
Py_XDECREF(v);
@@ -5755,7 +5755,7 @@
/* These are purely informational; no code uses them. */
/* File format version we write. */
- format_version = PyString_FromString("2.0");
+ format_version = PyBytes_FromString("2.0");
/* Format versions we can read. */
compatible_formats = Py_BuildValue("[sssss]",
"1.0", /* Original protocol 0 */
Modified: python/branches/tlee-ast-optimize/Modules/cStringIO.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/cStringIO.c (original)
+++ python/branches/tlee-ast-optimize/Modules/cStringIO.c Sun Jun 1 17:18:10 2008
@@ -119,7 +119,7 @@
static PyObject *
IO_cgetval(PyObject *self) {
if (!IO__opencheck(IOOOBJECT(self))) return NULL;
- return PyString_FromStringAndSize(((IOobject*)self)->buf,
+ return PyBytes_FromStringAndSize(((IOobject*)self)->buf,
((IOobject*)self)->pos);
}
@@ -137,7 +137,7 @@
}
else
s=self->string_size;
- return PyString_FromStringAndSize(self->buf, s);
+ return PyBytes_FromStringAndSize(self->buf, s);
}
PyDoc_STRVAR(IO_isatty__doc__, "isatty(): always returns 0");
@@ -177,7 +177,7 @@
if ( (n=IO_cread((PyObject*)self,&output,n)) < 0) return NULL;
- return PyString_FromStringAndSize(output, n);
+ return PyBytes_FromStringAndSize(output, n);
}
PyDoc_STRVAR(IO_readline__doc__, "readline() -- Read one line");
@@ -215,7 +215,7 @@
n -= m;
self->pos -= m;
}
- return PyString_FromStringAndSize(output, n);
+ return PyBytes_FromStringAndSize(output, n);
}
PyDoc_STRVAR(IO_readlines__doc__, "readlines() -- Read all lines");
@@ -238,7 +238,7 @@
goto err;
if (n == 0)
break;
- line = PyString_FromStringAndSize (output, n);
+ line = PyBytes_FromStringAndSize (output, n);
if (!line)
goto err;
if (PyList_Append (result, line) == -1) {
@@ -315,7 +315,7 @@
next = IO_readline((IOobject *)self, NULL);
if (!next)
return NULL;
- if (!PyString_GET_SIZE(next)) {
+ if (!PyBytes_GET_SIZE(next)) {
Py_DECREF(next);
PyErr_SetNone(PyExc_StopIteration);
return NULL;
@@ -456,7 +456,7 @@
while ((s = PyIter_Next(it)) != NULL) {
Py_ssize_t n;
char *c;
- if (PyString_AsStringAndSize(s, &c, &n) == -1) {
+ if (PyBytes_AsStringAndSize(s, &c, &n) == -1) {
Py_DECREF(it);
Py_DECREF(s);
return NULL;
Modified: python/branches/tlee-ast-optimize/Modules/cdmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/cdmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/cdmodule.c Sun Jun 1 17:18:10 2008
@@ -239,19 +239,19 @@
if (!PyArg_ParseTuple(args, "i:readda", &numframes))
return NULL;
- result = PyString_FromStringAndSize(NULL, numframes * sizeof(CDFRAME));
+ result = PyBytes_FromStringAndSize(NULL, numframes * sizeof(CDFRAME));
if (result == NULL)
return NULL;
n = CDreadda(self->ob_cdplayer,
- (CDFRAME *) PyString_AsString(result), numframes);
+ (CDFRAME *) PyBytes_AsString(result), numframes);
if (n == -1) {
Py_DECREF(result);
PyErr_SetFromErrno(CdError);
return NULL;
}
if (n < numframes)
- _PyString_Resize(&result, n * sizeof(CDFRAME));
+ _PyBytes_Resize(&result, n * sizeof(CDFRAME));
return result;
}
@@ -468,7 +468,7 @@
PyTuple_SetItem(args, 1, PyInt_FromLong((long) type));
switch (type) {
case cd_audio:
- v = PyString_FromStringAndSize(data, CDDA_DATASIZE);
+ v = PyBytes_FromStringAndSize(data, CDDA_DATASIZE);
break;
case cd_pnum:
case cd_index:
@@ -484,15 +484,15 @@
#undef ptr
break;
case cd_catalog:
- v = PyString_FromStringAndSize(NULL, 13);
- p = PyString_AsString(v);
+ v = PyBytes_FromStringAndSize(NULL, 13);
+ p = PyBytes_AsString(v);
for (i = 0; i < 13; i++)
*p++ = ((char *) data)[i] + '0';
break;
case cd_ident:
#define ptr ((struct cdident *) data)
- v = PyString_FromStringAndSize(NULL, 12);
- p = PyString_AsString(v);
+ v = PyBytes_FromStringAndSize(NULL, 12);
+ p = PyBytes_AsString(v);
CDsbtoa(p, ptr->country, 2);
p += 2;
CDsbtoa(p, ptr->owner, 3);
Modified: python/branches/tlee-ast-optimize/Modules/cgensupport.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/cgensupport.c (original)
+++ python/branches/tlee-ast-optimize/Modules/cgensupport.c Sun Jun 1 17:18:10 2008
@@ -119,10 +119,10 @@
PyObject *v;
if (!PyArg_GetObject(args, nargs, i, &v))
return 0;
- if (!PyString_Check(v)) {
+ if (!PyBytes_Check(v)) {
return PyErr_BadArgument();
}
- *p_arg = PyString_AsString(v);
+ *p_arg = PyBytes_AsString(v);
return 1;
}
Modified: python/branches/tlee-ast-optimize/Modules/cjkcodecs/cjkcodecs.h
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/cjkcodecs/cjkcodecs.h (original)
+++ python/branches/tlee-ast-optimize/Modules/cjkcodecs/cjkcodecs.h Sun Jun 1 17:18:10 2008
@@ -261,7 +261,7 @@
const MultibyteCodec *codec;
const char *enc;
- if (!PyString_Check(encoding)) {
+ if (!PyBytes_Check(encoding)) {
PyErr_SetString(PyExc_TypeError,
"encoding name must be a string.");
return NULL;
@@ -271,7 +271,7 @@
if (cofunc == NULL)
return NULL;
- enc = PyString_AS_STRING(encoding);
+ enc = PyBytes_AS_STRING(encoding);
for (codec = codec_list; codec->encoding[0]; codec++)
if (strcmp(codec->encoding, enc) == 0)
break;
Modified: python/branches/tlee-ast-optimize/Modules/cjkcodecs/multibytecodec.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/cjkcodecs/multibytecodec.c (original)
+++ python/branches/tlee-ast-optimize/Modules/cjkcodecs/multibytecodec.c Sun Jun 1 17:18:10 2008
@@ -85,7 +85,7 @@
else if (strcmp(errors, "replace") == 0)
return ERROR_REPLACE;
else
- return PyString_FromString(errors);
+ return PyBytes_FromString(errors);
}
static PyObject *
@@ -93,8 +93,8 @@
{
PyObject *args, *cb, *r;
- assert(PyString_Check(errors));
- cb = PyCodec_LookupError(PyString_AS_STRING(errors));
+ assert(PyBytes_Check(errors));
+ cb = PyCodec_LookupError(PyBytes_AS_STRING(errors));
if (cb == NULL)
return NULL;
@@ -129,7 +129,7 @@
return self->errors;
}
- return PyString_FromString(errors);
+ return PyBytes_FromString(errors);
}
static int
@@ -138,12 +138,12 @@
{
PyObject *cb;
- if (!PyString_Check(value)) {
+ if (!PyBytes_Check(value)) {
PyErr_SetString(PyExc_TypeError, "errors must be a string");
return -1;
}
- cb = internal_error_callback(PyString_AS_STRING(value));
+ cb = internal_error_callback(PyBytes_AS_STRING(value));
if (cb == NULL)
return -1;
@@ -166,15 +166,15 @@
Py_ssize_t orgpos, orgsize;
orgpos = (Py_ssize_t)((char *)buf->outbuf -
- PyString_AS_STRING(buf->outobj));
- orgsize = PyString_GET_SIZE(buf->outobj);
- if (_PyString_Resize(&buf->outobj, orgsize + (
+ PyBytes_AS_STRING(buf->outobj));
+ orgsize = PyBytes_GET_SIZE(buf->outobj);
+ if (_PyBytes_Resize(&buf->outobj, orgsize + (
esize < (orgsize >> 1) ? (orgsize >> 1) | 1 : esize)) == -1)
return -1;
- buf->outbuf = (unsigned char *)PyString_AS_STRING(buf->outobj) +orgpos;
- buf->outbuf_end = (unsigned char *)PyString_AS_STRING(buf->outobj)
- + PyString_GET_SIZE(buf->outobj);
+ buf->outbuf = (unsigned char *)PyBytes_AS_STRING(buf->outobj) +orgpos;
+ buf->outbuf_end = (unsigned char *)PyBytes_AS_STRING(buf->outobj)
+ + PyBytes_GET_SIZE(buf->outobj);
return 0;
}
@@ -322,10 +322,10 @@
goto errorexit;
}
- retstrsize = PyString_GET_SIZE(retstr);
+ retstrsize = PyBytes_GET_SIZE(retstr);
REQUIRE_ENCODEBUFFER(buf, retstrsize);
- memcpy(buf->outbuf, PyString_AS_STRING(retstr), retstrsize);
+ memcpy(buf->outbuf, PyBytes_AS_STRING(retstr), retstrsize);
buf->outbuf += retstrsize;
newpos = PyInt_AsSsize_t(PyTuple_GET_ITEM(retobj, 1));
@@ -468,16 +468,16 @@
Py_ssize_t finalsize, r = 0;
if (datalen == 0)
- return PyString_FromString("");
+ return PyBytes_FromString("");
buf.excobj = NULL;
buf.inbuf = buf.inbuf_top = *data;
buf.inbuf_end = buf.inbuf_top + datalen;
- buf.outobj = PyString_FromStringAndSize(NULL, datalen * 2 + 16);
+ buf.outobj = PyBytes_FromStringAndSize(NULL, datalen * 2 + 16);
if (buf.outobj == NULL)
goto errorexit;
- buf.outbuf = (unsigned char *)PyString_AS_STRING(buf.outobj);
- buf.outbuf_end = buf.outbuf + PyString_GET_SIZE(buf.outobj);
+ buf.outbuf = (unsigned char *)PyBytes_AS_STRING(buf.outobj);
+ buf.outbuf_end = buf.outbuf + PyBytes_GET_SIZE(buf.outobj);
while (buf.inbuf < buf.inbuf_end) {
Py_ssize_t inleft, outleft;
@@ -512,10 +512,10 @@
}
finalsize = (Py_ssize_t)((char *)buf.outbuf -
- PyString_AS_STRING(buf.outobj));
+ PyBytes_AS_STRING(buf.outobj));
- if (finalsize != PyString_GET_SIZE(buf.outobj))
- if (_PyString_Resize(&buf.outobj, finalsize) == -1)
+ if (finalsize != PyBytes_GET_SIZE(buf.outobj))
+ if (_PyBytes_Resize(&buf.outobj, finalsize) == -1)
goto errorexit;
Py_XDECREF(buf.excobj);
@@ -1222,35 +1222,35 @@
if (cres == NULL)
goto errorexit;
- if (!PyString_Check(cres)) {
+ if (!PyBytes_Check(cres)) {
PyErr_SetString(PyExc_TypeError,
"stream function returned a "
"non-string object");
goto errorexit;
}
- endoffile = (PyString_GET_SIZE(cres) == 0);
+ endoffile = (PyBytes_GET_SIZE(cres) == 0);
if (self->pendingsize > 0) {
PyObject *ctr;
char *ctrdata;
- rsize = PyString_GET_SIZE(cres) + self->pendingsize;
- ctr = PyString_FromStringAndSize(NULL, rsize);
+ rsize = PyBytes_GET_SIZE(cres) + self->pendingsize;
+ ctr = PyBytes_FromStringAndSize(NULL, rsize);
if (ctr == NULL)
goto errorexit;
- ctrdata = PyString_AS_STRING(ctr);
+ ctrdata = PyBytes_AS_STRING(ctr);
memcpy(ctrdata, self->pending, self->pendingsize);
memcpy(ctrdata + self->pendingsize,
- PyString_AS_STRING(cres),
- PyString_GET_SIZE(cres));
+ PyBytes_AS_STRING(cres),
+ PyBytes_GET_SIZE(cres));
Py_DECREF(cres);
cres = ctr;
self->pendingsize = 0;
}
- rsize = PyString_GET_SIZE(cres);
- if (decoder_prepare_buffer(&buf, PyString_AS_STRING(cres),
+ rsize = PyBytes_GET_SIZE(cres);
+ if (decoder_prepare_buffer(&buf, PyBytes_AS_STRING(cres),
rsize) != 0)
goto errorexit;
@@ -1585,7 +1585,7 @@
if (pwrt == NULL)
return NULL;
- if (PyString_Size(pwrt) > 0) {
+ if (PyBytes_Size(pwrt) > 0) {
PyObject *wr;
wr = PyObject_CallMethod(self->stream, "write", "O", pwrt);
if (wr == NULL) {
Modified: python/branches/tlee-ast-optimize/Modules/clmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/clmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/clmodule.c Sun Jun 1 17:18:10 2008
@@ -111,7 +111,7 @@
return NULL;
retry:
- compressedBuffer = PyString_FromStringAndSize(NULL, frameBufferSize);
+ compressedBuffer = PyBytes_FromStringAndSize(NULL, frameBufferSize);
if (compressedBuffer == NULL)
return NULL;
@@ -120,7 +120,7 @@
if (clCompressImage(compressionScheme, width, height, originalFormat,
compressionRatio, (void *) frameBuffer,
&compressedBufferSize,
- (void *) PyString_AsString(compressedBuffer))
+ (void *) PyBytes_AsString(compressedBuffer))
== FAILURE || error_handler_called) {
Py_DECREF(compressedBuffer);
if (!error_handler_called)
@@ -135,7 +135,7 @@
}
if (compressedBufferSize < frameBufferSize)
- _PyString_Resize(&compressedBuffer, compressedBufferSize);
+ _PyBytes_Resize(&compressedBuffer, compressedBufferSize);
return compressedBuffer;
}
@@ -155,14 +155,14 @@
frameBufferSize = width * height * CL_BytesPerPixel(originalFormat);
- frameBuffer = PyString_FromStringAndSize(NULL, frameBufferSize);
+ frameBuffer = PyBytes_FromStringAndSize(NULL, frameBufferSize);
if (frameBuffer == NULL)
return NULL;
error_handler_called = 0;
if (clDecompressImage(compressionScheme, width, height, originalFormat,
compressedBufferSize, compressedBuffer,
- (void *) PyString_AsString(frameBuffer))
+ (void *) PyBytes_AsString(frameBuffer))
== FAILURE || error_handler_called) {
Py_DECREF(frameBuffer);
if (!error_handler_called)
@@ -236,14 +236,14 @@
if (error_handler_called)
return NULL;
- data = PyString_FromStringAndSize(NULL, size);
+ data = PyBytes_FromStringAndSize(NULL, size);
if (data == NULL)
return NULL;
error_handler_called = 0;
if (clCompress(SELF->ob_compressorHdl, numberOfFrames,
(void *) frameBuffer, &compressedBufferSize,
- (void *) PyString_AsString(data)) == FAILURE ||
+ (void *) PyBytes_AsString(data)) == FAILURE ||
error_handler_called) {
Py_DECREF(data);
if (!error_handler_called)
@@ -252,7 +252,7 @@
}
if (compressedBufferSize < size)
- if (_PyString_Resize(&data, compressedBufferSize))
+ if (_PyBytes_Resize(&data, compressedBufferSize))
return NULL;
if (compressedBufferSize > size) {
@@ -285,14 +285,14 @@
if (error_handler_called)
return NULL;
- data = PyString_FromStringAndSize(NULL, dataSize);
+ data = PyBytes_FromStringAndSize(NULL, dataSize);
if (data == NULL)
return NULL;
error_handler_called = 0;
if (clDecompress(SELF->ob_compressorHdl, numberOfFrames,
compressedDataSize, (void *) compressedData,
- (void *) PyString_AsString(data)) == FAILURE ||
+ (void *) PyBytes_AsString(data)) == FAILURE ||
error_handler_called) {
Py_DECREF(data);
if (!error_handler_called)
@@ -514,7 +514,7 @@
PyList_SetItem(list, i, Py_None);
} else
PyList_SetItem(list, i,
- PyString_FromString((char *) PVbuffer[i]));
+ PyBytes_FromString((char *) PVbuffer[i]));
}
PyMem_DEL(PVbuffer);
@@ -563,7 +563,7 @@
return NULL;
}
- return PyString_FromString(name);
+ return PyBytes_FromString(name);
}
static PyObject *
@@ -775,7 +775,7 @@
PyList_SetItem(list, i, Py_None);
} else
PyList_SetItem(list, i,
- PyString_FromString((char *) PVbuffer[i]));
+ PyBytes_FromString((char *) PVbuffer[i]));
}
PyMem_DEL(PVbuffer);
@@ -818,7 +818,7 @@
return NULL;
}
- return PyString_FromString(name);
+ return PyBytes_FromString(name);
}
static PyObject *
Modified: python/branches/tlee-ast-optimize/Modules/datetimemodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/datetimemodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/datetimemodule.c Sun Jun 1 17:18:10 2008
@@ -945,7 +945,7 @@
else
result = PyObject_CallMethod(tzinfo, "tzname", "O", tzinfoarg);
- if (result != NULL && result != Py_None && ! PyString_Check(result)) {
+ if (result != NULL && result != Py_None && ! PyBytes_Check(result)) {
PyErr_Format(PyExc_TypeError, "tzinfo.tzname() must "
"return None or a string, not '%s'",
Py_TYPE(result)->tp_name);
@@ -1044,27 +1044,27 @@
{
PyObject *temp;
- assert(PyString_Check(repr));
+ assert(PyBytes_Check(repr));
assert(tzinfo);
if (tzinfo == Py_None)
return repr;
/* Get rid of the trailing ')'. */
- assert(PyString_AsString(repr)[PyString_Size(repr)-1] == ')');
- temp = PyString_FromStringAndSize(PyString_AsString(repr),
- PyString_Size(repr) - 1);
+ assert(PyBytes_AsString(repr)[PyBytes_Size(repr)-1] == ')');
+ temp = PyBytes_FromStringAndSize(PyBytes_AsString(repr),
+ PyBytes_Size(repr) - 1);
Py_DECREF(repr);
if (temp == NULL)
return NULL;
repr = temp;
/* Append ", tzinfo=". */
- PyString_ConcatAndDel(&repr, PyString_FromString(", tzinfo="));
+ PyBytes_ConcatAndDel(&repr, PyBytes_FromString(", tzinfo="));
/* Append repr(tzinfo). */
- PyString_ConcatAndDel(&repr, PyObject_Repr(tzinfo));
+ PyBytes_ConcatAndDel(&repr, PyObject_Repr(tzinfo));
/* Add a closing paren. */
- PyString_ConcatAndDel(&repr, PyString_FromString(")"));
+ PyBytes_ConcatAndDel(&repr, PyBytes_FromString(")"));
return repr;
}
@@ -1090,7 +1090,7 @@
DayNames[wday], MonthNames[GET_MONTH(date) - 1],
GET_DAY(date), hours, minutes, seconds,
GET_YEAR(date));
- return PyString_FromString(buffer);
+ return PyBytes_FromString(buffer);
}
/* Add an hours & minutes UTC offset string to buf. buf has no more than
@@ -1141,7 +1141,7 @@
else
sprintf(freplacement, "%06d", 0);
- return PyString_FromStringAndSize(freplacement, strlen(freplacement));
+ return PyBytes_FromStringAndSize(freplacement, strlen(freplacement));
}
/* I sure don't want to reproduce the strftime code from the time module,
@@ -1174,7 +1174,7 @@
int ntoappend; /* # of bytes to append to output buffer */
assert(object && format && timetuple);
- assert(PyString_Check(format));
+ assert(PyBytes_Check(format));
/* Give up if the year is before 1900.
* Python strftime() plays games with the year, and different
@@ -1205,13 +1205,13 @@
* a new format. Since computing the replacements for those codes
* is expensive, don't unless they're actually used.
*/
- totalnew = PyString_Size(format) + 1; /* realistic if no %z/%Z/%f */
- newfmt = PyString_FromStringAndSize(NULL, totalnew);
+ totalnew = PyBytes_Size(format) + 1; /* realistic if no %z/%Z/%f */
+ newfmt = PyBytes_FromStringAndSize(NULL, totalnew);
if (newfmt == NULL) goto Done;
- pnew = PyString_AsString(newfmt);
+ pnew = PyBytes_AsString(newfmt);
usednew = 0;
- pin = PyString_AsString(format);
+ pin = PyBytes_AsString(format);
while ((ch = *pin++) != '\0') {
if (ch != '%') {
ptoappend = pin - 1;
@@ -1229,7 +1229,7 @@
/* format utcoffset */
char buf[100];
PyObject *tzinfo = get_tzinfo_member(object);
- zreplacement = PyString_FromString("");
+ zreplacement = PyBytes_FromString("");
if (zreplacement == NULL) goto Done;
if (tzinfo != Py_None && tzinfo != NULL) {
assert(tzinfoarg != NULL);
@@ -1240,19 +1240,19 @@
tzinfoarg) < 0)
goto Done;
Py_DECREF(zreplacement);
- zreplacement = PyString_FromString(buf);
+ zreplacement = PyBytes_FromString(buf);
if (zreplacement == NULL) goto Done;
}
}
assert(zreplacement != NULL);
- ptoappend = PyString_AS_STRING(zreplacement);
- ntoappend = PyString_GET_SIZE(zreplacement);
+ ptoappend = PyBytes_AS_STRING(zreplacement);
+ ntoappend = PyBytes_GET_SIZE(zreplacement);
}
else if (ch == 'Z') {
/* format tzname */
if (Zreplacement == NULL) {
PyObject *tzinfo = get_tzinfo_member(object);
- Zreplacement = PyString_FromString("");
+ Zreplacement = PyBytes_FromString("");
if (Zreplacement == NULL) goto Done;
if (tzinfo != Py_None && tzinfo != NULL) {
PyObject *temp;
@@ -1260,7 +1260,7 @@
temp = call_tzname(tzinfo, tzinfoarg);
if (temp == NULL) goto Done;
if (temp != Py_None) {
- assert(PyString_Check(temp));
+ assert(PyBytes_Check(temp));
/* Since the tzname is getting
* stuffed into the format, we
* have to double any % signs
@@ -1274,7 +1274,7 @@
Py_DECREF(temp);
if (Zreplacement == NULL)
goto Done;
- if (!PyString_Check(Zreplacement)) {
+ if (!PyBytes_Check(Zreplacement)) {
PyErr_SetString(PyExc_TypeError, "tzname.replace() did not return a string");
goto Done;
}
@@ -1284,8 +1284,8 @@
}
}
assert(Zreplacement != NULL);
- ptoappend = PyString_AS_STRING(Zreplacement);
- ntoappend = PyString_GET_SIZE(Zreplacement);
+ ptoappend = PyBytes_AS_STRING(Zreplacement);
+ ntoappend = PyBytes_GET_SIZE(Zreplacement);
}
else if (ch == 'f') {
/* format microseconds */
@@ -1295,9 +1295,9 @@
goto Done;
}
assert(freplacement != NULL);
- assert(PyString_Check(freplacement));
- ptoappend = PyString_AS_STRING(freplacement);
- ntoappend = PyString_GET_SIZE(freplacement);
+ assert(PyBytes_Check(freplacement));
+ ptoappend = PyBytes_AS_STRING(freplacement);
+ ntoappend = PyBytes_GET_SIZE(freplacement);
}
else {
/* percent followed by neither z nor Z */
@@ -1318,10 +1318,10 @@
PyErr_NoMemory();
goto Done;
}
- if (_PyString_Resize(&newfmt, bigger) < 0)
+ if (_PyBytes_Resize(&newfmt, bigger) < 0)
goto Done;
totalnew = bigger;
- pnew = PyString_AsString(newfmt) + usednew;
+ pnew = PyBytes_AsString(newfmt) + usednew;
}
memcpy(pnew, ptoappend, ntoappend);
pnew += ntoappend;
@@ -1329,7 +1329,7 @@
assert(usednew <= totalnew);
} /* end while() */
- if (_PyString_Resize(&newfmt, usednew) < 0)
+ if (_PyBytes_Resize(&newfmt, usednew) < 0)
goto Done;
{
PyObject *time = PyImport_ImportModuleNoBlock("time");
@@ -2007,18 +2007,18 @@
delta_repr(PyDateTime_Delta *self)
{
if (GET_TD_MICROSECONDS(self) != 0)
- return PyString_FromFormat("%s(%d, %d, %d)",
+ return PyBytes_FromFormat("%s(%d, %d, %d)",
Py_TYPE(self)->tp_name,
GET_TD_DAYS(self),
GET_TD_SECONDS(self),
GET_TD_MICROSECONDS(self));
if (GET_TD_SECONDS(self) != 0)
- return PyString_FromFormat("%s(%d, %d)",
+ return PyBytes_FromFormat("%s(%d, %d)",
Py_TYPE(self)->tp_name,
GET_TD_DAYS(self),
GET_TD_SECONDS(self));
- return PyString_FromFormat("%s(%d)",
+ return PyBytes_FromFormat("%s(%d)",
Py_TYPE(self)->tp_name,
GET_TD_DAYS(self));
}
@@ -2062,7 +2062,7 @@
pbuf += n;
}
- return PyString_FromStringAndSize(buf, pbuf - buf);
+ return PyBytes_FromStringAndSize(buf, pbuf - buf);
Fail:
PyErr_SetString(PyExc_SystemError, "goofy result from PyOS_snprintf");
@@ -2241,15 +2241,15 @@
/* Check for invocation from pickle with __getstate__ state */
if (PyTuple_GET_SIZE(args) == 1 &&
- PyString_Check(state = PyTuple_GET_ITEM(args, 0)) &&
- PyString_GET_SIZE(state) == _PyDateTime_DATE_DATASIZE &&
- MONTH_IS_SANE(PyString_AS_STRING(state)[2]))
+ PyBytes_Check(state = PyTuple_GET_ITEM(args, 0)) &&
+ PyBytes_GET_SIZE(state) == _PyDateTime_DATE_DATASIZE &&
+ MONTH_IS_SANE(PyBytes_AS_STRING(state)[2]))
{
PyDateTime_Date *me;
me = (PyDateTime_Date *) (type->tp_alloc(type, 0));
if (me != NULL) {
- char *pdata = PyString_AS_STRING(state);
+ char *pdata = PyBytes_AS_STRING(state);
memcpy(me->data, pdata, _PyDateTime_DATE_DATASIZE);
me->hashcode = -1;
}
@@ -2447,7 +2447,7 @@
type_name,
GET_YEAR(self), GET_MONTH(self), GET_DAY(self));
- return PyString_FromString(buffer);
+ return PyBytes_FromString(buffer);
}
static PyObject *
@@ -2456,7 +2456,7 @@
char buffer[128];
isoformat_date(self, buffer, sizeof(buffer));
- return PyString_FromString(buffer);
+ return PyBytes_FromString(buffer);
}
/* str() calls the appropriate isoformat() method. */
@@ -2485,7 +2485,7 @@
static char *keywords[] = {"format", NULL};
if (! PyArg_ParseTupleAndKeywords(args, kw, "O!:strftime", keywords,
- &PyString_Type, &format))
+ &PyBytes_Type, &format))
return NULL;
tuple = PyObject_CallMethod((PyObject *)self, "timetuple", "()");
@@ -2506,9 +2506,9 @@
return NULL;
/* Check for str or unicode */
- if (PyString_Check(format)) {
+ if (PyBytes_Check(format)) {
/* If format is zero length, return str(self) */
- if (PyString_GET_SIZE(format) == 0)
+ if (PyBytes_GET_SIZE(format) == 0)
return PyObject_Str((PyObject *)self);
} else if (PyUnicode_Check(format)) {
/* If format is zero length, return str(self) */
@@ -2651,7 +2651,7 @@
{
return Py_BuildValue(
"(N)",
- PyString_FromStringAndSize((char *)self->data,
+ PyBytes_FromStringAndSize((char *)self->data,
_PyDateTime_DATE_DATASIZE));
}
@@ -3107,9 +3107,9 @@
/* Check for invocation from pickle with __getstate__ state */
if (PyTuple_GET_SIZE(args) >= 1 &&
PyTuple_GET_SIZE(args) <= 2 &&
- PyString_Check(state = PyTuple_GET_ITEM(args, 0)) &&
- PyString_GET_SIZE(state) == _PyDateTime_TIME_DATASIZE &&
- ((unsigned char) (PyString_AS_STRING(state)[0])) < 24)
+ PyBytes_Check(state = PyTuple_GET_ITEM(args, 0)) &&
+ PyBytes_GET_SIZE(state) == _PyDateTime_TIME_DATASIZE &&
+ ((unsigned char) (PyBytes_AS_STRING(state)[0])) < 24)
{
PyDateTime_Time *me;
char aware;
@@ -3125,7 +3125,7 @@
aware = (char)(tzinfo != Py_None);
me = (PyDateTime_Time *) (type->tp_alloc(type, aware));
if (me != NULL) {
- char *pdata = PyString_AS_STRING(state);
+ char *pdata = PyBytes_AS_STRING(state);
memcpy(me->data, pdata, _PyDateTime_TIME_DATASIZE);
me->hashcode = -1;
@@ -3211,7 +3211,7 @@
else
PyOS_snprintf(buffer, sizeof(buffer),
"%s(%d, %d)", type_name, h, m);
- result = PyString_FromString(buffer);
+ result = PyBytes_FromString(buffer);
if (result != NULL && HASTZINFO(self))
result = append_keyword_tzinfo(result, self->tzinfo);
return result;
@@ -3238,7 +3238,7 @@
_PyDateTime_TIME_DATASIZE);
isoformat_time(pdatetime, buf, sizeof(buf));
- result = PyString_FromString(buf);
+ result = PyBytes_FromString(buf);
if (result == NULL || ! HASTZINFO(self) || self->tzinfo == Py_None)
return result;
@@ -3248,7 +3248,7 @@
Py_DECREF(result);
return NULL;
}
- PyString_ConcatAndDel(&result, PyString_FromString(buf));
+ PyBytes_ConcatAndDel(&result, PyBytes_FromString(buf));
return result;
}
@@ -3261,7 +3261,7 @@
static char *keywords[] = {"format", NULL};
if (! PyArg_ParseTupleAndKeywords(args, kw, "O!:strftime", keywords,
- &PyString_Type, &format))
+ &PyBytes_Type, &format))
return NULL;
/* Python's strftime does insane things with the year part of the
@@ -3360,7 +3360,7 @@
/* Reduce this to a hash of another object. */
if (offset == 0)
- temp = PyString_FromStringAndSize((char *)self->data,
+ temp = PyBytes_FromStringAndSize((char *)self->data,
_PyDateTime_TIME_DATASIZE);
else {
int hour;
@@ -3448,7 +3448,7 @@
PyObject *basestate;
PyObject *result = NULL;
- basestate = PyString_FromStringAndSize((char *)self->data,
+ basestate = PyBytes_FromStringAndSize((char *)self->data,
_PyDateTime_TIME_DATASIZE);
if (basestate != NULL) {
if (! HASTZINFO(self) || self->tzinfo == Py_None)
@@ -3635,9 +3635,9 @@
/* Check for invocation from pickle with __getstate__ state */
if (PyTuple_GET_SIZE(args) >= 1 &&
PyTuple_GET_SIZE(args) <= 2 &&
- PyString_Check(state = PyTuple_GET_ITEM(args, 0)) &&
- PyString_GET_SIZE(state) == _PyDateTime_DATETIME_DATASIZE &&
- MONTH_IS_SANE(PyString_AS_STRING(state)[2]))
+ PyBytes_Check(state = PyTuple_GET_ITEM(args, 0)) &&
+ PyBytes_GET_SIZE(state) == _PyDateTime_DATETIME_DATASIZE &&
+ MONTH_IS_SANE(PyBytes_AS_STRING(state)[2]))
{
PyDateTime_DateTime *me;
char aware;
@@ -3653,7 +3653,7 @@
aware = (char)(tzinfo != Py_None);
me = (PyDateTime_DateTime *) (type->tp_alloc(type , aware));
if (me != NULL) {
- char *pdata = PyString_AS_STRING(state);
+ char *pdata = PyBytes_AS_STRING(state);
memcpy(me->data, pdata, _PyDateTime_DATETIME_DATASIZE);
me->hashcode = -1;
@@ -4162,7 +4162,7 @@
GET_YEAR(self), GET_MONTH(self), GET_DAY(self),
DATE_GET_HOUR(self), DATE_GET_MINUTE(self));
}
- baserepr = PyString_FromString(buffer);
+ baserepr = PyBytes_FromString(buffer);
if (baserepr == NULL || ! HASTZINFO(self))
return baserepr;
return append_keyword_tzinfo(baserepr, self->tzinfo);
@@ -4190,7 +4190,7 @@
assert(cp != NULL);
*cp++ = sep;
isoformat_time(self, cp, sizeof(buffer) - (cp - buffer));
- result = PyString_FromString(buffer);
+ result = PyBytes_FromString(buffer);
if (result == NULL || ! HASTZINFO(self))
return result;
@@ -4200,7 +4200,7 @@
Py_DECREF(result);
return NULL;
}
- PyString_ConcatAndDel(&result, PyString_FromString(buffer));
+ PyBytes_ConcatAndDel(&result, PyBytes_FromString(buffer));
return result;
}
@@ -4306,7 +4306,7 @@
/* Reduce this to a hash of another object. */
if (n == OFFSET_NAIVE)
- temp = PyString_FromStringAndSize(
+ temp = PyBytes_FromStringAndSize(
(char *)self->data,
_PyDateTime_DATETIME_DATASIZE);
else {
@@ -4529,7 +4529,7 @@
PyObject *basestate;
PyObject *result = NULL;
- basestate = PyString_FromStringAndSize((char *)self->data,
+ basestate = PyBytes_FromStringAndSize((char *)self->data,
_PyDateTime_DATETIME_DATASIZE);
if (basestate != NULL) {
if (! HASTZINFO(self) || self->tzinfo == Py_None)
Modified: python/branches/tlee-ast-optimize/Modules/dbmmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/dbmmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/dbmmodule.c Sun Jun 1 17:18:10 2008
@@ -104,7 +104,7 @@
drec = dbm_fetch(dp->di_dbm, krec);
if ( drec.dptr == 0 ) {
PyErr_SetString(PyExc_KeyError,
- PyString_AS_STRING((PyStringObject *)key));
+ PyBytes_AS_STRING((PyBytesObject *)key));
return NULL;
}
if ( dbm_error(dp->di_dbm) ) {
@@ -112,7 +112,7 @@
PyErr_SetString(DbmError, "");
return NULL;
}
- return PyString_FromStringAndSize(drec.dptr, drec.dsize);
+ return PyBytes_FromStringAndSize(drec.dptr, drec.dsize);
}
static int
@@ -136,7 +136,7 @@
if ( dbm_delete(dp->di_dbm, krec) < 0 ) {
dbm_clearerr(dp->di_dbm);
PyErr_SetString(PyExc_KeyError,
- PyString_AS_STRING((PyStringObject *)v));
+ PyBytes_AS_STRING((PyBytesObject *)v));
return -1;
}
} else {
@@ -166,7 +166,7 @@
{
datum key, val;
- if (PyString_AsStringAndSize(v, (char **)&key.dptr,
+ if (PyBytes_AsStringAndSize(v, (char **)&key.dptr,
(Py_ssize_t *)&key.dsize)) {
return -1;
}
@@ -222,7 +222,7 @@
return NULL;
for (key = dbm_firstkey(dp->di_dbm); key.dptr;
key = dbm_nextkey(dp->di_dbm)) {
- item = PyString_FromStringAndSize(key.dptr, key.dsize);
+ item = PyBytes_FromStringAndSize(key.dptr, key.dsize);
if (item == NULL) {
Py_DECREF(v);
return NULL;
@@ -269,7 +269,7 @@
check_dbmobject_open(dp);
val = dbm_fetch(dp->di_dbm, key);
if (val.dptr != NULL)
- return PyString_FromStringAndSize(val.dptr, val.dsize);
+ return PyBytes_FromStringAndSize(val.dptr, val.dsize);
else {
Py_INCREF(defvalue);
return defvalue;
@@ -292,16 +292,16 @@
check_dbmobject_open(dp);
val = dbm_fetch(dp->di_dbm, key);
if (val.dptr != NULL)
- return PyString_FromStringAndSize(val.dptr, val.dsize);
+ return PyBytes_FromStringAndSize(val.dptr, val.dsize);
if (defvalue == NULL) {
- defvalue = PyString_FromStringAndSize(NULL, 0);
+ defvalue = PyBytes_FromStringAndSize(NULL, 0);
if (defvalue == NULL)
return NULL;
}
else
Py_INCREF(defvalue);
- val.dptr = PyString_AS_STRING(defvalue);
- val.dsize = PyString_GET_SIZE(defvalue);
+ val.dptr = PyBytes_AS_STRING(defvalue);
+ val.dsize = PyBytes_GET_SIZE(defvalue);
if (dbm_store(dp->di_dbm, key, val, DBM_INSERT) < 0) {
dbm_clearerr(dp->di_dbm);
PyErr_SetString(DbmError, "cannot add item to database");
@@ -404,7 +404,7 @@
d = PyModule_GetDict(m);
if (DbmError == NULL)
DbmError = PyErr_NewException("dbm.error", NULL, NULL);
- s = PyString_FromString(which_dbm);
+ s = PyBytes_FromString(which_dbm);
if (s != NULL) {
PyDict_SetItemString(d, "library", s);
Py_DECREF(s);
Modified: python/branches/tlee-ast-optimize/Modules/dlmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/dlmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/dlmodule.c Sun Jun 1 17:18:10 2008
@@ -58,8 +58,8 @@
{
char *name;
PyUnivPtr *func;
- if (PyString_Check(args)) {
- name = PyString_AS_STRING(args);
+ if (PyBytes_Check(args)) {
+ name = PyBytes_AS_STRING(args);
} else {
PyErr_Format(PyExc_TypeError, "expected string, found %.200s",
Py_TYPE(args)->tp_name);
@@ -88,14 +88,14 @@
return NULL;
}
name = PyTuple_GetItem(args, 0);
- if (!PyString_Check(name)) {
+ if (!PyBytes_Check(name)) {
PyErr_SetString(PyExc_TypeError,
"function name must be a string");
return NULL;
}
func = (long (*)(long, long, long, long, long,
long, long, long, long, long))
- dlsym(xp->dl_handle, PyString_AsString(name));
+ dlsym(xp->dl_handle, PyBytes_AsString(name));
if (func == NULL) {
PyErr_SetString(PyExc_ValueError, dlerror());
return NULL;
@@ -109,8 +109,8 @@
PyObject *v = PyTuple_GetItem(args, i);
if (PyInt_Check(v))
alist[i-1] = PyInt_AsLong(v);
- else if (PyString_Check(v))
- alist[i-1] = (long)PyString_AsString(v);
+ else if (PyBytes_Check(v))
+ alist[i-1] = (long)PyBytes_AsString(v);
else if (v == Py_None)
alist[i-1] = (long) ((char *)NULL);
else {
Modified: python/branches/tlee-ast-optimize/Modules/errnomodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/errnomodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/errnomodule.c Sun Jun 1 17:18:10 2008
@@ -21,7 +21,7 @@
static void
_inscode(PyObject *d, PyObject *de, char *name, int code)
{
- PyObject *u = PyString_FromString(name);
+ PyObject *u = PyBytes_FromString(name);
PyObject *v = PyInt_FromLong((long) code);
/* Don't bother checking for errors; they'll be caught at the end
Modified: python/branches/tlee-ast-optimize/Modules/fcntlmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/fcntlmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/fcntlmodule.c Sun Jun 1 17:18:10 2008
@@ -55,7 +55,7 @@
PyErr_SetFromErrno(PyExc_IOError);
return NULL;
}
- return PyString_FromStringAndSize(buf, len);
+ return PyBytes_FromStringAndSize(buf, len);
}
PyErr_Clear();
@@ -164,7 +164,7 @@
return PyInt_FromLong(ret);
}
else {
- return PyString_FromStringAndSize(buf, len);
+ return PyBytes_FromStringAndSize(buf, len);
}
}
@@ -185,7 +185,7 @@
PyErr_SetFromErrno(PyExc_IOError);
return NULL;
}
- return PyString_FromStringAndSize(buf, len);
+ return PyBytes_FromStringAndSize(buf, len);
}
PyErr_Clear();
Modified: python/branches/tlee-ast-optimize/Modules/flmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/flmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/flmodule.c Sun Jun 1 17:18:10 2008
@@ -324,7 +324,7 @@
/* "label" is an exception, getmember only works for char pointers,
not for char arrays */
if (strcmp(name, "label") == 0)
- return PyString_FromString(g->ob_generic->label);
+ return PyBytes_FromString(g->ob_generic->label);
return PyMember_Get((char *)g->ob_generic, generic_memberlist, name);
}
@@ -343,12 +343,12 @@
/* "label" is an exception: setmember doesn't set strings;
and FORMS wants you to call a function to set the label */
if (strcmp(name, "label") == 0) {
- if (!PyString_Check(v)) {
+ if (!PyBytes_Check(v)) {
PyErr_SetString(PyExc_TypeError,
"label attr must be string");
return -1;
}
- fl_set_object_label(g->ob_generic, PyString_AsString(v));
+ fl_set_object_label(g->ob_generic, PyBytes_AsString(v));
return 0;
}
@@ -369,7 +369,7 @@
char buf[100];
PyOS_snprintf(buf, sizeof(buf), "<FORMS_object at %p, objclass=%d>",
g, g->ob_generic->objclass);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
static PyTypeObject GenericObjecttype = {
@@ -530,7 +530,7 @@
Py_INCREF(Py_None);
return Py_None;
}
- return PyString_FromString (str);
+ return PyBytes_FromString (str);
}
/* int func (object) */
@@ -628,7 +628,7 @@
Py_INCREF(Py_None);
return Py_None;
}
- return PyString_FromString (str);
+ return PyBytes_FromString (str);
}
static PyObject *
@@ -1594,7 +1594,7 @@
char buf[100];
PyOS_snprintf(buf, sizeof(buf), "<FORMS_form at %p, window=%ld>",
f, f->ob_form->window);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
static PyTypeObject Formtype = {
@@ -2027,7 +2027,7 @@
Py_INCREF(Py_None);
return Py_None;
}
- return PyString_FromString(str);
+ return PyBytes_FromString(str);
}
static PyObject *
@@ -2046,7 +2046,7 @@
Py_INCREF(Py_None);
return Py_None;
}
- return PyString_FromString(str);
+ return PyBytes_FromString(str);
}
@@ -2061,7 +2061,7 @@
Py_INCREF(Py_None);
return Py_None;
}
- return PyString_FromString(str);
+ return PyBytes_FromString(str);
}
static PyObject *
Modified: python/branches/tlee-ast-optimize/Modules/fmmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/fmmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/fmmodule.c Sun Jun 1 17:18:10 2008
@@ -66,7 +66,7 @@
PyErr_SetString(PyExc_RuntimeError, "error in fmgetfontname");
return NULL;
}
- return PyString_FromStringAndSize(fontname, len);
+ return PyBytes_FromStringAndSize(fontname, len);
}
static PyObject *
@@ -79,7 +79,7 @@
PyErr_SetString(PyExc_RuntimeError, "error in fmgetcomment");
return NULL;
}
- return PyString_FromStringAndSize(comment, len);
+ return PyBytes_FromStringAndSize(comment, len);
}
static PyObject *
@@ -200,7 +200,7 @@
PyObject *v;
if (fontlist == NULL)
return;
- v = PyString_FromString(fontname);
+ v = PyBytes_FromString(fontname);
if (v == NULL)
err = -1;
else {
@@ -240,7 +240,7 @@
static PyObject *
fm_fontpath(PyObject *self)
{
- return PyString_FromString(fmfontpath());
+ return PyBytes_FromString(fmfontpath());
}
static PyMethodDef fm_methods[] = {
Modified: python/branches/tlee-ast-optimize/Modules/gcmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/gcmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/gcmodule.c Sun Jun 1 17:18:10 2008
@@ -639,8 +639,8 @@
char *cname;
/* simple version of instance_repr */
PyObject *classname = inst->in_class->cl_name;
- if (classname != NULL && PyString_Check(classname))
- cname = PyString_AsString(classname);
+ if (classname != NULL && PyBytes_Check(classname))
+ cname = PyBytes_AsString(classname);
else
cname = "?";
PySys_WriteStderr("gc: %.100s <%.100s instance at %p>\n",
@@ -754,7 +754,7 @@
double t1 = 0.0;
if (delstr == NULL) {
- delstr = PyString_InternFromString("__del__");
+ delstr = PyBytes_InternFromString("__del__");
if (delstr == NULL)
Py_FatalError("gc couldn't allocate \"__del__\"");
}
@@ -898,7 +898,7 @@
if (PyErr_Occurred()) {
if (gc_str == NULL)
- gc_str = PyString_FromString("garbage collection");
+ gc_str = PyBytes_FromString("garbage collection");
PyErr_WriteUnraisable(gc_str);
Py_FatalError("unexpected exception during garbage collection");
}
Modified: python/branches/tlee-ast-optimize/Modules/gdbmmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/gdbmmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/gdbmmodule.c Sun Jun 1 17:18:10 2008
@@ -128,10 +128,10 @@
drec = gdbm_fetch(dp->di_dbm, krec);
if (drec.dptr == 0) {
PyErr_SetString(PyExc_KeyError,
- PyString_AS_STRING((PyStringObject *)key));
+ PyBytes_AS_STRING((PyBytesObject *)key));
return NULL;
}
- v = PyString_FromStringAndSize(drec.dptr, drec.dsize);
+ v = PyBytes_FromStringAndSize(drec.dptr, drec.dsize);
free(drec.dptr);
return v;
}
@@ -155,7 +155,7 @@
if (w == NULL) {
if (gdbm_delete(dp->di_dbm, krec) < 0) {
PyErr_SetString(PyExc_KeyError,
- PyString_AS_STRING((PyStringObject *)v));
+ PyBytes_AS_STRING((PyBytesObject *)v));
return -1;
}
}
@@ -188,14 +188,14 @@
"GDBM object has already been closed");
return -1;
}
- if (!PyString_Check(arg)) {
+ if (!PyBytes_Check(arg)) {
PyErr_Format(PyExc_TypeError,
"gdbm key must be string, not %.100s",
arg->ob_type->tp_name);
return -1;
}
- key.dptr = PyString_AS_STRING(arg);
- key.dsize = PyString_GET_SIZE(arg);
+ key.dptr = PyBytes_AS_STRING(arg);
+ key.dsize = PyBytes_GET_SIZE(arg);
return gdbm_exists(dp->di_dbm, key);
}
@@ -255,7 +255,7 @@
key = gdbm_firstkey(dp->di_dbm);
while (key.dptr) {
- item = PyString_FromStringAndSize(key.dptr, key.dsize);
+ item = PyBytes_FromStringAndSize(key.dptr, key.dsize);
if (item == NULL) {
free(key.dptr);
Py_DECREF(v);
@@ -306,7 +306,7 @@
check_dbmobject_open(dp);
key = gdbm_firstkey(dp->di_dbm);
if (key.dptr) {
- v = PyString_FromStringAndSize(key.dptr, key.dsize);
+ v = PyBytes_FromStringAndSize(key.dptr, key.dsize);
free(key.dptr);
return v;
}
@@ -338,7 +338,7 @@
check_dbmobject_open(dp);
nextkey = gdbm_nextkey(dp->di_dbm, key);
if (nextkey.dptr) {
- v = PyString_FromStringAndSize(nextkey.dptr, nextkey.dsize);
+ v = PyBytes_FromStringAndSize(nextkey.dptr, nextkey.dsize);
free(nextkey.dptr);
return v;
}
@@ -541,7 +541,7 @@
DbmError = PyErr_NewException("gdbm.error", NULL, NULL);
if (DbmError != NULL) {
PyDict_SetItemString(d, "error", DbmError);
- s = PyString_FromString(dbmmodule_open_flags);
+ s = PyBytes_FromString(dbmmodule_open_flags);
PyDict_SetItemString(d, "open_flags", s);
Py_DECREF(s);
}
Modified: python/branches/tlee-ast-optimize/Modules/glmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/glmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/glmodule.c Sun Jun 1 17:18:10 2008
@@ -593,7 +593,7 @@
#if 0
/* Don't check this, it breaks experiments with pixmode(PM_SIZE, ...) */
pixcount = (long)(x2+1-x1) * (long)(y2+1-y1);
- if (!PyString_Check(s) || PyString_Size(s) != pixcount*sizeof(long)) {
+ if (!PyBytes_Check(s) || PyBytes_Size(s) != pixcount*sizeof(long)) {
PyErr_SetString(PyExc_RuntimeError,
"string arg to lrectwrite has wrong size");
return NULL;
@@ -623,10 +623,10 @@
if (!PyArg_GetShort(args, 4, 3, &y2))
return NULL;
pixcount = (long)(x2+1-x1) * (long)(y2+1-y1);
- parray = PyString_FromStringAndSize((char *)NULL, pixcount*sizeof(long));
+ parray = PyBytes_FromStringAndSize((char *)NULL, pixcount*sizeof(long));
if (parray == NULL)
return NULL; /* No memory */
- lrectread(x1, y1, x2, y2, (unsigned long *) PyString_AsString(parray));
+ lrectread(x1, y1, x2, y2, (unsigned long *) PyBytes_AsString(parray));
return parray;
}
@@ -642,10 +642,10 @@
if ( !PyArg_Parse(args, "hhhhl", &x1, &y1, &x2, &y2, &hints) )
return 0;
size = (long)(x2+1-x1) * (long)(y2+1-y1);
- rv = PyString_FromStringAndSize((char *)NULL, size*sizeof(long));
+ rv = PyBytes_FromStringAndSize((char *)NULL, size*sizeof(long));
if ( rv == NULL )
return NULL;
- parray = (unsigned long *)PyString_AsString(rv);
+ parray = (unsigned long *)PyBytes_AsString(rv);
size_ret = readdisplay(x1, y1, x2, y2, parray, hints);
if ( size_ret != size ) {
printf("gl_readdisplay: got %ld pixels, expected %ld\n",
@@ -700,16 +700,16 @@
pixcount = width*height;
packedcount = ((width+packfactor-1)/packfactor) *
((height+packfactor-1)/packfactor);
- if (PyString_Size(unpacked) != pixcount*sizeof(long)) {
+ if (PyBytes_Size(unpacked) != pixcount*sizeof(long)) {
PyErr_SetString(PyExc_RuntimeError,
"string arg to packrect has wrong size");
return NULL;
}
- packed = PyString_FromStringAndSize((char *)NULL, packedcount);
+ packed = PyBytes_FromStringAndSize((char *)NULL, packedcount);
if (packed == NULL)
return NULL;
- parray = (unsigned long *) PyString_AsString(unpacked);
- p = (unsigned char *) PyString_AsString(packed);
+ parray = (unsigned long *) PyBytes_AsString(unpacked);
+ p = (unsigned char *) PyBytes_AsString(packed);
for (y = 0; y < height; y += packfactor, parray += packfactor*width) {
for (x = 0; x < width; x += packfactor) {
pixel = parray[x];
@@ -758,16 +758,16 @@
pixcount = width*height;
packedcount = ((width+packfactor-1)/packfactor) *
((height+packfactor-1)/packfactor);
- if (PyString_Size(packed) != packedcount) {
+ if (PyBytes_Size(packed) != packedcount) {
PyErr_SetString(PyExc_RuntimeError,
"string arg to unpackrect has wrong size");
return NULL;
}
- unpacked = PyString_FromStringAndSize((char *)NULL, pixcount*sizeof(long));
+ unpacked = PyBytes_FromStringAndSize((char *)NULL, pixcount*sizeof(long));
if (unpacked == NULL)
return NULL;
- parray = (unsigned long *) PyString_AsString(unpacked);
- p = (unsigned char *) PyString_AsString(packed);
+ parray = (unsigned long *) PyBytes_AsString(unpacked);
+ p = (unsigned char *) PyBytes_AsString(packed);
if (packfactor == 1 && width*height > 0) {
/* Just expand bytes to longs */
register int x = width * height;
@@ -799,7 +799,7 @@
{
char buf[20];
gversion(buf);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
Modified: python/branches/tlee-ast-optimize/Modules/grpmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/grpmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/grpmodule.c Sun Jun 1 17:18:10 2008
@@ -47,7 +47,7 @@
return NULL;
}
for (member = p->gr_mem; *member != NULL; member++) {
- PyObject *x = PyString_FromString(*member);
+ PyObject *x = PyBytes_FromString(*member);
if (x == NULL || PyList_Append(w, x) != 0) {
Py_XDECREF(x);
Py_DECREF(w);
@@ -58,13 +58,13 @@
}
#define SET(i,val) PyStructSequence_SET_ITEM(v, i, val)
- SET(setIndex++, PyString_FromString(p->gr_name));
+ SET(setIndex++, PyBytes_FromString(p->gr_name));
#ifdef __VMS
SET(setIndex++, Py_None);
Py_INCREF(Py_None);
#else
if (p->gr_passwd)
- SET(setIndex++, PyString_FromString(p->gr_passwd));
+ SET(setIndex++, PyBytes_FromString(p->gr_passwd));
else {
SET(setIndex++, Py_None);
Py_INCREF(Py_None);
@@ -113,7 +113,7 @@
py_str_name = PyObject_Str(pyo_name);
if (!py_str_name)
return NULL;
- name = PyString_AS_STRING(py_str_name);
+ name = PyBytes_AS_STRING(py_str_name);
if ((p = getgrnam(name)) == NULL) {
PyErr_Format(PyExc_KeyError, "getgrnam(): name not found: %s", name);
Modified: python/branches/tlee-ast-optimize/Modules/imageop.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/imageop.c (original)
+++ python/branches/tlee-ast-optimize/Modules/imageop.c Sun Jun 1 17:18:10 2008
@@ -54,7 +54,7 @@
return 1;
if (bcos == NULL) {
/* cache string object for future use */
- bcos = PyString_FromString("backward_compatible");
+ bcos = PyBytes_FromString("backward_compatible");
if (bcos == NULL)
return 1;
}
@@ -97,11 +97,11 @@
xstep = (newx1 < newx2)? 1 : -1;
ystep = (newy1 < newy2)? 1 : -1;
- rv = PyString_FromStringAndSize(NULL,
+ rv = PyBytes_FromStringAndSize(NULL,
(abs(newx2-newx1)+1)*(abs(newy2-newy1)+1)*size);
if ( rv == 0 )
return 0;
- ncp = (char *)PyString_AsString(rv);
+ ncp = (char *)PyBytes_AsString(rv);
nsp = (short *)ncp;
nlp = (Py_Int32 *)ncp;
newy2 += ystep;
@@ -150,10 +150,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, newx*newy*size);
+ rv = PyBytes_FromStringAndSize(NULL, newx*newy*size);
if ( rv == 0 )
return 0;
- ncp = (char *)PyString_AsString(rv);
+ ncp = (char *)PyBytes_AsString(rv);
nsp = (short *)ncp;
nlp = (Py_Int32 *)ncp;
for( iy = 0; iy < newy; iy++ ) {
@@ -195,10 +195,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, len);
+ rv = PyBytes_FromStringAndSize(NULL, len);
if ( rv == 0 )
return 0;
- ncp = (unsigned char *)PyString_AsString(rv);
+ ncp = (unsigned char *)PyBytes_AsString(rv);
if ( width == 1 ) {
memcpy(ncp, cp, maxx); /* Copy first line */
@@ -245,10 +245,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, (len+7)/8);
+ rv = PyBytes_FromStringAndSize(NULL, (len+7)/8);
if ( rv == 0 )
return 0;
- ncp = (unsigned char *)PyString_AsString(rv);
+ ncp = (unsigned char *)PyBytes_AsString(rv);
bit = 0x80;
ovalue = 0;
@@ -286,10 +286,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, (len+1)/2);
+ rv = PyBytes_FromStringAndSize(NULL, (len+1)/2);
if ( rv == 0 )
return 0;
- ncp = (unsigned char *)PyString_AsString(rv);
+ ncp = (unsigned char *)PyBytes_AsString(rv);
pos = 0;
ovalue = 0;
for ( i=0; i < len; i++ ) {
@@ -325,10 +325,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, (len+3)/4);
+ rv = PyBytes_FromStringAndSize(NULL, (len+3)/4);
if ( rv == 0 )
return 0;
- ncp = (unsigned char *)PyString_AsString(rv);
+ ncp = (unsigned char *)PyBytes_AsString(rv);
pos = 0;
ovalue = 0;
for ( i=0; i < len; i++ ) {
@@ -363,10 +363,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, (len+7)/8);
+ rv = PyBytes_FromStringAndSize(NULL, (len+7)/8);
if ( rv == 0 )
return 0;
- ncp = (unsigned char *)PyString_AsString(rv);
+ ncp = (unsigned char *)PyBytes_AsString(rv);
bit = 0x80;
ovalue = 0;
@@ -409,10 +409,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, (len+3)/4);
+ rv = PyBytes_FromStringAndSize(NULL, (len+3)/4);
if ( rv == 0 )
return 0;
- ncp = (unsigned char *)PyString_AsString(rv);
+ ncp = (unsigned char *)PyBytes_AsString(rv);
pos = 1;
ovalue = 0;
for ( i=0; i < len; i++ ) {
@@ -449,10 +449,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, nlen);
+ rv = PyBytes_FromStringAndSize(NULL, nlen);
if ( rv == 0 )
return 0;
- ncp = (unsigned char *)PyString_AsString(rv);
+ ncp = (unsigned char *)PyBytes_AsString(rv);
bit = 0x80;
for ( i=0; i < nlen; i++ ) {
@@ -486,10 +486,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, nlen);
+ rv = PyBytes_FromStringAndSize(NULL, nlen);
if ( rv == 0 )
return 0;
- ncp = (unsigned char *)PyString_AsString(rv);
+ ncp = (unsigned char *)PyBytes_AsString(rv);
pos = 0;
for ( i=0; i < nlen; i++ ) {
@@ -522,10 +522,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, nlen);
+ rv = PyBytes_FromStringAndSize(NULL, nlen);
if ( rv == 0 )
return 0;
- ncp = (unsigned char *)PyString_AsString(rv);
+ ncp = (unsigned char *)PyBytes_AsString(rv);
pos = 0;
for ( i=0; i < nlen; i++ ) {
@@ -559,10 +559,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, nlen);
+ rv = PyBytes_FromStringAndSize(NULL, nlen);
if ( rv == 0 )
return 0;
- ncp = (unsigned char *)PyString_AsString(rv);
+ ncp = (unsigned char *)PyBytes_AsString(rv);
for ( i=0; i < nlen; i++ ) {
/* Bits in source: aaaaaaaa BBbbbbbb GGGggggg RRRrrrrr */
@@ -603,10 +603,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, nlen*4);
+ rv = PyBytes_FromStringAndSize(NULL, nlen*4);
if ( rv == 0 )
return 0;
- ncp = (unsigned char *)PyString_AsString(rv);
+ ncp = (unsigned char *)PyBytes_AsString(rv);
for ( i=0; i < nlen; i++ ) {
/* Bits in source: RRRBBGGG
@@ -653,10 +653,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, nlen);
+ rv = PyBytes_FromStringAndSize(NULL, nlen);
if ( rv == 0 )
return 0;
- ncp = (unsigned char *)PyString_AsString(rv);
+ ncp = (unsigned char *)PyBytes_AsString(rv);
for ( i=0; i < nlen; i++ ) {
if (backward_compatible) {
@@ -698,10 +698,10 @@
return 0;
}
- rv = PyString_FromStringAndSize(NULL, nlen*4);
+ rv = PyBytes_FromStringAndSize(NULL, nlen*4);
if ( rv == 0 )
return 0;
- ncp = (unsigned char *)PyString_AsString(rv);
+ ncp = (unsigned char *)PyBytes_AsString(rv);
for ( i=0; i < nlen; i++ ) {
value = *cp++;
Modified: python/branches/tlee-ast-optimize/Modules/imgfile.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/imgfile.c (original)
+++ python/branches/tlee-ast-optimize/Modules/imgfile.c Sun Jun 1 17:18:10 2008
@@ -130,12 +130,12 @@
}
if ( zsize == 3 ) zsize = 4;
- rv = PyString_FromStringAndSize((char *)NULL, xsize*ysize*zsize);
+ rv = PyBytes_FromStringAndSize((char *)NULL, xsize*ysize*zsize);
if ( rv == NULL ) {
iclose(image);
return NULL;
}
- cdatap = PyString_AsString(rv);
+ cdatap = PyBytes_AsString(rv);
idatap = (long *)cdatap;
if (top_to_bottom) {
@@ -319,7 +319,7 @@
}
if ( zsize == 3 ) zsize = 4;
- rv = PyString_FromStringAndSize(NULL, xwtd*ywtd*zsize);
+ rv = PyBytes_FromStringAndSize(NULL, xwtd*ywtd*zsize);
if ( rv == NULL ) {
iclose(image);
return NULL;
@@ -328,7 +328,7 @@
xfac = (float)xsize/(float)xwtd;
yfac = (float)ysize/(float)ywtd;
PyFPE_END_PROTECT(yfac)
- cdatap = PyString_AsString(rv);
+ cdatap = PyBytes_AsString(rv);
idatap = (long *)cdatap;
if ( extended ) {
Modified: python/branches/tlee-ast-optimize/Modules/itertoolsmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/itertoolsmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/itertoolsmodule.c Sun Jun 1 17:18:10 2008
@@ -2904,12 +2904,12 @@
PyObject *result;
if (lz->cnt != PY_SSIZE_T_MAX)
- return PyString_FromFormat("count(%zd)", lz->cnt);
+ return PyBytes_FromFormat("count(%zd)", lz->cnt);
cnt_repr = PyObject_Repr(lz->long_cnt);
if (cnt_repr == NULL)
return NULL;
- result = PyString_FromFormat("count(%s)", PyString_AS_STRING(cnt_repr));
+ result = PyBytes_FromFormat("count(%s)", PyBytes_AS_STRING(cnt_repr));
Py_DECREF(cnt_repr);
return result;
}
@@ -3221,11 +3221,11 @@
return NULL;
if (ro->cnt == -1)
- result = PyString_FromFormat("repeat(%s)",
- PyString_AS_STRING(objrepr));
+ result = PyBytes_FromFormat("repeat(%s)",
+ PyBytes_AS_STRING(objrepr));
else
- result = PyString_FromFormat("repeat(%s, %zd)",
- PyString_AS_STRING(objrepr), ro->cnt);
+ result = PyBytes_FromFormat("repeat(%s, %zd)",
+ PyBytes_AS_STRING(objrepr), ro->cnt);
Py_DECREF(objrepr);
return result;
}
Modified: python/branches/tlee-ast-optimize/Modules/linuxaudiodev.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/linuxaudiodev.c (original)
+++ python/branches/tlee-ast-optimize/Modules/linuxaudiodev.c Sun Jun 1 17:18:10 2008
@@ -162,17 +162,17 @@
if (!PyArg_ParseTuple(args, "i:read", &size))
return NULL;
- rv = PyString_FromStringAndSize(NULL, size);
+ rv = PyBytes_FromStringAndSize(NULL, size);
if (rv == NULL)
return NULL;
- cp = PyString_AS_STRING(rv);
+ cp = PyBytes_AS_STRING(rv);
if ((count = read(self->x_fd, cp, size)) < 0) {
PyErr_SetFromErrno(LinuxAudioError);
Py_DECREF(rv);
return NULL;
}
self->x_icount += count;
- _PyString_Resize(&rv, count);
+ _PyBytes_Resize(&rv, count);
return rv;
}
Modified: python/branches/tlee-ast-optimize/Modules/main.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/main.c (original)
+++ python/branches/tlee-ast-optimize/Modules/main.c Sun Jun 1 17:18:10 2008
@@ -99,6 +99,7 @@
PYTHONHOME : alternate <prefix> directory (or <prefix>%c<exec_prefix>).\n\
The default module search path uses %s.\n\
PYTHONCASEOK : ignore case in 'import' statements (Windows).\n\
+PYTHONIOENCODING: Encoding[:errors] used for stdin/stdout/stderr.\n\
";
@@ -195,7 +196,7 @@
{
PyObject *argv0 = NULL, *importer = NULL;
- if ((argv0 = PyString_FromString(filename)) &&
+ if ((argv0 = PyBytes_FromString(filename)) &&
(importer = PyImport_GetImporter(argv0)) &&
(importer->ob_type != &PyNullImporter_Type))
{
Modified: python/branches/tlee-ast-optimize/Modules/mathmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/mathmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/mathmodule.c Sun Jun 1 17:18:10 2008
@@ -318,14 +318,20 @@
value semantics across iterations (i.e. handling -Inf + Inf).
Note 2: No provision is made for intermediate overflow handling;
- therefore, sum([1e+308, 1e-308, 1e+308]) returns result 1e+308 while
+ therefore, sum([1e+308, 1e-308, 1e+308]) returns 1e+308 while
sum([1e+308, 1e+308, 1e-308]) raises an OverflowError due to the
overflow of the first partial sum.
- Note 3: Aggressively optimizing compilers can potentially eliminate the
- residual values needed for accurate summation. For instance, the statements
- "hi = x + y; lo = y - (hi - x);" could be mis-transformed to
- "hi = x + y; lo = 0.0;" which defeats the computation of residuals.
+ Note 3: The itermediate values lo, yr, and hi are declared volatile so
+ aggressive compilers won't algebraicly reduce lo to always be exactly 0.0.
+ Also, the volatile declaration forces the values to be stored in memory as
+ regular doubles instead of extended long precision (80-bit) values. This
+ prevents double rounding because any addition or substraction of two doubles
+ can be resolved exactly into double-sized hi and lo values. As long as the
+ hi value gets forced into a double before yr and lo are computed, the extra
+ bits in downstream extended precision operations (x87 for example) will be
+ exactly zero and therefore can be losslessly stored back into a double,
+ thereby preventing double rounding.
Note 4: A similar implementation is in Modules/cmathmodule.c.
Be sure to update both when making changes.
@@ -402,7 +408,8 @@
{
PyObject *item, *iter, *sum = NULL;
Py_ssize_t i, j, n = 0, m = NUM_PARTIALS;
- double x, y, hi, lo=0.0, ps[NUM_PARTIALS], *p = ps;
+ double x, y, t, ps[NUM_PARTIALS], *p = ps;
+ volatile double hi, yr, lo;
iter = PyObject_GetIter(seq);
if (iter == NULL)
@@ -428,10 +435,12 @@
for (i = j = 0; j < n; j++) { /* for y in partials */
y = p[j];
+ if (fabs(x) < fabs(y)) {
+ t = x; x = y; y = t;
+ }
hi = x + y;
- lo = fabs(x) < fabs(y)
- ? x - (hi - y)
- : y - (hi - x);
+ yr = hi - x;
+ lo = y - yr;
if (lo != 0.0)
p[i++] = lo;
x = hi;
@@ -451,38 +460,41 @@
}
}
+ hi = 0.0;
if (n > 0) {
hi = p[--n];
if (Py_IS_FINITE(hi)) {
/* sum_exact(ps, hi) from the top, stop when the sum becomes inexact. */
while (n > 0) {
- x = p[--n];
- y = hi;
+ x = hi;
+ y = p[--n];
+ assert(fabs(y) < fabs(x));
hi = x + y;
- assert(fabs(x) < fabs(y));
- lo = x - (hi - y);
+ yr = hi - x;
+ lo = y - yr;
if (lo != 0.0)
break;
}
- /* Little dance to allow half-even rounding across multiple partials.
- Needed so that sum([1e-16, 1, 1e16]) will round-up to two instead
- of down to zero (the 1e16 makes the 1 slightly closer to two). */
+ /* Make half-even rounding work across multiple partials. Needed
+ so that sum([1e-16, 1, 1e16]) will round-up the last digit to
+ two instead of down to zero (the 1e-16 makes the 1 slightly
+ closer to two). With a potential 1 ULP rounding error fixed-up,
+ math.sum() can guarantee commutativity. */
if (n > 0 && ((lo < 0.0 && p[n-1] < 0.0) ||
(lo > 0.0 && p[n-1] > 0.0))) {
y = lo * 2.0;
x = hi + y;
- if (y == (x - hi))
+ yr = x - hi;
+ if (y == yr)
hi = x;
}
}
- else { /* raise corresponding error */
+ else { /* raise exception corresponding to a special value */
errno = Py_IS_NAN(hi) ? EDOM : ERANGE;
if (is_error(hi))
goto _sum_error;
}
}
- else /* default */
- hi = 0.0;
sum = PyFloat_FromDouble(hi);
_sum_error:
Modified: python/branches/tlee-ast-optimize/Modules/md5module.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/md5module.c (original)
+++ python/branches/tlee-ast-optimize/Modules/md5module.c Sun Jun 1 17:18:10 2008
@@ -80,7 +80,7 @@
mdContext = self->md5;
md5_finish(&mdContext, aDigest);
- return PyString_FromStringAndSize((char *)aDigest, 16);
+ return PyBytes_FromStringAndSize((char *)aDigest, 16);
}
PyDoc_STRVAR(digest_doc,
@@ -113,7 +113,7 @@
c = (c>9) ? c+'a'-10 : c + '0';
hexdigest[j++] = c;
}
- return PyString_FromStringAndSize((char*)hexdigest, 32);
+ return PyBytes_FromStringAndSize((char*)hexdigest, 32);
}
@@ -165,7 +165,7 @@
static PyObject *
md5_get_name(PyObject *self, void *closure)
{
- return PyString_FromStringAndSize("MD5", 3);
+ return PyBytes_FromStringAndSize("MD5", 3);
}
static PyGetSetDef md5_getseters[] = {
Modified: python/branches/tlee-ast-optimize/Modules/mmapmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/mmapmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/mmapmodule.c Sun Jun 1 17:18:10 2008
@@ -222,7 +222,7 @@
else
++eol; /* we're interested in the position after the
newline. */
- result = PyString_FromStringAndSize(start, (eol - start));
+ result = PyBytes_FromStringAndSize(start, (eol - start));
self->pos += (eol - start);
return result;
}
@@ -700,7 +700,7 @@
PyErr_SetString(PyExc_IndexError, "mmap index out of range");
return NULL;
}
- return PyString_FromStringAndSize(self->data + i, 1);
+ return PyBytes_FromStringAndSize(self->data + i, 1);
}
static PyObject *
@@ -718,7 +718,7 @@
else if ((size_t)ihigh > self->size)
ihigh = self->size;
- return PyString_FromStringAndSize(self->data + ilow, ihigh-ilow);
+ return PyBytes_FromStringAndSize(self->data + ilow, ihigh-ilow);
}
static PyObject *
@@ -736,7 +736,7 @@
"mmap index out of range");
return NULL;
}
- return PyString_FromStringAndSize(self->data + i, 1);
+ return PyBytes_FromStringAndSize(self->data + i, 1);
}
else if (PySlice_Check(item)) {
Py_ssize_t start, stop, step, slicelen;
@@ -747,9 +747,9 @@
}
if (slicelen <= 0)
- return PyString_FromStringAndSize("", 0);
+ return PyBytes_FromStringAndSize("", 0);
else if (step == 1)
- return PyString_FromStringAndSize(self->data + start,
+ return PyBytes_FromStringAndSize(self->data + start,
slicelen);
else {
char *result_buf = (char *)PyMem_Malloc(slicelen);
@@ -762,7 +762,7 @@
cur += step, i++) {
result_buf[i] = self->data[cur];
}
- result = PyString_FromStringAndSize(result_buf,
+ result = PyBytes_FromStringAndSize(result_buf,
slicelen);
PyMem_Free(result_buf);
return result;
@@ -815,19 +815,19 @@
"mmap object doesn't support slice deletion");
return -1;
}
- if (! (PyString_Check(v)) ) {
+ if (! (PyBytes_Check(v)) ) {
PyErr_SetString(PyExc_IndexError,
"mmap slice assignment must be a string");
return -1;
}
- if (PyString_Size(v) != (ihigh - ilow)) {
+ if (PyBytes_Size(v) != (ihigh - ilow)) {
PyErr_SetString(PyExc_IndexError,
"mmap slice assignment is wrong size");
return -1;
}
if (!is_writeable(self))
return -1;
- buf = PyString_AsString(v);
+ buf = PyBytes_AsString(v);
memcpy(self->data + ilow, buf, ihigh-ilow);
return 0;
}
@@ -847,14 +847,14 @@
"mmap object doesn't support item deletion");
return -1;
}
- if (! (PyString_Check(v) && PyString_Size(v)==1) ) {
+ if (! (PyBytes_Check(v) && PyBytes_Size(v)==1) ) {
PyErr_SetString(PyExc_IndexError,
"mmap assignment must be single-character string");
return -1;
}
if (!is_writeable(self))
return -1;
- buf = PyString_AsString(v);
+ buf = PyBytes_AsString(v);
self->data[i] = buf[0];
return 0;
}
@@ -882,14 +882,14 @@
"mmap object doesn't support item deletion");
return -1;
}
- if (!PyString_Check(value) || PyString_Size(value) != 1) {
+ if (!PyBytes_Check(value) || PyBytes_Size(value) != 1) {
PyErr_SetString(PyExc_IndexError,
"mmap assignment must be single-character string");
return -1;
}
if (!is_writeable(self))
return -1;
- buf = PyString_AsString(value);
+ buf = PyBytes_AsString(value);
self->data[i] = buf[0];
return 0;
}
@@ -906,12 +906,12 @@
"mmap object doesn't support slice deletion");
return -1;
}
- if (!PyString_Check(value)) {
+ if (!PyBytes_Check(value)) {
PyErr_SetString(PyExc_IndexError,
"mmap slice assignment must be a string");
return -1;
}
- if (PyString_Size(value) != slicelen) {
+ if (PyBytes_Size(value) != slicelen) {
PyErr_SetString(PyExc_IndexError,
"mmap slice assignment is wrong size");
return -1;
@@ -922,7 +922,7 @@
if (slicelen == 0)
return 0;
else if (step == 1) {
- const char *buf = PyString_AsString(value);
+ const char *buf = PyBytes_AsString(value);
if (buf == NULL)
return -1;
@@ -931,7 +931,7 @@
}
else {
Py_ssize_t cur, i;
- const char *buf = PyString_AsString(value);
+ const char *buf = PyBytes_AsString(value);
if (buf == NULL)
return -1;
Modified: python/branches/tlee-ast-optimize/Modules/nismodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/nismodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/nismodule.c Sun Jun 1 17:18:10 2008
@@ -115,8 +115,8 @@
if (invallen > 0 && inval[invallen-1] == '\0')
invallen--;
}
- key = PyString_FromStringAndSize(inkey, inkeylen);
- val = PyString_FromStringAndSize(inval, invallen);
+ key = PyBytes_FromStringAndSize(inkey, inkeylen);
+ val = PyBytes_FromStringAndSize(inval, invallen);
if (key == NULL || val == NULL) {
/* XXX error -- don't know how to handle */
PyErr_Clear();
@@ -146,7 +146,7 @@
if ((err = yp_get_default_domain(&domain)) != 0)
return nis_error(err);
- res = PyString_FromStringAndSize (domain, strlen(domain));
+ res = PyBytes_FromStringAndSize (domain, strlen(domain));
return res;
}
@@ -178,7 +178,7 @@
len--;
if (err != 0)
return nis_error(err);
- res = PyString_FromStringAndSize (match, len);
+ res = PyBytes_FromStringAndSize (match, len);
free (match);
return res;
}
@@ -398,7 +398,7 @@
if ((list = PyList_New(0)) == NULL)
return NULL;
for (maps = maps; maps; maps = maps->next) {
- PyObject *str = PyString_FromString(maps->map);
+ PyObject *str = PyBytes_FromString(maps->map);
if (!str || PyList_Append(list, str) < 0)
{
Py_DECREF(list);
Modified: python/branches/tlee-ast-optimize/Modules/operator.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/operator.c (original)
+++ python/branches/tlee-ast-optimize/Modules/operator.c Sun Jun 1 17:18:10 2008
@@ -508,19 +508,19 @@
}
#endif
- if (!PyString_Check(attr)) {
+ if (!PyBytes_Check(attr)) {
PyErr_SetString(PyExc_TypeError,
"attribute name must be a string");
return NULL;
}
- s = PyString_AS_STRING(attr);
+ s = PyBytes_AS_STRING(attr);
Py_INCREF(obj);
for (;;) {
PyObject *newobj, *str;
p = strchr(s, '.');
- str = p ? PyString_FromStringAndSize(s, (p-s)) :
- PyString_FromString(s);
+ str = p ? PyBytes_FromStringAndSize(s, (p-s)) :
+ PyBytes_FromString(s);
if (str == NULL) {
Py_DECREF(obj);
return NULL;
Modified: python/branches/tlee-ast-optimize/Modules/ossaudiodev.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/ossaudiodev.c (original)
+++ python/branches/tlee-ast-optimize/Modules/ossaudiodev.c Sun Jun 1 17:18:10 2008
@@ -366,10 +366,10 @@
if (!PyArg_ParseTuple(args, "i:read", &size))
return NULL;
- rv = PyString_FromStringAndSize(NULL, size);
+ rv = PyBytes_FromStringAndSize(NULL, size);
if (rv == NULL)
return NULL;
- cp = PyString_AS_STRING(rv);
+ cp = PyBytes_AS_STRING(rv);
Py_BEGIN_ALLOW_THREADS
count = read(self->fd, cp, size);
@@ -381,7 +381,7 @@
return NULL;
}
self->icount += count;
- _PyString_Resize(&rv, count);
+ _PyBytes_Resize(&rv, count);
return rv;
}
@@ -811,20 +811,20 @@
Py_INCREF(rval);
}
else if (strcmp(name, "name") == 0) {
- rval = PyString_FromString(self->devicename);
+ rval = PyBytes_FromString(self->devicename);
}
else if (strcmp(name, "mode") == 0) {
/* No need for a "default" in this switch: from newossobject(),
self->mode can only be one of these three values. */
switch(self->mode) {
case O_RDONLY:
- rval = PyString_FromString("r");
+ rval = PyBytes_FromString("r");
break;
case O_RDWR:
- rval = PyString_FromString("rw");
+ rval = PyBytes_FromString("rw");
break;
case O_WRONLY:
- rval = PyString_FromString("w");
+ rval = PyBytes_FromString("w");
break;
}
}
@@ -913,12 +913,12 @@
if (labels == NULL || names == NULL)
goto error2;
for (i = 0; i < num_controls; i++) {
- s = PyString_FromString(control_labels[i]);
+ s = PyBytes_FromString(control_labels[i]);
if (s == NULL)
goto error2;
PyList_SET_ITEM(labels, i, s);
- s = PyString_FromString(control_names[i]);
+ s = PyBytes_FromString(control_names[i]);
if (s == NULL)
goto error2;
PyList_SET_ITEM(names, i, s);
Modified: python/branches/tlee-ast-optimize/Modules/parsermodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/parsermodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/parsermodule.c Sun Jun 1 17:18:10 2008
@@ -105,14 +105,14 @@
}
if (TYPE(n) == encoding_decl)
- (void) addelem(v, i+1, PyString_FromString(STR(n)));
+ (void) addelem(v, i+1, PyBytes_FromString(STR(n)));
return (v);
}
else if (ISTERMINAL(TYPE(n))) {
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)));
+ (void) addelem(result, 1, PyBytes_FromString(STR(n)));
if (lineno == 1)
(void) addelem(result, 2, PyInt_FromLong(n->n_lineno));
if (col_offset == 1)
@@ -689,7 +689,7 @@
temp = PySequence_GetItem(elem, 1);
if (temp == NULL)
return 0;
- if (!PyString_Check(temp)) {
+ if (!PyBytes_Check(temp)) {
PyErr_Format(parser_error,
"second item in terminal node must be a string,"
" found %s",
@@ -714,10 +714,10 @@
Py_DECREF(o);
}
}
- len = PyString_GET_SIZE(temp) + 1;
+ len = PyBytes_GET_SIZE(temp) + 1;
strn = (char *)PyObject_MALLOC(len);
if (strn != NULL)
- (void) memcpy(strn, PyString_AS_STRING(temp), len);
+ (void) memcpy(strn, PyBytes_AS_STRING(temp), len);
Py_DECREF(temp);
}
else if (!ISNONTERMINAL(type)) {
@@ -800,10 +800,10 @@
}
if (res && encoding) {
Py_ssize_t len;
- len = PyString_GET_SIZE(encoding) + 1;
+ len = PyBytes_GET_SIZE(encoding) + 1;
res->n_str = (char *)PyObject_MALLOC(len);
if (res->n_str != NULL)
- (void) memcpy(res->n_str, PyString_AS_STRING(encoding), len);
+ (void) memcpy(res->n_str, PyBytes_AS_STRING(encoding), len);
Py_DECREF(encoding);
Py_DECREF(tuple);
}
Modified: python/branches/tlee-ast-optimize/Modules/posixmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/posixmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/posixmodule.c Sun Jun 1 17:18:10 2008
@@ -375,12 +375,12 @@
char *p = strchr(*e, '=');
if (p == NULL)
continue;
- k = PyString_FromStringAndSize(*e, (int)(p-*e));
+ k = PyBytes_FromStringAndSize(*e, (int)(p-*e));
if (k == NULL) {
PyErr_Clear();
continue;
}
- v = PyString_FromString(p+1);
+ v = PyBytes_FromString(p+1);
if (v == NULL) {
PyErr_Clear();
Py_DECREF(k);
@@ -400,13 +400,13 @@
rc = DosQueryExtLIBPATH(buffer, BEGIN_LIBPATH);
if (rc == NO_ERROR) { /* (not a type, envname is NOT 'BEGIN_LIBPATH') */
- PyObject *v = PyString_FromString(buffer);
+ PyObject *v = PyBytes_FromString(buffer);
PyDict_SetItemString(d, "BEGINLIBPATH", v);
Py_DECREF(v);
}
rc = DosQueryExtLIBPATH(buffer, END_LIBPATH);
if (rc == NO_ERROR) { /* (not a typo, envname is NOT 'END_LIBPATH') */
- PyObject *v = PyString_FromString(buffer);
+ PyObject *v = PyBytes_FromString(buffer);
PyDict_SetItemString(d, "ENDLIBPATH", v);
Py_DECREF(v);
}
@@ -1598,7 +1598,7 @@
#endif
if (ret == NULL)
return posix_error();
- return PyString_FromString(ret);
+ return PyBytes_FromString(ret);
}
#endif
@@ -1620,7 +1620,7 @@
#endif
if (ret == NULL)
return posix_error();
- return PyString_FromString(buffer);
+ return PyBytes_FromString(buffer);
}
#endif
@@ -1968,7 +1968,7 @@
Py_END_ALLOW_THREADS
if (res == NULL)
return posix_error();
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
#ifdef Py_USING_UNICODE
@@ -2174,7 +2174,7 @@
/* Skip over . and .. */
if (strcmp(FileData.cFileName, ".") != 0 &&
strcmp(FileData.cFileName, "..") != 0) {
- v = PyString_FromString(FileData.cFileName);
+ v = PyBytes_FromString(FileData.cFileName);
if (v == NULL) {
Py_DECREF(d);
d = NULL;
@@ -2262,7 +2262,7 @@
/* Leave Case of Name Alone -- In Native Form */
/* (Removed Forced Lowercasing Code) */
- v = PyString_FromString(namebuf);
+ v = PyBytes_FromString(namebuf);
if (v == NULL) {
Py_DECREF(d);
d = NULL;
@@ -2312,7 +2312,7 @@
(NAMLEN(ep) == 1 ||
(ep->d_name[1] == '.' && NAMLEN(ep) == 2)))
continue;
- v = PyString_FromStringAndSize(ep->d_name, NAMLEN(ep));
+ v = PyBytes_FromStringAndSize(ep->d_name, NAMLEN(ep));
if (v == NULL) {
Py_DECREF(d);
d = NULL;
@@ -2397,7 +2397,7 @@
return PyUnicode_Decode(outbuf, strlen(outbuf),
Py_FileSystemDefaultEncoding, NULL);
}
- return PyString_FromString(outbuf);
+ return PyBytes_FromString(outbuf);
} /* end of posix__getfullpathname */
#endif /* MS_WINDOWS */
@@ -3062,7 +3062,7 @@
/* Omit Pseudo-Env Vars that Would Confuse Programs if Passed On */
if (stricmp(k, "BEGINLIBPATH") != 0 && stricmp(k, "ENDLIBPATH") != 0) {
#endif
- len = PyString_Size(key) + PyString_Size(val) + 2;
+ len = PyBytes_Size(key) + PyBytes_Size(val) + 2;
p = PyMem_NEW(char, len);
if (p == NULL) {
PyErr_NoMemory();
@@ -3292,7 +3292,7 @@
{
goto fail_2;
}
- len = PyString_Size(key) + PyString_Size(val) + 2;
+ len = PyBytes_Size(key) + PyBytes_Size(val) + 2;
p = PyMem_NEW(char, len);
if (p == NULL) {
PyErr_NoMemory();
@@ -3525,7 +3525,7 @@
{
goto fail_2;
}
- len = PyString_Size(key) + PyString_Size(val) + 2;
+ len = PyBytes_Size(key) + PyBytes_Size(val) + 2;
p = PyMem_NEW(char, len);
if (p == NULL) {
PyErr_NoMemory();
@@ -3895,7 +3895,7 @@
"unable to determine login name");
}
else
- result = PyString_FromString(name);
+ result = PyBytes_FromString(name);
errno = old_errno;
return result;
@@ -5884,7 +5884,7 @@
return posix_error_with_allocated_filename(path);
PyMem_Free(path);
- v = PyString_FromStringAndSize(buf, n);
+ v = PyBytes_FromStringAndSize(buf, n);
#ifdef Py_USING_UNICODE
if (arg_is_unicode) {
PyObject *w;
@@ -6289,18 +6289,18 @@
errno = EINVAL;
return posix_error();
}
- buffer = PyString_FromStringAndSize((char *)NULL, size);
+ buffer = PyBytes_FromStringAndSize((char *)NULL, size);
if (buffer == NULL)
return NULL;
Py_BEGIN_ALLOW_THREADS
- n = read(fd, PyString_AsString(buffer), size);
+ n = read(fd, PyBytes_AsString(buffer), size);
Py_END_ALLOW_THREADS
if (n < 0) {
Py_DECREF(buffer);
return posix_error();
}
if (n != size)
- _PyString_Resize(&buffer, n);
+ _PyBytes_Resize(&buffer, n);
return buffer;
}
@@ -6647,11 +6647,11 @@
/* XXX This can leak memory -- not easy to fix :-( */
len = strlen(s1) + strlen(s2) + 2;
/* len includes space for a trailing \0; the size arg to
- PyString_FromStringAndSize does not count that */
- newstr = PyString_FromStringAndSize(NULL, (int)len - 1);
+ PyBytes_FromStringAndSize does not count that */
+ newstr = PyBytes_FromStringAndSize(NULL, (int)len - 1);
if (newstr == NULL)
return PyErr_NoMemory();
- newenv = PyString_AS_STRING(newstr);
+ newenv = PyBytes_AS_STRING(newstr);
PyOS_snprintf(newenv, len, "%s=%s", s1, s2);
if (putenv(newenv)) {
Py_DECREF(newstr);
@@ -6727,7 +6727,7 @@
"strerror() argument out of range");
return NULL;
}
- return PyString_FromString(message);
+ return PyBytes_FromString(message);
}
@@ -7009,7 +7009,7 @@
#endif
if (name == NULL)
return PyErr_NoMemory();
- result = PyString_FromString(name);
+ result = PyBytes_FromString(name);
free(name);
return result;
}
@@ -7066,7 +7066,7 @@
Py_XDECREF(err);
return NULL;
}
- return PyString_FromString(buffer);
+ return PyBytes_FromString(buffer);
}
#endif
@@ -7095,13 +7095,13 @@
*valuep = PyInt_AS_LONG(arg);
return 1;
}
- if (PyString_Check(arg)) {
+ if (PyBytes_Check(arg)) {
/* look up the value in the table using a binary search */
size_t lo = 0;
size_t mid;
size_t hi = tablesize;
int cmp;
- char *confname = PyString_AS_STRING(arg);
+ char *confname = PyBytes_AS_STRING(arg);
while (lo < hi) {
mid = (lo + hi) / 2;
cmp = strcmp(confname, table[mid].name);
@@ -7431,12 +7431,12 @@
}
else {
if ((unsigned int)len >= sizeof(buffer)) {
- result = PyString_FromStringAndSize(NULL, len-1);
+ result = PyBytes_FromStringAndSize(NULL, len-1);
if (result != NULL)
- confstr(name, PyString_AS_STRING(result), len);
+ confstr(name, PyBytes_AS_STRING(result), len);
}
else
- result = PyString_FromStringAndSize(buffer, len-1);
+ result = PyBytes_FromStringAndSize(buffer, len-1);
}
}
return result;
@@ -8225,11 +8225,11 @@
}
/* Allocate bytes */
- result = PyString_FromStringAndSize(NULL, howMany);
+ result = PyBytes_FromStringAndSize(NULL, howMany);
if (result != NULL) {
/* Get random data */
if (! pCryptGenRandom(hCryptProv, howMany, (unsigned char*)
- PyString_AS_STRING(result))) {
+ PyBytes_AS_STRING(result))) {
Py_DECREF(result);
return win32_error("CryptGenRandom", NULL);
}
@@ -8259,11 +8259,11 @@
"negative argument not allowed");
/* Allocate bytes */
- result = PyString_FromStringAndSize(NULL, howMany);
+ result = PyBytes_FromStringAndSize(NULL, howMany);
if (result != NULL) {
/* Get random data */
if (RAND_pseudo_bytes((unsigned char*)
- PyString_AS_STRING(result),
+ PyBytes_AS_STRING(result),
howMany) < 0) {
Py_DECREF(result);
return PyErr_Format(PyExc_ValueError,
Modified: python/branches/tlee-ast-optimize/Modules/pwdmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/pwdmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/pwdmodule.c Sun Jun 1 17:18:10 2008
@@ -49,7 +49,7 @@
sets(PyObject *v, int i, char* val)
{
if (val)
- PyStructSequence_SET_ITEM(v, i, PyString_FromString(val));
+ PyStructSequence_SET_ITEM(v, i, PyBytes_FromString(val));
else {
PyStructSequence_SET_ITEM(v, i, Py_None);
Py_INCREF(Py_None);
Modified: python/branches/tlee-ast-optimize/Modules/pyexpat.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/pyexpat.c (original)
+++ python/branches/tlee-ast-optimize/Modules/pyexpat.c Sun Jun 1 17:18:10 2008
@@ -153,7 +153,7 @@
{
PyObject *name = hinfo->nameobj;
if (name == NULL) {
- name = PyString_FromString(hinfo->name);
+ name = PyBytes_FromString(hinfo->name);
hinfo->nameobj = name;
}
Py_XINCREF(name);
@@ -205,7 +205,7 @@
Py_INCREF(Py_None);
return Py_None;
}
- return PyString_FromString(str);
+ return PyBytes_FromString(str);
}
static PyObject *
@@ -218,7 +218,7 @@
Py_INCREF(Py_None);
return Py_None;
}
- return PyString_FromStringAndSize((const char *)str, len);
+ return PyBytes_FromStringAndSize((const char *)str, len);
}
/* Callback routines */
@@ -267,16 +267,16 @@
PyObject *filename = NULL;
if (handler_info[slot].tb_code == NULL) {
- code = PyString_FromString("");
+ code = PyBytes_FromString("");
if (code == NULL)
goto failed;
- name = PyString_FromString(func_name);
+ name = PyBytes_FromString(func_name);
if (name == NULL)
goto failed;
nulltuple = PyTuple_New(0);
if (nulltuple == NULL)
goto failed;
- filename = PyString_FromString(__FILE__);
+ filename = PyBytes_FromString(__FILE__);
handler_info[slot].tb_code =
PyCode_New(0, /* argcount */
0, /* nlocals */
@@ -971,13 +971,13 @@
goto finally;
/* XXX what to do if it returns a Unicode string? */
- if (!PyString_Check(str)) {
+ if (!PyBytes_Check(str)) {
PyErr_Format(PyExc_TypeError,
"read() did not return a string object (type=%.400s)",
Py_TYPE(str)->tp_name);
goto finally;
}
- len = PyString_GET_SIZE(str);
+ len = PyBytes_GET_SIZE(str);
if (len > buf_size) {
PyErr_Format(PyExc_ValueError,
"read() returned too much data: "
@@ -985,7 +985,7 @@
buf_size, len);
goto finally;
}
- memcpy(buf, PyString_AsString(str), len);
+ memcpy(buf, PyBytes_AsString(str), len);
finally:
Py_XDECREF(arg);
Py_XDECREF(str);
@@ -1094,7 +1094,7 @@
= XML_GetInputContext(self->itself, &offset, &size);
if (buffer != NULL)
- return PyString_FromStringAndSize(buffer + offset,
+ return PyBytes_FromStringAndSize(buffer + offset,
size - offset);
else
Py_RETURN_NONE;
@@ -1511,7 +1511,7 @@
#define APPEND(list, str) \
do { \
- PyObject *o = PyString_FromString(str); \
+ PyObject *o = PyBytes_FromString(str); \
if (o != NULL) \
PyList_Append(list, o); \
Py_XDECREF(o); \
@@ -1862,7 +1862,7 @@
while (rev[i] != ' ' && rev[i] != '\0')
++i;
- return PyString_FromStringAndSize(rev, i);
+ return PyBytes_FromStringAndSize(rev, i);
}
/* Initialization function for the module */
@@ -1889,7 +1889,7 @@
MODULE_INITFUNC(void)
{
PyObject *m, *d;
- PyObject *errmod_name = PyString_FromString(MODULE_NAME ".errors");
+ PyObject *errmod_name = PyBytes_FromString(MODULE_NAME ".errors");
PyObject *errors_module;
PyObject *modelmod_name;
PyObject *model_module;
@@ -1899,7 +1899,7 @@
if (errmod_name == NULL)
return;
- modelmod_name = PyString_FromString(MODULE_NAME ".model");
+ modelmod_name = PyBytes_FromString(MODULE_NAME ".model");
if (modelmod_name == NULL)
return;
Modified: python/branches/tlee-ast-optimize/Modules/readline.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/readline.c (original)
+++ python/branches/tlee-ast-optimize/Modules/readline.c Sun Jun 1 17:18:10 2008
@@ -421,7 +421,7 @@
static PyObject *
get_completer_delims(PyObject *self, PyObject *noarg)
{
- return PyString_FromString(rl_completer_word_break_characters);
+ return PyBytes_FromString(rl_completer_word_break_characters);
}
PyDoc_STRVAR(doc_get_completer_delims,
@@ -471,7 +471,7 @@
if (!PyArg_ParseTuple(args, "i:index", &idx))
return NULL;
if ((hist_ent = history_get(idx)))
- return PyString_FromString(hist_ent->line);
+ return PyBytes_FromString(hist_ent->line);
else {
Py_RETURN_NONE;
}
@@ -503,7 +503,7 @@
static PyObject *
get_line_buffer(PyObject *self, PyObject *noarg)
{
- return PyString_FromString(rl_line_buffer);
+ return PyBytes_FromString(rl_line_buffer);
}
PyDoc_STRVAR(doc_get_line_buffer,
@@ -676,7 +676,7 @@
if (m == NULL)
goto error;
for (i = 0; i < num_matches; i++) {
- s = PyString_FromString(matches[i+1]);
+ s = PyBytes_FromString(matches[i+1]);
if (s == NULL)
goto error;
if (PyList_SetItem(m, i, s) == -1)
@@ -725,7 +725,7 @@
result = NULL;
}
else {
- char *s = PyString_AsString(r);
+ char *s = PyBytes_AsString(r);
if (s == NULL)
goto error;
result = strdup(s);
Modified: python/branches/tlee-ast-optimize/Modules/selectmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/selectmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/selectmodule.c Sun Jun 1 17:18:10 2008
@@ -1219,7 +1219,7 @@
"data=0x%lx udata=%p>",
(unsigned long)(s->e.ident), s->e.filter, s->e.flags,
s->e.fflags, (long)(s->e.data), s->e.udata);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
static int
Modified: python/branches/tlee-ast-optimize/Modules/sha256module.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/sha256module.c (original)
+++ python/branches/tlee-ast-optimize/Modules/sha256module.c Sun Jun 1 17:18:10 2008
@@ -432,7 +432,7 @@
SHAcopy(self, &temp);
sha_final(digest, &temp);
- return PyString_FromStringAndSize((const char *)digest, self->digestsize);
+ return PyBytes_FromStringAndSize((const char *)digest, self->digestsize);
}
PyDoc_STRVAR(SHA256_hexdigest__doc__,
@@ -452,10 +452,10 @@
sha_final(digest, &temp);
/* Create a new string */
- retval = PyString_FromStringAndSize(NULL, self->digestsize * 2);
+ retval = PyBytes_FromStringAndSize(NULL, self->digestsize * 2);
if (!retval)
return NULL;
- hex_digest = PyString_AsString(retval);
+ hex_digest = PyBytes_AsString(retval);
if (!hex_digest) {
Py_DECREF(retval);
return NULL;
@@ -510,9 +510,9 @@
SHA256_get_name(PyObject *self, void *closure)
{
if (((SHAobject *)self)->digestsize == 32)
- return PyString_FromStringAndSize("SHA256", 6);
+ return PyBytes_FromStringAndSize("SHA256", 6);
else
- return PyString_FromStringAndSize("SHA224", 6);
+ return PyBytes_FromStringAndSize("SHA224", 6);
}
static PyGetSetDef SHA_getseters[] = {
Modified: python/branches/tlee-ast-optimize/Modules/sha512module.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/sha512module.c (original)
+++ python/branches/tlee-ast-optimize/Modules/sha512module.c Sun Jun 1 17:18:10 2008
@@ -498,7 +498,7 @@
SHAcopy(self, &temp);
sha512_final(digest, &temp);
- return PyString_FromStringAndSize((const char *)digest, self->digestsize);
+ return PyBytes_FromStringAndSize((const char *)digest, self->digestsize);
}
PyDoc_STRVAR(SHA512_hexdigest__doc__,
@@ -518,10 +518,10 @@
sha512_final(digest, &temp);
/* Create a new string */
- retval = PyString_FromStringAndSize(NULL, self->digestsize * 2);
+ retval = PyBytes_FromStringAndSize(NULL, self->digestsize * 2);
if (!retval)
return NULL;
- hex_digest = PyString_AsString(retval);
+ hex_digest = PyBytes_AsString(retval);
if (!hex_digest) {
Py_DECREF(retval);
return NULL;
@@ -576,9 +576,9 @@
SHA512_get_name(PyObject *self, void *closure)
{
if (((SHAobject *)self)->digestsize == 64)
- return PyString_FromStringAndSize("SHA512", 6);
+ return PyBytes_FromStringAndSize("SHA512", 6);
else
- return PyString_FromStringAndSize("SHA384", 6);
+ return PyBytes_FromStringAndSize("SHA384", 6);
}
static PyGetSetDef SHA_getseters[] = {
Modified: python/branches/tlee-ast-optimize/Modules/shamodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/shamodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/shamodule.c Sun Jun 1 17:18:10 2008
@@ -380,7 +380,7 @@
SHAcopy(self, &temp);
sha_final(digest, &temp);
- return PyString_FromStringAndSize((const char *)digest, sizeof(digest));
+ return PyBytes_FromStringAndSize((const char *)digest, sizeof(digest));
}
PyDoc_STRVAR(SHA_hexdigest__doc__,
@@ -400,10 +400,10 @@
sha_final(digest, &temp);
/* Create a new string */
- retval = PyString_FromStringAndSize(NULL, sizeof(digest) * 2);
+ retval = PyBytes_FromStringAndSize(NULL, sizeof(digest) * 2);
if (!retval)
return NULL;
- hex_digest = PyString_AsString(retval);
+ hex_digest = PyBytes_AsString(retval);
if (!hex_digest) {
Py_DECREF(retval);
return NULL;
@@ -463,7 +463,7 @@
static PyObject *
SHA_get_name(PyObject *self, void *closure)
{
- return PyString_FromStringAndSize("SHA1", 4);
+ return PyBytes_FromStringAndSize("SHA1", 4);
}
static PyGetSetDef SHA_getseters[] = {
Modified: python/branches/tlee-ast-optimize/Modules/socketmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/socketmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/socketmodule.c Sun Jun 1 17:18:10 2008
@@ -911,7 +911,7 @@
set_gaierror(error);
return NULL;
}
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
@@ -955,7 +955,7 @@
sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X",
bdaddr->b[5], bdaddr->b[4], bdaddr->b[3],
bdaddr->b[2], bdaddr->b[1], bdaddr->b[0]);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
#endif
@@ -1002,14 +1002,14 @@
#ifdef linux
if (a->sun_path[0] == 0) { /* Linux abstract namespace */
addrlen -= offsetof(struct sockaddr_un, sun_path);
- return PyString_FromStringAndSize(a->sun_path,
+ return PyBytes_FromStringAndSize(a->sun_path,
addrlen);
}
else
#endif /* linux */
{
/* regular NULL-terminated string */
- return PyString_FromString(a->sun_path);
+ return PyBytes_FromString(a->sun_path);
}
}
#endif /* AF_UNIX */
@@ -1362,7 +1362,7 @@
addr = (struct sockaddr_sco *)addr_ret;
_BT_SCO_MEMB(addr, family) = AF_BLUETOOTH;
- straddr = PyString_AsString(args);
+ straddr = PyBytes_AsString(args);
if (straddr == NULL) {
PyErr_SetString(socket_error, "getsockaddrarg: "
"wrong format");
@@ -1854,16 +1854,16 @@
"getsockopt buflen out of range");
return NULL;
}
- buf = PyString_FromStringAndSize((char *)NULL, buflen);
+ buf = PyBytes_FromStringAndSize((char *)NULL, buflen);
if (buf == NULL)
return NULL;
res = getsockopt(s->sock_fd, level, optname,
- (void *)PyString_AS_STRING(buf), &buflen);
+ (void *)PyBytes_AS_STRING(buf), &buflen);
if (res < 0) {
Py_DECREF(buf);
return s->errorhandler();
}
- _PyString_Resize(&buf, buflen);
+ _PyBytes_Resize(&buf, buflen);
return buf;
#endif /* __BEOS__ */
}
@@ -2386,12 +2386,12 @@
}
/* Allocate a new string. */
- buf = PyString_FromStringAndSize((char *) 0, recvlen);
+ buf = PyBytes_FromStringAndSize((char *) 0, recvlen);
if (buf == NULL)
return NULL;
/* Call the guts */
- outlen = sock_recv_guts(s, PyString_AS_STRING(buf), recvlen, flags);
+ outlen = sock_recv_guts(s, PyBytes_AS_STRING(buf), recvlen, flags);
if (outlen < 0) {
/* An error occurred, release the string and return an
error. */
@@ -2401,7 +2401,7 @@
if (outlen != recvlen) {
/* We did not read as many bytes as we anticipated, resize the
string if possible and be succesful. */
- if (_PyString_Resize(&buf, outlen) < 0)
+ if (_PyBytes_Resize(&buf, outlen) < 0)
/* Oopsy, not so succesful after all. */
return NULL;
}
@@ -2560,11 +2560,11 @@
return NULL;
}
- buf = PyString_FromStringAndSize((char *) 0, recvlen);
+ buf = PyBytes_FromStringAndSize((char *) 0, recvlen);
if (buf == NULL)
return NULL;
- outlen = sock_recvfrom_guts(s, PyString_AS_STRING(buf),
+ outlen = sock_recvfrom_guts(s, PyBytes_AS_STRING(buf),
recvlen, flags, &addr);
if (outlen < 0) {
goto finally;
@@ -2573,7 +2573,7 @@
if (outlen != recvlen) {
/* We did not read as many bytes as we anticipated, resize the
string if possible and be succesful. */
- if (_PyString_Resize(&buf, outlen) < 0)
+ if (_PyBytes_Resize(&buf, outlen) < 0)
/* Oopsy, not so succesful after all. */
goto finally;
}
@@ -2941,7 +2941,7 @@
(long)s->sock_fd, s->sock_family,
s->sock_type,
s->sock_proto);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
@@ -3057,7 +3057,7 @@
if (res < 0)
return set_error();
buf[sizeof buf - 1] = '\0';
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
PyDoc_STRVAR(gethostname_doc,
@@ -3143,7 +3143,7 @@
if (h->h_aliases) {
for (pch = h->h_aliases; *pch != NULL; pch++) {
int status;
- tmp = PyString_FromString(*pch);
+ tmp = PyBytes_FromString(*pch);
if (tmp == NULL)
goto err;
@@ -3432,7 +3432,7 @@
PyErr_SetString(socket_error, "port/proto not found");
return NULL;
}
- return PyString_FromString(sp->s_name);
+ return PyBytes_FromString(sp->s_name);
}
PyDoc_STRVAR(getservbyport_doc,
@@ -3734,7 +3734,7 @@
if (inet_aton != NULL) {
#endif
if (inet_aton(ip_addr, &buf))
- return PyString_FromStringAndSize((char *)(&buf),
+ return PyBytes_FromStringAndSize((char *)(&buf),
sizeof(buf));
PyErr_SetString(socket_error,
@@ -3763,7 +3763,7 @@
return NULL;
}
}
- return PyString_FromStringAndSize((char *) &packed_addr,
+ return PyBytes_FromStringAndSize((char *) &packed_addr,
sizeof(packed_addr));
#ifdef USE_INET_ATON_WEAKLINK
@@ -3797,7 +3797,7 @@
memcpy(&packed_addr, packed_str, addr_len);
- return PyString_FromString(inet_ntoa(packed_addr));
+ return PyBytes_FromString(inet_ntoa(packed_addr));
}
#ifdef HAVE_INET_PTON
@@ -3840,11 +3840,11 @@
"illegal IP address string passed to inet_pton");
return NULL;
} else if (af == AF_INET) {
- return PyString_FromStringAndSize(packed,
+ return PyBytes_FromStringAndSize(packed,
sizeof(struct in_addr));
#ifdef ENABLE_IPV6
} else if (af == AF_INET6) {
- return PyString_FromStringAndSize(packed,
+ return PyBytes_FromStringAndSize(packed,
sizeof(struct in6_addr));
#endif
} else {
@@ -3871,7 +3871,7 @@
char ip[INET_ADDRSTRLEN + 1];
#endif
- /* Guarantee NUL-termination for PyString_FromString() below */
+ /* Guarantee NUL-termination for PyBytes_FromString() below */
memset((void *) &ip[0], '\0', sizeof(ip));
if (!PyArg_ParseTuple(args, "is#:inet_ntop", &af, &packed, &len)) {
@@ -3903,7 +3903,7 @@
PyErr_SetFromErrno(socket_error);
return NULL;
} else {
- return PyString_FromString(retval);
+ return PyBytes_FromString(retval);
}
/* NOTREACHED */
@@ -3944,9 +3944,9 @@
idna = PyObject_CallMethod(hobj, "encode", "s", "idna");
if (!idna)
return NULL;
- hptr = PyString_AsString(idna);
- } else if (PyString_Check(hobj)) {
- hptr = PyString_AsString(hobj);
+ hptr = PyBytes_AsString(idna);
+ } else if (PyBytes_Check(hobj)) {
+ hptr = PyBytes_AsString(hobj);
} else {
PyErr_SetString(PyExc_TypeError,
"getaddrinfo() argument 1 must be string or None");
@@ -3955,8 +3955,8 @@
if (PyInt_Check(pobj)) {
PyOS_snprintf(pbuf, sizeof(pbuf), "%ld", PyInt_AsLong(pobj));
pptr = pbuf;
- } else if (PyString_Check(pobj)) {
- pptr = PyString_AsString(pobj);
+ } else if (PyBytes_Check(pobj)) {
+ pptr = PyBytes_AsString(pobj);
} else if (pobj == Py_None) {
pptr = (char *)NULL;
} else {
Modified: python/branches/tlee-ast-optimize/Modules/spwdmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/spwdmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/spwdmodule.c Sun Jun 1 17:18:10 2008
@@ -60,7 +60,7 @@
sets(PyObject *v, int i, char* val)
{
if (val)
- PyStructSequence_SET_ITEM(v, i, PyString_FromString(val));
+ PyStructSequence_SET_ITEM(v, i, PyBytes_FromString(val));
else {
PyStructSequence_SET_ITEM(v, i, Py_None);
Py_INCREF(Py_None);
Modified: python/branches/tlee-ast-optimize/Modules/stropmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/stropmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/stropmodule.c Sun Jun 1 17:18:10 2008
@@ -47,7 +47,7 @@
i = i+1;
}
if (j < i) {
- item = PyString_FromStringAndSize(s+j, i-j);
+ item = PyBytes_FromStringAndSize(s+j, i-j);
if (item == NULL)
goto finally;
@@ -61,7 +61,7 @@
i = i+1;
}
if (maxsplit && (countsplit >= maxsplit) && i < len) {
- item = PyString_FromStringAndSize(
+ item = PyBytes_FromStringAndSize(
s+i, len - i);
if (item == NULL)
goto finally;
@@ -122,7 +122,7 @@
i = j = 0;
while (i+n <= len) {
if (s[i] == sub[0] && (n == 1 || memcmp(s+i, sub, n) == 0)) {
- item = PyString_FromStringAndSize(s+j, i-j);
+ item = PyBytes_FromStringAndSize(s+j, i-j);
if (item == NULL)
goto fail;
err = PyList_Append(list, item);
@@ -137,7 +137,7 @@
else
i++;
}
- item = PyString_FromStringAndSize(s+j, len-j);
+ item = PyBytes_FromStringAndSize(s+j, len-j);
if (item == NULL)
goto fail;
err = PyList_Append(list, item);
@@ -189,7 +189,7 @@
if (seqlen == 1) {
/* Optimization if there's only one item */
PyObject *item = PySequence_GetItem(seq, 0);
- if (item && !PyString_Check(item)) {
+ if (item && !PyBytes_Check(item)) {
PyErr_SetString(PyExc_TypeError,
"first argument must be sequence of strings");
Py_DECREF(item);
@@ -198,9 +198,9 @@
return item;
}
- if (!(res = PyString_FromStringAndSize((char*)NULL, sz)))
+ if (!(res = PyBytes_FromStringAndSize((char*)NULL, sz)))
return NULL;
- p = PyString_AsString(res);
+ p = PyBytes_AsString(res);
/* optimize for lists, since it's the most common case. all others
* (tuples and arbitrary sequences) just use the sequence abstract
@@ -209,29 +209,29 @@
if (PyList_Check(seq)) {
for (i = 0; i < seqlen; i++) {
PyObject *item = PyList_GET_ITEM(seq, i);
- if (!PyString_Check(item)) {
+ if (!PyBytes_Check(item)) {
PyErr_SetString(PyExc_TypeError,
"first argument must be sequence of strings");
Py_DECREF(res);
return NULL;
}
- slen = PyString_GET_SIZE(item);
+ slen = PyBytes_GET_SIZE(item);
while (reslen + slen + seplen >= sz) {
- if (_PyString_Resize(&res, sz * 2) < 0)
+ if (_PyBytes_Resize(&res, sz * 2) < 0)
return NULL;
sz *= 2;
- p = PyString_AsString(res) + reslen;
+ p = PyBytes_AsString(res) + reslen;
}
if (i > 0) {
memcpy(p, sep, seplen);
p += seplen;
reslen += seplen;
}
- memcpy(p, PyString_AS_STRING(item), slen);
+ memcpy(p, PyBytes_AS_STRING(item), slen);
p += slen;
reslen += slen;
}
- _PyString_Resize(&res, reslen);
+ _PyBytes_Resize(&res, reslen);
return res;
}
@@ -245,33 +245,33 @@
/* This is now type safe */
for (i = 0; i < seqlen; i++) {
PyObject *item = getitemfunc(seq, i);
- if (!item || !PyString_Check(item)) {
+ if (!item || !PyBytes_Check(item)) {
PyErr_SetString(PyExc_TypeError,
"first argument must be sequence of strings");
Py_DECREF(res);
Py_XDECREF(item);
return NULL;
}
- slen = PyString_GET_SIZE(item);
+ slen = PyBytes_GET_SIZE(item);
while (reslen + slen + seplen >= sz) {
- if (_PyString_Resize(&res, sz * 2) < 0) {
+ if (_PyBytes_Resize(&res, sz * 2) < 0) {
Py_DECREF(item);
return NULL;
}
sz *= 2;
- p = PyString_AsString(res) + reslen;
+ p = PyBytes_AsString(res) + reslen;
}
if (i > 0) {
memcpy(p, sep, seplen);
p += seplen;
reslen += seplen;
}
- memcpy(p, PyString_AS_STRING(item), slen);
+ memcpy(p, PyBytes_AS_STRING(item), slen);
p += slen;
reslen += slen;
Py_DECREF(item);
}
- _PyString_Resize(&res, reslen);
+ _PyBytes_Resize(&res, reslen);
return res;
}
@@ -369,7 +369,7 @@
Py_ssize_t len, i, j;
- if (PyString_AsStringAndSize(args, &s, &len))
+ if (PyBytes_AsStringAndSize(args, &s, &len))
return NULL;
i = 0;
@@ -392,7 +392,7 @@
return args;
}
else
- return PyString_FromStringAndSize(s+i, j-i);
+ return PyBytes_FromStringAndSize(s+i, j-i);
}
@@ -450,12 +450,12 @@
int changed;
WARN;
- if (PyString_AsStringAndSize(args, &s, &n))
+ if (PyBytes_AsStringAndSize(args, &s, &n))
return NULL;
- newstr = PyString_FromStringAndSize(NULL, n);
+ newstr = PyBytes_FromStringAndSize(NULL, n);
if (newstr == NULL)
return NULL;
- s_new = PyString_AsString(newstr);
+ s_new = PyBytes_AsString(newstr);
changed = 0;
for (i = 0; i < n; i++) {
int c = Py_CHARMASK(*s++);
@@ -489,12 +489,12 @@
int changed;
WARN;
- if (PyString_AsStringAndSize(args, &s, &n))
+ if (PyBytes_AsStringAndSize(args, &s, &n))
return NULL;
- newstr = PyString_FromStringAndSize(NULL, n);
+ newstr = PyBytes_FromStringAndSize(NULL, n);
if (newstr == NULL)
return NULL;
- s_new = PyString_AsString(newstr);
+ s_new = PyBytes_AsString(newstr);
changed = 0;
for (i = 0; i < n; i++) {
int c = Py_CHARMASK(*s++);
@@ -529,12 +529,12 @@
int changed;
WARN;
- if (PyString_AsStringAndSize(args, &s, &n))
+ if (PyBytes_AsStringAndSize(args, &s, &n))
return NULL;
- newstr = PyString_FromStringAndSize(NULL, n);
+ newstr = PyBytes_FromStringAndSize(NULL, n);
if (newstr == NULL)
return NULL;
- s_new = PyString_AsString(newstr);
+ s_new = PyBytes_AsString(newstr);
changed = 0;
if (0 < n) {
int c = Py_CHARMASK(*s++);
@@ -610,12 +610,12 @@
}
/* Second pass: create output string and fill it */
- out = PyString_FromStringAndSize(NULL, i+j);
+ out = PyBytes_FromStringAndSize(NULL, i+j);
if (out == NULL)
return NULL;
i = 0;
- q = PyString_AS_STRING(out);
+ q = PyBytes_AS_STRING(out);
for (p = string; p < e; p++) {
if (*p == '\t') {
@@ -695,12 +695,12 @@
int changed;
WARN;
- if (PyString_AsStringAndSize(args, &s, &n))
+ if (PyBytes_AsStringAndSize(args, &s, &n))
return NULL;
- newstr = PyString_FromStringAndSize(NULL, n);
+ newstr = PyBytes_FromStringAndSize(NULL, n);
if (newstr == NULL)
return NULL;
- s_new = PyString_AsString(newstr);
+ s_new = PyBytes_AsString(newstr);
changed = 0;
for (i = 0; i < n; i++) {
int c = Py_CHARMASK(*s++);
@@ -898,10 +898,10 @@
return NULL;
}
- result = PyString_FromStringAndSize((char *)NULL, 256);
+ result = PyBytes_FromStringAndSize((char *)NULL, 256);
if (result == NULL)
return NULL;
- c = (unsigned char *) PyString_AS_STRING((PyStringObject *)result);
+ c = (unsigned char *) PyBytes_AS_STRING((PyBytesObject *)result);
for (i = 0; i < 256; i++)
c[i]=(unsigned char)i;
for (i = 0; i < fromlen; i++)
@@ -942,12 +942,12 @@
}
table = table1;
- inlen = PyString_GET_SIZE(input_obj);
- result = PyString_FromStringAndSize((char *)NULL, inlen);
+ inlen = PyBytes_GET_SIZE(input_obj);
+ result = PyBytes_FromStringAndSize((char *)NULL, inlen);
if (result == NULL)
return NULL;
- output_start = output = PyString_AsString(result);
- input = PyString_AsString(input_obj);
+ output_start = output = PyBytes_AsString(result);
+ input = PyBytes_AsString(input_obj);
if (dellen == 0) {
/* If no deletions are required, use faster code */
@@ -983,7 +983,7 @@
}
/* Fix the size of the resulting string */
if (inlen > 0)
- _PyString_Resize(&result, output - output_start);
+ _PyBytes_Resize(&result, output - output_start);
return result;
}
@@ -1169,7 +1169,7 @@
Py_XINCREF(newstr);
}
else {
- newstr = PyString_FromStringAndSize(new_s, out_len);
+ newstr = PyBytes_FromStringAndSize(new_s, out_len);
PyMem_FREE(new_s);
}
return newstr;
@@ -1222,7 +1222,7 @@
if (isspace(c))
buf[n++] = c;
}
- s = PyString_FromStringAndSize(buf, n);
+ s = PyBytes_FromStringAndSize(buf, n);
if (s)
PyModule_AddObject(m, "whitespace", s);
@@ -1232,7 +1232,7 @@
if (islower(c))
buf[n++] = c;
}
- s = PyString_FromStringAndSize(buf, n);
+ s = PyBytes_FromStringAndSize(buf, n);
if (s)
PyModule_AddObject(m, "lowercase", s);
@@ -1242,7 +1242,7 @@
if (isupper(c))
buf[n++] = c;
}
- s = PyString_FromStringAndSize(buf, n);
+ s = PyBytes_FromStringAndSize(buf, n);
if (s)
PyModule_AddObject(m, "uppercase", s);
}
Modified: python/branches/tlee-ast-optimize/Modules/sunaudiodev.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/sunaudiodev.c (original)
+++ python/branches/tlee-ast-optimize/Modules/sunaudiodev.c Sun Jun 1 17:18:10 2008
@@ -135,11 +135,11 @@
if (!PyArg_ParseTuple(args, "i:read", &size))
return NULL;
- rv = PyString_FromStringAndSize(NULL, size);
+ rv = PyBytes_FromStringAndSize(NULL, size);
if (rv == NULL)
return NULL;
- if (!(cp = PyString_AsString(rv)))
+ if (!(cp = PyBytes_AsString(rv)))
goto finally;
count = read(self->x_fd, cp, size);
Modified: python/branches/tlee-ast-optimize/Modules/svmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/svmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/svmodule.c Sun Jun 1 17:18:10 2008
@@ -47,13 +47,13 @@
if (!PyArg_Parse(args, "i", &invert))
return NULL;
- if (!(output = PyString_FromStringAndSize(
+ if (!(output = PyBytes_FromStringAndSize(
NULL,
(int)(self->ob_info.width * self->ob_info.height * factor))))
{
return NULL;
}
- if (!(outstr = PyString_AsString(output))) {
+ if (!(outstr = PyBytes_AsString(output))) {
Py_DECREF(output);
return NULL;
}
@@ -152,9 +152,9 @@
fieldsize = self->ob_info.width * self->ob_info.height / 2;
obcapture = (char*)self->ob_capture;
- if (!(f1 = PyString_FromStringAndSize(obcapture, fieldsize)))
+ if (!(f1 = PyBytes_FromStringAndSize(obcapture, fieldsize)))
goto finally;
- if (!(f2 = PyString_FromStringAndSize(obcapture + fieldsize,
+ if (!(f2 = PyBytes_FromStringAndSize(obcapture + fieldsize,
fieldsize)))
goto finally;
ret = PyTuple_Pack(2, f1, f2);
@@ -535,12 +535,12 @@
goto finally;
}
- if (!(videodata = PyString_FromStringAndSize(NULL, bytes)))
+ if (!(videodata = PyBytes_FromStringAndSize(NULL, bytes)))
goto finally;
/* XXX -- need to do something about the bitvector */
{
- char* str = PyString_AsString(videodata);
+ char* str = PyBytes_AsString(videodata);
if (!str)
goto finally;
@@ -615,10 +615,10 @@
if (svQueryCaptureBufferSize(self->ob_svideo, &info, &bytes))
return sv_error();
- if (!(videodata = PyString_FromStringAndSize(NULL, bytes)))
+ if (!(videodata = PyBytes_FromStringAndSize(NULL, bytes)))
return NULL;
- str = PyString_AsString(videodata);
+ str = PyBytes_AsString(videodata);
if (!str)
goto finally;
@@ -849,11 +849,11 @@
return NULL;
}
- if (!(output = PyString_FromStringAndSize(NULL,
+ if (!(output = PyBytes_FromStringAndSize(NULL,
(int)(width * height * factor))))
return NULL;
- str = PyString_AsString(output);
+ str = PyBytes_AsString(output);
if (!str) {
Py_DECREF(output);
return NULL;
Modified: python/branches/tlee-ast-optimize/Modules/syslogmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/syslogmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/syslogmodule.c Sun Jun 1 17:18:10 2008
@@ -71,7 +71,7 @@
S_ident_o = new_S_ident_o;
Py_INCREF(S_ident_o);
- openlog(PyString_AsString(S_ident_o), logopt, facility);
+ openlog(PyBytes_AsString(S_ident_o), logopt, facility);
Py_INCREF(Py_None);
return Py_None;
Modified: python/branches/tlee-ast-optimize/Modules/termios.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/termios.c (original)
+++ python/branches/tlee-ast-optimize/Modules/termios.c Sun Jun 1 17:18:10 2008
@@ -91,7 +91,7 @@
return NULL;
for (i = 0; i < NCCS; i++) {
ch = (char)mode.c_cc[i];
- v = PyString_FromStringAndSize(&ch, 1);
+ v = PyBytes_FromStringAndSize(&ch, 1);
if (v == NULL)
goto err;
PyList_SetItem(cc, i, v);
@@ -183,8 +183,8 @@
for (i = 0; i < NCCS; i++) {
v = PyList_GetItem(cc, i);
- if (PyString_Check(v) && PyString_Size(v) == 1)
- mode.c_cc[i] = (cc_t) * PyString_AsString(v);
+ if (PyBytes_Check(v) && PyBytes_Size(v) == 1)
+ mode.c_cc[i] = (cc_t) * PyBytes_AsString(v);
else if (PyInt_Check(v))
mode.c_cc[i] = (cc_t) PyInt_AsLong(v);
else {
Modified: python/branches/tlee-ast-optimize/Modules/threadmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/threadmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/threadmodule.c Sun Jun 1 17:18:10 2008
@@ -190,7 +190,7 @@
Py_XINCREF(kw);
self->kw = kw;
self->dict = NULL; /* making sure */
- self->key = PyString_FromFormat("thread.local.%p", self);
+ self->key = PyBytes_FromFormat("thread.local.%p", self);
if (self->key == NULL)
goto err;
Modified: python/branches/tlee-ast-optimize/Modules/timemodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/timemodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/timemodule.c Sun Jun 1 17:18:10 2008
@@ -488,7 +488,7 @@
e.g. an empty format, or %Z when the timezone
is unknown. */
PyObject *ret;
- ret = PyString_FromStringAndSize(outbuf, buflen);
+ ret = PyBytes_FromStringAndSize(outbuf, buflen);
free(outbuf);
return ret;
}
@@ -548,7 +548,7 @@
p = asctime(&buf);
if (p[24] == '\n')
p[24] = '\0';
- return PyString_FromString(p);
+ return PyBytes_FromString(p);
}
PyDoc_STRVAR(asctime_doc,
@@ -584,7 +584,7 @@
}
if (p[24] == '\n')
p[24] = '\0';
- return PyString_FromString(p);
+ return PyBytes_FromString(p);
}
PyDoc_STRVAR(ctime_doc,
Modified: python/branches/tlee-ast-optimize/Modules/unicodedata.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/unicodedata.c (original)
+++ python/branches/tlee-ast-optimize/Modules/unicodedata.c Sun Jun 1 17:18:10 2008
@@ -258,7 +258,7 @@
if (old->category_changed != 0xFF)
index = old->category_changed;
}
- return PyString_FromString(_PyUnicode_CategoryNames[index]);
+ return PyBytes_FromString(_PyUnicode_CategoryNames[index]);
}
PyDoc_STRVAR(unicodedata_bidirectional__doc__,
@@ -290,7 +290,7 @@
else if (old->bidir_changed != 0xFF)
index = old->bidir_changed;
}
- return PyString_FromString(_PyUnicode_BidirectionalNames[index]);
+ return PyBytes_FromString(_PyUnicode_BidirectionalNames[index]);
}
PyDoc_STRVAR(unicodedata_combining__doc__,
@@ -379,7 +379,7 @@
if (old->category_changed == 0)
index = 0; /* unassigned */
}
- return PyString_FromString(_PyUnicode_EastAsianWidthNames[index]);
+ return PyBytes_FromString(_PyUnicode_EastAsianWidthNames[index]);
}
PyDoc_STRVAR(unicodedata_decomposition__doc__,
@@ -411,7 +411,7 @@
if (self) {
const change_record *old = get_old_record(self, *PyUnicode_AS_UNICODE(v));
if (old->category_changed == 0)
- return PyString_FromString(""); /* unassigned */
+ return PyBytes_FromString(""); /* unassigned */
}
if (code < 0 || code >= 0x110000)
@@ -450,7 +450,7 @@
decomp[i] = '\0';
- return PyString_FromString(decomp);
+ return PyBytes_FromString(decomp);
}
static void
@@ -515,7 +515,7 @@
/* Hangul Decomposition adds three characters in
a single step, so we need atleast that much room. */
if (space < 3) {
- Py_ssize_t newsize = PyString_GET_SIZE(result) + 10;
+ Py_ssize_t newsize = PyBytes_GET_SIZE(result) + 10;
space += 10;
if (PyUnicode_Resize(&result, newsize) == -1)
return NULL;
Modified: python/branches/tlee-ast-optimize/Modules/zipimport.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/zipimport.c (original)
+++ python/branches/tlee-ast-optimize/Modules/zipimport.c Sun Jun 1 17:18:10 2008
@@ -154,11 +154,11 @@
}
}
- self->archive = PyString_FromString(buf);
+ self->archive = PyBytes_FromString(buf);
if (self->archive == NULL)
return -1;
- self->prefix = PyString_FromString(prefix);
+ self->prefix = PyBytes_FromString(prefix);
if (self->prefix == NULL)
return -1;
@@ -191,10 +191,10 @@
char *archive = "???";
char *prefix = "";
- if (self->archive != NULL && PyString_Check(self->archive))
- archive = PyString_AsString(self->archive);
- if (self->prefix != NULL && PyString_Check(self->prefix))
- prefix = PyString_AsString(self->prefix);
+ if (self->archive != NULL && PyBytes_Check(self->archive))
+ archive = PyBytes_AsString(self->archive);
+ if (self->prefix != NULL && PyBytes_Check(self->prefix))
+ prefix = PyBytes_AsString(self->prefix);
if (prefix != NULL && *prefix)
PyOS_snprintf(buf, sizeof(buf),
"<zipimporter object \"%.300s%c%.150s\">",
@@ -203,7 +203,7 @@
PyOS_snprintf(buf, sizeof(buf),
"<zipimporter object \"%.300s\">",
archive);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
/* return fullname.split(".")[-1] */
@@ -263,7 +263,7 @@
subname = get_subname(fullname);
- len = make_filename(PyString_AsString(self->prefix), subname, path);
+ len = make_filename(PyBytes_AsString(self->prefix), subname, path);
if (len < 0)
return MI_ERROR;
@@ -336,12 +336,12 @@
/* add __path__ to the module *before* the code gets
executed */
PyObject *pkgpath, *fullpath;
- char *prefix = PyString_AsString(self->prefix);
+ char *prefix = PyBytes_AsString(self->prefix);
char *subname = get_subname(fullname);
int err;
- fullpath = PyString_FromFormat("%s%c%s%s",
- PyString_AsString(self->archive),
+ fullpath = PyBytes_FromFormat("%s%c%s%s",
+ PyBytes_AsString(self->archive),
SEP,
*prefix ? prefix : "",
subname);
@@ -418,9 +418,9 @@
}
path = buf;
#endif
- len = PyString_Size(self->archive);
+ len = PyBytes_Size(self->archive);
if ((size_t)len < strlen(path) &&
- strncmp(path, PyString_AsString(self->archive), len) == 0 &&
+ strncmp(path, PyBytes_AsString(self->archive), len) == 0 &&
path[len] == SEP) {
path = path + len + 1;
}
@@ -430,7 +430,7 @@
PyErr_SetFromErrnoWithFilename(PyExc_IOError, path);
return NULL;
}
- return get_data(PyString_AsString(self->archive), toc_entry);
+ return get_data(PyBytes_AsString(self->archive), toc_entry);
}
static PyObject *
@@ -467,7 +467,7 @@
}
subname = get_subname(fullname);
- len = make_filename(PyString_AsString(self->prefix), subname, path);
+ len = make_filename(PyBytes_AsString(self->prefix), subname, path);
if (len < 0)
return NULL;
@@ -480,7 +480,7 @@
toc_entry = PyDict_GetItemString(self->files, path);
if (toc_entry != NULL)
- return get_data(PyString_AsString(self->archive), toc_entry);
+ return get_data(PyBytes_AsString(self->archive), toc_entry);
/* we have the module, but no source */
Py_INCREF(Py_None);
@@ -843,13 +843,13 @@
PyMarshal_ReadShortFromFile(fp); /* local header size */
file_offset += l; /* Start of file data */
- raw_data = PyString_FromStringAndSize((char *)NULL, compress == 0 ?
+ raw_data = PyBytes_FromStringAndSize((char *)NULL, compress == 0 ?
data_size : data_size + 1);
if (raw_data == NULL) {
fclose(fp);
return NULL;
}
- buf = PyString_AsString(raw_data);
+ buf = PyBytes_AsString(raw_data);
err = fseek(fp, file_offset, 0);
if (err == 0)
@@ -907,8 +907,8 @@
unmarshal_code(char *pathname, PyObject *data, time_t mtime)
{
PyObject *code;
- char *buf = PyString_AsString(data);
- Py_ssize_t size = PyString_Size(data);
+ char *buf = PyBytes_AsString(data);
+ Py_ssize_t size = PyBytes_Size(data);
if (size <= 9) {
PyErr_SetString(ZipImportError,
@@ -953,14 +953,14 @@
static PyObject *
normalize_line_endings(PyObject *source)
{
- char *buf, *q, *p = PyString_AsString(source);
+ char *buf, *q, *p = PyBytes_AsString(source);
PyObject *fixed_source;
if (!p)
return NULL;
/* one char extra for trailing \n and one for terminating \0 */
- buf = (char *)PyMem_Malloc(PyString_Size(source) + 2);
+ buf = (char *)PyMem_Malloc(PyBytes_Size(source) + 2);
if (buf == NULL) {
PyErr_SetString(PyExc_MemoryError,
"zipimport: no memory to allocate "
@@ -979,7 +979,7 @@
}
*q++ = '\n'; /* add trailing \n */
*q = '\0';
- fixed_source = PyString_FromString(buf);
+ fixed_source = PyBytes_FromString(buf);
PyMem_Free(buf);
return fixed_source;
}
@@ -995,7 +995,7 @@
if (fixed_source == NULL)
return NULL;
- code = Py_CompileString(PyString_AsString(fixed_source), pathname,
+ code = Py_CompileString(PyBytes_AsString(fixed_source), pathname,
Py_file_input);
Py_DECREF(fixed_source);
return code;
@@ -1054,7 +1054,7 @@
{
PyObject *data, *code;
char *modpath;
- char *archive = PyString_AsString(self->archive);
+ char *archive = PyBytes_AsString(self->archive);
if (archive == NULL)
return NULL;
@@ -1063,7 +1063,7 @@
if (data == NULL)
return NULL;
- modpath = PyString_AsString(PyTuple_GetItem(toc_entry, 0));
+ modpath = PyBytes_AsString(PyTuple_GetItem(toc_entry, 0));
if (isbytecode) {
code = unmarshal_code(modpath, data, mtime);
@@ -1088,7 +1088,7 @@
subname = get_subname(fullname);
- len = make_filename(PyString_AsString(self->prefix), subname, path);
+ len = make_filename(PyBytes_AsString(self->prefix), subname, path);
if (len < 0)
return NULL;
@@ -1098,7 +1098,7 @@
strcpy(path + len, zso->suffix);
if (Py_VerboseFlag > 1)
PySys_WriteStderr("# trying %s%c%s\n",
- PyString_AsString(self->archive),
+ PyBytes_AsString(self->archive),
SEP, path);
toc_entry = PyDict_GetItemString(self->files, path);
if (toc_entry != NULL) {
@@ -1120,7 +1120,7 @@
continue;
}
if (code != NULL && p_modpath != NULL)
- *p_modpath = PyString_AsString(
+ *p_modpath = PyBytes_AsString(
PyTuple_GetItem(toc_entry, 0));
return code;
}
Modified: python/branches/tlee-ast-optimize/Modules/zlibmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Modules/zlibmodule.c (original)
+++ python/branches/tlee-ast-optimize/Modules/zlibmodule.c Sun Jun 1 17:18:10 2008
@@ -96,12 +96,12 @@
if (self == NULL)
return NULL;
self->is_initialised = 0;
- self->unused_data = PyString_FromString("");
+ self->unused_data = PyBytes_FromString("");
if (self->unused_data == NULL) {
Py_DECREF(self);
return NULL;
}
- self->unconsumed_tail = PyString_FromString("");
+ self->unconsumed_tail = PyBytes_FromString("");
if (self->unconsumed_tail == NULL) {
Py_DECREF(self);
return NULL;
@@ -174,7 +174,7 @@
err=deflateEnd(&zst);
if (err == Z_OK)
- ReturnVal = PyString_FromStringAndSize((char *)output,
+ ReturnVal = PyBytes_FromStringAndSize((char *)output,
zst.total_out);
else
zlib_error(zst, err, "while finishing compression");
@@ -211,12 +211,12 @@
zst.avail_in = length;
zst.avail_out = r_strlen;
- if (!(result_str = PyString_FromStringAndSize(NULL, r_strlen)))
+ if (!(result_str = PyBytes_FromStringAndSize(NULL, r_strlen)))
return NULL;
zst.zalloc = (alloc_func)NULL;
zst.zfree = (free_func)Z_NULL;
- zst.next_out = (Byte *)PyString_AS_STRING(result_str);
+ zst.next_out = (Byte *)PyBytes_AS_STRING(result_str);
zst.next_in = (Byte *)input;
err = inflateInit2(&zst, wsize);
@@ -256,11 +256,11 @@
/* fall through */
case(Z_OK):
/* need more memory */
- if (_PyString_Resize(&result_str, r_strlen << 1) < 0) {
+ if (_PyBytes_Resize(&result_str, r_strlen << 1) < 0) {
inflateEnd(&zst);
goto error;
}
- zst.next_out = (unsigned char *)PyString_AS_STRING(result_str) \
+ zst.next_out = (unsigned char *)PyBytes_AS_STRING(result_str) \
+ r_strlen;
zst.avail_out = r_strlen;
r_strlen = r_strlen << 1;
@@ -278,7 +278,7 @@
goto error;
}
- _PyString_Resize(&result_str, zst.total_out);
+ _PyBytes_Resize(&result_str, zst.total_out);
return result_str;
error:
@@ -400,7 +400,7 @@
if (!PyArg_ParseTuple(args, "s#:compress", &input, &inplen))
return NULL;
- if (!(RetVal = PyString_FromStringAndSize(NULL, length)))
+ if (!(RetVal = PyBytes_FromStringAndSize(NULL, length)))
return NULL;
ENTER_ZLIB
@@ -409,7 +409,7 @@
self->zst.avail_in = inplen;
self->zst.next_in = input;
self->zst.avail_out = length;
- self->zst.next_out = (unsigned char *)PyString_AS_STRING(RetVal);
+ self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal);
Py_BEGIN_ALLOW_THREADS
err = deflate(&(self->zst), Z_NO_FLUSH);
@@ -418,9 +418,9 @@
/* while Z_OK and the output buffer is full, there might be more output,
so extend the output buffer and try again */
while (err == Z_OK && self->zst.avail_out == 0) {
- if (_PyString_Resize(&RetVal, length << 1) < 0)
+ if (_PyBytes_Resize(&RetVal, length << 1) < 0)
goto error;
- self->zst.next_out = (unsigned char *)PyString_AS_STRING(RetVal) \
+ self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal) \
+ length;
self->zst.avail_out = length;
length = length << 1;
@@ -440,7 +440,7 @@
RetVal = NULL;
goto error;
}
- _PyString_Resize(&RetVal, self->zst.total_out - start_total_out);
+ _PyBytes_Resize(&RetVal, self->zst.total_out - start_total_out);
error:
LEAVE_ZLIB
@@ -479,7 +479,7 @@
/* limit amount of data allocated to max_length */
if (max_length && length > max_length)
length = max_length;
- if (!(RetVal = PyString_FromStringAndSize(NULL, length)))
+ if (!(RetVal = PyBytes_FromStringAndSize(NULL, length)))
return NULL;
ENTER_ZLIB
@@ -488,7 +488,7 @@
self->zst.avail_in = inplen;
self->zst.next_in = input;
self->zst.avail_out = length;
- self->zst.next_out = (unsigned char *)PyString_AS_STRING(RetVal);
+ self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal);
Py_BEGIN_ALLOW_THREADS
err = inflate(&(self->zst), Z_SYNC_FLUSH);
@@ -510,9 +510,9 @@
if (max_length && length > max_length)
length = max_length;
- if (_PyString_Resize(&RetVal, length) < 0)
+ if (_PyBytes_Resize(&RetVal, length) < 0)
goto error;
- self->zst.next_out = (unsigned char *)PyString_AS_STRING(RetVal) \
+ self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal) \
+ old_length;
self->zst.avail_out = length - old_length;
@@ -525,7 +525,7 @@
of specified size. Return the unconsumed tail in an attribute.*/
if(max_length) {
Py_DECREF(self->unconsumed_tail);
- self->unconsumed_tail = PyString_FromStringAndSize((char *)self->zst.next_in,
+ self->unconsumed_tail = PyBytes_FromStringAndSize((char *)self->zst.next_in,
self->zst.avail_in);
if(!self->unconsumed_tail) {
Py_DECREF(RetVal);
@@ -542,7 +542,7 @@
*/
if (err == Z_STREAM_END) {
Py_XDECREF(self->unused_data); /* Free original empty string */
- self->unused_data = PyString_FromStringAndSize(
+ self->unused_data = PyBytes_FromStringAndSize(
(char *)self->zst.next_in, self->zst.avail_in);
if (self->unused_data == NULL) {
Py_DECREF(RetVal);
@@ -559,7 +559,7 @@
goto error;
}
- _PyString_Resize(&RetVal, self->zst.total_out - start_total_out);
+ _PyBytes_Resize(&RetVal, self->zst.total_out - start_total_out);
error:
LEAVE_ZLIB
@@ -589,10 +589,10 @@
/* Flushing with Z_NO_FLUSH is a no-op, so there's no point in
doing any work at all; just return an empty string. */
if (flushmode == Z_NO_FLUSH) {
- return PyString_FromStringAndSize(NULL, 0);
+ return PyBytes_FromStringAndSize(NULL, 0);
}
- if (!(RetVal = PyString_FromStringAndSize(NULL, length)))
+ if (!(RetVal = PyBytes_FromStringAndSize(NULL, length)))
return NULL;
ENTER_ZLIB
@@ -600,7 +600,7 @@
start_total_out = self->zst.total_out;
self->zst.avail_in = 0;
self->zst.avail_out = length;
- self->zst.next_out = (unsigned char *)PyString_AS_STRING(RetVal);
+ self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal);
Py_BEGIN_ALLOW_THREADS
err = deflate(&(self->zst), flushmode);
@@ -609,9 +609,9 @@
/* while Z_OK and the output buffer is full, there might be more output,
so extend the output buffer and try again */
while (err == Z_OK && self->zst.avail_out == 0) {
- if (_PyString_Resize(&RetVal, length << 1) < 0)
+ if (_PyBytes_Resize(&RetVal, length << 1) < 0)
goto error;
- self->zst.next_out = (unsigned char *)PyString_AS_STRING(RetVal) \
+ self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal) \
+ length;
self->zst.avail_out = length;
length = length << 1;
@@ -646,7 +646,7 @@
goto error;
}
- _PyString_Resize(&RetVal, self->zst.total_out - start_total_out);
+ _PyBytes_Resize(&RetVal, self->zst.total_out - start_total_out);
error:
LEAVE_ZLIB
@@ -778,7 +778,7 @@
PyErr_SetString(PyExc_ValueError, "length must be greater than zero");
return NULL;
}
- if (!(retval = PyString_FromStringAndSize(NULL, length)))
+ if (!(retval = PyBytes_FromStringAndSize(NULL, length)))
return NULL;
@@ -786,7 +786,7 @@
start_total_out = self->zst.total_out;
self->zst.avail_out = length;
- self->zst.next_out = (Byte *)PyString_AS_STRING(retval);
+ self->zst.next_out = (Byte *)PyBytes_AS_STRING(retval);
Py_BEGIN_ALLOW_THREADS
err = inflate(&(self->zst), Z_FINISH);
@@ -795,9 +795,9 @@
/* while Z_OK and the output buffer is full, there might be more output,
so extend the output buffer and try again */
while ((err == Z_OK || err == Z_BUF_ERROR) && self->zst.avail_out == 0) {
- if (_PyString_Resize(&retval, length << 1) < 0)
+ if (_PyBytes_Resize(&retval, length << 1) < 0)
goto error;
- self->zst.next_out = (Byte *)PyString_AS_STRING(retval) + length;
+ self->zst.next_out = (Byte *)PyBytes_AS_STRING(retval) + length;
self->zst.avail_out = length;
length = length << 1;
@@ -819,7 +819,7 @@
goto error;
}
}
- _PyString_Resize(&retval, self->zst.total_out - start_total_out);
+ _PyBytes_Resize(&retval, self->zst.total_out - start_total_out);
error:
@@ -1027,7 +1027,7 @@
PyModule_AddIntConstant(m, "Z_SYNC_FLUSH", Z_SYNC_FLUSH);
PyModule_AddIntConstant(m, "Z_FULL_FLUSH", Z_FULL_FLUSH);
- ver = PyString_FromString(ZLIB_VERSION);
+ ver = PyBytes_FromString(ZLIB_VERSION);
if (ver != NULL)
PyModule_AddObject(m, "ZLIB_VERSION", ver);
Modified: python/branches/tlee-ast-optimize/Objects/abstract.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/abstract.c (original)
+++ python/branches/tlee-ast-optimize/Objects/abstract.c Sun Jun 1 17:18:10 2008
@@ -105,7 +105,7 @@
/* cache a hashed version of the attribute string */
if (hintstrobj == NULL) {
- hintstrobj = PyString_InternFromString("__length_hint__");
+ hintstrobj = PyBytes_InternFromString("__length_hint__");
if (hintstrobj == NULL)
goto defaultcase;
}
@@ -227,7 +227,7 @@
null_error();
return -1;
}
- okey = PyString_FromString(key);
+ okey = PyBytes_FromString(key);
if (okey == NULL)
return -1;
ret = PyObject_DelItem(o, okey);
@@ -729,21 +729,21 @@
/* Initialize cached value */
if (str__format__ == NULL) {
/* Initialize static variable needed by _PyType_Lookup */
- str__format__ = PyString_InternFromString("__format__");
+ str__format__ = PyBytes_InternFromString("__format__");
if (str__format__ == NULL)
goto done;
}
/* If no format_spec is provided, use an empty string */
if (format_spec == NULL) {
- empty = PyString_FromStringAndSize(NULL, 0);
+ empty = PyBytes_FromStringAndSize(NULL, 0);
format_spec = empty;
}
/* Check the format_spec type, and make sure it's str or unicode */
if (PyUnicode_Check(format_spec))
spec_is_unicode = 1;
- else if (PyString_Check(format_spec))
+ else if (PyBytes_Check(format_spec))
spec_is_unicode = 0;
else {
PyErr_Format(PyExc_TypeError,
@@ -823,7 +823,7 @@
/* Check the result type, and make sure it's str or unicode */
if (PyUnicode_Check(result))
result_is_unicode = 1;
- else if (PyString_Check(result))
+ else if (PyBytes_Check(result))
result_is_unicode = 0;
else {
PyErr_Format(PyExc_TypeError,
@@ -1541,7 +1541,7 @@
const char *type_name;
static PyObject *int_name = NULL;
if (int_name == NULL) {
- int_name = PyString_InternFromString("__int__");
+ int_name = PyBytes_InternFromString("__int__");
if (int_name == NULL)
return NULL;
}
@@ -1567,7 +1567,7 @@
non_integral_error:
if (PyInstance_Check(integral)) {
- type_name = PyString_AS_STRING(((PyInstanceObject *)integral)
+ type_name = PyBytes_AS_STRING(((PyInstanceObject *)integral)
->in_class->cl_name);
}
else {
@@ -1589,7 +1589,7 @@
Py_ssize_t buffer_len;
if (trunc_name == NULL) {
- trunc_name = PyString_InternFromString("__trunc__");
+ trunc_name = PyBytes_InternFromString("__trunc__");
if (trunc_name == NULL)
return NULL;
}
@@ -1629,9 +1629,9 @@
}
PyErr_Clear(); /* It's not an error if o.__trunc__ doesn't exist. */
- if (PyString_Check(o))
- return int_from_string(PyString_AS_STRING(o),
- PyString_GET_SIZE(o));
+ if (PyBytes_Check(o))
+ return int_from_string(PyBytes_AS_STRING(o),
+ PyBytes_GET_SIZE(o));
#ifdef Py_USING_UNICODE
if (PyUnicode_Check(o))
return PyInt_FromUnicode(PyUnicode_AS_UNICODE(o),
@@ -1674,7 +1674,7 @@
Py_ssize_t buffer_len;
if (trunc_name == NULL) {
- trunc_name = PyString_InternFromString("__trunc__");
+ trunc_name = PyBytes_InternFromString("__trunc__");
if (trunc_name == NULL)
return NULL;
}
@@ -1716,13 +1716,13 @@
}
PyErr_Clear(); /* It's not an error if o.__trunc__ doesn't exist. */
- if (PyString_Check(o))
+ if (PyBytes_Check(o))
/* need to do extra error checking that PyLong_FromString()
* doesn't do. In particular long('9.5') must raise an
* exception, not truncate the float.
*/
- return long_from_string(PyString_AS_STRING(o),
- PyString_GET_SIZE(o));
+ return long_from_string(PyBytes_AS_STRING(o),
+ PyBytes_GET_SIZE(o));
#ifdef Py_USING_UNICODE
if (PyUnicode_Check(o))
/* The above check is done in PyLong_FromUnicode(). */
@@ -2413,7 +2413,7 @@
if (key == NULL)
return null_error();
- okey = PyString_FromString(key);
+ okey = PyBytes_FromString(key);
if (okey == NULL)
return NULL;
r = PyObject_GetItem(o, okey);
@@ -2432,7 +2432,7 @@
return -1;
}
- okey = PyString_FromString(key);
+ okey = PyBytes_FromString(key);
if (okey == NULL)
return -1;
r = PyObject_SetItem(o, okey, value);
@@ -2760,7 +2760,7 @@
PyObject *bases;
if (__bases__ == NULL) {
- __bases__ = PyString_InternFromString("__bases__");
+ __bases__ = PyBytes_InternFromString("__bases__");
if (__bases__ == NULL)
return NULL;
}
@@ -2838,7 +2838,7 @@
int retval = 0;
if (__class__ == NULL) {
- __class__ = PyString_InternFromString("__class__");
+ __class__ = PyBytes_InternFromString("__class__");
if (__class__ == NULL)
return -1;
}
@@ -2914,7 +2914,7 @@
return 1;
if (name == NULL) {
- name = PyString_InternFromString("__instancecheck__");
+ name = PyBytes_InternFromString("__instancecheck__");
if (name == NULL)
return -1;
}
@@ -2998,7 +2998,7 @@
PyErr_Fetch(&t, &v, &tb);
if (name == NULL) {
- name = PyString_InternFromString("__subclasscheck__");
+ name = PyBytes_InternFromString("__subclasscheck__");
if (name == NULL)
return -1;
}
Modified: python/branches/tlee-ast-optimize/Objects/boolobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/boolobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/boolobject.c Sun Jun 1 17:18:10 2008
@@ -25,10 +25,10 @@
if (self->ob_ival)
s = true_str ? true_str :
- (true_str = PyString_InternFromString("True"));
+ (true_str = PyBytes_InternFromString("True"));
else
s = false_str ? false_str :
- (false_str = PyString_InternFromString("False"));
+ (false_str = PyBytes_InternFromString("False"));
Py_XINCREF(s);
return s;
}
Modified: python/branches/tlee-ast-optimize/Objects/bufferobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/bufferobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/bufferobject.c Sun Jun 1 17:18:10 2008
@@ -287,13 +287,13 @@
const char *status = self->b_readonly ? "read-only" : "read-write";
if ( self->b_base == NULL )
- return PyString_FromFormat("<%s buffer ptr %p, size %zd at %p>",
+ return PyBytes_FromFormat("<%s buffer ptr %p, size %zd at %p>",
status,
self->b_ptr,
self->b_size,
self);
else
- return PyString_FromFormat(
+ return PyBytes_FromFormat(
"<%s buffer for %p, size %zd, offset %zd at %p>",
status,
self->b_base,
@@ -318,7 +318,7 @@
* underlying memory is immutable. b_readonly is a necessary but not
* sufficient condition for a buffer to be hashable. Perhaps it would
* be better to only allow hashing if the underlying object is known to
- * be immutable (e.g. PyString_Check() is true). Another idea would
+ * be immutable (e.g. PyBytes_Check() is true). Another idea would
* be to call tp_hash on the underlying object and see if it raises
* an error. */
if ( !self->b_readonly )
@@ -349,7 +349,7 @@
Py_ssize_t size;
if (!get_buf(self, &ptr, &size, ANY_BUFFER))
return NULL;
- return PyString_FromStringAndSize((const char *)ptr, size);
+ return PyBytes_FromStringAndSize((const char *)ptr, size);
}
/* Sequence methods */
@@ -401,10 +401,10 @@
if ( (count = (*pb->bf_getreadbuffer)(other, 0, &ptr2)) < 0 )
return NULL;
- ob = PyString_FromStringAndSize(NULL, size + count);
+ ob = PyBytes_FromStringAndSize(NULL, size + count);
if ( ob == NULL )
return NULL;
- p = PyString_AS_STRING(ob);
+ p = PyBytes_AS_STRING(ob);
memcpy(p, ptr1, size);
memcpy(p + size, ptr2, count);
@@ -426,11 +426,11 @@
count = 0;
if (!get_buf(self, &ptr, &size, ANY_BUFFER))
return NULL;
- ob = PyString_FromStringAndSize(NULL, size * count);
+ ob = PyBytes_FromStringAndSize(NULL, size * count);
if ( ob == NULL )
return NULL;
- p = PyString_AS_STRING(ob);
+ p = PyBytes_AS_STRING(ob);
while ( count-- )
{
memcpy(p, ptr, size);
@@ -454,7 +454,7 @@
PyErr_SetString(PyExc_IndexError, "buffer index out of range");
return NULL;
}
- return PyString_FromStringAndSize((char *)ptr + idx, 1);
+ return PyBytes_FromStringAndSize((char *)ptr + idx, 1);
}
static PyObject *
@@ -472,7 +472,7 @@
right = size;
if ( right < left )
right = left;
- return PyString_FromStringAndSize((char *)ptr + left,
+ return PyBytes_FromStringAndSize((char *)ptr + left,
right - left);
}
@@ -501,9 +501,9 @@
}
if (slicelength <= 0)
- return PyString_FromStringAndSize("", 0);
+ return PyBytes_FromStringAndSize("", 0);
else if (step == 1)
- return PyString_FromStringAndSize((char *)p + start,
+ return PyBytes_FromStringAndSize((char *)p + start,
stop - start);
else {
PyObject *result;
@@ -518,7 +518,7 @@
result_buf[i] = source_buf[cur];
}
- result = PyString_FromStringAndSize(result_buf,
+ result = PyBytes_FromStringAndSize(result_buf,
slicelength);
PyMem_Free(result_buf);
return result;
Modified: python/branches/tlee-ast-optimize/Objects/bytes_methods.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/bytes_methods.c (original)
+++ python/branches/tlee-ast-optimize/Objects/bytes_methods.c Sun Jun 1 17:18:10 2008
@@ -462,11 +462,11 @@
Py_ssize_t i;
/*
- newobj = PyString_FromStringAndSize(NULL, len);
+ newobj = PyBytes_FromStringAndSize(NULL, len);
if (!newobj)
return NULL;
- s = PyString_AS_STRING(newobj);
+ s = PyBytes_AS_STRING(newobj);
*/
Py_MEMCPY(result, cptr, len);
@@ -490,11 +490,11 @@
Py_ssize_t i;
/*
- newobj = PyString_FromStringAndSize(NULL, len);
+ newobj = PyBytes_FromStringAndSize(NULL, len);
if (!newobj)
return NULL;
- s = PyString_AS_STRING(newobj);
+ s = PyBytes_AS_STRING(newobj);
*/
Py_MEMCPY(result, cptr, len);
@@ -520,10 +520,10 @@
int previous_is_cased = 0;
/*
- newobj = PyString_FromStringAndSize(NULL, len);
+ newobj = PyBytes_FromStringAndSize(NULL, len);
if (newobj == NULL)
return NULL;
- s_new = PyString_AsString(newobj);
+ s_new = PyBytes_AsString(newobj);
*/
for (i = 0; i < len; i++) {
int c = Py_CHARMASK(*s++);
@@ -553,10 +553,10 @@
Py_ssize_t i;
/*
- newobj = PyString_FromStringAndSize(NULL, len);
+ newobj = PyBytes_FromStringAndSize(NULL, len);
if (newobj == NULL)
return NULL;
- s_new = PyString_AsString(newobj);
+ s_new = PyBytes_AsString(newobj);
*/
if (0 < len) {
int c = Py_CHARMASK(*s++);
@@ -589,10 +589,10 @@
Py_ssize_t i;
/*
- newobj = PyString_FromStringAndSize(NULL, len);
+ newobj = PyBytes_FromStringAndSize(NULL, len);
if (newobj == NULL)
return NULL;
- s_new = PyString_AsString(newobj);
+ s_new = PyBytes_AsString(newobj);
*/
for (i = 0; i < len; i++) {
int c = Py_CHARMASK(*s++);
Modified: python/branches/tlee-ast-optimize/Objects/cellobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/cellobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/cellobject.c Sun Jun 1 17:18:10 2008
@@ -73,9 +73,9 @@
cell_repr(PyCellObject *op)
{
if (op->ob_ref == NULL)
- return PyString_FromFormat("<cell at %p: empty>", op);
+ return PyBytes_FromFormat("<cell at %p: empty>", op);
- return PyString_FromFormat("<cell at %p: %.80s object at %p>",
+ return PyBytes_FromFormat("<cell at %p: %.80s object at %p>",
op, op->ob_ref->ob_type->tp_name,
op->ob_ref);
}
Modified: python/branches/tlee-ast-optimize/Objects/classobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/classobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/classobject.c Sun Jun 1 17:18:10 2008
@@ -32,21 +32,21 @@
PyClassObject *op, *dummy;
static PyObject *docstr, *modstr, *namestr;
if (docstr == NULL) {
- docstr= PyString_InternFromString("__doc__");
+ docstr= PyBytes_InternFromString("__doc__");
if (docstr == NULL)
return NULL;
}
if (modstr == NULL) {
- modstr= PyString_InternFromString("__module__");
+ modstr= PyBytes_InternFromString("__module__");
if (modstr == NULL)
return NULL;
}
if (namestr == NULL) {
- namestr= PyString_InternFromString("__name__");
+ namestr= PyBytes_InternFromString("__name__");
if (namestr == NULL)
return NULL;
}
- if (name == NULL || !PyString_Check(name)) {
+ if (name == NULL || !PyBytes_Check(name)) {
PyErr_SetString(PyExc_TypeError,
"PyClass_New: name must be a string");
return NULL;
@@ -101,13 +101,13 @@
}
if (getattrstr == NULL) {
- getattrstr = PyString_InternFromString("__getattr__");
+ getattrstr = PyBytes_InternFromString("__getattr__");
if (getattrstr == NULL)
goto alloc_error;
- setattrstr = PyString_InternFromString("__setattr__");
+ setattrstr = PyBytes_InternFromString("__setattr__");
if (setattrstr == NULL)
goto alloc_error;
- delattrstr = PyString_InternFromString("__delattr__");
+ delattrstr = PyBytes_InternFromString("__delattr__");
if (delattrstr == NULL)
goto alloc_error;
}
@@ -222,7 +222,7 @@
class_getattr(register PyClassObject *op, PyObject *name)
{
register PyObject *v;
- register char *sname = PyString_AsString(name);
+ register char *sname = PyBytes_AsString(name);
PyClassObject *klass;
descrgetfunc f;
@@ -253,7 +253,7 @@
if (v == NULL) {
PyErr_Format(PyExc_AttributeError,
"class %.50s has no attribute '%.400s'",
- PyString_AS_STRING(op->cl_name), sname);
+ PyBytes_AS_STRING(op->cl_name), sname);
return NULL;
}
f = TP_DESCR_GET(v->ob_type);
@@ -316,9 +316,9 @@
static char *
set_name(PyClassObject *c, PyObject *v)
{
- if (v == NULL || !PyString_Check(v))
+ if (v == NULL || !PyBytes_Check(v))
return "__name__ must be a string object";
- if (strlen(PyString_AS_STRING(v)) != (size_t)PyString_GET_SIZE(v))
+ if (strlen(PyBytes_AS_STRING(v)) != (size_t)PyBytes_GET_SIZE(v))
return "__name__ must not contain null bytes";
set_slot(&c->cl_name, v);
return "";
@@ -333,9 +333,9 @@
"classes are read-only in restricted mode");
return -1;
}
- sname = PyString_AsString(name);
+ sname = PyBytes_AsString(name);
if (sname[0] == '_' && sname[1] == '_') {
- Py_ssize_t n = PyString_Size(name);
+ Py_ssize_t n = PyBytes_Size(name);
if (sname[n-1] == '_' && sname[n-2] == '_') {
char *err = NULL;
if (strcmp(sname, "__dict__") == 0)
@@ -365,7 +365,7 @@
if (rv < 0)
PyErr_Format(PyExc_AttributeError,
"class %.50s has no attribute '%.400s'",
- PyString_AS_STRING(op->cl_name), sname);
+ PyBytes_AS_STRING(op->cl_name), sname);
return rv;
}
else
@@ -377,15 +377,15 @@
{
PyObject *mod = PyDict_GetItemString(op->cl_dict, "__module__");
char *name;
- if (op->cl_name == NULL || !PyString_Check(op->cl_name))
+ if (op->cl_name == NULL || !PyBytes_Check(op->cl_name))
name = "?";
else
- name = PyString_AsString(op->cl_name);
- if (mod == NULL || !PyString_Check(mod))
- return PyString_FromFormat("<class ?.%s at %p>", name, op);
+ name = PyBytes_AsString(op->cl_name);
+ if (mod == NULL || !PyBytes_Check(mod))
+ return PyBytes_FromFormat("<class ?.%s at %p>", name, op);
else
- return PyString_FromFormat("<class %s.%s at %p>",
- PyString_AsString(mod),
+ return PyBytes_FromFormat("<class %s.%s at %p>",
+ PyBytes_AsString(mod),
name, op);
}
@@ -397,21 +397,21 @@
PyObject *res;
Py_ssize_t m, n;
- if (name == NULL || !PyString_Check(name))
+ if (name == NULL || !PyBytes_Check(name))
return class_repr(op);
- if (mod == NULL || !PyString_Check(mod)) {
+ if (mod == NULL || !PyBytes_Check(mod)) {
Py_INCREF(name);
return name;
}
- m = PyString_GET_SIZE(mod);
- n = PyString_GET_SIZE(name);
- res = PyString_FromStringAndSize((char *)NULL, m+1+n);
+ m = PyBytes_GET_SIZE(mod);
+ n = PyBytes_GET_SIZE(name);
+ res = PyBytes_FromStringAndSize((char *)NULL, m+1+n);
if (res != NULL) {
- char *s = PyString_AS_STRING(res);
- memcpy(s, PyString_AS_STRING(mod), m);
+ char *s = PyBytes_AS_STRING(res);
+ memcpy(s, PyBytes_AS_STRING(mod), m);
s += m;
*s++ = '.';
- memcpy(s, PyString_AS_STRING(name), n);
+ memcpy(s, PyBytes_AS_STRING(name), n);
}
return res;
}
@@ -541,7 +541,7 @@
static PyObject *initstr;
if (initstr == NULL) {
- initstr = PyString_InternFromString("__init__");
+ initstr = PyBytes_InternFromString("__init__");
if (initstr == NULL)
return NULL;
}
@@ -634,7 +634,7 @@
PyErr_Fetch(&error_type, &error_value, &error_traceback);
/* Execute __del__ method, if any. */
if (delstr == NULL) {
- delstr = PyString_InternFromString("__del__");
+ delstr = PyBytes_InternFromString("__del__");
if (delstr == NULL)
PyErr_WriteUnraisable((PyObject*)inst);
}
@@ -696,7 +696,7 @@
instance_getattr1(register PyInstanceObject *inst, PyObject *name)
{
register PyObject *v;
- register char *sname = PyString_AsString(name);
+ register char *sname = PyBytes_AsString(name);
if (sname[0] == '_' && sname[1] == '_') {
if (strcmp(sname, "__dict__") == 0) {
if (PyEval_GetRestricted()) {
@@ -716,7 +716,7 @@
if (v == NULL && !PyErr_Occurred()) {
PyErr_Format(PyExc_AttributeError,
"%.50s instance has no attribute '%.400s'",
- PyString_AS_STRING(inst->in_class->cl_name), sname);
+ PyBytes_AS_STRING(inst->in_class->cl_name), sname);
}
return v;
}
@@ -779,7 +779,7 @@
assert(PyInstance_Check(pinst));
inst = (PyInstanceObject *)pinst;
- assert(PyString_Check(name));
+ assert(PyBytes_Check(name));
v = PyDict_GetItem(inst->in_dict, name);
if (v == NULL)
@@ -795,8 +795,8 @@
if (rv < 0)
PyErr_Format(PyExc_AttributeError,
"%.50s instance has no attribute '%.400s'",
- PyString_AS_STRING(inst->in_class->cl_name),
- PyString_AS_STRING(name));
+ PyBytes_AS_STRING(inst->in_class->cl_name),
+ PyBytes_AS_STRING(name));
return rv;
}
else
@@ -807,9 +807,9 @@
instance_setattr(PyInstanceObject *inst, PyObject *name, PyObject *v)
{
PyObject *func, *args, *res, *tmp;
- char *sname = PyString_AsString(name);
+ char *sname = PyBytes_AsString(name);
if (sname[0] == '_' && sname[1] == '_') {
- Py_ssize_t n = PyString_Size(name);
+ Py_ssize_t n = PyBytes_Size(name);
if (sname[n-1] == '_' && sname[n-2] == '_') {
if (strcmp(sname, "__dict__") == 0) {
if (PyEval_GetRestricted()) {
@@ -875,7 +875,7 @@
static PyObject *reprstr;
if (reprstr == NULL) {
- reprstr = PyString_InternFromString("__repr__");
+ reprstr = PyBytes_InternFromString("__repr__");
if (reprstr == NULL)
return NULL;
}
@@ -889,16 +889,16 @@
classname = inst->in_class->cl_name;
mod = PyDict_GetItemString(inst->in_class->cl_dict,
"__module__");
- if (classname != NULL && PyString_Check(classname))
- cname = PyString_AsString(classname);
+ if (classname != NULL && PyBytes_Check(classname))
+ cname = PyBytes_AsString(classname);
else
cname = "?";
- if (mod == NULL || !PyString_Check(mod))
- return PyString_FromFormat("<?.%s instance at %p>",
+ if (mod == NULL || !PyBytes_Check(mod))
+ return PyBytes_FromFormat("<?.%s instance at %p>",
cname, inst);
else
- return PyString_FromFormat("<%s.%s instance at %p>",
- PyString_AsString(mod),
+ return PyBytes_FromFormat("<%s.%s instance at %p>",
+ PyBytes_AsString(mod),
cname, inst);
}
res = PyEval_CallObject(func, (PyObject *)NULL);
@@ -914,7 +914,7 @@
static PyObject *strstr;
if (strstr == NULL) {
- strstr = PyString_InternFromString("__str__");
+ strstr = PyBytes_InternFromString("__str__");
if (strstr == NULL)
return NULL;
}
@@ -939,7 +939,7 @@
static PyObject *hashstr, *eqstr, *cmpstr;
if (hashstr == NULL) {
- hashstr = PyString_InternFromString("__hash__");
+ hashstr = PyBytes_InternFromString("__hash__");
if (hashstr == NULL)
return -1;
}
@@ -952,7 +952,7 @@
address. If an __eq__ or __cmp__ method exists, there must
be a __hash__. */
if (eqstr == NULL) {
- eqstr = PyString_InternFromString("__eq__");
+ eqstr = PyBytes_InternFromString("__eq__");
if (eqstr == NULL)
return -1;
}
@@ -962,7 +962,7 @@
return -1;
PyErr_Clear();
if (cmpstr == NULL) {
- cmpstr = PyString_InternFromString("__cmp__");
+ cmpstr = PyBytes_InternFromString("__cmp__");
if (cmpstr == NULL)
return -1;
}
@@ -1014,7 +1014,7 @@
Py_ssize_t outcome;
if (lenstr == NULL) {
- lenstr = PyString_InternFromString("__len__");
+ lenstr = PyBytes_InternFromString("__len__");
if (lenstr == NULL)
return -1;
}
@@ -1063,7 +1063,7 @@
PyObject *res;
if (getitemstr == NULL) {
- getitemstr = PyString_InternFromString("__getitem__");
+ getitemstr = PyBytes_InternFromString("__getitem__");
if (getitemstr == NULL)
return NULL;
}
@@ -1090,7 +1090,7 @@
if (value == NULL) {
if (delitemstr == NULL) {
- delitemstr = PyString_InternFromString("__delitem__");
+ delitemstr = PyBytes_InternFromString("__delitem__");
if (delitemstr == NULL)
return -1;
}
@@ -1098,7 +1098,7 @@
}
else {
if (setitemstr == NULL) {
- setitemstr = PyString_InternFromString("__setitem__");
+ setitemstr = PyBytes_InternFromString("__setitem__");
if (setitemstr == NULL)
return -1;
}
@@ -1135,7 +1135,7 @@
PyObject *func, *res;
if (getitemstr == NULL) {
- getitemstr = PyString_InternFromString("__getitem__");
+ getitemstr = PyBytes_InternFromString("__getitem__");
if (getitemstr == NULL)
return NULL;
}
@@ -1154,7 +1154,7 @@
static PyObject *getslicestr;
if (getslicestr == NULL) {
- getslicestr = PyString_InternFromString("__getslice__");
+ getslicestr = PyBytes_InternFromString("__getslice__");
if (getslicestr == NULL)
return NULL;
}
@@ -1166,7 +1166,7 @@
PyErr_Clear();
if (getitemstr == NULL) {
- getitemstr = PyString_InternFromString("__getitem__");
+ getitemstr = PyBytes_InternFromString("__getitem__");
if (getitemstr == NULL)
return NULL;
}
@@ -1194,7 +1194,7 @@
if (item == NULL) {
if (delitemstr == NULL) {
- delitemstr = PyString_InternFromString("__delitem__");
+ delitemstr = PyBytes_InternFromString("__delitem__");
if (delitemstr == NULL)
return -1;
}
@@ -1202,7 +1202,7 @@
}
else {
if (setitemstr == NULL) {
- setitemstr = PyString_InternFromString("__setitem__");
+ setitemstr = PyBytes_InternFromString("__setitem__");
if (setitemstr == NULL)
return -1;
}
@@ -1236,7 +1236,7 @@
if (value == NULL) {
if (delslicestr == NULL) {
delslicestr =
- PyString_InternFromString("__delslice__");
+ PyBytes_InternFromString("__delslice__");
if (delslicestr == NULL)
return -1;
}
@@ -1247,7 +1247,7 @@
PyErr_Clear();
if (delitemstr == NULL) {
delitemstr =
- PyString_InternFromString("__delitem__");
+ PyBytes_InternFromString("__delitem__");
if (delitemstr == NULL)
return -1;
}
@@ -1263,7 +1263,7 @@
else {
if (setslicestr == NULL) {
setslicestr =
- PyString_InternFromString("__setslice__");
+ PyBytes_InternFromString("__setslice__");
if (setslicestr == NULL)
return -1;
}
@@ -1274,7 +1274,7 @@
PyErr_Clear();
if (setitemstr == NULL) {
setitemstr =
- PyString_InternFromString("__setitem__");
+ PyBytes_InternFromString("__setitem__");
if (setitemstr == NULL)
return -1;
}
@@ -1311,7 +1311,7 @@
*/
if(__contains__ == NULL) {
- __contains__ = PyString_InternFromString("__contains__");
+ __contains__ = PyBytes_InternFromString("__contains__");
if(__contains__ == NULL)
return -1;
}
@@ -1417,7 +1417,7 @@
}
if (coerce_obj == NULL) {
- coerce_obj = PyString_InternFromString("__coerce__");
+ coerce_obj = PyBytes_InternFromString("__coerce__");
if (coerce_obj == NULL)
return NULL;
}
@@ -1504,7 +1504,7 @@
PyObject *coerced;
if (coerce_obj == NULL) {
- coerce_obj = PyString_InternFromString("__coerce__");
+ coerce_obj = PyBytes_InternFromString("__coerce__");
if (coerce_obj == NULL)
return -1;
}
@@ -1552,7 +1552,7 @@
#define UNARY(funcname, methodname) \
static PyObject *funcname(PyInstanceObject *self) { \
static PyObject *o; \
- if (o == NULL) { o = PyString_InternFromString(methodname); \
+ if (o == NULL) { o = PyBytes_InternFromString(methodname); \
if (o == NULL) return NULL; } \
return generic_unary_op(self, o); \
}
@@ -1561,7 +1561,7 @@
#define UNARY_FB(funcname, methodname, funcname_fb) \
static PyObject *funcname(PyInstanceObject *self) { \
static PyObject *o; \
- if (o == NULL) { o = PyString_InternFromString(methodname); \
+ if (o == NULL) { o = PyBytes_InternFromString(methodname); \
if (o == NULL) return NULL; } \
if (PyObject_HasAttr((PyObject*)self, o)) \
return generic_unary_op(self, o); \
@@ -1630,7 +1630,7 @@
assert(PyInstance_Check(v));
if (cmp_obj == NULL) {
- cmp_obj = PyString_InternFromString("__cmp__");
+ cmp_obj = PyBytes_InternFromString("__cmp__");
if (cmp_obj == NULL)
return -2;
}
@@ -1738,7 +1738,7 @@
static PyObject *nonzerostr;
if (nonzerostr == NULL) {
- nonzerostr = PyString_InternFromString("__nonzero__");
+ nonzerostr = PyBytes_InternFromString("__nonzero__");
if (nonzerostr == NULL)
return -1;
}
@@ -1747,7 +1747,7 @@
return -1;
PyErr_Clear();
if (lenstr == NULL) {
- lenstr = PyString_InternFromString("__len__");
+ lenstr = PyBytes_InternFromString("__len__");
if (lenstr == NULL)
return -1;
}
@@ -1787,7 +1787,7 @@
static PyObject *indexstr = NULL;
if (indexstr == NULL) {
- indexstr = PyString_InternFromString("__index__");
+ indexstr = PyBytes_InternFromString("__index__");
if (indexstr == NULL)
return NULL;
}
@@ -1814,7 +1814,7 @@
PyObject *truncated;
static PyObject *int_name;
if (int_name == NULL) {
- int_name = PyString_InternFromString("__int__");
+ int_name = PyBytes_InternFromString("__int__");
if (int_name == NULL)
return NULL;
}
@@ -1929,7 +1929,7 @@
if (name_op == NULL)
return -1;
for (i = 0; i < NAME_OPS; ++i) {
- name_op[i] = PyString_InternFromString(_name_op[i]);
+ name_op[i] = PyBytes_InternFromString(_name_op[i]);
if (name_op[i] == NULL)
return -1;
}
@@ -2012,12 +2012,12 @@
PyObject *func;
if (iterstr == NULL) {
- iterstr = PyString_InternFromString("__iter__");
+ iterstr = PyBytes_InternFromString("__iter__");
if (iterstr == NULL)
return NULL;
}
if (getitemstr == NULL) {
- getitemstr = PyString_InternFromString("__getitem__");
+ getitemstr = PyBytes_InternFromString("__getitem__");
if (getitemstr == NULL)
return NULL;
}
@@ -2055,7 +2055,7 @@
PyObject *func;
if (nextstr == NULL) {
- nextstr = PyString_InternFromString("next");
+ nextstr = PyBytes_InternFromString("next");
if (nextstr == NULL)
return NULL;
}
@@ -2087,7 +2087,7 @@
PyErr_Clear();
PyErr_Format(PyExc_AttributeError,
"%.200s instance has no __call__ method",
- PyString_AsString(inst->in_class->cl_name));
+ PyBytes_AsString(inst->in_class->cl_name));
return NULL;
}
/* We must check and increment the recursion depth here. Scenario:
@@ -2261,7 +2261,7 @@
{
static PyObject *docstr;
if (docstr == NULL) {
- docstr= PyString_InternFromString("__doc__");
+ docstr= PyBytes_InternFromString("__doc__");
if (docstr == NULL)
return NULL;
}
@@ -2384,12 +2384,12 @@
return NULL;
PyErr_Clear();
}
- else if (!PyString_Check(funcname)) {
+ else if (!PyBytes_Check(funcname)) {
Py_DECREF(funcname);
funcname = NULL;
}
else
- sfuncname = PyString_AS_STRING(funcname);
+ sfuncname = PyBytes_AS_STRING(funcname);
if (klass == NULL)
klassname = NULL;
else {
@@ -2399,28 +2399,28 @@
return NULL;
PyErr_Clear();
}
- else if (!PyString_Check(klassname)) {
+ else if (!PyBytes_Check(klassname)) {
Py_DECREF(klassname);
klassname = NULL;
}
else
- sklassname = PyString_AS_STRING(klassname);
+ sklassname = PyBytes_AS_STRING(klassname);
}
if (self == NULL)
- result = PyString_FromFormat("<unbound method %s.%s>",
+ result = PyBytes_FromFormat("<unbound method %s.%s>",
sklassname, sfuncname);
else {
/* XXX Shouldn't use repr() here! */
PyObject *selfrepr = PyObject_Repr(self);
if (selfrepr == NULL)
goto fail;
- if (!PyString_Check(selfrepr)) {
+ if (!PyBytes_Check(selfrepr)) {
Py_DECREF(selfrepr);
goto fail;
}
- result = PyString_FromFormat("<bound method %s.%s of %s>",
+ result = PyBytes_FromFormat("<bound method %s.%s of %s>",
sklassname, sfuncname,
- PyString_AS_STRING(selfrepr));
+ PyBytes_AS_STRING(selfrepr));
Py_DECREF(selfrepr);
}
fail:
@@ -2472,8 +2472,8 @@
PyErr_Clear();
return;
}
- if (PyString_Check(name)) {
- strncpy(buf, PyString_AS_STRING(name), bufsize);
+ if (PyBytes_Check(name)) {
+ strncpy(buf, PyBytes_AS_STRING(name), bufsize);
buf[bufsize-1] = '\0';
}
Py_DECREF(name);
Modified: python/branches/tlee-ast-optimize/Objects/codeobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/codeobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/codeobject.c Sun Jun 1 17:18:10 2008
@@ -32,10 +32,10 @@
for (i = PyTuple_GET_SIZE(tuple); --i >= 0; ) {
PyObject *v = PyTuple_GET_ITEM(tuple, i);
- if (v == NULL || !PyString_CheckExact(v)) {
+ if (v == NULL || !PyBytes_CheckExact(v)) {
Py_FatalError("non-string found in code slot");
}
- PyString_InternInPlace(&PyTuple_GET_ITEM(tuple, i));
+ PyBytes_InternInPlace(&PyTuple_GET_ITEM(tuple, i));
}
}
@@ -57,9 +57,9 @@
varnames == NULL || !PyTuple_Check(varnames) ||
freevars == NULL || !PyTuple_Check(freevars) ||
cellvars == NULL || !PyTuple_Check(cellvars) ||
- name == NULL || !PyString_Check(name) ||
- filename == NULL || !PyString_Check(filename) ||
- lnotab == NULL || !PyString_Check(lnotab) ||
+ name == NULL || !PyBytes_Check(name) ||
+ filename == NULL || !PyBytes_Check(filename) ||
+ lnotab == NULL || !PyBytes_Check(lnotab) ||
!PyObject_CheckReadBuffer(code)) {
PyErr_BadInternalCall();
return NULL;
@@ -71,11 +71,11 @@
/* Intern selected string constants */
for (i = PyTuple_Size(consts); --i >= 0; ) {
PyObject *v = PyTuple_GetItem(consts, i);
- if (!PyString_Check(v))
+ if (!PyBytes_Check(v))
continue;
- if (!all_name_chars((unsigned char *)PyString_AS_STRING(v)))
+ if (!all_name_chars((unsigned char *)PyBytes_AS_STRING(v)))
continue;
- PyString_InternInPlace(&PyTuple_GET_ITEM(consts, i));
+ PyBytes_InternInPlace(&PyTuple_GET_ITEM(consts, i));
}
co = PyObject_NEW(PyCodeObject, &PyCode_Type);
if (co != NULL) {
@@ -145,10 +145,10 @@
for (i = 0; i < len; i++) {
item = PyTuple_GET_ITEM(tup, i);
- if (PyString_CheckExact(item)) {
+ if (PyBytes_CheckExact(item)) {
Py_INCREF(item);
}
- else if (!PyString_Check(item)) {
+ else if (!PyBytes_Check(item)) {
PyErr_Format(
PyExc_TypeError,
"name tuples must contain only "
@@ -158,9 +158,9 @@
return NULL;
}
else {
- item = PyString_FromStringAndSize(
- PyString_AS_STRING(item),
- PyString_GET_SIZE(item));
+ item = PyBytes_FromStringAndSize(
+ PyBytes_AS_STRING(item),
+ PyBytes_GET_SIZE(item));
if (item == NULL) {
Py_DECREF(newtuple);
return NULL;
@@ -281,14 +281,14 @@
if (co->co_firstlineno != 0)
lineno = co->co_firstlineno;
- if (co->co_filename && PyString_Check(co->co_filename))
- filename = PyString_AS_STRING(co->co_filename);
- if (co->co_name && PyString_Check(co->co_name))
- name = PyString_AS_STRING(co->co_name);
+ if (co->co_filename && PyBytes_Check(co->co_filename))
+ filename = PyBytes_AS_STRING(co->co_filename);
+ if (co->co_name && PyBytes_Check(co->co_name))
+ name = PyBytes_AS_STRING(co->co_name);
PyOS_snprintf(buf, sizeof(buf),
"<code object %.100s at %p, file \"%.300s\", line %d>",
name, co, filename, lineno);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
static int
@@ -508,8 +508,8 @@
int
PyCode_Addr2Line(PyCodeObject *co, int addrq)
{
- int size = PyString_Size(co->co_lnotab) / 2;
- unsigned char *p = (unsigned char*)PyString_AsString(co->co_lnotab);
+ int size = PyBytes_Size(co->co_lnotab) / 2;
+ unsigned char *p = (unsigned char*)PyBytes_AsString(co->co_lnotab);
int line = co->co_firstlineno;
int addr = 0;
while (--size >= 0) {
@@ -604,8 +604,8 @@
int size, addr, line;
unsigned char* p;
- p = (unsigned char*)PyString_AS_STRING(co->co_lnotab);
- size = PyString_GET_SIZE(co->co_lnotab) / 2;
+ p = (unsigned char*)PyBytes_AS_STRING(co->co_lnotab);
+ size = PyBytes_GET_SIZE(co->co_lnotab) / 2;
addr = 0;
line = co->co_firstlineno;
Modified: python/branches/tlee-ast-optimize/Objects/complexobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/complexobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/complexobject.c Sun Jun 1 17:18:10 2008
@@ -303,7 +303,7 @@
cv.imag = 0.;
if (complex_str == NULL) {
- if (!(complex_str = PyString_InternFromString("__complex__")))
+ if (!(complex_str = PyBytes_InternFromString("__complex__")))
return cv;
}
@@ -421,7 +421,7 @@
{
char buf[100];
complex_to_buf(buf, sizeof(buf), v, PREC_REPR);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
static PyObject *
@@ -429,7 +429,7 @@
{
char buf[100];
complex_to_buf(buf, sizeof(buf), v, PREC_STR);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
static long
@@ -876,9 +876,9 @@
#endif
Py_ssize_t len;
- if (PyString_Check(v)) {
- s = PyString_AS_STRING(v);
- len = PyString_GET_SIZE(v);
+ if (PyBytes_Check(v)) {
+ s = PyBytes_AS_STRING(v);
+ len = PyBytes_GET_SIZE(v);
}
#ifdef Py_USING_UNICODE
else if (PyUnicode_Check(v)) {
@@ -1064,7 +1064,7 @@
Py_INCREF(r);
return r;
}
- if (PyString_Check(r) || PyUnicode_Check(r)) {
+ if (PyBytes_Check(r) || PyUnicode_Check(r)) {
if (i != NULL) {
PyErr_SetString(PyExc_TypeError,
"complex() can't take second arg"
@@ -1073,7 +1073,7 @@
}
return complex_subtype_from_string(type, r);
}
- if (i != NULL && (PyString_Check(i) || PyUnicode_Check(i))) {
+ if (i != NULL && (PyBytes_Check(i) || PyUnicode_Check(i))) {
PyErr_SetString(PyExc_TypeError,
"complex() second arg can't be a string");
return NULL;
@@ -1081,7 +1081,7 @@
/* XXX Hack to support classes with __complex__ method */
if (complexstr == NULL) {
- complexstr = PyString_InternFromString("__complex__");
+ complexstr = PyBytes_InternFromString("__complex__");
if (complexstr == NULL)
return NULL;
}
Modified: python/branches/tlee-ast-optimize/Objects/descrobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/descrobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/descrobject.c Sun Jun 1 17:18:10 2008
@@ -15,8 +15,8 @@
static char *
descr_name(PyDescrObject *descr)
{
- if (descr->d_name != NULL && PyString_Check(descr->d_name))
- return PyString_AS_STRING(descr->d_name);
+ if (descr->d_name != NULL && PyBytes_Check(descr->d_name))
+ return PyBytes_AS_STRING(descr->d_name);
else
return "?";
}
@@ -24,7 +24,7 @@
static PyObject *
descr_repr(PyDescrObject *descr, char *format)
{
- return PyString_FromFormat(format, descr_name(descr),
+ return PyBytes_FromFormat(format, descr_name(descr),
descr->d_type->tp_name);
}
@@ -314,7 +314,7 @@
Py_INCREF(Py_None);
return Py_None;
}
- return PyString_FromString(descr->d_method->ml_doc);
+ return PyBytes_FromString(descr->d_method->ml_doc);
}
static PyMemberDef descr_members[] = {
@@ -335,7 +335,7 @@
Py_INCREF(Py_None);
return Py_None;
}
- return PyString_FromString(descr->d_member->doc);
+ return PyBytes_FromString(descr->d_member->doc);
}
static PyGetSetDef member_getset[] = {
@@ -350,7 +350,7 @@
Py_INCREF(Py_None);
return Py_None;
}
- return PyString_FromString(descr->d_getset->doc);
+ return PyBytes_FromString(descr->d_getset->doc);
}
static PyGetSetDef getset_getset[] = {
@@ -365,7 +365,7 @@
Py_INCREF(Py_None);
return Py_None;
}
- return PyString_FromString(descr->d_base->doc);
+ return PyBytes_FromString(descr->d_base->doc);
}
static PyGetSetDef wrapperdescr_getset[] = {
@@ -576,7 +576,7 @@
if (descr != NULL) {
Py_XINCREF(type);
descr->d_type = type;
- descr->d_name = PyString_InternFromString(name);
+ descr->d_name = PyBytes_InternFromString(name);
if (descr->d_name == NULL) {
Py_DECREF(descr);
descr = NULL;
@@ -922,7 +922,7 @@
static PyObject *
wrapper_repr(wrapperobject *wp)
{
- return PyString_FromFormat("<method-wrapper '%s' of %s object at %p>",
+ return PyBytes_FromFormat("<method-wrapper '%s' of %s object at %p>",
wp->descr->d_base->name,
wp->self->ob_type->tp_name,
wp->self);
@@ -947,7 +947,7 @@
{
char *s = wp->descr->d_base->name;
- return PyString_FromString(s);
+ return PyBytes_FromString(s);
}
static PyObject *
@@ -960,7 +960,7 @@
return Py_None;
}
else {
- return PyString_FromString(s);
+ return PyBytes_FromString(s);
}
}
Modified: python/branches/tlee-ast-optimize/Objects/dictobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/dictobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/dictobject.c Sun Jun 1 17:18:10 2008
@@ -224,7 +224,7 @@
{
register PyDictObject *mp;
if (dummy == NULL) { /* Auto-initialize dummy */
- dummy = PyString_FromString("<dummy key>");
+ dummy = PyBytes_FromString("<dummy key>");
if (dummy == NULL)
return NULL;
#ifdef SHOW_CONVERSION_COUNTS
@@ -373,7 +373,7 @@
* this assumption allows testing for errors during PyObject_RichCompareBool()
* to be dropped; string-string comparisons never raise exceptions. This also
* means we don't need to go through PyObject_RichCompareBool(); we can always
- * use _PyString_Eq() directly.
+ * use _PyBytes_Eq() directly.
*
* This is valuable because dicts with only string keys are very common.
*/
@@ -391,7 +391,7 @@
including subclasses of str; e.g., one reason to subclass
strings is to override __eq__, and for speed we don't cater to
that here. */
- if (!PyString_CheckExact(key)) {
+ if (!PyBytes_CheckExact(key)) {
#ifdef SHOW_CONVERSION_COUNTS
++converted;
#endif
@@ -405,7 +405,7 @@
if (ep->me_key == dummy)
freeslot = ep;
else {
- if (ep->me_hash == hash && _PyString_Eq(ep->me_key, key))
+ if (ep->me_hash == hash && _PyBytes_Eq(ep->me_key, key))
return ep;
freeslot = NULL;
}
@@ -420,7 +420,7 @@
if (ep->me_key == key
|| (ep->me_hash == hash
&& ep->me_key != dummy
- && _PyString_Eq(ep->me_key, key)))
+ && _PyBytes_Eq(ep->me_key, key)))
return ep;
if (ep->me_key == dummy && freeslot == NULL)
freeslot = ep;
@@ -626,8 +626,8 @@
PyThreadState *tstate;
if (!PyDict_Check(op))
return NULL;
- if (!PyString_CheckExact(key) ||
- (hash = ((PyStringObject *) key)->ob_shash) == -1)
+ if (!PyBytes_CheckExact(key) ||
+ (hash = ((PyBytesObject *) key)->ob_shash) == -1)
{
hash = PyObject_Hash(key);
if (hash == -1) {
@@ -680,8 +680,8 @@
assert(key);
assert(value);
mp = (PyDictObject *)op;
- if (PyString_CheckExact(key)) {
- hash = ((PyStringObject *)key)->ob_shash;
+ if (PyBytes_CheckExact(key)) {
+ hash = ((PyBytesObject *)key)->ob_shash;
if (hash == -1)
hash = PyObject_Hash(key);
}
@@ -728,8 +728,8 @@
return -1;
}
assert(key);
- if (!PyString_CheckExact(key) ||
- (hash = ((PyStringObject *) key)->ob_shash) == -1) {
+ if (!PyBytes_CheckExact(key) ||
+ (hash = ((PyBytesObject *) key)->ob_shash) == -1) {
hash = PyObject_Hash(key);
if (hash == -1)
return -1;
@@ -982,11 +982,11 @@
i = Py_ReprEnter((PyObject *)mp);
if (i != 0) {
- return i > 0 ? PyString_FromString("{...}") : NULL;
+ return i > 0 ? PyBytes_FromString("{...}") : NULL;
}
if (mp->ma_used == 0) {
- result = PyString_FromString("{}");
+ result = PyBytes_FromString("{}");
goto Done;
}
@@ -994,7 +994,7 @@
if (pieces == NULL)
goto Done;
- colon = PyString_FromString(": ");
+ colon = PyBytes_FromString(": ");
if (colon == NULL)
goto Done;
@@ -1006,8 +1006,8 @@
/* Prevent repr from deleting value during key format. */
Py_INCREF(value);
s = PyObject_Repr(key);
- PyString_Concat(&s, colon);
- PyString_ConcatAndDel(&s, PyObject_Repr(value));
+ PyBytes_Concat(&s, colon);
+ PyBytes_ConcatAndDel(&s, PyObject_Repr(value));
Py_DECREF(value);
if (s == NULL)
goto Done;
@@ -1019,29 +1019,29 @@
/* Add "{}" decorations to the first and last items. */
assert(PyList_GET_SIZE(pieces) > 0);
- s = PyString_FromString("{");
+ s = PyBytes_FromString("{");
if (s == NULL)
goto Done;
temp = PyList_GET_ITEM(pieces, 0);
- PyString_ConcatAndDel(&s, temp);
+ PyBytes_ConcatAndDel(&s, temp);
PyList_SET_ITEM(pieces, 0, s);
if (s == NULL)
goto Done;
- s = PyString_FromString("}");
+ s = PyBytes_FromString("}");
if (s == NULL)
goto Done;
temp = PyList_GET_ITEM(pieces, PyList_GET_SIZE(pieces) - 1);
- PyString_ConcatAndDel(&temp, s);
+ PyBytes_ConcatAndDel(&temp, s);
PyList_SET_ITEM(pieces, PyList_GET_SIZE(pieces) - 1, temp);
if (temp == NULL)
goto Done;
/* Paste them all together with ", " between. */
- s = PyString_FromString(", ");
+ s = PyBytes_FromString(", ");
if (s == NULL)
goto Done;
- result = _PyString_Join(s, pieces);
+ result = _PyBytes_Join(s, pieces);
Py_DECREF(s);
Done:
@@ -1064,8 +1064,8 @@
long hash;
PyDictEntry *ep;
assert(mp->ma_table != NULL);
- if (!PyString_CheckExact(key) ||
- (hash = ((PyStringObject *) key)->ob_shash) == -1) {
+ if (!PyBytes_CheckExact(key) ||
+ (hash = ((PyBytesObject *) key)->ob_shash) == -1) {
hash = PyObject_Hash(key);
if (hash == -1)
return NULL;
@@ -1081,7 +1081,7 @@
static PyObject *missing_str = NULL;
if (missing_str == NULL)
missing_str =
- PyString_InternFromString("__missing__");
+ PyBytes_InternFromString("__missing__");
missing = _PyType_Lookup(Py_TYPE(mp), missing_str);
if (missing != NULL)
return PyObject_CallFunctionObjArgs(missing,
@@ -1794,8 +1794,8 @@
long hash;
PyDictEntry *ep;
- if (!PyString_CheckExact(key) ||
- (hash = ((PyStringObject *) key)->ob_shash) == -1) {
+ if (!PyBytes_CheckExact(key) ||
+ (hash = ((PyBytesObject *) key)->ob_shash) == -1) {
hash = PyObject_Hash(key);
if (hash == -1)
return NULL;
@@ -1827,8 +1827,8 @@
if (!PyArg_UnpackTuple(args, "get", 1, 2, &key, &failobj))
return NULL;
- if (!PyString_CheckExact(key) ||
- (hash = ((PyStringObject *) key)->ob_shash) == -1) {
+ if (!PyBytes_CheckExact(key) ||
+ (hash = ((PyBytesObject *) key)->ob_shash) == -1) {
hash = PyObject_Hash(key);
if (hash == -1)
return NULL;
@@ -1856,8 +1856,8 @@
if (!PyArg_UnpackTuple(args, "setdefault", 1, 2, &key, &failobj))
return NULL;
- if (!PyString_CheckExact(key) ||
- (hash = ((PyStringObject *) key)->ob_shash) == -1) {
+ if (!PyBytes_CheckExact(key) ||
+ (hash = ((PyBytesObject *) key)->ob_shash) == -1) {
hash = PyObject_Hash(key);
if (hash == -1)
return NULL;
@@ -1902,8 +1902,8 @@
"pop(): dictionary is empty");
return NULL;
}
- if (!PyString_CheckExact(key) ||
- (hash = ((PyStringObject *) key)->ob_shash) == -1) {
+ if (!PyBytes_CheckExact(key) ||
+ (hash = ((PyBytesObject *) key)->ob_shash) == -1) {
hash = PyObject_Hash(key);
if (hash == -1)
return NULL;
@@ -2133,8 +2133,8 @@
PyDictObject *mp = (PyDictObject *)op;
PyDictEntry *ep;
- if (!PyString_CheckExact(key) ||
- (hash = ((PyStringObject *) key)->ob_shash) == -1) {
+ if (!PyBytes_CheckExact(key) ||
+ (hash = ((PyBytesObject *) key)->ob_shash) == -1) {
hash = PyObject_Hash(key);
if (hash == -1)
return -1;
@@ -2260,7 +2260,7 @@
PyDict_GetItemString(PyObject *v, const char *key)
{
PyObject *kv, *rv;
- kv = PyString_FromString(key);
+ kv = PyBytes_FromString(key);
if (kv == NULL)
return NULL;
rv = PyDict_GetItem(v, kv);
@@ -2273,10 +2273,10 @@
{
PyObject *kv;
int err;
- kv = PyString_FromString(key);
+ kv = PyBytes_FromString(key);
if (kv == NULL)
return -1;
- PyString_InternInPlace(&kv); /* XXX Should we really? */
+ PyBytes_InternInPlace(&kv); /* XXX Should we really? */
err = PyDict_SetItem(v, kv, item);
Py_DECREF(kv);
return err;
@@ -2287,7 +2287,7 @@
{
PyObject *kv;
int err;
- kv = PyString_FromString(key);
+ kv = PyBytes_FromString(key);
if (kv == NULL)
return -1;
err = PyDict_DelItem(v, kv);
Modified: python/branches/tlee-ast-optimize/Objects/exceptions.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/exceptions.c (original)
+++ python/branches/tlee-ast-optimize/Objects/exceptions.c Sun Jun 1 17:18:10 2008
@@ -44,7 +44,7 @@
return NULL;
}
- self->message = PyString_FromString("");
+ self->message = PyBytes_FromString("");
if (!self->message) {
Py_DECREF(self);
return NULL;
@@ -104,7 +104,7 @@
switch (PyTuple_GET_SIZE(self->args)) {
case 0:
- out = PyString_FromString("");
+ out = PyBytes_FromString("");
break;
case 1:
out = PyObject_Str(PyTuple_GET_ITEM(self->args, 0));
@@ -133,13 +133,13 @@
dot = strrchr(name, '.');
if (dot != NULL) name = dot+1;
- repr = PyString_FromString(name);
+ repr = PyBytes_FromString(name);
if (!repr) {
Py_DECREF(repr_suffix);
return NULL;
}
- PyString_ConcatAndDel(&repr, repr_suffix);
+ PyBytes_ConcatAndDel(&repr, repr_suffix);
return repr;
}
@@ -610,7 +610,7 @@
PyObject *repr;
PyObject *tuple;
- fmt = PyString_FromString("[Errno %s] %s: %s");
+ fmt = PyBytes_FromString("[Errno %s] %s: %s");
if (!fmt)
return NULL;
@@ -645,7 +645,7 @@
PyTuple_SET_ITEM(tuple, 2, repr);
- rtnval = PyString_Format(fmt, tuple);
+ rtnval = PyBytes_Format(fmt, tuple);
Py_DECREF(fmt);
Py_DECREF(tuple);
@@ -654,7 +654,7 @@
PyObject *fmt;
PyObject *tuple;
- fmt = PyString_FromString("[Errno %s] %s");
+ fmt = PyBytes_FromString("[Errno %s] %s");
if (!fmt)
return NULL;
@@ -681,7 +681,7 @@
PyTuple_SET_ITEM(tuple, 1, Py_None);
}
- rtnval = PyString_Format(fmt, tuple);
+ rtnval = PyBytes_Format(fmt, tuple);
Py_DECREF(fmt);
Py_DECREF(tuple);
@@ -841,7 +841,7 @@
PyObject *repr;
PyObject *tuple;
- fmt = PyString_FromString("[Error %s] %s: %s");
+ fmt = PyBytes_FromString("[Error %s] %s: %s");
if (!fmt)
return NULL;
@@ -876,7 +876,7 @@
PyTuple_SET_ITEM(tuple, 2, repr);
- rtnval = PyString_Format(fmt, tuple);
+ rtnval = PyBytes_Format(fmt, tuple);
Py_DECREF(fmt);
Py_DECREF(tuple);
@@ -885,7 +885,7 @@
PyObject *fmt;
PyObject *tuple;
- fmt = PyString_FromString("[Error %s] %s");
+ fmt = PyBytes_FromString("[Error %s] %s");
if (!fmt)
return NULL;
@@ -912,7 +912,7 @@
PyTuple_SET_ITEM(tuple, 1, Py_None);
}
- rtnval = PyString_Format(fmt, tuple);
+ rtnval = PyBytes_Format(fmt, tuple);
Py_DECREF(fmt);
Py_DECREF(tuple);
@@ -1109,21 +1109,21 @@
str = PyObject_Str(Py_None);
if (!str) return NULL;
/* Don't fiddle with non-string return (shouldn't happen anyway) */
- if (!PyString_Check(str)) return str;
+ if (!PyBytes_Check(str)) return str;
/* XXX -- do all the additional formatting with filename and
lineno here */
have_filename = (self->filename != NULL) &&
- PyString_Check(self->filename);
+ PyBytes_Check(self->filename);
have_lineno = (self->lineno != NULL) && PyInt_Check(self->lineno);
if (!have_filename && !have_lineno)
return str;
- bufsize = PyString_GET_SIZE(str) + 64;
+ bufsize = PyBytes_GET_SIZE(str) + 64;
if (have_filename)
- bufsize += PyString_GET_SIZE(self->filename);
+ bufsize += PyBytes_GET_SIZE(self->filename);
buffer = PyMem_MALLOC(bufsize);
if (buffer == NULL)
@@ -1131,19 +1131,19 @@
if (have_filename && have_lineno)
PyOS_snprintf(buffer, bufsize, "%s (%s, line %ld)",
- PyString_AS_STRING(str),
- my_basename(PyString_AS_STRING(self->filename)),
+ PyBytes_AS_STRING(str),
+ my_basename(PyBytes_AS_STRING(self->filename)),
PyInt_AsLong(self->lineno));
else if (have_filename)
PyOS_snprintf(buffer, bufsize, "%s (%s)",
- PyString_AS_STRING(str),
- my_basename(PyString_AS_STRING(self->filename)));
+ PyBytes_AS_STRING(str),
+ my_basename(PyBytes_AS_STRING(self->filename)));
else /* only have_lineno */
PyOS_snprintf(buffer, bufsize, "%s (line %ld)",
- PyString_AS_STRING(str),
+ PyBytes_AS_STRING(str),
PyInt_AsLong(self->lineno));
- result = PyString_FromString(buffer);
+ result = PyBytes_FromString(buffer);
PyMem_FREE(buffer);
if (result == NULL)
@@ -1250,7 +1250,7 @@
return NULL;
}
- if (!PyString_Check(attr)) {
+ if (!PyBytes_Check(attr)) {
PyErr_Format(PyExc_TypeError, "%.200s attribute must be str", name);
return NULL;
}
@@ -1262,7 +1262,7 @@
static int
set_string(PyObject **attr, const char *value)
{
- PyObject *obj = PyString_FromString(value);
+ PyObject *obj = PyBytes_FromString(value);
if (!obj)
return -1;
Py_CLEAR(*attr);
@@ -1345,7 +1345,7 @@
"object");
if (!obj)
return -1;
- size = PyString_GET_SIZE(obj);
+ size = PyBytes_GET_SIZE(obj);
*start = ((PyUnicodeErrorObject *)exc)->start;
if (*start<0)
*start = 0;
@@ -1415,7 +1415,7 @@
if (!obj)
return -1;
*end = ((PyUnicodeErrorObject *)exc)->end;
- size = PyString_GET_SIZE(obj);
+ size = PyBytes_GET_SIZE(obj);
if (*end<1)
*end = 1;
if (*end>size)
@@ -1506,11 +1506,11 @@
Py_CLEAR(self->reason);
if (!PyArg_ParseTuple(args, "O!O!nnO!",
- &PyString_Type, &self->encoding,
+ &PyBytes_Type, &self->encoding,
objecttype, &self->object,
&self->start,
&self->end,
- &PyString_Type, &self->reason)) {
+ &PyBytes_Type, &self->reason)) {
self->encoding = self->object = self->reason = NULL;
return -1;
}
@@ -1590,20 +1590,20 @@
PyOS_snprintf(badchar_str, sizeof(badchar_str), "u%04x", badchar);
else
PyOS_snprintf(badchar_str, sizeof(badchar_str), "U%08x", badchar);
- return PyString_FromFormat(
+ return PyBytes_FromFormat(
"'%.400s' codec can't encode character u'\\%s' in position %zd: %.400s",
- PyString_AS_STRING(uself->encoding),
+ PyBytes_AS_STRING(uself->encoding),
badchar_str,
uself->start,
- PyString_AS_STRING(uself->reason)
+ PyBytes_AS_STRING(uself->reason)
);
}
- return PyString_FromFormat(
+ return PyBytes_FromFormat(
"'%.400s' codec can't encode characters in position %zd-%zd: %.400s",
- PyString_AS_STRING(uself->encoding),
+ PyBytes_AS_STRING(uself->encoding),
uself->start,
uself->end-1,
- PyString_AS_STRING(uself->reason)
+ PyBytes_AS_STRING(uself->reason)
);
}
@@ -1642,7 +1642,7 @@
if (BaseException_init((PyBaseExceptionObject *)self, args, kwds) == -1)
return -1;
return UnicodeError_init((PyUnicodeErrorObject *)self, args,
- kwds, &PyString_Type);
+ kwds, &PyBytes_Type);
}
static PyObject *
@@ -1654,21 +1654,21 @@
/* FromFormat does not support %02x, so format that separately */
char byte[4];
PyOS_snprintf(byte, sizeof(byte), "%02x",
- ((int)PyString_AS_STRING(uself->object)[uself->start])&0xff);
- return PyString_FromFormat(
+ ((int)PyBytes_AS_STRING(uself->object)[uself->start])&0xff);
+ return PyBytes_FromFormat(
"'%.400s' codec can't decode byte 0x%s in position %zd: %.400s",
- PyString_AS_STRING(uself->encoding),
+ PyBytes_AS_STRING(uself->encoding),
byte,
uself->start,
- PyString_AS_STRING(uself->reason)
+ PyBytes_AS_STRING(uself->reason)
);
}
- return PyString_FromFormat(
+ return PyBytes_FromFormat(
"'%.400s' codec can't decode bytes in position %zd-%zd: %.400s",
- PyString_AS_STRING(uself->encoding),
+ PyBytes_AS_STRING(uself->encoding),
uself->start,
uself->end-1,
- PyString_AS_STRING(uself->reason)
+ PyBytes_AS_STRING(uself->reason)
);
}
@@ -1718,7 +1718,7 @@
&PyUnicode_Type, &self->object,
&self->start,
&self->end,
- &PyString_Type, &self->reason)) {
+ &PyBytes_Type, &self->reason)) {
self->object = self->reason = NULL;
return -1;
}
@@ -1744,18 +1744,18 @@
PyOS_snprintf(badchar_str, sizeof(badchar_str), "u%04x", badchar);
else
PyOS_snprintf(badchar_str, sizeof(badchar_str), "U%08x", badchar);
- return PyString_FromFormat(
+ return PyBytes_FromFormat(
"can't translate character u'\\%s' in position %zd: %.400s",
badchar_str,
uself->start,
- PyString_AS_STRING(uself->reason)
+ PyBytes_AS_STRING(uself->reason)
);
}
- return PyString_FromFormat(
+ return PyBytes_FromFormat(
"can't translate characters in position %zd-%zd: %.400s",
uself->start,
uself->end-1,
- PyString_AS_STRING(uself->reason)
+ PyBytes_AS_STRING(uself->reason)
);
}
@@ -2111,7 +2111,7 @@
(PyBaseExceptionObject *)PyExc_RecursionErrorInst;
PyObject *args_tuple;
PyObject *exc_message;
- exc_message = PyString_FromString("maximum recursion depth exceeded");
+ exc_message = PyBytes_FromString("maximum recursion depth exceeded");
if (!exc_message)
Py_FatalError("cannot allocate argument for RuntimeError "
"pre-allocation");
Modified: python/branches/tlee-ast-optimize/Objects/fileobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/fileobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/fileobject.c Sun Jun 1 17:18:10 2008
@@ -26,7 +26,7 @@
#include <io.h>
#endif
-#define BUF(v) PyString_AS_STRING((PyStringObject *)v)
+#define BUF(v) PyBytes_AS_STRING((PyBytesObject *)v)
#ifndef DONT_HAVE_ERRNO_H
#include <errno.h>
@@ -155,11 +155,12 @@
Py_DECREF(f->f_name);
Py_DECREF(f->f_mode);
Py_DECREF(f->f_encoding);
+ Py_DECREF(f->f_errors);
Py_INCREF(name);
f->f_name = name;
- f->f_mode = PyString_FromString(mode);
+ f->f_mode = PyBytes_FromString(mode);
f->f_close = close;
f->f_softspace = 0;
@@ -170,6 +171,8 @@
f->f_skipnextlf = 0;
Py_INCREF(Py_None);
f->f_encoding = Py_None;
+ Py_INCREF(Py_None);
+ f->f_errors = Py_None;
if (f->f_mode == NULL)
return NULL;
@@ -367,7 +370,7 @@
PyFileObject *f = (PyFileObject *)PyFile_Type.tp_new(&PyFile_Type,
NULL, NULL);
if (f != NULL) {
- PyObject *o_name = PyString_FromString(name);
+ PyObject *o_name = PyBytes_FromString(name);
if (o_name == NULL)
return NULL;
if (fill_file_fields(f, fp, o_name, mode, close) == NULL) {
@@ -435,19 +438,38 @@
}
/* Set the encoding used to output Unicode strings.
- Returh 1 on success, 0 on failure. */
+ Return 1 on success, 0 on failure. */
int
PyFile_SetEncoding(PyObject *f, const char *enc)
{
+ return PyFile_SetEncodingAndErrors(f, enc, NULL);
+}
+
+int
+PyFile_SetEncodingAndErrors(PyObject *f, const char *enc, char* errors)
+{
PyFileObject *file = (PyFileObject*)f;
- PyObject *str = PyString_FromString(enc);
+ PyObject *str, *oerrors;
assert(PyFile_Check(f));
+ str = PyBytes_FromString(enc);
if (!str)
return 0;
+ if (errors) {
+ oerrors = PyString_FromString(errors);
+ if (!oerrors) {
+ Py_DECREF(str);
+ return 0;
+ }
+ } else {
+ oerrors = Py_None;
+ Py_INCREF(Py_None);
+ }
Py_DECREF(file->f_encoding);
file->f_encoding = str;
+ Py_DECREF(file->f_errors);
+ file->f_errors = oerrors;
return 1;
}
@@ -491,6 +513,7 @@
Py_XDECREF(f->f_name);
Py_XDECREF(f->f_mode);
Py_XDECREF(f->f_encoding);
+ Py_XDECREF(f->f_errors);
drop_readahead(f);
Py_TYPE(f)->tp_free((PyObject *)f);
}
@@ -502,20 +525,20 @@
#ifdef Py_USING_UNICODE
PyObject *ret = NULL;
PyObject *name = PyUnicode_AsUnicodeEscapeString(f->f_name);
- const char *name_str = name ? PyString_AsString(name) : "?";
- ret = PyString_FromFormat("<%s file u'%s', mode '%s' at %p>",
+ const char *name_str = name ? PyBytes_AsString(name) : "?";
+ ret = PyBytes_FromFormat("<%s file u'%s', mode '%s' at %p>",
f->f_fp == NULL ? "closed" : "open",
name_str,
- PyString_AsString(f->f_mode),
+ PyBytes_AsString(f->f_mode),
f);
Py_XDECREF(name);
return ret;
#endif
} else {
- return PyString_FromFormat("<%s file '%s', mode '%s' at %p>",
+ return PyBytes_FromFormat("<%s file '%s', mode '%s' at %p>",
f->f_fp == NULL ? "closed" : "open",
- PyString_AsString(f->f_name),
- PyString_AsString(f->f_mode),
+ PyBytes_AsString(f->f_name),
+ PyBytes_AsString(f->f_mode),
f);
}
}
@@ -935,7 +958,7 @@
"requested number of bytes is more than a Python string can hold");
return NULL;
}
- v = PyString_FromStringAndSize((char *)NULL, buffersize);
+ v = PyBytes_FromStringAndSize((char *)NULL, buffersize);
if (v == NULL)
return NULL;
bytesread = 0;
@@ -966,7 +989,7 @@
}
if (bytesrequested < 0) {
buffersize = new_buffersize(f, buffersize);
- if (_PyString_Resize(&v, buffersize) < 0)
+ if (_PyBytes_Resize(&v, buffersize) < 0)
return NULL;
} else {
/* Got what was requested. */
@@ -974,7 +997,7 @@
}
}
if (bytesread != buffersize)
- _PyString_Resize(&v, bytesread);
+ _PyBytes_Resize(&v, bytesread);
return v;
}
@@ -1092,7 +1115,7 @@
size_t increment; /* amount to increment the buffer */
size_t prev_v_size;
- /* Optimize for normal case: avoid _PyString_Resize if at all
+ /* Optimize for normal case: avoid _PyBytes_Resize if at all
* possible via first reading into stack buffer "buf".
*/
total_v_size = INITBUFSIZE; /* start small and pray */
@@ -1110,7 +1133,7 @@
clearerr(fp);
if (PyErr_CheckSignals())
return NULL;
- v = PyString_FromStringAndSize(buf, pvfree - buf);
+ v = PyBytes_FromStringAndSize(buf, pvfree - buf);
return v;
}
/* fgets read *something* */
@@ -1139,7 +1162,7 @@
assert(p > pvfree && *(p-1) == '\0');
--p; /* don't include \0 from fgets */
}
- v = PyString_FromStringAndSize(buf, p - buf);
+ v = PyBytes_FromStringAndSize(buf, p - buf);
return v;
}
/* yuck: fgets overwrote all the newlines, i.e. the entire
@@ -1160,7 +1183,7 @@
* into its buffer.
*/
total_v_size = MAXBUFSIZE << 1;
- v = PyString_FromStringAndSize((char*)NULL, (int)total_v_size);
+ v = PyBytes_FromStringAndSize((char*)NULL, (int)total_v_size);
if (v == NULL)
return v;
/* copy over everything except the last null byte */
@@ -1215,13 +1238,13 @@
Py_DECREF(v);
return NULL;
}
- if (_PyString_Resize(&v, (int)total_v_size) < 0)
+ if (_PyBytes_Resize(&v, (int)total_v_size) < 0)
return NULL;
/* overwrite the trailing null byte */
pvfree = BUF(v) + (prev_v_size - 1);
}
if (BUF(v) + total_v_size != p)
- _PyString_Resize(&v, p - BUF(v));
+ _PyBytes_Resize(&v, p - BUF(v));
return v;
#undef INITBUFSIZE
#undef MAXBUFSIZE
@@ -1253,7 +1276,7 @@
return getline_via_fgets(f, fp);
#endif
total_v_size = n > 0 ? n : 100;
- v = PyString_FromStringAndSize((char *)NULL, total_v_size);
+ v = PyBytes_FromStringAndSize((char *)NULL, total_v_size);
if (v == NULL)
return NULL;
buf = BUF(v);
@@ -1326,7 +1349,7 @@
Py_DECREF(v);
return NULL;
}
- if (_PyString_Resize(&v, total_v_size) < 0)
+ if (_PyBytes_Resize(&v, total_v_size) < 0)
return NULL;
buf = BUF(v) + used_v_size;
end = BUF(v) + total_v_size;
@@ -1334,7 +1357,7 @@
used_v_size = buf - BUF(v);
if (used_v_size != total_v_size)
- _PyString_Resize(&v, used_v_size);
+ _PyBytes_Resize(&v, used_v_size);
return v;
}
@@ -1379,7 +1402,7 @@
result = PyEval_CallObject(reader, args);
Py_DECREF(reader);
Py_DECREF(args);
- if (result != NULL && !PyString_Check(result) &&
+ if (result != NULL && !PyBytes_Check(result) &&
!PyUnicode_Check(result)) {
Py_DECREF(result);
result = NULL;
@@ -1388,9 +1411,9 @@
}
}
- if (n < 0 && result != NULL && PyString_Check(result)) {
- char *s = PyString_AS_STRING(result);
- Py_ssize_t len = PyString_GET_SIZE(result);
+ if (n < 0 && result != NULL && PyBytes_Check(result)) {
+ char *s = PyBytes_AS_STRING(result);
+ Py_ssize_t len = PyBytes_GET_SIZE(result);
if (len == 0) {
Py_DECREF(result);
result = NULL;
@@ -1399,10 +1422,10 @@
}
else if (s[len-1] == '\n') {
if (result->ob_refcnt == 1)
- _PyString_Resize(&result, len-1);
+ _PyBytes_Resize(&result, len-1);
else {
PyObject *v;
- v = PyString_FromStringAndSize(s, len-1);
+ v = PyBytes_FromStringAndSize(s, len-1);
Py_DECREF(result);
result = v;
}
@@ -1450,7 +1473,7 @@
if (!PyArg_ParseTuple(args, "|i:readline", &n))
return NULL;
if (n == 0)
- return PyString_FromString("");
+ return PyBytes_FromString("");
if (n < 0)
n = 0;
return get_line(f, n);
@@ -1516,18 +1539,18 @@
}
if (big_buffer == NULL) {
/* Create the big buffer */
- big_buffer = PyString_FromStringAndSize(
+ big_buffer = PyBytes_FromStringAndSize(
NULL, buffersize);
if (big_buffer == NULL)
goto error;
- buffer = PyString_AS_STRING(big_buffer);
+ buffer = PyBytes_AS_STRING(big_buffer);
memcpy(buffer, small_buffer, nfilled);
}
else {
/* Grow the big buffer */
- if ( _PyString_Resize(&big_buffer, buffersize) < 0 )
+ if ( _PyBytes_Resize(&big_buffer, buffersize) < 0 )
goto error;
- buffer = PyString_AS_STRING(big_buffer);
+ buffer = PyBytes_AS_STRING(big_buffer);
}
continue;
}
@@ -1536,7 +1559,7 @@
do {
/* Process complete lines */
p++;
- line = PyString_FromStringAndSize(q, p-q);
+ line = PyBytes_FromStringAndSize(q, p-q);
if (line == NULL)
goto error;
err = PyList_Append(list, line);
@@ -1555,7 +1578,7 @@
}
if (nfilled != 0) {
/* Partial last line */
- line = PyString_FromStringAndSize(buffer, nfilled);
+ line = PyBytes_FromStringAndSize(buffer, nfilled);
if (line == NULL)
goto error;
if (sizehint > 0) {
@@ -1565,7 +1588,7 @@
Py_DECREF(line);
goto error;
}
- PyString_Concat(&line, rest);
+ PyBytes_Concat(&line, rest);
Py_DECREF(rest);
if (line == NULL)
goto error;
@@ -1672,7 +1695,7 @@
could potentially execute Python code. */
for (i = 0; i < j; i++) {
PyObject *v = PyList_GET_ITEM(list, i);
- if (!PyString_Check(v)) {
+ if (!PyBytes_Check(v)) {
const char *buffer;
if (((f->f_binary &&
PyObject_AsReadBuffer(v,
@@ -1685,7 +1708,7 @@
"writelines() argument must be a sequence of strings");
goto error;
}
- line = PyString_FromStringAndSize(buffer,
+ line = PyBytes_FromStringAndSize(buffer,
len);
if (line == NULL)
goto error;
@@ -1701,8 +1724,8 @@
errno = 0;
for (i = 0; i < j; i++) {
line = PyList_GET_ITEM(list, i);
- len = PyString_GET_SIZE(line);
- nwritten = fwrite(PyString_AS_STRING(line),
+ len = PyBytes_GET_SIZE(line);
+ nwritten = fwrite(PyBytes_AS_STRING(line),
1, len, f->f_fp);
if (nwritten != len) {
FILE_ABORT_ALLOW_THREADS(f)
@@ -1879,6 +1902,8 @@
"file name"},
{"encoding", T_OBJECT, OFF(f_encoding), RO,
"file encoding"},
+ {"errors", T_OBJECT, OFF(f_errors), RO,
+ "Unicode error handler"},
/* getattr(f, "closed") is implemented without this table */
{NULL} /* Sentinel */
};
@@ -1896,13 +1921,13 @@
Py_INCREF(Py_None);
return Py_None;
case NEWLINE_CR:
- return PyString_FromString("\r");
+ return PyBytes_FromString("\r");
case NEWLINE_LF:
- return PyString_FromString("\n");
+ return PyBytes_FromString("\n");
case NEWLINE_CR|NEWLINE_LF:
return Py_BuildValue("(ss)", "\r", "\n");
case NEWLINE_CRLF:
- return PyString_FromString("\r\n");
+ return PyBytes_FromString("\r\n");
case NEWLINE_CR|NEWLINE_CRLF:
return Py_BuildValue("(ss)", "\r", "\r\n");
case NEWLINE_LF|NEWLINE_CRLF:
@@ -2004,10 +2029,10 @@
horrified by the recursive call: maximum recursion depth is limited by
logarithmic buffer growth to about 50 even when reading a 1gb line. */
-static PyStringObject *
+static PyBytesObject *
readahead_get_line_skip(PyFileObject *f, int skip, int bufsize)
{
- PyStringObject* s;
+ PyBytesObject* s;
char *bufptr;
char *buf;
Py_ssize_t len;
@@ -2018,17 +2043,17 @@
len = f->f_bufend - f->f_bufptr;
if (len == 0)
- return (PyStringObject *)
- PyString_FromStringAndSize(NULL, skip);
+ return (PyBytesObject *)
+ PyBytes_FromStringAndSize(NULL, skip);
bufptr = (char *)memchr(f->f_bufptr, '\n', len);
if (bufptr != NULL) {
bufptr++; /* Count the '\n' */
len = bufptr - f->f_bufptr;
- s = (PyStringObject *)
- PyString_FromStringAndSize(NULL, skip+len);
+ s = (PyBytesObject *)
+ PyBytes_FromStringAndSize(NULL, skip+len);
if (s == NULL)
return NULL;
- memcpy(PyString_AS_STRING(s)+skip, f->f_bufptr, len);
+ memcpy(PyBytes_AS_STRING(s)+skip, f->f_bufptr, len);
f->f_bufptr = bufptr;
if (bufptr == f->f_bufend)
drop_readahead(f);
@@ -2043,7 +2068,7 @@
PyMem_Free(buf);
return NULL;
}
- memcpy(PyString_AS_STRING(s)+skip, bufptr, len);
+ memcpy(PyBytes_AS_STRING(s)+skip, bufptr, len);
PyMem_Free(buf);
}
return s;
@@ -2055,13 +2080,13 @@
static PyObject *
file_iternext(PyFileObject *f)
{
- PyStringObject* l;
+ PyBytesObject* l;
if (f->f_fp == NULL)
return err_closed();
l = readahead_get_line_skip(f, 0, READAHEAD_BUFSIZE);
- if (l == NULL || PyString_GET_SIZE(l) == 0) {
+ if (l == NULL || PyBytes_GET_SIZE(l) == 0) {
Py_XDECREF(l);
return NULL;
}
@@ -2078,7 +2103,7 @@
assert(type != NULL && type->tp_alloc != NULL);
if (not_yet_string == NULL) {
- not_yet_string = PyString_InternFromString("<uninitialized file>");
+ not_yet_string = PyBytes_InternFromString("<uninitialized file>");
if (not_yet_string == NULL)
return NULL;
}
@@ -2093,6 +2118,8 @@
((PyFileObject *)self)->f_mode = not_yet_string;
Py_INCREF(Py_None);
((PyFileObject *)self)->f_encoding = Py_None;
+ Py_INCREF(Py_None);
+ ((PyFileObject *)self)->f_errors = Py_None;
((PyFileObject *)self)->weakreflist = NULL;
((PyFileObject *)self)->unlocked_count = 0;
}
@@ -2294,8 +2321,10 @@
#ifdef Py_USING_UNICODE
if ((flags & Py_PRINT_RAW) &&
PyUnicode_Check(v) && enc != Py_None) {
- char *cenc = PyString_AS_STRING(enc);
- value = PyUnicode_AsEncodedString(v, cenc, "strict");
+ char *cenc = PyBytes_AS_STRING(enc);
+ char *errors = fobj->f_errors == Py_None ?
+ "strict" : PyBytes_AS_STRING(fobj->f_errors);
+ value = PyUnicode_AsEncodedString(v, cenc, errors);
if (value == NULL)
return -1;
} else {
@@ -2365,7 +2394,7 @@
return 0;
}
else if (!PyErr_Occurred()) {
- PyObject *v = PyString_FromString(s);
+ PyObject *v = PyBytes_FromString(s);
int err;
if (v == NULL)
return -1;
Modified: python/branches/tlee-ast-optimize/Objects/floatobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/floatobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/floatobject.c Sun Jun 1 17:18:10 2008
@@ -14,9 +14,6 @@
#include <ieeefp.h>
#endif
-#include "formatter_string.h"
-
-
#ifdef _OSF_SOURCE
/* OSF1 5.1 doesn't make this available with XOPEN_SOURCE_EXTENDED defined */
extern int finite(double);
@@ -185,9 +182,9 @@
if (pend)
*pend = NULL;
- if (PyString_Check(v)) {
- s = PyString_AS_STRING(v);
- len = PyString_GET_SIZE(v);
+ if (PyBytes_Check(v)) {
+ s = PyBytes_AS_STRING(v);
+ len = PyBytes_GET_SIZE(v);
}
#ifdef Py_USING_UNICODE
else if (PyUnicode_Check(v)) {
@@ -488,7 +485,7 @@
char buf[100];
format_float(buf, sizeof(buf), v, PREC_REPR);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
static PyObject *
@@ -496,7 +493,7 @@
{
char buf[100];
format_float(buf, sizeof(buf), v, PREC_STR);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
/* Comparison is pretty much a nightmare. When comparing float to float,
@@ -1221,7 +1218,7 @@
return float_subtype_new(type, args, kwds); /* Wimp out */
if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O:float", kwlist, &x))
return NULL;
- if (PyString_Check(x))
+ if (PyBytes_Check(x))
return PyFloat_FromString(x, NULL);
return PyNumber_Float(x);
}
@@ -1272,13 +1269,13 @@
char* s;
float_format_type r;
- if (!PyString_Check(arg)) {
+ if (!PyBytes_Check(arg)) {
PyErr_Format(PyExc_TypeError,
"__getformat__() argument must be string, not %.500s",
Py_TYPE(arg)->tp_name);
return NULL;
}
- s = PyString_AS_STRING(arg);
+ s = PyBytes_AS_STRING(arg);
if (strcmp(s, "double") == 0) {
r = double_format;
}
@@ -1294,11 +1291,11 @@
switch (r) {
case unknown_format:
- return PyString_FromString("unknown");
+ return PyBytes_FromString("unknown");
case ieee_little_endian_format:
- return PyString_FromString("IEEE, little-endian");
+ return PyBytes_FromString("IEEE, little-endian");
case ieee_big_endian_format:
- return PyString_FromString("IEEE, big-endian");
+ return PyBytes_FromString("IEEE, big-endian");
default:
Py_FatalError("insane float_format or double_format");
return NULL;
@@ -1397,27 +1394,23 @@
if (!PyArg_ParseTuple(args, "O:__format__", &format_spec))
return NULL;
- if (PyString_Check(format_spec))
- return string_float__format__(self, args);
+ if (PyBytes_Check(format_spec))
+ return _PyFloat_FormatAdvanced(self,
+ PyBytes_AS_STRING(format_spec),
+ PyBytes_GET_SIZE(format_spec));
if (PyUnicode_Check(format_spec)) {
/* Convert format_spec to a str */
- PyObject *result = NULL;
- PyObject *newargs = NULL;
- PyObject *string_format_spec = NULL;
-
- string_format_spec = PyObject_Str(format_spec);
- if (string_format_spec == NULL)
- goto done;
-
- newargs = Py_BuildValue("(O)", string_format_spec);
- if (newargs == NULL)
- goto done;
-
- result = string_float__format__(self, newargs);
-
- done:
- Py_XDECREF(string_format_spec);
- Py_XDECREF(newargs);
+ PyObject *result;
+ PyObject *str_spec = PyObject_Str(format_spec);
+
+ if (str_spec == NULL)
+ return NULL;
+
+ result = _PyFloat_FormatAdvanced(self,
+ PyBytes_AS_STRING(str_spec),
+ PyBytes_GET_SIZE(str_spec));
+
+ Py_DECREF(str_spec);
return result;
}
PyErr_SetString(PyExc_TypeError, "__format__ requires str or unicode");
Modified: python/branches/tlee-ast-optimize/Objects/frameobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/frameobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/frameobject.c Sun Jun 1 17:18:10 2008
@@ -114,7 +114,7 @@
/* Find the bytecode offset for the start of the given line, or the
* first code-owning line after it. */
- PyString_AsStringAndSize(f->f_code->co_lnotab, &lnotab, &lnotab_len);
+ PyBytes_AsStringAndSize(f->f_code->co_lnotab, &lnotab, &lnotab_len);
addr = 0;
line = f->f_code->co_firstlineno;
new_lasti = -1;
@@ -137,7 +137,7 @@
}
/* We're now ready to look at the bytecode. */
- PyString_AsStringAndSize(f->f_code->co_code, (char **)&code, &code_len);
+ PyBytes_AsStringAndSize(f->f_code->co_code, (char **)&code, &code_len);
min_addr = MIN(new_lasti, f->f_lasti);
max_addr = MAX(new_lasti, f->f_lasti);
@@ -548,7 +548,7 @@
int _PyFrame_Init()
{
- builtin_object = PyString_InternFromString("__builtins__");
+ builtin_object = PyBytes_InternFromString("__builtins__");
return (builtin_object != NULL);
}
@@ -728,7 +728,7 @@
for (j = nmap; --j >= 0; ) {
PyObject *key = PyTuple_GET_ITEM(map, j);
PyObject *value = values[j];
- assert(PyString_Check(key));
+ assert(PyBytes_Check(key));
if (deref) {
assert(PyCell_Check(value));
value = PyCell_GET(value);
@@ -776,7 +776,7 @@
for (j = nmap; --j >= 0; ) {
PyObject *key = PyTuple_GET_ITEM(map, j);
PyObject *value = PyObject_GetItem(dict, key);
- assert(PyString_Check(key));
+ assert(PyBytes_Check(key));
/* We only care about NULLs if clear is true. */
if (value == NULL) {
PyErr_Clear();
Modified: python/branches/tlee-ast-optimize/Objects/funcobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/funcobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/funcobject.c Sun Jun 1 17:18:10 2008
@@ -28,7 +28,7 @@
consts = ((PyCodeObject *)code)->co_consts;
if (PyTuple_Size(consts) >= 1) {
doc = PyTuple_GetItem(consts, 0);
- if (!PyString_Check(doc) && !PyUnicode_Check(doc))
+ if (!PyBytes_Check(doc) && !PyUnicode_Check(doc))
doc = Py_None;
}
else
@@ -42,7 +42,7 @@
Otherwise, use None.
*/
if (!__name__) {
- __name__ = PyString_InternFromString("__name__");
+ __name__ = PyBytes_InternFromString("__name__");
if (!__name__) {
Py_DECREF(op);
return NULL;
@@ -254,7 +254,7 @@
PyErr_Format(PyExc_ValueError,
"%s() requires a code object with %zd free vars,"
" not %zd",
- PyString_AsString(op->func_name),
+ PyBytes_AsString(op->func_name),
nclosure, nfree);
return -1;
}
@@ -281,7 +281,7 @@
return -1;
/* Not legal to del f.func_name or to set it to anything
* other than a string object. */
- if (value == NULL || !PyString_Check(value)) {
+ if (value == NULL || !PyBytes_Check(value)) {
PyErr_SetString(PyExc_TypeError,
"__name__ must be set to a string object");
return -1;
@@ -380,7 +380,7 @@
&PyDict_Type, &globals,
&name, &defaults, &closure))
return NULL;
- if (name != Py_None && !PyString_Check(name)) {
+ if (name != Py_None && !PyBytes_Check(name)) {
PyErr_SetString(PyExc_TypeError,
"arg 3 (name) must be None or string");
return NULL;
@@ -409,7 +409,7 @@
if (nfree != nclosure)
return PyErr_Format(PyExc_ValueError,
"%s requires closure of length %zd, not %zd",
- PyString_AS_STRING(code->co_name),
+ PyBytes_AS_STRING(code->co_name),
nfree, nclosure);
if (nclosure) {
Py_ssize_t i;
@@ -465,8 +465,8 @@
static PyObject*
func_repr(PyFunctionObject *op)
{
- return PyString_FromFormat("<function %s at %p>",
- PyString_AsString(op->func_name),
+ return PyBytes_FromFormat("<function %s at %p>",
+ PyBytes_AsString(op->func_name),
op);
}
Modified: python/branches/tlee-ast-optimize/Objects/genobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/genobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/genobject.c Sun Jun 1 17:18:10 2008
@@ -285,10 +285,10 @@
gen_repr(PyGenObject *gen)
{
char *code_name;
- code_name = PyString_AsString(((PyCodeObject *)gen->gi_code)->co_name);
+ code_name = PyBytes_AsString(((PyCodeObject *)gen->gi_code)->co_name);
if (code_name == NULL)
return NULL;
- return PyString_FromFormat("<generator object %.200s at %p>",
+ return PyBytes_FromFormat("<generator object %.200s at %p>",
code_name, gen);
}
Modified: python/branches/tlee-ast-optimize/Objects/intobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/intobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/intobject.c Sun Jun 1 17:18:10 2008
@@ -3,7 +3,6 @@
#include "Python.h"
#include <ctype.h>
-#include "formatter_string.h"
static PyObject *int_int(PyIntObject *v);
@@ -368,7 +367,7 @@
if (*end != '\0') {
bad:
slen = strlen(s) < 200 ? strlen(s) : 200;
- sobj = PyString_FromStringAndSize(s, slen);
+ sobj = PyBytes_FromStringAndSize(s, slen);
if (sobj == NULL)
return NULL;
srepr = PyObject_Repr(sobj);
@@ -377,7 +376,7 @@
return NULL;
PyErr_Format(PyExc_ValueError,
"invalid literal for int() with base %d: %s",
- base, PyString_AS_STRING(srepr));
+ base, PyBytes_AS_STRING(srepr));
Py_DECREF(srepr);
return NULL;
}
@@ -965,11 +964,11 @@
return PyInt_FromLong(0L);
if (base == -909)
return PyNumber_Int(x);
- if (PyString_Check(x)) {
+ if (PyBytes_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)) {
+ char *string = PyBytes_AS_STRING(x);
+ if (strlen(string) != PyBytes_Size(x)) {
/* create a repr() of the input string,
* just like PyInt_FromString does */
PyObject *srepr;
@@ -978,7 +977,7 @@
return NULL;
PyErr_Format(PyExc_ValueError,
"invalid literal for int() with base %d: %s",
- base, PyString_AS_STRING(srepr));
+ base, PyBytes_AS_STRING(srepr));
Py_DECREF(srepr);
return NULL;
}
@@ -1106,7 +1105,7 @@
if (negative)
*--p = '-';
- return PyString_FromStringAndSize(p, &buf[sizeof(buf)] - p);
+ return PyBytes_FromStringAndSize(p, &buf[sizeof(buf)] - p);
}
static PyObject *
@@ -1116,27 +1115,23 @@
if (!PyArg_ParseTuple(args, "O:__format__", &format_spec))
return NULL;
- if (PyString_Check(format_spec))
- return string_int__format__(self, args);
+ if (PyBytes_Check(format_spec))
+ return _PyInt_FormatAdvanced(self,
+ PyBytes_AS_STRING(format_spec),
+ PyBytes_GET_SIZE(format_spec));
if (PyUnicode_Check(format_spec)) {
/* Convert format_spec to a str */
- PyObject *result = NULL;
- PyObject *newargs = NULL;
- PyObject *string_format_spec = NULL;
-
- string_format_spec = PyObject_Str(format_spec);
- if (string_format_spec == NULL)
- goto done;
-
- newargs = Py_BuildValue("(O)", string_format_spec);
- if (newargs == NULL)
- goto done;
-
- result = string_int__format__(self, newargs);
-
- done:
- Py_XDECREF(string_format_spec);
- Py_XDECREF(newargs);
+ PyObject *result;
+ PyObject *str_spec = PyObject_Str(format_spec);
+
+ if (str_spec == NULL)
+ return NULL;
+
+ result = _PyInt_FormatAdvanced(self,
+ PyBytes_AS_STRING(str_spec),
+ PyBytes_GET_SIZE(str_spec));
+
+ Py_DECREF(str_spec);
return result;
}
PyErr_SetString(PyExc_TypeError, "__format__ requires str or unicode");
Modified: python/branches/tlee-ast-optimize/Objects/listobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/listobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/listobject.c Sun Jun 1 17:18:10 2008
@@ -174,7 +174,7 @@
}
if (i < 0 || i >= Py_SIZE(op)) {
if (indexerr == NULL)
- indexerr = PyString_FromString(
+ indexerr = PyBytes_FromString(
"list index out of range");
PyErr_SetObject(PyExc_IndexError, indexerr);
return NULL;
@@ -349,11 +349,11 @@
i = Py_ReprEnter((PyObject*)v);
if (i != 0) {
- return i > 0 ? PyString_FromString("[...]") : NULL;
+ return i > 0 ? PyBytes_FromString("[...]") : NULL;
}
if (Py_SIZE(v) == 0) {
- result = PyString_FromString("[]");
+ result = PyBytes_FromString("[]");
goto Done;
}
@@ -379,29 +379,29 @@
/* Add "[]" decorations to the first and last items. */
assert(PyList_GET_SIZE(pieces) > 0);
- s = PyString_FromString("[");
+ s = PyBytes_FromString("[");
if (s == NULL)
goto Done;
temp = PyList_GET_ITEM(pieces, 0);
- PyString_ConcatAndDel(&s, temp);
+ PyBytes_ConcatAndDel(&s, temp);
PyList_SET_ITEM(pieces, 0, s);
if (s == NULL)
goto Done;
- s = PyString_FromString("]");
+ s = PyBytes_FromString("]");
if (s == NULL)
goto Done;
temp = PyList_GET_ITEM(pieces, PyList_GET_SIZE(pieces) - 1);
- PyString_ConcatAndDel(&temp, s);
+ PyBytes_ConcatAndDel(&temp, s);
PyList_SET_ITEM(pieces, PyList_GET_SIZE(pieces) - 1, temp);
if (temp == NULL)
goto Done;
/* Paste them all together with ", " between. */
- s = PyString_FromString(", ");
+ s = PyBytes_FromString(", ");
if (s == NULL)
goto Done;
- result = _PyString_Join(s, pieces);
+ result = _PyBytes_Join(s, pieces);
Py_DECREF(s);
Done:
@@ -433,7 +433,7 @@
{
if (i < 0 || i >= Py_SIZE(a)) {
if (indexerr == NULL)
- indexerr = PyString_FromString(
+ indexerr = PyBytes_FromString(
"list index out of range");
PyErr_SetObject(PyExc_IndexError, indexerr);
return NULL;
Modified: python/branches/tlee-ast-optimize/Objects/longobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/longobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/longobject.c Sun Jun 1 17:18:10 2008
@@ -6,7 +6,6 @@
#include "Python.h"
#include "longintrepr.h"
-#include "formatter_string.h"
#include <ctype.h>
@@ -1200,7 +1199,7 @@
_PyLong_Format(PyObject *aa, int base, int addL, int newstyle)
{
register PyLongObject *a = (PyLongObject *)aa;
- PyStringObject *str;
+ PyBytesObject *str;
Py_ssize_t i, j, sz;
Py_ssize_t size_a;
char *p;
@@ -1229,10 +1228,10 @@
"long is too large to format");
return NULL;
}
- str = (PyStringObject *) PyString_FromStringAndSize((char *)0, sz);
+ str = (PyBytesObject *) PyBytes_FromStringAndSize((char *)0, sz);
if (str == NULL)
return NULL;
- p = PyString_AS_STRING(str) + sz;
+ p = PyBytes_AS_STRING(str) + sz;
*p = '\0';
if (addL)
*--p = 'L';
@@ -1258,7 +1257,7 @@
do {
char cdigit = (char)(accum & (base - 1));
cdigit += (cdigit < 10) ? '0' : 'a'-10;
- assert(p > PyString_AS_STRING(str));
+ assert(p > PyBytes_AS_STRING(str));
*--p = cdigit;
accumbits -= basebits;
accum >>= basebits;
@@ -1310,7 +1309,7 @@
do {
digit nextrem = (digit)(rem / base);
char c = (char)(rem - nextrem * base);
- assert(p > PyString_AS_STRING(str));
+ assert(p > PyBytes_AS_STRING(str));
c += (c < 10) ? '0' : 'a'-10;
*--p = c;
rem = nextrem;
@@ -1348,14 +1347,14 @@
}
if (sign)
*--p = sign;
- if (p != PyString_AS_STRING(str)) {
- char *q = PyString_AS_STRING(str);
+ if (p != PyBytes_AS_STRING(str)) {
+ char *q = PyBytes_AS_STRING(str);
assert(p > q);
do {
} while ((*q++ = *p++) != '\0');
q--;
- _PyString_Resize((PyObject **)&str,
- (Py_ssize_t) (q - PyString_AS_STRING(str)));
+ _PyBytes_Resize((PyObject **)&str,
+ (Py_ssize_t) (q - PyBytes_AS_STRING(str)));
}
return (PyObject *)str;
}
@@ -1719,7 +1718,7 @@
onError:
Py_XDECREF(z);
slen = strlen(orig_str) < 200 ? strlen(orig_str) : 200;
- strobj = PyString_FromStringAndSize(orig_str, slen);
+ strobj = PyBytes_FromStringAndSize(orig_str, slen);
if (strobj == NULL)
return NULL;
strrepr = PyObject_Repr(strobj);
@@ -1728,7 +1727,7 @@
return NULL;
PyErr_Format(PyExc_ValueError,
"invalid literal for long() with base %d: %s",
- base, PyString_AS_STRING(strrepr));
+ base, PyBytes_AS_STRING(strrepr));
Py_DECREF(strrepr);
return NULL;
}
@@ -3332,11 +3331,11 @@
return PyLong_FromLong(0L);
if (base == -909)
return PyNumber_Long(x);
- else if (PyString_Check(x)) {
+ else if (PyBytes_Check(x)) {
/* Since PyLong_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)) {
+ char *string = PyBytes_AS_STRING(x);
+ if (strlen(string) != PyBytes_Size(x)) {
/* create a repr() of the input string,
* just like PyLong_FromString does. */
PyObject *srepr;
@@ -3345,11 +3344,11 @@
return NULL;
PyErr_Format(PyExc_ValueError,
"invalid literal for long() with base %d: %s",
- base, PyString_AS_STRING(srepr));
+ base, PyBytes_AS_STRING(srepr));
Py_DECREF(srepr);
return NULL;
}
- return PyLong_FromString(PyString_AS_STRING(x), NULL, base);
+ return PyLong_FromString(PyBytes_AS_STRING(x), NULL, base);
}
#ifdef Py_USING_UNICODE
else if (PyUnicode_Check(x))
@@ -3414,27 +3413,23 @@
if (!PyArg_ParseTuple(args, "O:__format__", &format_spec))
return NULL;
- if (PyString_Check(format_spec))
- return string_long__format__(self, args);
+ if (PyBytes_Check(format_spec))
+ return _PyLong_FormatAdvanced(self,
+ PyBytes_AS_STRING(format_spec),
+ PyBytes_GET_SIZE(format_spec));
if (PyUnicode_Check(format_spec)) {
/* Convert format_spec to a str */
- PyObject *result = NULL;
- PyObject *newargs = NULL;
- PyObject *string_format_spec = NULL;
-
- string_format_spec = PyObject_Str(format_spec);
- if (string_format_spec == NULL)
- goto done;
-
- newargs = Py_BuildValue("(O)", string_format_spec);
- if (newargs == NULL)
- goto done;
-
- result = string_long__format__(self, newargs);
-
- done:
- Py_XDECREF(string_format_spec);
- Py_XDECREF(newargs);
+ PyObject *result;
+ PyObject *str_spec = PyObject_Str(format_spec);
+
+ if (str_spec == NULL)
+ return NULL;
+
+ result = _PyLong_FormatAdvanced(self,
+ PyBytes_AS_STRING(str_spec),
+ PyBytes_GET_SIZE(str_spec));
+
+ Py_DECREF(str_spec);
return result;
}
PyErr_SetString(PyExc_TypeError, "__format__ requires str or unicode");
Modified: python/branches/tlee-ast-optimize/Objects/methodobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/methodobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/methodobject.c Sun Jun 1 17:18:10 2008
@@ -149,7 +149,7 @@
const char *doc = m->m_ml->ml_doc;
if (doc != NULL)
- return PyString_FromString(doc);
+ return PyBytes_FromString(doc);
Py_INCREF(Py_None);
return Py_None;
}
@@ -157,7 +157,7 @@
static PyObject *
meth_get__name__(PyCFunctionObject *m, void *closure)
{
- return PyString_FromString(m->m_ml->ml_name);
+ return PyBytes_FromString(m->m_ml->ml_name);
}
static int
@@ -202,9 +202,9 @@
meth_repr(PyCFunctionObject *m)
{
if (m->m_self == NULL)
- return PyString_FromFormat("<built-in function %s>",
+ return PyBytes_FromFormat("<built-in function %s>",
m->m_ml->ml_name);
- return PyString_FromFormat("<built-in method %s of %s object at %p>",
+ return PyBytes_FromFormat("<built-in method %s of %s object at %p>",
m->m_ml->ml_name,
m->m_self->ob_type->tp_name,
m->m_self);
@@ -333,7 +333,7 @@
i = 0;
for (c = chain; c != NULL; c = c->link) {
for (ml = c->methods; ml->ml_name != NULL; ml++) {
- PyList_SetItem(v, i, PyString_FromString(ml->ml_name));
+ PyList_SetItem(v, i, PyBytes_FromString(ml->ml_name));
i++;
}
}
@@ -360,7 +360,7 @@
if (strcmp(name, "__doc__") == 0) {
const char *doc = self->ob_type->tp_doc;
if (doc != NULL)
- return PyString_FromString(doc);
+ return PyBytes_FromString(doc);
}
}
while (chain != NULL) {
Modified: python/branches/tlee-ast-optimize/Objects/moduleobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/moduleobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/moduleobject.c Sun Jun 1 17:18:10 2008
@@ -22,7 +22,7 @@
m = PyObject_GC_New(PyModuleObject, &PyModule_Type);
if (m == NULL)
return NULL;
- nameobj = PyString_FromString(name);
+ nameobj = PyBytes_FromString(name);
m->md_dict = PyDict_New();
if (m->md_dict == NULL || nameobj == NULL)
goto fail;
@@ -68,12 +68,12 @@
d = ((PyModuleObject *)m)->md_dict;
if (d == NULL ||
(nameobj = PyDict_GetItemString(d, "__name__")) == NULL ||
- !PyString_Check(nameobj))
+ !PyBytes_Check(nameobj))
{
PyErr_SetString(PyExc_SystemError, "nameless module");
return NULL;
}
- return PyString_AsString(nameobj);
+ return PyBytes_AsString(nameobj);
}
char *
@@ -88,12 +88,12 @@
d = ((PyModuleObject *)m)->md_dict;
if (d == NULL ||
(fileobj = PyDict_GetItemString(d, "__file__")) == NULL ||
- !PyString_Check(fileobj))
+ !PyBytes_Check(fileobj))
{
PyErr_SetString(PyExc_SystemError, "module filename missing");
return NULL;
}
- return PyString_AsString(fileobj);
+ return PyBytes_AsString(fileobj);
}
void
@@ -117,8 +117,8 @@
/* First, clear only names starting with a single underscore */
pos = 0;
while (PyDict_Next(d, &pos, &key, &value)) {
- if (value != Py_None && PyString_Check(key)) {
- char *s = PyString_AsString(key);
+ if (value != Py_None && PyBytes_Check(key)) {
+ char *s = PyBytes_AsString(key);
if (s[0] == '_' && s[1] != '_') {
if (Py_VerboseFlag > 1)
PySys_WriteStderr("# clear[1] %s\n", s);
@@ -130,8 +130,8 @@
/* Next, clear all names except for __builtins__ */
pos = 0;
while (PyDict_Next(d, &pos, &key, &value)) {
- if (value != Py_None && PyString_Check(key)) {
- char *s = PyString_AsString(key);
+ if (value != Py_None && PyBytes_Check(key)) {
+ char *s = PyBytes_AsString(key);
if (s[0] != '_' || strcmp(s, "__builtins__") != 0) {
if (Py_VerboseFlag > 1)
PySys_WriteStderr("# clear[2] %s\n", s);
@@ -195,9 +195,9 @@
filename = PyModule_GetFilename((PyObject *)m);
if (filename == NULL) {
PyErr_Clear();
- return PyString_FromFormat("<module '%s' (built-in)>", name);
+ return PyBytes_FromFormat("<module '%s' (built-in)>", name);
}
- return PyString_FromFormat("<module '%s' from '%s'>", name, filename);
+ return PyBytes_FromFormat("<module '%s' from '%s'>", name, filename);
}
/* We only need a traverse function, no clear function: If the module
Modified: python/branches/tlee-ast-optimize/Objects/object.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/object.c (original)
+++ python/branches/tlee-ast-optimize/Objects/object.c Sun Jun 1 17:18:10 2008
@@ -357,9 +357,9 @@
}
#endif
if (v == NULL)
- return PyString_FromString("<NULL>");
+ return PyBytes_FromString("<NULL>");
else if (Py_TYPE(v)->tp_repr == NULL)
- return PyString_FromFormat("<%s object at %p>",
+ return PyBytes_FromFormat("<%s object at %p>",
Py_TYPE(v)->tp_name, v);
else {
PyObject *res;
@@ -377,7 +377,7 @@
return NULL;
}
#endif
- if (!PyString_Check(res)) {
+ if (!PyBytes_Check(res)) {
PyErr_Format(PyExc_TypeError,
"__repr__ returned non-string (type %.200s)",
Py_TYPE(res)->tp_name);
@@ -394,8 +394,8 @@
PyObject *res;
int type_ok;
if (v == NULL)
- return PyString_FromString("<NULL>");
- if (PyString_CheckExact(v)) {
+ return PyBytes_FromString("<NULL>");
+ if (PyBytes_CheckExact(v)) {
Py_INCREF(v);
return v;
}
@@ -416,7 +416,7 @@
Py_LeaveRecursiveCall();
if (res == NULL)
return NULL;
- type_ok = PyString_Check(res);
+ type_ok = PyBytes_Check(res);
#ifdef Py_USING_UNICODE
type_ok = type_ok || PyUnicode_Check(res);
#endif
@@ -447,7 +447,7 @@
return NULL;
}
#endif
- assert(PyString_Check(res));
+ assert(PyBytes_Check(res));
return res;
}
@@ -461,7 +461,7 @@
static PyObject *unicodestr;
if (v == NULL) {
- res = PyString_FromString("<NULL>");
+ res = PyBytes_FromString("<NULL>");
if (res == NULL)
return NULL;
str = PyUnicode_FromEncodedObject(res, NULL, "strict");
@@ -475,7 +475,7 @@
check this before trying the __unicode__
method. */
if (unicodestr == NULL) {
- unicodestr= PyString_InternFromString("__unicode__");
+ unicodestr= PyBytes_InternFromString("__unicode__");
if (unicodestr == NULL)
return NULL;
}
@@ -492,7 +492,7 @@
return PyUnicode_FromUnicode(PyUnicode_AS_UNICODE(v),
PyUnicode_GET_SIZE(v));
}
- if (PyString_CheckExact(v)) {
+ if (PyBytes_CheckExact(v)) {
Py_INCREF(v);
res = v;
}
@@ -1084,7 +1084,7 @@
if (Py_TYPE(v)->tp_getattr != NULL)
return (*Py_TYPE(v)->tp_getattr)(v, (char*)name);
- w = PyString_InternFromString(name);
+ w = PyBytes_InternFromString(name);
if (w == NULL)
return NULL;
res = PyObject_GetAttr(v, w);
@@ -1112,7 +1112,7 @@
if (Py_TYPE(v)->tp_setattr != NULL)
return (*Py_TYPE(v)->tp_setattr)(v, (char*)name, w);
- s = PyString_InternFromString(name);
+ s = PyBytes_InternFromString(name);
if (s == NULL)
return -1;
res = PyObject_SetAttr(v, s, w);
@@ -1125,7 +1125,7 @@
{
PyTypeObject *tp = Py_TYPE(v);
- if (!PyString_Check(name)) {
+ if (!PyBytes_Check(name)) {
#ifdef Py_USING_UNICODE
/* The Unicode to string conversion is done here because the
existing tp_getattro slots expect a string object as name
@@ -1147,10 +1147,10 @@
if (tp->tp_getattro != NULL)
return (*tp->tp_getattro)(v, name);
if (tp->tp_getattr != NULL)
- return (*tp->tp_getattr)(v, PyString_AS_STRING(name));
+ return (*tp->tp_getattr)(v, PyBytes_AS_STRING(name));
PyErr_Format(PyExc_AttributeError,
"'%.50s' object has no attribute '%.400s'",
- tp->tp_name, PyString_AS_STRING(name));
+ tp->tp_name, PyBytes_AS_STRING(name));
return NULL;
}
@@ -1172,7 +1172,7 @@
PyTypeObject *tp = Py_TYPE(v);
int err;
- if (!PyString_Check(name)){
+ if (!PyBytes_Check(name)){
#ifdef Py_USING_UNICODE
/* The Unicode to string conversion is done here because the
existing tp_setattro slots expect a string object as name
@@ -1194,14 +1194,14 @@
else
Py_INCREF(name);
- PyString_InternInPlace(&name);
+ PyBytes_InternInPlace(&name);
if (tp->tp_setattro != NULL) {
err = (*tp->tp_setattro)(v, name, value);
Py_DECREF(name);
return err;
}
if (tp->tp_setattr != NULL) {
- err = (*tp->tp_setattr)(v, PyString_AS_STRING(name), value);
+ err = (*tp->tp_setattr)(v, PyBytes_AS_STRING(name), value);
Py_DECREF(name);
return err;
}
@@ -1212,14 +1212,14 @@
"(%s .%.100s)",
tp->tp_name,
value==NULL ? "del" : "assign to",
- PyString_AS_STRING(name));
+ PyBytes_AS_STRING(name));
else
PyErr_Format(PyExc_TypeError,
"'%.100s' object has only read-only attributes "
"(%s .%.100s)",
tp->tp_name,
value==NULL ? "del" : "assign to",
- PyString_AS_STRING(name));
+ PyBytes_AS_STRING(name));
return -1;
}
@@ -1271,7 +1271,7 @@
Py_ssize_t dictoffset;
PyObject **dictptr;
- if (!PyString_Check(name)){
+ if (!PyBytes_Check(name)){
#ifdef Py_USING_UNICODE
/* The Unicode to string conversion is done here because the
existing tp_setattro slots expect a string object as name
@@ -1386,7 +1386,7 @@
PyErr_Format(PyExc_AttributeError,
"'%.50s' object has no attribute '%.400s'",
- tp->tp_name, PyString_AS_STRING(name));
+ tp->tp_name, PyBytes_AS_STRING(name));
done:
Py_DECREF(name);
return res;
@@ -1401,7 +1401,7 @@
PyObject **dictptr;
int res = -1;
- if (!PyString_Check(name)){
+ if (!PyBytes_Check(name)){
#ifdef Py_USING_UNICODE
/* The Unicode to string conversion is done here because the
existing tp_setattro slots expect a string object as name
@@ -1469,13 +1469,13 @@
if (descr == NULL) {
PyErr_Format(PyExc_AttributeError,
"'%.100s' object has no attribute '%.200s'",
- tp->tp_name, PyString_AS_STRING(name));
+ tp->tp_name, PyBytes_AS_STRING(name));
goto done;
}
PyErr_Format(PyExc_AttributeError,
"'%.50s' object attribute '%.400s' is read-only",
- tp->tp_name, PyString_AS_STRING(name));
+ tp->tp_name, PyBytes_AS_STRING(name));
done:
Py_DECREF(name);
return res;
@@ -1682,7 +1682,7 @@
int i;
for (i = 0; i < PyList_GET_SIZE(list); ++i) {
PyObject *item = PyList_GET_ITEM(list, i);
- if (PyString_Check(item)) {
+ if (PyBytes_Check(item)) {
result = PyDict_SetItem(dict, item, Py_None);
if (result < 0)
break;
@@ -1904,7 +1904,7 @@
static PyObject *
none_repr(PyObject *op)
{
- return PyString_FromString("None");
+ return PyBytes_FromString("None");
}
/* ARGUSED */
@@ -1946,7 +1946,7 @@
static PyObject *
NotImplemented_repr(PyObject *op)
{
- return PyString_FromString("NotImplemented");
+ return PyBytes_FromString("NotImplemented");
}
static PyTypeObject PyNotImplemented_Type = {
@@ -1983,10 +1983,10 @@
if (PyType_Ready(&PyBool_Type) < 0)
Py_FatalError("Can't initialize 'bool'");
- if (PyType_Ready(&PyString_Type) < 0)
+ if (PyType_Ready(&PyBytes_Type) < 0)
Py_FatalError("Can't initialize 'str'");
- if (PyType_Ready(&PyBytes_Type) < 0)
+ if (PyType_Ready(&PyByteArray_Type) < 0)
Py_FatalError("Can't initialize 'bytes'");
if (PyType_Ready(&PyList_Type) < 0)
Modified: python/branches/tlee-ast-optimize/Objects/rangeobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/rangeobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/rangeobject.c Sun Jun 1 17:18:10 2008
@@ -113,16 +113,16 @@
PyObject *rtn;
if (r->start == 0 && r->step == 1)
- rtn = PyString_FromFormat("xrange(%ld)",
+ rtn = PyBytes_FromFormat("xrange(%ld)",
r->start + r->len * r->step);
else if (r->step == 1)
- rtn = PyString_FromFormat("xrange(%ld, %ld)",
+ rtn = PyBytes_FromFormat("xrange(%ld, %ld)",
r->start,
r->start + r->len * r->step);
else
- rtn = PyString_FromFormat("xrange(%ld, %ld, %ld)",
+ rtn = PyBytes_FromFormat("xrange(%ld, %ld, %ld)",
r->start,
r->start + r->len * r->step,
r->step);
Modified: python/branches/tlee-ast-optimize/Objects/setobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/setobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/setobject.c Sun Jun 1 17:18:10 2008
@@ -94,7 +94,9 @@
else {
if (entry->hash == hash) {
startkey = entry->key;
+ Py_INCREF(startkey);
cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
+ Py_DECREF(startkey);
if (cmp < 0)
return NULL;
if (table == so->table && entry->key == startkey) {
@@ -125,7 +127,9 @@
break;
if (entry->hash == hash && entry->key != dummy) {
startkey = entry->key;
+ Py_INCREF(startkey);
cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
+ Py_DECREF(startkey);
if (cmp < 0)
return NULL;
if (table == so->table && entry->key == startkey) {
@@ -147,7 +151,7 @@
/*
* Hacked up version of set_lookkey which can assume keys are always strings;
- * This means we can always use _PyString_Eq directly and not have to check to
+ * This means we can always use _PyBytes_Eq directly and not have to check to
* see if the comparison altered the table.
*/
static setentry *
@@ -164,7 +168,7 @@
including subclasses of str; e.g., one reason to subclass
strings is to override __eq__, and for speed we don't cater to
that here. */
- if (!PyString_CheckExact(key)) {
+ if (!PyBytes_CheckExact(key)) {
so->lookup = set_lookkey;
return set_lookkey(so, key, hash);
}
@@ -175,7 +179,7 @@
if (entry->key == dummy)
freeslot = entry;
else {
- if (entry->hash == hash && _PyString_Eq(entry->key, key))
+ if (entry->hash == hash && _PyBytes_Eq(entry->key, key))
return entry;
freeslot = NULL;
}
@@ -190,7 +194,7 @@
if (entry->key == key
|| (entry->hash == hash
&& entry->key != dummy
- && _PyString_Eq(entry->key, key)))
+ && _PyBytes_Eq(entry->key, key)))
return entry;
if (entry->key == dummy && freeslot == NULL)
freeslot = entry;
@@ -377,8 +381,8 @@
register long hash;
register Py_ssize_t n_used;
- if (!PyString_CheckExact(key) ||
- (hash = ((PyStringObject *) key)->ob_shash) == -1) {
+ if (!PyBytes_CheckExact(key) ||
+ (hash = ((PyBytesObject *) key)->ob_shash) == -1) {
hash = PyObject_Hash(key);
if (hash == -1)
return -1;
@@ -424,8 +428,8 @@
PyObject *old_key;
assert (PyAnySet_Check(so));
- if (!PyString_CheckExact(key) ||
- (hash = ((PyStringObject *) key)->ob_shash) == -1) {
+ if (!PyBytes_CheckExact(key) ||
+ (hash = ((PyBytesObject *) key)->ob_shash) == -1) {
hash = PyObject_Hash(key);
if (hash == -1)
return -1;
@@ -614,7 +618,7 @@
if (status != 0) {
if (status < 0)
return NULL;
- return PyString_FromFormat("%s(...)", so->ob_type->tp_name);
+ return PyBytes_FromFormat("%s(...)", so->ob_type->tp_name);
}
keys = PySequence_List((PyObject *)so);
@@ -625,8 +629,8 @@
if (listrepr == NULL)
goto done;
- result = PyString_FromFormat("%s(%s)", so->ob_type->tp_name,
- PyString_AS_STRING(listrepr));
+ result = PyBytes_FromFormat("%s(%s)", so->ob_type->tp_name,
+ PyBytes_AS_STRING(listrepr));
Py_DECREF(listrepr);
done:
Py_ReprLeave((PyObject*)so);
@@ -681,8 +685,8 @@
long hash;
setentry *entry;
- if (!PyString_CheckExact(key) ||
- (hash = ((PyStringObject *) key)->ob_shash) == -1) {
+ if (!PyBytes_CheckExact(key) ||
+ (hash = ((PyBytesObject *) key)->ob_shash) == -1) {
hash = PyObject_Hash(key);
if (hash == -1)
return -1;
@@ -979,7 +983,7 @@
register PySetObject *so = NULL;
if (dummy == NULL) { /* Auto-initialize dummy */
- dummy = PyString_FromString("<dummy key>");
+ dummy = PyBytes_FromString("<dummy key>");
if (dummy == NULL)
return NULL;
}
@@ -2318,7 +2322,7 @@
/* Exercise direct iteration */
i = 0, count = 0;
while (_PySet_Next((PyObject *)dup, &i, &x)) {
- s = PyString_AsString(x);
+ s = PyBytes_AsString(x);
assert(s && (s[0] == 'a' || s[0] == 'b' || s[0] == 'c'));
count++;
}
Modified: python/branches/tlee-ast-optimize/Objects/sliceobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/sliceobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/sliceobject.c Sun Jun 1 17:18:10 2008
@@ -19,7 +19,7 @@
static PyObject *
ellipsis_repr(PyObject *op)
{
- return PyString_FromString("Ellipsis");
+ return PyBytes_FromString("Ellipsis");
}
static PyTypeObject PyEllipsis_Type = {
@@ -228,14 +228,14 @@
{
PyObject *s, *comma;
- s = PyString_FromString("slice(");
- comma = PyString_FromString(", ");
- PyString_ConcatAndDel(&s, PyObject_Repr(r->start));
- PyString_Concat(&s, comma);
- PyString_ConcatAndDel(&s, PyObject_Repr(r->stop));
- PyString_Concat(&s, comma);
- PyString_ConcatAndDel(&s, PyObject_Repr(r->step));
- PyString_ConcatAndDel(&s, PyString_FromString(")"));
+ s = PyBytes_FromString("slice(");
+ comma = PyBytes_FromString(", ");
+ PyBytes_ConcatAndDel(&s, PyObject_Repr(r->start));
+ PyBytes_Concat(&s, comma);
+ PyBytes_ConcatAndDel(&s, PyObject_Repr(r->stop));
+ PyBytes_Concat(&s, comma);
+ PyBytes_ConcatAndDel(&s, PyObject_Repr(r->step));
+ PyBytes_ConcatAndDel(&s, PyBytes_FromString(")"));
Py_DECREF(comma);
return s;
}
Modified: python/branches/tlee-ast-optimize/Objects/stringlib/formatter.h
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/stringlib/formatter.h (original)
+++ python/branches/tlee-ast-optimize/Objects/stringlib/formatter.h Sun Jun 1 17:18:10 2008
@@ -102,12 +102,13 @@
if failure, sets the exception
*/
static int
-parse_internal_render_format_spec(PyObject *format_spec,
+parse_internal_render_format_spec(STRINGLIB_CHAR *format_spec,
+ Py_ssize_t format_spec_len,
InternalFormatSpec *format,
char default_type)
{
- STRINGLIB_CHAR *ptr = STRINGLIB_STR(format_spec);
- STRINGLIB_CHAR *end = ptr + STRINGLIB_LEN(format_spec);
+ STRINGLIB_CHAR *ptr = format_spec;
+ STRINGLIB_CHAR *end = format_spec + format_spec_len;
/* end-ptr is used throughout this code to specify the length of
the input string */
@@ -756,56 +757,31 @@
/************************************************************************/
/*********** built in formatters ****************************************/
/************************************************************************/
-#ifdef FORMAT_STRING
PyObject *
-FORMAT_STRING(PyObject* value, PyObject* args)
+FORMAT_STRING(PyObject *obj,
+ STRINGLIB_CHAR *format_spec,
+ Py_ssize_t format_spec_len)
{
- PyObject *format_spec;
- PyObject *result = NULL;
-#if PY_VERSION_HEX < 0x03000000
- PyObject *tmp = NULL;
-#endif
InternalFormatSpec format;
-
- /* If 2.x, we accept either str or unicode, and try to convert it
- to the right type. In 3.x, we insist on only unicode */
-#if PY_VERSION_HEX >= 0x03000000
- if (!PyArg_ParseTuple(args, STRINGLIB_PARSE_CODE ":__format__",
- &format_spec))
- goto done;
-#else
- /* If 2.x, convert format_spec to the same type as value */
- /* This is to allow things like u''.format('') */
- if (!PyArg_ParseTuple(args, "O:__format__", &format_spec))
- goto done;
- if (!(PyString_Check(format_spec) || PyUnicode_Check(format_spec))) {
- PyErr_Format(PyExc_TypeError, "__format__ arg must be str "
- "or unicode, not %s", Py_TYPE(format_spec)->tp_name);
- goto done;
- }
- tmp = STRINGLIB_TOSTR(format_spec);
- if (tmp == NULL)
- goto done;
- format_spec = tmp;
-#endif
+ PyObject *result = NULL;
/* check for the special case of zero length format spec, make
- it equivalent to str(value) */
- if (STRINGLIB_LEN(format_spec) == 0) {
- result = STRINGLIB_TOSTR(value);
+ it equivalent to str(obj) */
+ if (format_spec_len == 0) {
+ result = STRINGLIB_TOSTR(obj);
goto done;
}
-
/* parse the format_spec */
- if (!parse_internal_render_format_spec(format_spec, &format, 's'))
+ if (!parse_internal_render_format_spec(format_spec, format_spec_len,
+ &format, 's'))
goto done;
/* type conversion? */
switch (format.type) {
case 's':
/* no type conversion needed, already a string. do the formatting */
- result = format_string_internal(value, &format);
+ result = format_string_internal(obj, &format);
break;
default:
/* unknown */
@@ -826,35 +802,31 @@
}
done:
-#if PY_VERSION_HEX < 0x03000000
- Py_XDECREF(tmp);
-#endif
return result;
}
-#endif /* FORMAT_STRING */
#if defined FORMAT_LONG || defined FORMAT_INT
static PyObject*
-format_int_or_long(PyObject* value, PyObject* args, IntOrLongToString tostring)
+format_int_or_long(PyObject* obj,
+ STRINGLIB_CHAR *format_spec,
+ Py_ssize_t format_spec_len,
+ IntOrLongToString tostring)
{
- PyObject *format_spec;
PyObject *result = NULL;
PyObject *tmp = NULL;
InternalFormatSpec format;
- if (!PyArg_ParseTuple(args, STRINGLIB_PARSE_CODE ":__format__",
- &format_spec))
- goto done;
-
/* check for the special case of zero length format spec, make
- it equivalent to str(value) */
- if (STRINGLIB_LEN(format_spec) == 0) {
- result = STRINGLIB_TOSTR(value);
+ it equivalent to str(obj) */
+ if (format_spec_len == 0) {
+ result = STRINGLIB_TOSTR(obj);
goto done;
}
/* parse the format_spec */
- if (!parse_internal_render_format_spec(format_spec, &format, 'd'))
+ if (!parse_internal_render_format_spec(format_spec,
+ format_spec_len,
+ &format, 'd'))
goto done;
/* type conversion? */
@@ -868,7 +840,7 @@
case 'n':
/* no type conversion needed, already an int (or long). do
the formatting */
- result = format_int_or_long_internal(value, &format, tostring);
+ result = format_int_or_long_internal(obj, &format, tostring);
break;
case 'e':
@@ -879,10 +851,10 @@
case 'G':
case '%':
/* convert to float */
- tmp = PyNumber_Float(value);
+ tmp = PyNumber_Float(obj);
if (tmp == NULL)
goto done;
- result = format_float_internal(value, &format);
+ result = format_float_internal(obj, &format);
break;
default:
@@ -917,9 +889,12 @@
#endif
PyObject *
-FORMAT_LONG(PyObject* value, PyObject* args)
+FORMAT_LONG(PyObject *obj,
+ STRINGLIB_CHAR *format_spec,
+ Py_ssize_t format_spec_len)
{
- return format_int_or_long(value, args, long_format);
+ return format_int_or_long(obj, format_spec, format_spec_len,
+ long_format);
}
#endif /* FORMAT_LONG */
@@ -935,32 +910,35 @@
}
PyObject *
-FORMAT_INT(PyObject* value, PyObject* args)
+FORMAT_INT(PyObject *obj,
+ STRINGLIB_CHAR *format_spec,
+ Py_ssize_t format_spec_len)
{
- return format_int_or_long(value, args, int_format);
+ return format_int_or_long(obj, format_spec, format_spec_len,
+ int_format);
}
#endif /* FORMAT_INT */
#ifdef FORMAT_FLOAT
PyObject *
-FORMAT_FLOAT(PyObject *value, PyObject *args)
+FORMAT_FLOAT(PyObject *obj,
+ STRINGLIB_CHAR *format_spec,
+ Py_ssize_t format_spec_len)
{
- PyObject *format_spec;
PyObject *result = NULL;
InternalFormatSpec format;
- if (!PyArg_ParseTuple(args, STRINGLIB_PARSE_CODE ":__format__", &format_spec))
- goto done;
-
/* check for the special case of zero length format spec, make
- it equivalent to str(value) */
- if (STRINGLIB_LEN(format_spec) == 0) {
- result = STRINGLIB_TOSTR(value);
+ it equivalent to str(obj) */
+ if (format_spec_len == 0) {
+ result = STRINGLIB_TOSTR(obj);
goto done;
}
/* parse the format_spec */
- if (!parse_internal_render_format_spec(format_spec, &format, '\0'))
+ if (!parse_internal_render_format_spec(format_spec,
+ format_spec_len,
+ &format, '\0'))
goto done;
/* type conversion? */
@@ -979,7 +957,7 @@
case 'n':
case '%':
/* no conversion, already a float. do the formatting */
- result = format_float_internal(value, &format);
+ result = format_float_internal(obj, &format);
break;
default:
Modified: python/branches/tlee-ast-optimize/Objects/stringlib/string_format.h
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/stringlib/string_format.h (original)
+++ python/branches/tlee-ast-optimize/Objects/stringlib/string_format.h Sun Jun 1 17:18:10 2008
@@ -496,7 +496,7 @@
#if PY_VERSION_HEX >= 0x03000000
assert(PyUnicode_Check(result));
#else
- assert(PyString_Check(result) || PyUnicode_Check(result));
+ assert(PyBytes_Check(result) || PyUnicode_Check(result));
/* Convert result to our type. We could be str, and result could
be unicode */
Modified: python/branches/tlee-ast-optimize/Objects/stringlib/stringdefs.h
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/stringlib/stringdefs.h (original)
+++ python/branches/tlee-ast-optimize/Objects/stringlib/stringdefs.h Sun Jun 1 17:18:10 2008
@@ -6,7 +6,7 @@
compiled as unicode. */
#define STRINGLIB_IS_UNICODE 0
-#define STRINGLIB_OBJECT PyStringObject
+#define STRINGLIB_OBJECT PyBytesObject
#define STRINGLIB_CHAR char
#define STRINGLIB_TYPE_NAME "string"
#define STRINGLIB_PARSE_CODE "S"
@@ -16,13 +16,13 @@
#define STRINGLIB_TOUPPER toupper
#define STRINGLIB_TOLOWER tolower
#define STRINGLIB_FILL memset
-#define STRINGLIB_STR PyString_AS_STRING
-#define STRINGLIB_LEN PyString_GET_SIZE
-#define STRINGLIB_NEW PyString_FromStringAndSize
-#define STRINGLIB_RESIZE _PyString_Resize
-#define STRINGLIB_CHECK PyString_Check
+#define STRINGLIB_STR PyBytes_AS_STRING
+#define STRINGLIB_LEN PyBytes_GET_SIZE
+#define STRINGLIB_NEW PyBytes_FromStringAndSize
+#define STRINGLIB_RESIZE _PyBytes_Resize
+#define STRINGLIB_CHECK PyBytes_Check
#define STRINGLIB_CMP memcmp
#define STRINGLIB_TOSTR PyObject_Str
-#define STRINGLIB_GROUPING _PyString_InsertThousandsGrouping
+#define STRINGLIB_GROUPING _PyBytes_InsertThousandsGrouping
#endif /* !STRINGLIB_STRINGDEFS_H */
Deleted: python/branches/tlee-ast-optimize/Objects/stringobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/stringobject.c Sun Jun 1 17:18:10 2008
+++ (empty file)
@@ -1,5176 +0,0 @@
-/* String object implementation */
-
-#define PY_SSIZE_T_CLEAN
-
-#include "Python.h"
-
-#include "formatter_string.h"
-
-#include <ctype.h>
-
-#ifdef COUNT_ALLOCS
-int null_strings, one_strings;
-#endif
-
-static PyStringObject *characters[UCHAR_MAX + 1];
-static PyStringObject *nullstring;
-
-/* This dictionary holds all interned strings. Note that references to
- strings in this dictionary are *not* counted in the string's ob_refcnt.
- When the interned string reaches a refcnt of 0 the string deallocation
- function will delete the reference from this dictionary.
-
- Another way to look at this is that to say that the actual reference
- count of a string is: s->ob_refcnt + (s->ob_sstate?2:0)
-*/
-static PyObject *interned;
-
-/*
- For both PyString_FromString() and PyString_FromStringAndSize(), the
- parameter `size' denotes number of characters to allocate, not counting any
- null terminating character.
-
- For PyString_FromString(), the parameter `str' points to a null-terminated
- string containing exactly `size' bytes.
-
- For PyString_FromStringAndSize(), the parameter the parameter `str' is
- either NULL or else points to a string containing at least `size' bytes.
- For PyString_FromStringAndSize(), the string in the `str' parameter does
- not have to be null-terminated. (Therefore it is safe to construct a
- substring by calling `PyString_FromStringAndSize(origstring, substrlen)'.)
- If `str' is NULL then PyString_FromStringAndSize() will allocate `size+1'
- bytes (setting the last byte to the null terminating character) and you can
- fill in the data yourself. If `str' is non-NULL then the resulting
- PyString object must be treated as immutable and you must not fill in nor
- alter the data yourself, since the strings may be shared.
-
- The PyObject member `op->ob_size', which denotes the number of "extra
- items" in a variable-size object, will contain the number of bytes
- allocated for string data, not counting the null terminating character. It
- is therefore equal to the equal to the `size' parameter (for
- PyString_FromStringAndSize()) or the length of the string in the `str'
- parameter (for PyString_FromString()).
-*/
-PyObject *
-PyString_FromStringAndSize(const char *str, Py_ssize_t size)
-{
- register PyStringObject *op;
- if (size < 0) {
- PyErr_SetString(PyExc_SystemError,
- "Negative size passed to PyString_FromStringAndSize");
- return NULL;
- }
- if (size == 0 && (op = nullstring) != NULL) {
-#ifdef COUNT_ALLOCS
- null_strings++;
-#endif
- Py_INCREF(op);
- return (PyObject *)op;
- }
- if (size == 1 && str != NULL &&
- (op = characters[*str & UCHAR_MAX]) != NULL)
- {
-#ifdef COUNT_ALLOCS
- one_strings++;
-#endif
- Py_INCREF(op);
- return (PyObject *)op;
- }
-
- /* Inline PyObject_NewVar */
- op = (PyStringObject *)PyObject_MALLOC(sizeof(PyStringObject) + size);
- if (op == NULL)
- return PyErr_NoMemory();
- PyObject_INIT_VAR(op, &PyString_Type, size);
- op->ob_shash = -1;
- op->ob_sstate = SSTATE_NOT_INTERNED;
- if (str != NULL)
- Py_MEMCPY(op->ob_sval, str, size);
- op->ob_sval[size] = '\0';
- /* share short strings */
- if (size == 0) {
- PyObject *t = (PyObject *)op;
- PyString_InternInPlace(&t);
- op = (PyStringObject *)t;
- nullstring = op;
- Py_INCREF(op);
- } else if (size == 1 && str != NULL) {
- PyObject *t = (PyObject *)op;
- PyString_InternInPlace(&t);
- op = (PyStringObject *)t;
- characters[*str & UCHAR_MAX] = op;
- Py_INCREF(op);
- }
- return (PyObject *) op;
-}
-
-PyObject *
-PyString_FromString(const char *str)
-{
- register size_t size;
- register PyStringObject *op;
-
- assert(str != NULL);
- size = strlen(str);
- if (size > PY_SSIZE_T_MAX) {
- PyErr_SetString(PyExc_OverflowError,
- "string is too long for a Python string");
- return NULL;
- }
- if (size == 0 && (op = nullstring) != NULL) {
-#ifdef COUNT_ALLOCS
- null_strings++;
-#endif
- Py_INCREF(op);
- return (PyObject *)op;
- }
- if (size == 1 && (op = characters[*str & UCHAR_MAX]) != NULL) {
-#ifdef COUNT_ALLOCS
- one_strings++;
-#endif
- Py_INCREF(op);
- return (PyObject *)op;
- }
-
- /* Inline PyObject_NewVar */
- op = (PyStringObject *)PyObject_MALLOC(sizeof(PyStringObject) + size);
- if (op == NULL)
- return PyErr_NoMemory();
- PyObject_INIT_VAR(op, &PyString_Type, size);
- op->ob_shash = -1;
- op->ob_sstate = SSTATE_NOT_INTERNED;
- Py_MEMCPY(op->ob_sval, str, size+1);
- /* share short strings */
- if (size == 0) {
- PyObject *t = (PyObject *)op;
- PyString_InternInPlace(&t);
- op = (PyStringObject *)t;
- nullstring = op;
- Py_INCREF(op);
- } else if (size == 1) {
- PyObject *t = (PyObject *)op;
- PyString_InternInPlace(&t);
- op = (PyStringObject *)t;
- characters[*str & UCHAR_MAX] = op;
- Py_INCREF(op);
- }
- return (PyObject *) op;
-}
-
-PyObject *
-PyString_FromFormatV(const char *format, va_list vargs)
-{
- va_list count;
- Py_ssize_t n = 0;
- const char* f;
- char *s;
- PyObject* string;
-
-#ifdef VA_LIST_IS_ARRAY
- Py_MEMCPY(count, vargs, sizeof(va_list));
-#else
-#ifdef __va_copy
- __va_copy(count, vargs);
-#else
- count = vargs;
-#endif
-#endif
- /* step 1: figure out how large a buffer we need */
- for (f = format; *f; f++) {
- if (*f == '%') {
- const char* p = f;
- while (*++f && *f != '%' && !isalpha(Py_CHARMASK(*f)))
- ;
-
- /* skip the 'l' or 'z' in {%ld, %zd, %lu, %zu} since
- * they don't affect the amount of space we reserve.
- */
- if ((*f == 'l' || *f == 'z') &&
- (f[1] == 'd' || f[1] == 'u'))
- ++f;
-
- switch (*f) {
- case 'c':
- (void)va_arg(count, int);
- /* fall through... */
- case '%':
- n++;
- break;
- case 'd': case 'u': case 'i': case 'x':
- (void) va_arg(count, int);
- /* 20 bytes is enough to hold a 64-bit
- integer. Decimal takes the most space.
- This isn't enough for octal. */
- n += 20;
- break;
- case 's':
- s = va_arg(count, char*);
- n += strlen(s);
- break;
- case 'p':
- (void) va_arg(count, int);
- /* maximum 64-bit pointer representation:
- * 0xffffffffffffffff
- * so 19 characters is enough.
- * XXX I count 18 -- what's the extra for?
- */
- n += 19;
- break;
- default:
- /* if we stumble upon an unknown
- formatting code, copy the rest of
- the format string to the output
- string. (we cannot just skip the
- code, since there's no way to know
- what's in the argument list) */
- n += strlen(p);
- goto expand;
- }
- } else
- n++;
- }
- expand:
- /* step 2: fill the buffer */
- /* Since we've analyzed how much space we need for the worst case,
- use sprintf directly instead of the slower PyOS_snprintf. */
- string = PyString_FromStringAndSize(NULL, n);
- if (!string)
- return NULL;
-
- s = PyString_AsString(string);
-
- for (f = format; *f; f++) {
- if (*f == '%') {
- const char* p = f++;
- Py_ssize_t i;
- int longflag = 0;
- int size_tflag = 0;
- /* parse the width.precision part (we're only
- interested in the precision value, if any) */
- n = 0;
- while (isdigit(Py_CHARMASK(*f)))
- n = (n*10) + *f++ - '0';
- if (*f == '.') {
- f++;
- n = 0;
- while (isdigit(Py_CHARMASK(*f)))
- n = (n*10) + *f++ - '0';
- }
- while (*f && *f != '%' && !isalpha(Py_CHARMASK(*f)))
- f++;
- /* handle the long flag, but only for %ld and %lu.
- others can be added when necessary. */
- if (*f == 'l' && (f[1] == 'd' || f[1] == 'u')) {
- longflag = 1;
- ++f;
- }
- /* handle the size_t flag. */
- if (*f == 'z' && (f[1] == 'd' || f[1] == 'u')) {
- size_tflag = 1;
- ++f;
- }
-
- switch (*f) {
- case 'c':
- *s++ = va_arg(vargs, int);
- break;
- case 'd':
- if (longflag)
- sprintf(s, "%ld", va_arg(vargs, long));
- else if (size_tflag)
- sprintf(s, "%" PY_FORMAT_SIZE_T "d",
- va_arg(vargs, Py_ssize_t));
- else
- sprintf(s, "%d", va_arg(vargs, int));
- s += strlen(s);
- break;
- case 'u':
- if (longflag)
- sprintf(s, "%lu",
- va_arg(vargs, unsigned long));
- else if (size_tflag)
- sprintf(s, "%" PY_FORMAT_SIZE_T "u",
- va_arg(vargs, size_t));
- else
- sprintf(s, "%u",
- va_arg(vargs, unsigned int));
- s += strlen(s);
- break;
- case 'i':
- sprintf(s, "%i", va_arg(vargs, int));
- s += strlen(s);
- break;
- case 'x':
- sprintf(s, "%x", va_arg(vargs, int));
- s += strlen(s);
- break;
- case 's':
- p = va_arg(vargs, char*);
- i = strlen(p);
- if (n > 0 && i > n)
- i = n;
- Py_MEMCPY(s, p, i);
- s += i;
- break;
- case 'p':
- sprintf(s, "%p", va_arg(vargs, void*));
- /* %p is ill-defined: ensure leading 0x. */
- if (s[1] == 'X')
- s[1] = 'x';
- else if (s[1] != 'x') {
- memmove(s+2, s, strlen(s)+1);
- s[0] = '0';
- s[1] = 'x';
- }
- s += strlen(s);
- break;
- case '%':
- *s++ = '%';
- break;
- default:
- strcpy(s, p);
- s += strlen(s);
- goto end;
- }
- } else
- *s++ = *f;
- }
-
- end:
- _PyString_Resize(&string, s - PyString_AS_STRING(string));
- return string;
-}
-
-PyObject *
-PyString_FromFormat(const char *format, ...)
-{
- PyObject* ret;
- va_list vargs;
-
-#ifdef HAVE_STDARG_PROTOTYPES
- va_start(vargs, format);
-#else
- va_start(vargs);
-#endif
- ret = PyString_FromFormatV(format, vargs);
- va_end(vargs);
- return ret;
-}
-
-
-PyObject *PyString_Decode(const char *s,
- Py_ssize_t size,
- const char *encoding,
- const char *errors)
-{
- PyObject *v, *str;
-
- str = PyString_FromStringAndSize(s, size);
- if (str == NULL)
- return NULL;
- v = PyString_AsDecodedString(str, encoding, errors);
- Py_DECREF(str);
- return v;
-}
-
-PyObject *PyString_AsDecodedObject(PyObject *str,
- const char *encoding,
- const char *errors)
-{
- PyObject *v;
-
- if (!PyString_Check(str)) {
- PyErr_BadArgument();
- goto onError;
- }
-
- if (encoding == NULL) {
-#ifdef Py_USING_UNICODE
- encoding = PyUnicode_GetDefaultEncoding();
-#else
- PyErr_SetString(PyExc_ValueError, "no encoding specified");
- goto onError;
-#endif
- }
-
- /* Decode via the codec registry */
- v = PyCodec_Decode(str, encoding, errors);
- if (v == NULL)
- goto onError;
-
- return v;
-
- onError:
- return NULL;
-}
-
-PyObject *PyString_AsDecodedString(PyObject *str,
- const char *encoding,
- const char *errors)
-{
- PyObject *v;
-
- v = PyString_AsDecodedObject(str, encoding, errors);
- if (v == NULL)
- goto onError;
-
-#ifdef Py_USING_UNICODE
- /* Convert Unicode to a string using the default encoding */
- if (PyUnicode_Check(v)) {
- PyObject *temp = v;
- v = PyUnicode_AsEncodedString(v, NULL, NULL);
- Py_DECREF(temp);
- if (v == NULL)
- goto onError;
- }
-#endif
- if (!PyString_Check(v)) {
- PyErr_Format(PyExc_TypeError,
- "decoder did not return a string object (type=%.400s)",
- Py_TYPE(v)->tp_name);
- Py_DECREF(v);
- goto onError;
- }
-
- return v;
-
- onError:
- return NULL;
-}
-
-PyObject *PyString_Encode(const char *s,
- Py_ssize_t size,
- const char *encoding,
- const char *errors)
-{
- PyObject *v, *str;
-
- str = PyString_FromStringAndSize(s, size);
- if (str == NULL)
- return NULL;
- v = PyString_AsEncodedString(str, encoding, errors);
- Py_DECREF(str);
- return v;
-}
-
-PyObject *PyString_AsEncodedObject(PyObject *str,
- const char *encoding,
- const char *errors)
-{
- PyObject *v;
-
- if (!PyString_Check(str)) {
- PyErr_BadArgument();
- goto onError;
- }
-
- if (encoding == NULL) {
-#ifdef Py_USING_UNICODE
- encoding = PyUnicode_GetDefaultEncoding();
-#else
- PyErr_SetString(PyExc_ValueError, "no encoding specified");
- goto onError;
-#endif
- }
-
- /* Encode via the codec registry */
- v = PyCodec_Encode(str, encoding, errors);
- if (v == NULL)
- goto onError;
-
- return v;
-
- onError:
- return NULL;
-}
-
-PyObject *PyString_AsEncodedString(PyObject *str,
- const char *encoding,
- const char *errors)
-{
- PyObject *v;
-
- v = PyString_AsEncodedObject(str, encoding, errors);
- if (v == NULL)
- goto onError;
-
-#ifdef Py_USING_UNICODE
- /* Convert Unicode to a string using the default encoding */
- if (PyUnicode_Check(v)) {
- PyObject *temp = v;
- v = PyUnicode_AsEncodedString(v, NULL, NULL);
- Py_DECREF(temp);
- if (v == NULL)
- goto onError;
- }
-#endif
- if (!PyString_Check(v)) {
- PyErr_Format(PyExc_TypeError,
- "encoder did not return a string object (type=%.400s)",
- Py_TYPE(v)->tp_name);
- Py_DECREF(v);
- goto onError;
- }
-
- return v;
-
- onError:
- return NULL;
-}
-
-static void
-string_dealloc(PyObject *op)
-{
- switch (PyString_CHECK_INTERNED(op)) {
- case SSTATE_NOT_INTERNED:
- break;
-
- case SSTATE_INTERNED_MORTAL:
- /* revive dead object temporarily for DelItem */
- Py_REFCNT(op) = 3;
- if (PyDict_DelItem(interned, op) != 0)
- Py_FatalError(
- "deletion of interned string failed");
- break;
-
- case SSTATE_INTERNED_IMMORTAL:
- Py_FatalError("Immortal interned string died.");
-
- default:
- Py_FatalError("Inconsistent interned string state.");
- }
- Py_TYPE(op)->tp_free(op);
-}
-
-/* Unescape a backslash-escaped string. If unicode is non-zero,
- the string is a u-literal. If recode_encoding is non-zero,
- the string is UTF-8 encoded and should be re-encoded in the
- specified encoding. */
-
-PyObject *PyString_DecodeEscape(const char *s,
- Py_ssize_t len,
- const char *errors,
- Py_ssize_t unicode,
- const char *recode_encoding)
-{
- int c;
- char *p, *buf;
- const char *end;
- PyObject *v;
- Py_ssize_t newlen = recode_encoding ? 4*len:len;
- v = PyString_FromStringAndSize((char *)NULL, newlen);
- if (v == NULL)
- return NULL;
- p = buf = PyString_AsString(v);
- end = s + len;
- while (s < end) {
- if (*s != '\\') {
- non_esc:
-#ifdef Py_USING_UNICODE
- if (recode_encoding && (*s & 0x80)) {
- PyObject *u, *w;
- char *r;
- const char* t;
- Py_ssize_t rn;
- t = s;
- /* Decode non-ASCII bytes as UTF-8. */
- while (t < end && (*t & 0x80)) t++;
- u = PyUnicode_DecodeUTF8(s, t - s, errors);
- if(!u) goto failed;
-
- /* Recode them in target encoding. */
- w = PyUnicode_AsEncodedString(
- u, recode_encoding, errors);
- Py_DECREF(u);
- if (!w) goto failed;
-
- /* Append bytes to output buffer. */
- assert(PyString_Check(w));
- r = PyString_AS_STRING(w);
- rn = PyString_GET_SIZE(w);
- Py_MEMCPY(p, r, rn);
- p += rn;
- Py_DECREF(w);
- s = t;
- } else {
- *p++ = *s++;
- }
-#else
- *p++ = *s++;
-#endif
- continue;
- }
- s++;
- if (s==end) {
- PyErr_SetString(PyExc_ValueError,
- "Trailing \\ in string");
- goto failed;
- }
- switch (*s++) {
- /* XXX This assumes ASCII! */
- case '\n': break;
- case '\\': *p++ = '\\'; break;
- case '\'': *p++ = '\''; break;
- case '\"': *p++ = '\"'; break;
- case 'b': *p++ = '\b'; break;
- case 'f': *p++ = '\014'; break; /* FF */
- case 't': *p++ = '\t'; break;
- case 'n': *p++ = '\n'; break;
- case 'r': *p++ = '\r'; break;
- case 'v': *p++ = '\013'; break; /* VT */
- case 'a': *p++ = '\007'; break; /* BEL, not classic C */
- case '0': case '1': case '2': case '3':
- case '4': case '5': case '6': case '7':
- c = s[-1] - '0';
- if (s < end && '0' <= *s && *s <= '7') {
- c = (c<<3) + *s++ - '0';
- if (s < end && '0' <= *s && *s <= '7')
- c = (c<<3) + *s++ - '0';
- }
- *p++ = c;
- break;
- case 'x':
- if (s+1 < end &&
- isxdigit(Py_CHARMASK(s[0])) &&
- isxdigit(Py_CHARMASK(s[1])))
- {
- unsigned int x = 0;
- c = Py_CHARMASK(*s);
- s++;
- if (isdigit(c))
- x = c - '0';
- else if (islower(c))
- x = 10 + c - 'a';
- else
- x = 10 + c - 'A';
- x = x << 4;
- c = Py_CHARMASK(*s);
- s++;
- if (isdigit(c))
- x += c - '0';
- else if (islower(c))
- x += 10 + c - 'a';
- else
- x += 10 + c - 'A';
- *p++ = x;
- break;
- }
- if (!errors || strcmp(errors, "strict") == 0) {
- PyErr_SetString(PyExc_ValueError,
- "invalid \\x escape");
- goto failed;
- }
- if (strcmp(errors, "replace") == 0) {
- *p++ = '?';
- } else if (strcmp(errors, "ignore") == 0)
- /* do nothing */;
- else {
- PyErr_Format(PyExc_ValueError,
- "decoding error; "
- "unknown error handling code: %.400s",
- errors);
- goto failed;
- }
-#ifndef Py_USING_UNICODE
- case 'u':
- case 'U':
- case 'N':
- if (unicode) {
- PyErr_SetString(PyExc_ValueError,
- "Unicode escapes not legal "
- "when Unicode disabled");
- goto failed;
- }
-#endif
- default:
- *p++ = '\\';
- s--;
- goto non_esc; /* an arbitry number of unescaped
- UTF-8 bytes may follow. */
- }
- }
- if (p-buf < newlen)
- _PyString_Resize(&v, p - buf);
- return v;
- failed:
- Py_DECREF(v);
- return NULL;
-}
-
-/* -------------------------------------------------------------------- */
-/* object api */
-
-static Py_ssize_t
-string_getsize(register PyObject *op)
-{
- char *s;
- Py_ssize_t len;
- if (PyString_AsStringAndSize(op, &s, &len))
- return -1;
- return len;
-}
-
-static /*const*/ char *
-string_getbuffer(register PyObject *op)
-{
- char *s;
- Py_ssize_t len;
- if (PyString_AsStringAndSize(op, &s, &len))
- return NULL;
- return s;
-}
-
-Py_ssize_t
-PyString_Size(register PyObject *op)
-{
- if (!PyString_Check(op))
- return string_getsize(op);
- return Py_SIZE(op);
-}
-
-/*const*/ char *
-PyString_AsString(register PyObject *op)
-{
- if (!PyString_Check(op))
- return string_getbuffer(op);
- return ((PyStringObject *)op) -> ob_sval;
-}
-
-int
-PyString_AsStringAndSize(register PyObject *obj,
- register char **s,
- register Py_ssize_t *len)
-{
- if (s == NULL) {
- PyErr_BadInternalCall();
- return -1;
- }
-
- if (!PyString_Check(obj)) {
-#ifdef Py_USING_UNICODE
- if (PyUnicode_Check(obj)) {
- obj = _PyUnicode_AsDefaultEncodedString(obj, NULL);
- if (obj == NULL)
- return -1;
- }
- else
-#endif
- {
- PyErr_Format(PyExc_TypeError,
- "expected string or Unicode object, "
- "%.200s found", Py_TYPE(obj)->tp_name);
- return -1;
- }
- }
-
- *s = PyString_AS_STRING(obj);
- if (len != NULL)
- *len = PyString_GET_SIZE(obj);
- else if (strlen(*s) != (size_t)PyString_GET_SIZE(obj)) {
- PyErr_SetString(PyExc_TypeError,
- "expected string without null bytes");
- return -1;
- }
- return 0;
-}
-
-/* -------------------------------------------------------------------- */
-/* Methods */
-
-#include "stringlib/stringdefs.h"
-#include "stringlib/fastsearch.h"
-
-#include "stringlib/count.h"
-#include "stringlib/find.h"
-#include "stringlib/partition.h"
-
-#define _Py_InsertThousandsGrouping _PyString_InsertThousandsGrouping
-#include "stringlib/localeutil.h"
-
-
-
-static int
-string_print(PyStringObject *op, FILE *fp, int flags)
-{
- Py_ssize_t i, str_len;
- char c;
- int quote;
-
- /* XXX Ought to check for interrupts when writing long strings */
- if (! PyString_CheckExact(op)) {
- int ret;
- /* A str subclass may have its own __str__ method. */
- op = (PyStringObject *) PyObject_Str((PyObject *)op);
- if (op == NULL)
- return -1;
- ret = string_print(op, fp, flags);
- Py_DECREF(op);
- return ret;
- }
- if (flags & Py_PRINT_RAW) {
- char *data = op->ob_sval;
- Py_ssize_t size = Py_SIZE(op);
- Py_BEGIN_ALLOW_THREADS
- 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 (size) fwrite(data, (int)size, 1, fp);
-#else
- fwrite(data, 1, (int)size, fp);
-#endif
- Py_END_ALLOW_THREADS
- return 0;
- }
-
- /* figure out which quote to use; single is preferred */
- quote = '\'';
- if (memchr(op->ob_sval, '\'', Py_SIZE(op)) &&
- !memchr(op->ob_sval, '"', Py_SIZE(op)))
- quote = '"';
-
- str_len = Py_SIZE(op);
- Py_BEGIN_ALLOW_THREADS
- fputc(quote, fp);
- for (i = 0; i < str_len; i++) {
- /* Since strings are immutable and the caller should have a
- reference, accessing the interal buffer should not be an issue
- with the GIL released. */
- c = op->ob_sval[i];
- if (c == quote || c == '\\')
- fprintf(fp, "\\%c", c);
- else if (c == '\t')
- fprintf(fp, "\\t");
- else if (c == '\n')
- fprintf(fp, "\\n");
- else if (c == '\r')
- fprintf(fp, "\\r");
- else if (c < ' ' || c >= 0x7f)
- fprintf(fp, "\\x%02x", c & 0xff);
- else
- fputc(c, fp);
- }
- fputc(quote, fp);
- Py_END_ALLOW_THREADS
- return 0;
-}
-
-PyObject *
-PyString_Repr(PyObject *obj, int smartquotes)
-{
- register PyStringObject* op = (PyStringObject*) obj;
- size_t newsize = 2 + 4 * Py_SIZE(op);
- PyObject *v;
- if (newsize > PY_SSIZE_T_MAX || newsize / 4 != Py_SIZE(op)) {
- PyErr_SetString(PyExc_OverflowError,
- "string is too large to make repr");
- return NULL;
- }
- v = PyString_FromStringAndSize((char *)NULL, newsize);
- if (v == NULL) {
- return NULL;
- }
- else {
- register Py_ssize_t i;
- register char c;
- register char *p;
- int quote;
-
- /* figure out which quote to use; single is preferred */
- quote = '\'';
- if (smartquotes &&
- memchr(op->ob_sval, '\'', Py_SIZE(op)) &&
- !memchr(op->ob_sval, '"', Py_SIZE(op)))
- quote = '"';
-
- p = PyString_AS_STRING(v);
- *p++ = quote;
- for (i = 0; i < Py_SIZE(op); i++) {
- /* There's at least enough room for a hex escape
- and a closing quote. */
- assert(newsize - (p - PyString_AS_STRING(v)) >= 5);
- c = op->ob_sval[i];
- if (c == quote || c == '\\')
- *p++ = '\\', *p++ = c;
- else if (c == '\t')
- *p++ = '\\', *p++ = 't';
- else if (c == '\n')
- *p++ = '\\', *p++ = 'n';
- else if (c == '\r')
- *p++ = '\\', *p++ = 'r';
- else if (c < ' ' || c >= 0x7f) {
- /* For performance, we don't want to call
- PyOS_snprintf here (extra layers of
- function call). */
- sprintf(p, "\\x%02x", c & 0xff);
- p += 4;
- }
- else
- *p++ = c;
- }
- assert(newsize - (p - PyString_AS_STRING(v)) >= 1);
- *p++ = quote;
- *p = '\0';
- _PyString_Resize(
- &v, (p - PyString_AS_STRING(v)));
- return v;
- }
-}
-
-static PyObject *
-string_repr(PyObject *op)
-{
- return PyString_Repr(op, 1);
-}
-
-static PyObject *
-string_str(PyObject *s)
-{
- assert(PyString_Check(s));
- if (PyString_CheckExact(s)) {
- Py_INCREF(s);
- return s;
- }
- else {
- /* Subtype -- return genuine string with the same value. */
- PyStringObject *t = (PyStringObject *) s;
- return PyString_FromStringAndSize(t->ob_sval, Py_SIZE(t));
- }
-}
-
-static Py_ssize_t
-string_length(PyStringObject *a)
-{
- return Py_SIZE(a);
-}
-
-static PyObject *
-string_concat(register PyStringObject *a, register PyObject *bb)
-{
- register Py_ssize_t size;
- register PyStringObject *op;
- if (!PyString_Check(bb)) {
-#ifdef Py_USING_UNICODE
- if (PyUnicode_Check(bb))
- return PyUnicode_Concat((PyObject *)a, bb);
-#endif
- if (PyBytes_Check(bb))
- return PyBytes_Concat((PyObject *)a, bb);
- PyErr_Format(PyExc_TypeError,
- "cannot concatenate 'str' and '%.200s' objects",
- Py_TYPE(bb)->tp_name);
- return NULL;
- }
-#define b ((PyStringObject *)bb)
- /* Optimize cases with empty left or right operand */
- if ((Py_SIZE(a) == 0 || Py_SIZE(b) == 0) &&
- PyString_CheckExact(a) && PyString_CheckExact(b)) {
- if (Py_SIZE(a) == 0) {
- Py_INCREF(bb);
- return bb;
- }
- Py_INCREF(a);
- return (PyObject *)a;
- }
- size = Py_SIZE(a) + Py_SIZE(b);
- if (size < 0) {
- PyErr_SetString(PyExc_OverflowError,
- "strings are too large to concat");
- return NULL;
- }
-
- /* Inline PyObject_NewVar */
- op = (PyStringObject *)PyObject_MALLOC(sizeof(PyStringObject) + size);
- if (op == NULL)
- return PyErr_NoMemory();
- PyObject_INIT_VAR(op, &PyString_Type, size);
- op->ob_shash = -1;
- op->ob_sstate = SSTATE_NOT_INTERNED;
- Py_MEMCPY(op->ob_sval, a->ob_sval, Py_SIZE(a));
- Py_MEMCPY(op->ob_sval + Py_SIZE(a), b->ob_sval, Py_SIZE(b));
- op->ob_sval[size] = '\0';
- return (PyObject *) op;
-#undef b
-}
-
-static PyObject *
-string_repeat(register PyStringObject *a, register Py_ssize_t n)
-{
- register Py_ssize_t i;
- register Py_ssize_t j;
- register Py_ssize_t size;
- register PyStringObject *op;
- size_t nbytes;
- if (n < 0)
- n = 0;
- /* watch out for overflows: the size can overflow int,
- * and the # of bytes needed can overflow size_t
- */
- size = Py_SIZE(a) * n;
- if (n && size / n != Py_SIZE(a)) {
- PyErr_SetString(PyExc_OverflowError,
- "repeated string is too long");
- return NULL;
- }
- if (size == Py_SIZE(a) && PyString_CheckExact(a)) {
- Py_INCREF(a);
- return (PyObject *)a;
- }
- nbytes = (size_t)size;
- if (nbytes + sizeof(PyStringObject) <= nbytes) {
- PyErr_SetString(PyExc_OverflowError,
- "repeated string is too long");
- return NULL;
- }
- op = (PyStringObject *)
- PyObject_MALLOC(sizeof(PyStringObject) + nbytes);
- if (op == NULL)
- return PyErr_NoMemory();
- PyObject_INIT_VAR(op, &PyString_Type, size);
- op->ob_shash = -1;
- op->ob_sstate = SSTATE_NOT_INTERNED;
- op->ob_sval[size] = '\0';
- if (Py_SIZE(a) == 1 && n > 0) {
- memset(op->ob_sval, a->ob_sval[0] , n);
- return (PyObject *) op;
- }
- i = 0;
- if (i < size) {
- Py_MEMCPY(op->ob_sval, a->ob_sval, Py_SIZE(a));
- i = Py_SIZE(a);
- }
- while (i < size) {
- j = (i <= size-i) ? i : size-i;
- Py_MEMCPY(op->ob_sval+i, op->ob_sval, j);
- i += j;
- }
- return (PyObject *) op;
-}
-
-/* String slice a[i:j] consists of characters a[i] ... a[j-1] */
-
-static PyObject *
-string_slice(register PyStringObject *a, register Py_ssize_t i,
- register Py_ssize_t j)
- /* j -- may be negative! */
-{
- if (i < 0)
- i = 0;
- if (j < 0)
- j = 0; /* Avoid signed/unsigned bug in next line */
- if (j > Py_SIZE(a))
- j = Py_SIZE(a);
- if (i == 0 && j == Py_SIZE(a) && PyString_CheckExact(a)) {
- /* It's the same as a */
- Py_INCREF(a);
- return (PyObject *)a;
- }
- if (j < i)
- j = i;
- return PyString_FromStringAndSize(a->ob_sval + i, j-i);
-}
-
-static int
-string_contains(PyObject *str_obj, PyObject *sub_obj)
-{
- if (!PyString_CheckExact(sub_obj)) {
-#ifdef Py_USING_UNICODE
- if (PyUnicode_Check(sub_obj))
- return PyUnicode_Contains(str_obj, sub_obj);
-#endif
- if (!PyString_Check(sub_obj)) {
- PyErr_Format(PyExc_TypeError,
- "'in <string>' requires string as left operand, "
- "not %.200s", Py_TYPE(sub_obj)->tp_name);
- return -1;
- }
- }
-
- return stringlib_contains_obj(str_obj, sub_obj);
-}
-
-static PyObject *
-string_item(PyStringObject *a, register Py_ssize_t i)
-{
- char pchar;
- PyObject *v;
- if (i < 0 || i >= Py_SIZE(a)) {
- PyErr_SetString(PyExc_IndexError, "string index out of range");
- return NULL;
- }
- pchar = a->ob_sval[i];
- v = (PyObject *)characters[pchar & UCHAR_MAX];
- if (v == NULL)
- v = PyString_FromStringAndSize(&pchar, 1);
- else {
-#ifdef COUNT_ALLOCS
- one_strings++;
-#endif
- Py_INCREF(v);
- }
- return v;
-}
-
-static PyObject*
-string_richcompare(PyStringObject *a, PyStringObject *b, int op)
-{
- int c;
- Py_ssize_t len_a, len_b;
- Py_ssize_t min_len;
- PyObject *result;
-
- /* Make sure both arguments are strings. */
- if (!(PyString_Check(a) && PyString_Check(b))) {
- result = Py_NotImplemented;
- goto out;
- }
- if (a == b) {
- switch (op) {
- case Py_EQ:case Py_LE:case Py_GE:
- result = Py_True;
- goto out;
- case Py_NE:case Py_LT:case Py_GT:
- result = Py_False;
- goto out;
- }
- }
- if (op == Py_EQ) {
- /* Supporting Py_NE here as well does not save
- much time, since Py_NE is rarely used. */
- if (Py_SIZE(a) == Py_SIZE(b)
- && (a->ob_sval[0] == b->ob_sval[0]
- && memcmp(a->ob_sval, b->ob_sval, Py_SIZE(a)) == 0)) {
- result = Py_True;
- } else {
- result = Py_False;
- }
- goto out;
- }
- len_a = Py_SIZE(a); len_b = Py_SIZE(b);
- min_len = (len_a < len_b) ? len_a : len_b;
- if (min_len > 0) {
- c = Py_CHARMASK(*a->ob_sval) - Py_CHARMASK(*b->ob_sval);
- if (c==0)
- c = memcmp(a->ob_sval, b->ob_sval, min_len);
- } else
- c = 0;
- if (c == 0)
- c = (len_a < len_b) ? -1 : (len_a > len_b) ? 1 : 0;
- switch (op) {
- case Py_LT: c = c < 0; break;
- case Py_LE: c = c <= 0; break;
- case Py_EQ: assert(0); break; /* unreachable */
- case Py_NE: c = c != 0; break;
- case Py_GT: c = c > 0; break;
- case Py_GE: c = c >= 0; break;
- default:
- result = Py_NotImplemented;
- goto out;
- }
- result = c ? Py_True : Py_False;
- out:
- Py_INCREF(result);
- return result;
-}
-
-int
-_PyString_Eq(PyObject *o1, PyObject *o2)
-{
- PyStringObject *a = (PyStringObject*) o1;
- PyStringObject *b = (PyStringObject*) o2;
- return Py_SIZE(a) == Py_SIZE(b)
- && *a->ob_sval == *b->ob_sval
- && memcmp(a->ob_sval, b->ob_sval, Py_SIZE(a)) == 0;
-}
-
-static long
-string_hash(PyStringObject *a)
-{
- register Py_ssize_t len;
- register unsigned char *p;
- register long x;
-
- if (a->ob_shash != -1)
- return a->ob_shash;
- len = Py_SIZE(a);
- p = (unsigned char *) a->ob_sval;
- x = *p << 7;
- while (--len >= 0)
- x = (1000003*x) ^ *p++;
- x ^= Py_SIZE(a);
- if (x == -1)
- x = -2;
- a->ob_shash = x;
- return x;
-}
-
-static PyObject*
-string_subscript(PyStringObject* self, PyObject* item)
-{
- if (PyIndex_Check(item)) {
- Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
- if (i == -1 && PyErr_Occurred())
- return NULL;
- if (i < 0)
- i += PyString_GET_SIZE(self);
- return string_item(self, i);
- }
- else if (PySlice_Check(item)) {
- Py_ssize_t start, stop, step, slicelength, cur, i;
- char* source_buf;
- char* result_buf;
- PyObject* result;
-
- if (PySlice_GetIndicesEx((PySliceObject*)item,
- PyString_GET_SIZE(self),
- &start, &stop, &step, &slicelength) < 0) {
- return NULL;
- }
-
- if (slicelength <= 0) {
- return PyString_FromStringAndSize("", 0);
- }
- else if (start == 0 && step == 1 &&
- slicelength == PyString_GET_SIZE(self) &&
- PyString_CheckExact(self)) {
- Py_INCREF(self);
- return (PyObject *)self;
- }
- else if (step == 1) {
- return PyString_FromStringAndSize(
- PyString_AS_STRING(self) + start,
- slicelength);
- }
- else {
- source_buf = PyString_AsString((PyObject*)self);
- result_buf = (char *)PyMem_Malloc(slicelength);
- if (result_buf == NULL)
- return PyErr_NoMemory();
-
- for (cur = start, i = 0; i < slicelength;
- cur += step, i++) {
- result_buf[i] = source_buf[cur];
- }
-
- result = PyString_FromStringAndSize(result_buf,
- slicelength);
- PyMem_Free(result_buf);
- return result;
- }
- }
- else {
- PyErr_Format(PyExc_TypeError,
- "string indices must be integers, not %.200s",
- Py_TYPE(item)->tp_name);
- return NULL;
- }
-}
-
-static Py_ssize_t
-string_buffer_getreadbuf(PyStringObject *self, Py_ssize_t index, const void **ptr)
-{
- if ( index != 0 ) {
- PyErr_SetString(PyExc_SystemError,
- "accessing non-existent string segment");
- return -1;
- }
- *ptr = (void *)self->ob_sval;
- return Py_SIZE(self);
-}
-
-static Py_ssize_t
-string_buffer_getwritebuf(PyStringObject *self, Py_ssize_t index, const void **ptr)
-{
- PyErr_SetString(PyExc_TypeError,
- "Cannot use string as modifiable buffer");
- return -1;
-}
-
-static Py_ssize_t
-string_buffer_getsegcount(PyStringObject *self, Py_ssize_t *lenp)
-{
- if ( lenp )
- *lenp = Py_SIZE(self);
- return 1;
-}
-
-static Py_ssize_t
-string_buffer_getcharbuf(PyStringObject *self, Py_ssize_t index, const char **ptr)
-{
- if ( index != 0 ) {
- PyErr_SetString(PyExc_SystemError,
- "accessing non-existent string segment");
- return -1;
- }
- *ptr = self->ob_sval;
- return Py_SIZE(self);
-}
-
-static int
-string_buffer_getbuffer(PyStringObject *self, Py_buffer *view, int flags)
-{
- return PyBuffer_FillInfo(view, (void *)self->ob_sval, Py_SIZE(self),
- 0, flags);
-}
-
-static PySequenceMethods string_as_sequence = {
- (lenfunc)string_length, /*sq_length*/
- (binaryfunc)string_concat, /*sq_concat*/
- (ssizeargfunc)string_repeat, /*sq_repeat*/
- (ssizeargfunc)string_item, /*sq_item*/
- (ssizessizeargfunc)string_slice, /*sq_slice*/
- 0, /*sq_ass_item*/
- 0, /*sq_ass_slice*/
- (objobjproc)string_contains /*sq_contains*/
-};
-
-static PyMappingMethods string_as_mapping = {
- (lenfunc)string_length,
- (binaryfunc)string_subscript,
- 0,
-};
-
-static PyBufferProcs string_as_buffer = {
- (readbufferproc)string_buffer_getreadbuf,
- (writebufferproc)string_buffer_getwritebuf,
- (segcountproc)string_buffer_getsegcount,
- (charbufferproc)string_buffer_getcharbuf,
- (getbufferproc)string_buffer_getbuffer,
- 0, /* XXX */
-};
-
-
-
-#define LEFTSTRIP 0
-#define RIGHTSTRIP 1
-#define BOTHSTRIP 2
-
-/* Arrays indexed by above */
-static const char *stripformat[] = {"|O:lstrip", "|O:rstrip", "|O:strip"};
-
-#define STRIPNAME(i) (stripformat[i]+3)
-
-
-/* Don't call if length < 2 */
-#define Py_STRING_MATCH(target, offset, pattern, length) \
- (target[offset] == pattern[0] && \
- target[offset+length-1] == pattern[length-1] && \
- !memcmp(target+offset+1, pattern+1, length-2) )
-
-
-/* Overallocate the initial list to reduce the number of reallocs for small
- split sizes. Eg, "A A A A A A A A A A".split() (10 elements) has three
- resizes, to sizes 4, 8, then 16. Most observed string splits are for human
- text (roughly 11 words per line) and field delimited data (usually 1-10
- fields). For large strings the split algorithms are bandwidth limited
- so increasing the preallocation likely will not improve things.*/
-
-#define MAX_PREALLOC 12
-
-/* 5 splits gives 6 elements */
-#define PREALLOC_SIZE(maxsplit) \
- (maxsplit >= MAX_PREALLOC ? MAX_PREALLOC : maxsplit+1)
-
-#define SPLIT_APPEND(data, left, right) \
- str = PyString_FromStringAndSize((data) + (left), \
- (right) - (left)); \
- if (str == NULL) \
- goto onError; \
- if (PyList_Append(list, str)) { \
- Py_DECREF(str); \
- goto onError; \
- } \
- else \
- Py_DECREF(str);
-
-#define SPLIT_ADD(data, left, right) { \
- str = PyString_FromStringAndSize((data) + (left), \
- (right) - (left)); \
- if (str == NULL) \
- goto onError; \
- if (count < MAX_PREALLOC) { \
- PyList_SET_ITEM(list, count, str); \
- } else { \
- if (PyList_Append(list, str)) { \
- Py_DECREF(str); \
- goto onError; \
- } \
- else \
- Py_DECREF(str); \
- } \
- count++; }
-
-/* Always force the list to the expected size. */
-#define FIX_PREALLOC_SIZE(list) Py_SIZE(list) = count
-
-#define SKIP_SPACE(s, i, len) { while (i<len && isspace(Py_CHARMASK(s[i]))) i++; }
-#define SKIP_NONSPACE(s, i, len) { while (i<len && !isspace(Py_CHARMASK(s[i]))) i++; }
-#define RSKIP_SPACE(s, i) { while (i>=0 && isspace(Py_CHARMASK(s[i]))) i--; }
-#define RSKIP_NONSPACE(s, i) { while (i>=0 && !isspace(Py_CHARMASK(s[i]))) i--; }
-
-Py_LOCAL_INLINE(PyObject *)
-split_whitespace(PyStringObject *self, Py_ssize_t len, Py_ssize_t maxsplit)
-{
- const char *s = PyString_AS_STRING(self);
- Py_ssize_t i, j, count=0;
- PyObject *str;
- PyObject *list = PyList_New(PREALLOC_SIZE(maxsplit));
-
- if (list == NULL)
- return NULL;
-
- i = j = 0;
-
- while (maxsplit-- > 0) {
- SKIP_SPACE(s, i, len);
- if (i==len) break;
- j = i; i++;
- SKIP_NONSPACE(s, i, len);
- if (j == 0 && i == len && PyString_CheckExact(self)) {
- /* No whitespace in self, so just use it as list[0] */
- Py_INCREF(self);
- PyList_SET_ITEM(list, 0, (PyObject *)self);
- count++;
- break;
- }
- SPLIT_ADD(s, j, i);
- }
-
- if (i < len) {
- /* Only occurs when maxsplit was reached */
- /* Skip any remaining whitespace and copy to end of string */
- SKIP_SPACE(s, i, len);
- if (i != len)
- SPLIT_ADD(s, i, len);
- }
- FIX_PREALLOC_SIZE(list);
- return list;
- onError:
- Py_DECREF(list);
- return NULL;
-}
-
-Py_LOCAL_INLINE(PyObject *)
-split_char(PyStringObject *self, Py_ssize_t len, char ch, Py_ssize_t maxcount)
-{
- const char *s = PyString_AS_STRING(self);
- register Py_ssize_t i, j, count=0;
- PyObject *str;
- PyObject *list = PyList_New(PREALLOC_SIZE(maxcount));
-
- if (list == NULL)
- return NULL;
-
- i = j = 0;
- while ((j < len) && (maxcount-- > 0)) {
- for(; j<len; j++) {
- /* I found that using memchr makes no difference */
- if (s[j] == ch) {
- SPLIT_ADD(s, i, j);
- i = j = j + 1;
- break;
- }
- }
- }
- if (i == 0 && count == 0 && PyString_CheckExact(self)) {
- /* ch not in self, so just use self as list[0] */
- Py_INCREF(self);
- PyList_SET_ITEM(list, 0, (PyObject *)self);
- count++;
- }
- else if (i <= len) {
- SPLIT_ADD(s, i, len);
- }
- FIX_PREALLOC_SIZE(list);
- return list;
-
- onError:
- Py_DECREF(list);
- return NULL;
-}
-
-PyDoc_STRVAR(split__doc__,
-"S.split([sep [,maxsplit]]) -> list of strings\n\
-\n\
-Return a list of the words in the string S, using sep as the\n\
-delimiter string. If maxsplit is given, at most maxsplit\n\
-splits are done. If sep is not specified or is None, any\n\
-whitespace string is a separator and empty strings are removed\n\
-from the result.");
-
-static PyObject *
-string_split(PyStringObject *self, PyObject *args)
-{
- Py_ssize_t len = PyString_GET_SIZE(self), n, i, j;
- Py_ssize_t maxsplit = -1, count=0;
- const char *s = PyString_AS_STRING(self), *sub;
- PyObject *list, *str, *subobj = Py_None;
-#ifdef USE_FAST
- Py_ssize_t pos;
-#endif
-
- if (!PyArg_ParseTuple(args, "|On:split", &subobj, &maxsplit))
- return NULL;
- if (maxsplit < 0)
- maxsplit = PY_SSIZE_T_MAX;
- if (subobj == Py_None)
- return split_whitespace(self, len, maxsplit);
- if (PyString_Check(subobj)) {
- sub = PyString_AS_STRING(subobj);
- n = PyString_GET_SIZE(subobj);
- }
-#ifdef Py_USING_UNICODE
- else if (PyUnicode_Check(subobj))
- return PyUnicode_Split((PyObject *)self, subobj, maxsplit);
-#endif
- else if (PyObject_AsCharBuffer(subobj, &sub, &n))
- return NULL;
-
- if (n == 0) {
- PyErr_SetString(PyExc_ValueError, "empty separator");
- return NULL;
- }
- else if (n == 1)
- return split_char(self, len, sub[0], maxsplit);
-
- list = PyList_New(PREALLOC_SIZE(maxsplit));
- if (list == NULL)
- return NULL;
-
-#ifdef USE_FAST
- i = j = 0;
- while (maxsplit-- > 0) {
- pos = fastsearch(s+i, len-i, sub, n, FAST_SEARCH);
- if (pos < 0)
- break;
- j = i+pos;
- SPLIT_ADD(s, i, j);
- i = j + n;
- }
-#else
- i = j = 0;
- while ((j+n <= len) && (maxsplit-- > 0)) {
- for (; j+n <= len; j++) {
- if (Py_STRING_MATCH(s, j, sub, n)) {
- SPLIT_ADD(s, i, j);
- i = j = j + n;
- break;
- }
- }
- }
-#endif
- SPLIT_ADD(s, i, len);
- FIX_PREALLOC_SIZE(list);
- return list;
-
- onError:
- Py_DECREF(list);
- return NULL;
-}
-
-PyDoc_STRVAR(partition__doc__,
-"S.partition(sep) -> (head, sep, tail)\n\
-\n\
-Searches for the separator sep in S, and returns the part before it,\n\
-the separator itself, and the part after it. If the separator is not\n\
-found, returns S and two empty strings.");
-
-static PyObject *
-string_partition(PyStringObject *self, PyObject *sep_obj)
-{
- const char *sep;
- Py_ssize_t sep_len;
-
- if (PyString_Check(sep_obj)) {
- sep = PyString_AS_STRING(sep_obj);
- sep_len = PyString_GET_SIZE(sep_obj);
- }
-#ifdef Py_USING_UNICODE
- else if (PyUnicode_Check(sep_obj))
- return PyUnicode_Partition((PyObject *) self, sep_obj);
-#endif
- else if (PyObject_AsCharBuffer(sep_obj, &sep, &sep_len))
- return NULL;
-
- return stringlib_partition(
- (PyObject*) self,
- PyString_AS_STRING(self), PyString_GET_SIZE(self),
- sep_obj, sep, sep_len
- );
-}
-
-PyDoc_STRVAR(rpartition__doc__,
-"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 two empty strings and S.");
-
-static PyObject *
-string_rpartition(PyStringObject *self, PyObject *sep_obj)
-{
- const char *sep;
- Py_ssize_t sep_len;
-
- if (PyString_Check(sep_obj)) {
- sep = PyString_AS_STRING(sep_obj);
- sep_len = PyString_GET_SIZE(sep_obj);
- }
-#ifdef Py_USING_UNICODE
- else if (PyUnicode_Check(sep_obj))
- return PyUnicode_Partition((PyObject *) self, sep_obj);
-#endif
- else if (PyObject_AsCharBuffer(sep_obj, &sep, &sep_len))
- return NULL;
-
- return stringlib_rpartition(
- (PyObject*) self,
- PyString_AS_STRING(self), PyString_GET_SIZE(self),
- sep_obj, sep, sep_len
- );
-}
-
-Py_LOCAL_INLINE(PyObject *)
-rsplit_whitespace(PyStringObject *self, Py_ssize_t len, Py_ssize_t maxsplit)
-{
- const char *s = PyString_AS_STRING(self);
- Py_ssize_t i, j, count=0;
- PyObject *str;
- PyObject *list = PyList_New(PREALLOC_SIZE(maxsplit));
-
- if (list == NULL)
- return NULL;
-
- i = j = len-1;
-
- while (maxsplit-- > 0) {
- RSKIP_SPACE(s, i);
- if (i<0) break;
- j = i; i--;
- RSKIP_NONSPACE(s, i);
- if (j == len-1 && i < 0 && PyString_CheckExact(self)) {
- /* No whitespace in self, so just use it as list[0] */
- Py_INCREF(self);
- PyList_SET_ITEM(list, 0, (PyObject *)self);
- count++;
- break;
- }
- SPLIT_ADD(s, i + 1, j + 1);
- }
- if (i >= 0) {
- /* Only occurs when maxsplit was reached */
- /* Skip any remaining whitespace and copy to beginning of string */
- RSKIP_SPACE(s, i);
- if (i >= 0)
- SPLIT_ADD(s, 0, i + 1);
-
- }
- FIX_PREALLOC_SIZE(list);
- if (PyList_Reverse(list) < 0)
- goto onError;
- return list;
- onError:
- Py_DECREF(list);
- return NULL;
-}
-
-Py_LOCAL_INLINE(PyObject *)
-rsplit_char(PyStringObject *self, Py_ssize_t len, char ch, Py_ssize_t maxcount)
-{
- const char *s = PyString_AS_STRING(self);
- register Py_ssize_t i, j, count=0;
- PyObject *str;
- PyObject *list = PyList_New(PREALLOC_SIZE(maxcount));
-
- if (list == NULL)
- return NULL;
-
- i = j = len - 1;
- while ((i >= 0) && (maxcount-- > 0)) {
- for (; i >= 0; i--) {
- if (s[i] == ch) {
- SPLIT_ADD(s, i + 1, j + 1);
- j = i = i - 1;
- break;
- }
- }
- }
- if (i < 0 && count == 0 && PyString_CheckExact(self)) {
- /* ch not in self, so just use self as list[0] */
- Py_INCREF(self);
- PyList_SET_ITEM(list, 0, (PyObject *)self);
- count++;
- }
- else if (j >= -1) {
- SPLIT_ADD(s, 0, j + 1);
- }
- FIX_PREALLOC_SIZE(list);
- if (PyList_Reverse(list) < 0)
- goto onError;
- return list;
-
- onError:
- Py_DECREF(list);
- return NULL;
-}
-
-PyDoc_STRVAR(rsplit__doc__,
-"S.rsplit([sep [,maxsplit]]) -> list of strings\n\
-\n\
-Return a list of the words in the string S, using sep as the\n\
-delimiter string, starting at the end of the string and working\n\
-to the front. If maxsplit is given, at most maxsplit splits are\n\
-done. If sep is not specified or is None, any whitespace string\n\
-is a separator.");
-
-static PyObject *
-string_rsplit(PyStringObject *self, PyObject *args)
-{
- Py_ssize_t len = PyString_GET_SIZE(self), n, i, j;
- Py_ssize_t maxsplit = -1, count=0;
- const char *s, *sub;
- PyObject *list, *str, *subobj = Py_None;
-
- if (!PyArg_ParseTuple(args, "|On:rsplit", &subobj, &maxsplit))
- return NULL;
- if (maxsplit < 0)
- maxsplit = PY_SSIZE_T_MAX;
- if (subobj == Py_None)
- return rsplit_whitespace(self, len, maxsplit);
- if (PyString_Check(subobj)) {
- sub = PyString_AS_STRING(subobj);
- n = PyString_GET_SIZE(subobj);
- }
-#ifdef Py_USING_UNICODE
- else if (PyUnicode_Check(subobj))
- return PyUnicode_RSplit((PyObject *)self, subobj, maxsplit);
-#endif
- else if (PyObject_AsCharBuffer(subobj, &sub, &n))
- return NULL;
-
- if (n == 0) {
- PyErr_SetString(PyExc_ValueError, "empty separator");
- return NULL;
- }
- else if (n == 1)
- return rsplit_char(self, len, sub[0], maxsplit);
-
- list = PyList_New(PREALLOC_SIZE(maxsplit));
- if (list == NULL)
- return NULL;
-
- j = len;
- i = j - n;
-
- s = PyString_AS_STRING(self);
- while ( (i >= 0) && (maxsplit-- > 0) ) {
- for (; i>=0; i--) {
- if (Py_STRING_MATCH(s, i, sub, n)) {
- SPLIT_ADD(s, i + n, j);
- j = i;
- i -= n;
- break;
- }
- }
- }
- SPLIT_ADD(s, 0, j);
- FIX_PREALLOC_SIZE(list);
- if (PyList_Reverse(list) < 0)
- goto onError;
- return list;
-
-onError:
- Py_DECREF(list);
- return NULL;
-}
-
-
-PyDoc_STRVAR(join__doc__,
-"S.join(sequence) -> string\n\
-\n\
-Return a string which is the concatenation of the strings in the\n\
-sequence. The separator between elements is S.");
-
-static PyObject *
-string_join(PyStringObject *self, PyObject *orig)
-{
- char *sep = PyString_AS_STRING(self);
- const Py_ssize_t seplen = PyString_GET_SIZE(self);
- PyObject *res = NULL;
- char *p;
- Py_ssize_t seqlen = 0;
- size_t sz = 0;
- Py_ssize_t i;
- PyObject *seq, *item;
-
- seq = PySequence_Fast(orig, "");
- if (seq == NULL) {
- return NULL;
- }
-
- seqlen = PySequence_Size(seq);
- if (seqlen == 0) {
- Py_DECREF(seq);
- return PyString_FromString("");
- }
- if (seqlen == 1) {
- item = PySequence_Fast_GET_ITEM(seq, 0);
- if (PyString_CheckExact(item) || PyUnicode_CheckExact(item)) {
- Py_INCREF(item);
- Py_DECREF(seq);
- return item;
- }
- }
-
- /* There are at least two things to join, or else we have a subclass
- * of the builtin types in the sequence.
- * Do a pre-pass to figure out the total amount of space we'll
- * need (sz), see whether any argument is absurd, and defer to
- * the Unicode join if appropriate.
- */
- for (i = 0; i < seqlen; i++) {
- const size_t old_sz = sz;
- item = PySequence_Fast_GET_ITEM(seq, i);
- if (!PyString_Check(item)){
-#ifdef Py_USING_UNICODE
- if (PyUnicode_Check(item)) {
- /* Defer to Unicode join.
- * CAUTION: There's no gurantee that the
- * original sequence can be iterated over
- * again, so we must pass seq here.
- */
- PyObject *result;
- result = PyUnicode_Join((PyObject *)self, seq);
- Py_DECREF(seq);
- return result;
- }
-#endif
- PyErr_Format(PyExc_TypeError,
- "sequence item %zd: expected string,"
- " %.80s found",
- i, Py_TYPE(item)->tp_name);
- Py_DECREF(seq);
- return NULL;
- }
- sz += PyString_GET_SIZE(item);
- if (i != 0)
- sz += seplen;
- if (sz < old_sz || sz > PY_SSIZE_T_MAX) {
- PyErr_SetString(PyExc_OverflowError,
- "join() result is too long for a Python string");
- Py_DECREF(seq);
- return NULL;
- }
- }
-
- /* Allocate result space. */
- res = PyString_FromStringAndSize((char*)NULL, sz);
- if (res == NULL) {
- Py_DECREF(seq);
- return NULL;
- }
-
- /* Catenate everything. */
- p = PyString_AS_STRING(res);
- for (i = 0; i < seqlen; ++i) {
- size_t n;
- item = PySequence_Fast_GET_ITEM(seq, i);
- n = PyString_GET_SIZE(item);
- Py_MEMCPY(p, PyString_AS_STRING(item), n);
- p += n;
- if (i < seqlen - 1) {
- Py_MEMCPY(p, sep, seplen);
- p += seplen;
- }
- }
-
- Py_DECREF(seq);
- return res;
-}
-
-PyObject *
-_PyString_Join(PyObject *sep, PyObject *x)
-{
- assert(sep != NULL && PyString_Check(sep));
- assert(x != NULL);
- return string_join((PyStringObject *)sep, x);
-}
-
-Py_LOCAL_INLINE(void)
-string_adjust_indices(Py_ssize_t *start, Py_ssize_t *end, Py_ssize_t len)
-{
- if (*end > len)
- *end = len;
- else if (*end < 0)
- *end += len;
- if (*end < 0)
- *end = 0;
- if (*start < 0)
- *start += len;
- if (*start < 0)
- *start = 0;
-}
-
-Py_LOCAL_INLINE(Py_ssize_t)
-string_find_internal(PyStringObject *self, PyObject *args, int dir)
-{
- PyObject *subobj;
- const char *sub;
- Py_ssize_t sub_len;
- Py_ssize_t start=0, end=PY_SSIZE_T_MAX;
- PyObject *obj_start=Py_None, *obj_end=Py_None;
-
- if (!PyArg_ParseTuple(args, "O|OO:find/rfind/index/rindex", &subobj,
- &obj_start, &obj_end))
- return -2;
- /* To support None in "start" and "end" arguments, meaning
- the same as if they were not passed.
- */
- if (obj_start != Py_None)
- if (!_PyEval_SliceIndex(obj_start, &start))
- return -2;
- if (obj_end != Py_None)
- if (!_PyEval_SliceIndex(obj_end, &end))
- return -2;
-
- if (PyString_Check(subobj)) {
- sub = PyString_AS_STRING(subobj);
- sub_len = PyString_GET_SIZE(subobj);
- }
-#ifdef Py_USING_UNICODE
- else if (PyUnicode_Check(subobj))
- return PyUnicode_Find(
- (PyObject *)self, subobj, start, end, dir);
-#endif
- else if (PyObject_AsCharBuffer(subobj, &sub, &sub_len))
- /* XXX - the "expected a character buffer object" is pretty
- confusing for a non-expert. remap to something else ? */
- return -2;
-
- if (dir > 0)
- return stringlib_find_slice(
- PyString_AS_STRING(self), PyString_GET_SIZE(self),
- sub, sub_len, start, end);
- else
- return stringlib_rfind_slice(
- PyString_AS_STRING(self), PyString_GET_SIZE(self),
- sub, sub_len, start, end);
-}
-
-
-PyDoc_STRVAR(find__doc__,
-"S.find(sub [,start [,end]]) -> int\n\
-\n\
-Return the lowest index in S where substring sub is found,\n\
-such that sub is contained within s[start:end]. Optional\n\
-arguments start and end are interpreted as in slice notation.\n\
-\n\
-Return -1 on failure.");
-
-static PyObject *
-string_find(PyStringObject *self, PyObject *args)
-{
- Py_ssize_t result = string_find_internal(self, args, +1);
- if (result == -2)
- return NULL;
- return PyInt_FromSsize_t(result);
-}
-
-
-PyDoc_STRVAR(index__doc__,
-"S.index(sub [,start [,end]]) -> int\n\
-\n\
-Like S.find() but raise ValueError when the substring is not found.");
-
-static PyObject *
-string_index(PyStringObject *self, PyObject *args)
-{
- Py_ssize_t result = string_find_internal(self, args, +1);
- if (result == -2)
- return NULL;
- if (result == -1) {
- PyErr_SetString(PyExc_ValueError,
- "substring not found");
- return NULL;
- }
- return PyInt_FromSsize_t(result);
-}
-
-
-PyDoc_STRVAR(rfind__doc__,
-"S.rfind(sub [,start [,end]]) -> int\n\
-\n\
-Return the highest index in S where substring sub is found,\n\
-such that sub is contained within s[start:end]. Optional\n\
-arguments start and end are interpreted as in slice notation.\n\
-\n\
-Return -1 on failure.");
-
-static PyObject *
-string_rfind(PyStringObject *self, PyObject *args)
-{
- Py_ssize_t result = string_find_internal(self, args, -1);
- if (result == -2)
- return NULL;
- return PyInt_FromSsize_t(result);
-}
-
-
-PyDoc_STRVAR(rindex__doc__,
-"S.rindex(sub [,start [,end]]) -> int\n\
-\n\
-Like S.rfind() but raise ValueError when the substring is not found.");
-
-static PyObject *
-string_rindex(PyStringObject *self, PyObject *args)
-{
- Py_ssize_t result = string_find_internal(self, args, -1);
- if (result == -2)
- return NULL;
- if (result == -1) {
- PyErr_SetString(PyExc_ValueError,
- "substring not found");
- return NULL;
- }
- return PyInt_FromSsize_t(result);
-}
-
-
-Py_LOCAL_INLINE(PyObject *)
-do_xstrip(PyStringObject *self, int striptype, PyObject *sepobj)
-{
- char *s = PyString_AS_STRING(self);
- Py_ssize_t len = PyString_GET_SIZE(self);
- char *sep = PyString_AS_STRING(sepobj);
- Py_ssize_t seplen = PyString_GET_SIZE(sepobj);
- Py_ssize_t i, j;
-
- i = 0;
- if (striptype != RIGHTSTRIP) {
- while (i < len && memchr(sep, Py_CHARMASK(s[i]), seplen)) {
- i++;
- }
- }
-
- j = len;
- if (striptype != LEFTSTRIP) {
- do {
- j--;
- } while (j >= i && memchr(sep, Py_CHARMASK(s[j]), seplen));
- j++;
- }
-
- if (i == 0 && j == len && PyString_CheckExact(self)) {
- Py_INCREF(self);
- return (PyObject*)self;
- }
- else
- return PyString_FromStringAndSize(s+i, j-i);
-}
-
-
-Py_LOCAL_INLINE(PyObject *)
-do_strip(PyStringObject *self, int striptype)
-{
- char *s = PyString_AS_STRING(self);
- Py_ssize_t len = PyString_GET_SIZE(self), i, j;
-
- i = 0;
- if (striptype != RIGHTSTRIP) {
- while (i < len && isspace(Py_CHARMASK(s[i]))) {
- i++;
- }
- }
-
- j = len;
- if (striptype != LEFTSTRIP) {
- do {
- j--;
- } while (j >= i && isspace(Py_CHARMASK(s[j])));
- j++;
- }
-
- if (i == 0 && j == len && PyString_CheckExact(self)) {
- Py_INCREF(self);
- return (PyObject*)self;
- }
- else
- return PyString_FromStringAndSize(s+i, j-i);
-}
-
-
-Py_LOCAL_INLINE(PyObject *)
-do_argstrip(PyStringObject *self, int striptype, PyObject *args)
-{
- PyObject *sep = NULL;
-
- if (!PyArg_ParseTuple(args, (char *)stripformat[striptype], &sep))
- return NULL;
-
- if (sep != NULL && sep != Py_None) {
- if (PyString_Check(sep))
- return do_xstrip(self, striptype, sep);
-#ifdef Py_USING_UNICODE
- else if (PyUnicode_Check(sep)) {
- PyObject *uniself = PyUnicode_FromObject((PyObject *)self);
- PyObject *res;
- if (uniself==NULL)
- return NULL;
- res = _PyUnicode_XStrip((PyUnicodeObject *)uniself,
- striptype, sep);
- Py_DECREF(uniself);
- return res;
- }
-#endif
- PyErr_Format(PyExc_TypeError,
-#ifdef Py_USING_UNICODE
- "%s arg must be None, str or unicode",
-#else
- "%s arg must be None or str",
-#endif
- STRIPNAME(striptype));
- return NULL;
- }
-
- return do_strip(self, striptype);
-}
-
-
-PyDoc_STRVAR(strip__doc__,
-"S.strip([chars]) -> string or unicode\n\
-\n\
-Return a copy of the string S with leading and trailing\n\
-whitespace removed.\n\
-If chars is given and not None, remove characters in chars instead.\n\
-If chars is unicode, S will be converted to unicode before stripping");
-
-static PyObject *
-string_strip(PyStringObject *self, PyObject *args)
-{
- if (PyTuple_GET_SIZE(args) == 0)
- return do_strip(self, BOTHSTRIP); /* Common case */
- else
- return do_argstrip(self, BOTHSTRIP, args);
-}
-
-
-PyDoc_STRVAR(lstrip__doc__,
-"S.lstrip([chars]) -> string or unicode\n\
-\n\
-Return a copy of the string S with leading whitespace removed.\n\
-If chars is given and not None, remove characters in chars instead.\n\
-If chars is unicode, S will be converted to unicode before stripping");
-
-static PyObject *
-string_lstrip(PyStringObject *self, PyObject *args)
-{
- if (PyTuple_GET_SIZE(args) == 0)
- return do_strip(self, LEFTSTRIP); /* Common case */
- else
- return do_argstrip(self, LEFTSTRIP, args);
-}
-
-
-PyDoc_STRVAR(rstrip__doc__,
-"S.rstrip([chars]) -> string or unicode\n\
-\n\
-Return a copy of the string S with trailing whitespace removed.\n\
-If chars is given and not None, remove characters in chars instead.\n\
-If chars is unicode, S will be converted to unicode before stripping");
-
-static PyObject *
-string_rstrip(PyStringObject *self, PyObject *args)
-{
- if (PyTuple_GET_SIZE(args) == 0)
- return do_strip(self, RIGHTSTRIP); /* Common case */
- else
- return do_argstrip(self, RIGHTSTRIP, args);
-}
-
-
-PyDoc_STRVAR(lower__doc__,
-"S.lower() -> string\n\
-\n\
-Return a copy of the string S converted to lowercase.");
-
-/* _tolower and _toupper are defined by SUSv2, but they're not ISO C */
-#ifndef _tolower
-#define _tolower tolower
-#endif
-
-static PyObject *
-string_lower(PyStringObject *self)
-{
- char *s;
- Py_ssize_t i, n = PyString_GET_SIZE(self);
- PyObject *newobj;
-
- newobj = PyString_FromStringAndSize(NULL, n);
- if (!newobj)
- return NULL;
-
- s = PyString_AS_STRING(newobj);
-
- Py_MEMCPY(s, PyString_AS_STRING(self), n);
-
- for (i = 0; i < n; i++) {
- int c = Py_CHARMASK(s[i]);
- if (isupper(c))
- s[i] = _tolower(c);
- }
-
- return newobj;
-}
-
-PyDoc_STRVAR(upper__doc__,
-"S.upper() -> string\n\
-\n\
-Return a copy of the string S converted to uppercase.");
-
-#ifndef _toupper
-#define _toupper toupper
-#endif
-
-static PyObject *
-string_upper(PyStringObject *self)
-{
- char *s;
- Py_ssize_t i, n = PyString_GET_SIZE(self);
- PyObject *newobj;
-
- newobj = PyString_FromStringAndSize(NULL, n);
- if (!newobj)
- return NULL;
-
- s = PyString_AS_STRING(newobj);
-
- Py_MEMCPY(s, PyString_AS_STRING(self), n);
-
- for (i = 0; i < n; i++) {
- int c = Py_CHARMASK(s[i]);
- if (islower(c))
- s[i] = _toupper(c);
- }
-
- return newobj;
-}
-
-PyDoc_STRVAR(title__doc__,
-"S.title() -> string\n\
-\n\
-Return a titlecased version of S, i.e. words start with uppercase\n\
-characters, all remaining cased characters have lowercase.");
-
-static PyObject*
-string_title(PyStringObject *self)
-{
- char *s = PyString_AS_STRING(self), *s_new;
- Py_ssize_t i, n = PyString_GET_SIZE(self);
- int previous_is_cased = 0;
- PyObject *newobj;
-
- newobj = PyString_FromStringAndSize(NULL, n);
- if (newobj == NULL)
- return NULL;
- s_new = PyString_AsString(newobj);
- for (i = 0; i < n; i++) {
- int c = Py_CHARMASK(*s++);
- if (islower(c)) {
- if (!previous_is_cased)
- c = toupper(c);
- previous_is_cased = 1;
- } else if (isupper(c)) {
- if (previous_is_cased)
- c = tolower(c);
- previous_is_cased = 1;
- } else
- previous_is_cased = 0;
- *s_new++ = c;
- }
- return newobj;
-}
-
-PyDoc_STRVAR(capitalize__doc__,
-"S.capitalize() -> string\n\
-\n\
-Return a copy of the string S with only its first character\n\
-capitalized.");
-
-static PyObject *
-string_capitalize(PyStringObject *self)
-{
- char *s = PyString_AS_STRING(self), *s_new;
- Py_ssize_t i, n = PyString_GET_SIZE(self);
- PyObject *newobj;
-
- newobj = PyString_FromStringAndSize(NULL, n);
- if (newobj == NULL)
- return NULL;
- s_new = PyString_AsString(newobj);
- if (0 < n) {
- int c = Py_CHARMASK(*s++);
- if (islower(c))
- *s_new = toupper(c);
- else
- *s_new = c;
- s_new++;
- }
- for (i = 1; i < n; i++) {
- int c = Py_CHARMASK(*s++);
- if (isupper(c))
- *s_new = tolower(c);
- else
- *s_new = c;
- s_new++;
- }
- return newobj;
-}
-
-
-PyDoc_STRVAR(count__doc__,
-"S.count(sub[, start[, end]]) -> int\n\
-\n\
-Return the number of non-overlapping occurrences of substring sub in\n\
-string S[start:end]. Optional arguments start and end are interpreted\n\
-as in slice notation.");
-
-static PyObject *
-string_count(PyStringObject *self, PyObject *args)
-{
- PyObject *sub_obj;
- const char *str = PyString_AS_STRING(self), *sub;
- Py_ssize_t sub_len;
- Py_ssize_t start = 0, end = PY_SSIZE_T_MAX;
-
- if (!PyArg_ParseTuple(args, "O|O&O&:count", &sub_obj,
- _PyEval_SliceIndex, &start, _PyEval_SliceIndex, &end))
- return NULL;
-
- if (PyString_Check(sub_obj)) {
- sub = PyString_AS_STRING(sub_obj);
- sub_len = PyString_GET_SIZE(sub_obj);
- }
-#ifdef Py_USING_UNICODE
- else if (PyUnicode_Check(sub_obj)) {
- Py_ssize_t count;
- count = PyUnicode_Count((PyObject *)self, sub_obj, start, end);
- if (count == -1)
- return NULL;
- else
- return PyInt_FromSsize_t(count);
- }
-#endif
- else if (PyObject_AsCharBuffer(sub_obj, &sub, &sub_len))
- return NULL;
-
- string_adjust_indices(&start, &end, PyString_GET_SIZE(self));
-
- return PyInt_FromSsize_t(
- stringlib_count(str + start, end - start, sub, sub_len)
- );
-}
-
-PyDoc_STRVAR(swapcase__doc__,
-"S.swapcase() -> string\n\
-\n\
-Return a copy of the string S with uppercase characters\n\
-converted to lowercase and vice versa.");
-
-static PyObject *
-string_swapcase(PyStringObject *self)
-{
- char *s = PyString_AS_STRING(self), *s_new;
- Py_ssize_t i, n = PyString_GET_SIZE(self);
- PyObject *newobj;
-
- newobj = PyString_FromStringAndSize(NULL, n);
- if (newobj == NULL)
- return NULL;
- s_new = PyString_AsString(newobj);
- for (i = 0; i < n; i++) {
- int c = Py_CHARMASK(*s++);
- if (islower(c)) {
- *s_new = toupper(c);
- }
- else if (isupper(c)) {
- *s_new = tolower(c);
- }
- else
- *s_new = c;
- s_new++;
- }
- return newobj;
-}
-
-
-PyDoc_STRVAR(translate__doc__,
-"S.translate(table [,deletechars]) -> string\n\
-\n\
-Return a copy of the string S, where all characters occurring\n\
-in the optional argument deletechars are removed, and the\n\
-remaining characters have been mapped through the given\n\
-translation table, which must be a string of length 256.");
-
-static PyObject *
-string_translate(PyStringObject *self, PyObject *args)
-{
- register char *input, *output;
- const char *table;
- register Py_ssize_t i, c, changed = 0;
- PyObject *input_obj = (PyObject*)self;
- const char *output_start, *del_table=NULL;
- Py_ssize_t inlen, tablen, dellen = 0;
- PyObject *result;
- int trans_table[256];
- PyObject *tableobj, *delobj = NULL;
-
- if (!PyArg_UnpackTuple(args, "translate", 1, 2,
- &tableobj, &delobj))
- return NULL;
-
- if (PyString_Check(tableobj)) {
- table = PyString_AS_STRING(tableobj);
- tablen = PyString_GET_SIZE(tableobj);
- }
- else if (tableobj == Py_None) {
- table = NULL;
- tablen = 256;
- }
-#ifdef Py_USING_UNICODE
- else if (PyUnicode_Check(tableobj)) {
- /* Unicode .translate() does not support the deletechars
- parameter; instead a mapping to None will cause characters
- to be deleted. */
- if (delobj != NULL) {
- PyErr_SetString(PyExc_TypeError,
- "deletions are implemented differently for unicode");
- return NULL;
- }
- return PyUnicode_Translate((PyObject *)self, tableobj, NULL);
- }
-#endif
- else if (PyObject_AsCharBuffer(tableobj, &table, &tablen))
- return NULL;
-
- if (tablen != 256) {
- PyErr_SetString(PyExc_ValueError,
- "translation table must be 256 characters long");
- return NULL;
- }
-
- if (delobj != NULL) {
- if (PyString_Check(delobj)) {
- del_table = PyString_AS_STRING(delobj);
- dellen = PyString_GET_SIZE(delobj);
- }
-#ifdef Py_USING_UNICODE
- else if (PyUnicode_Check(delobj)) {
- PyErr_SetString(PyExc_TypeError,
- "deletions are implemented differently for unicode");
- return NULL;
- }
-#endif
- else if (PyObject_AsCharBuffer(delobj, &del_table, &dellen))
- return NULL;
- }
- else {
- del_table = NULL;
- dellen = 0;
- }
-
- inlen = PyString_GET_SIZE(input_obj);
- result = PyString_FromStringAndSize((char *)NULL, inlen);
- if (result == NULL)
- return NULL;
- output_start = output = PyString_AsString(result);
- input = PyString_AS_STRING(input_obj);
-
- if (dellen == 0 && table != NULL) {
- /* If no deletions are required, use faster code */
- for (i = inlen; --i >= 0; ) {
- c = Py_CHARMASK(*input++);
- if (Py_CHARMASK((*output++ = table[c])) != c)
- changed = 1;
- }
- if (changed || !PyString_CheckExact(input_obj))
- return result;
- Py_DECREF(result);
- Py_INCREF(input_obj);
- return input_obj;
- }
-
- if (table == NULL) {
- for (i = 0; i < 256; i++)
- trans_table[i] = Py_CHARMASK(i);
- } else {
- for (i = 0; i < 256; i++)
- trans_table[i] = Py_CHARMASK(table[i]);
- }
-
- for (i = 0; i < dellen; i++)
- trans_table[(int) Py_CHARMASK(del_table[i])] = -1;
-
- for (i = inlen; --i >= 0; ) {
- c = Py_CHARMASK(*input++);
- if (trans_table[c] != -1)
- if (Py_CHARMASK(*output++ = (char)trans_table[c]) == c)
- continue;
- changed = 1;
- }
- if (!changed && PyString_CheckExact(input_obj)) {
- Py_DECREF(result);
- Py_INCREF(input_obj);
- return input_obj;
- }
- /* Fix the size of the resulting string */
- if (inlen > 0)
- _PyString_Resize(&result, output - output_start);
- return result;
-}
-
-
-#define FORWARD 1
-#define REVERSE -1
-
-/* find and count characters and substrings */
-
-#define findchar(target, target_len, c) \
- ((char *)memchr((const void *)(target), c, target_len))
-
-/* String ops must return a string. */
-/* If the object is subclass of string, create a copy */
-Py_LOCAL(PyStringObject *)
-return_self(PyStringObject *self)
-{
- if (PyString_CheckExact(self)) {
- Py_INCREF(self);
- return self;
- }
- return (PyStringObject *)PyString_FromStringAndSize(
- PyString_AS_STRING(self),
- PyString_GET_SIZE(self));
-}
-
-Py_LOCAL_INLINE(Py_ssize_t)
-countchar(const char *target, int target_len, char c, Py_ssize_t maxcount)
-{
- Py_ssize_t count=0;
- const char *start=target;
- const char *end=target+target_len;
-
- while ( (start=findchar(start, end-start, c)) != NULL ) {
- count++;
- if (count >= maxcount)
- break;
- start += 1;
- }
- return count;
-}
-
-Py_LOCAL(Py_ssize_t)
-findstring(const char *target, Py_ssize_t target_len,
- const char *pattern, Py_ssize_t pattern_len,
- Py_ssize_t start,
- Py_ssize_t end,
- int direction)
-{
- if (start < 0) {
- start += target_len;
- if (start < 0)
- start = 0;
- }
- if (end > target_len) {
- end = target_len;
- } else if (end < 0) {
- end += target_len;
- if (end < 0)
- end = 0;
- }
-
- /* zero-length substrings always match at the first attempt */
- if (pattern_len == 0)
- return (direction > 0) ? start : end;
-
- end -= pattern_len;
-
- if (direction < 0) {
- for (; end >= start; end--)
- if (Py_STRING_MATCH(target, end, pattern, pattern_len))
- return end;
- } else {
- for (; start <= end; start++)
- if (Py_STRING_MATCH(target, start, pattern, pattern_len))
- return start;
- }
- return -1;
-}
-
-Py_LOCAL_INLINE(Py_ssize_t)
-countstring(const char *target, Py_ssize_t target_len,
- const char *pattern, Py_ssize_t pattern_len,
- Py_ssize_t start,
- Py_ssize_t end,
- int direction, Py_ssize_t maxcount)
-{
- Py_ssize_t count=0;
-
- if (start < 0) {
- start += target_len;
- if (start < 0)
- start = 0;
- }
- if (end > target_len) {
- end = target_len;
- } else if (end < 0) {
- end += target_len;
- if (end < 0)
- end = 0;
- }
-
- /* zero-length substrings match everywhere */
- if (pattern_len == 0 || maxcount == 0) {
- if (target_len+1 < maxcount)
- return target_len+1;
- return maxcount;
- }
-
- end -= pattern_len;
- if (direction < 0) {
- for (; (end >= start); end--)
- if (Py_STRING_MATCH(target, end, pattern, pattern_len)) {
- count++;
- if (--maxcount <= 0) break;
- end -= pattern_len-1;
- }
- } else {
- for (; (start <= end); start++)
- if (Py_STRING_MATCH(target, start, pattern, pattern_len)) {
- count++;
- if (--maxcount <= 0)
- break;
- start += pattern_len-1;
- }
- }
- return count;
-}
-
-
-/* Algorithms for different cases of string replacement */
-
-/* len(self)>=1, from="", len(to)>=1, maxcount>=1 */
-Py_LOCAL(PyStringObject *)
-replace_interleave(PyStringObject *self,
- const char *to_s, Py_ssize_t to_len,
- Py_ssize_t maxcount)
-{
- char *self_s, *result_s;
- Py_ssize_t self_len, result_len;
- Py_ssize_t count, i, product;
- PyStringObject *result;
-
- self_len = PyString_GET_SIZE(self);
-
- /* 1 at the end plus 1 after every character */
- count = self_len+1;
- if (maxcount < count)
- count = maxcount;
-
- /* Check for overflow */
- /* result_len = count * to_len + self_len; */
- product = count * to_len;
- if (product / to_len != count) {
- PyErr_SetString(PyExc_OverflowError,
- "replace string is too long");
- return NULL;
- }
- result_len = product + self_len;
- if (result_len < 0) {
- PyErr_SetString(PyExc_OverflowError,
- "replace string is too long");
- return NULL;
- }
-
- if (! (result = (PyStringObject *)
- PyString_FromStringAndSize(NULL, result_len)) )
- return NULL;
-
- self_s = PyString_AS_STRING(self);
- result_s = PyString_AS_STRING(result);
-
- /* TODO: special case single character, which doesn't need memcpy */
-
- /* Lay the first one down (guaranteed this will occur) */
- Py_MEMCPY(result_s, to_s, to_len);
- result_s += to_len;
- count -= 1;
-
- for (i=0; i<count; i++) {
- *result_s++ = *self_s++;
- Py_MEMCPY(result_s, to_s, to_len);
- result_s += to_len;
- }
-
- /* Copy the rest of the original string */
- Py_MEMCPY(result_s, self_s, self_len-i);
-
- return result;
-}
-
-/* Special case for deleting a single character */
-/* len(self)>=1, len(from)==1, to="", maxcount>=1 */
-Py_LOCAL(PyStringObject *)
-replace_delete_single_character(PyStringObject *self,
- char from_c, Py_ssize_t maxcount)
-{
- char *self_s, *result_s;
- char *start, *next, *end;
- Py_ssize_t self_len, result_len;
- Py_ssize_t count;
- PyStringObject *result;
-
- self_len = PyString_GET_SIZE(self);
- self_s = PyString_AS_STRING(self);
-
- count = countchar(self_s, self_len, from_c, maxcount);
- if (count == 0) {
- return return_self(self);
- }
-
- result_len = self_len - count; /* from_len == 1 */
- assert(result_len>=0);
-
- if ( (result = (PyStringObject *)
- PyString_FromStringAndSize(NULL, result_len)) == NULL)
- return NULL;
- result_s = PyString_AS_STRING(result);
-
- start = self_s;
- end = self_s + self_len;
- while (count-- > 0) {
- next = findchar(start, end-start, from_c);
- if (next == NULL)
- break;
- Py_MEMCPY(result_s, start, next-start);
- result_s += (next-start);
- start = next+1;
- }
- Py_MEMCPY(result_s, start, end-start);
-
- return result;
-}
-
-/* len(self)>=1, len(from)>=2, to="", maxcount>=1 */
-
-Py_LOCAL(PyStringObject *)
-replace_delete_substring(PyStringObject *self,
- const char *from_s, Py_ssize_t from_len,
- Py_ssize_t maxcount) {
- char *self_s, *result_s;
- char *start, *next, *end;
- Py_ssize_t self_len, result_len;
- Py_ssize_t count, offset;
- PyStringObject *result;
-
- self_len = PyString_GET_SIZE(self);
- self_s = PyString_AS_STRING(self);
-
- count = countstring(self_s, self_len,
- from_s, from_len,
- 0, self_len, 1,
- maxcount);
-
- if (count == 0) {
- /* no matches */
- return return_self(self);
- }
-
- result_len = self_len - (count * from_len);
- assert (result_len>=0);
-
- if ( (result = (PyStringObject *)
- PyString_FromStringAndSize(NULL, result_len)) == NULL )
- return NULL;
-
- result_s = PyString_AS_STRING(result);
-
- start = self_s;
- end = self_s + self_len;
- while (count-- > 0) {
- offset = findstring(start, end-start,
- from_s, from_len,
- 0, end-start, FORWARD);
- if (offset == -1)
- break;
- next = start + offset;
-
- Py_MEMCPY(result_s, start, next-start);
-
- result_s += (next-start);
- start = next+from_len;
- }
- Py_MEMCPY(result_s, start, end-start);
- return result;
-}
-
-/* len(self)>=1, len(from)==len(to)==1, maxcount>=1 */
-Py_LOCAL(PyStringObject *)
-replace_single_character_in_place(PyStringObject *self,
- char from_c, char to_c,
- Py_ssize_t maxcount)
-{
- char *self_s, *result_s, *start, *end, *next;
- Py_ssize_t self_len;
- PyStringObject *result;
-
- /* The result string will be the same size */
- self_s = PyString_AS_STRING(self);
- self_len = PyString_GET_SIZE(self);
-
- next = findchar(self_s, self_len, from_c);
-
- if (next == NULL) {
- /* No matches; return the original string */
- return return_self(self);
- }
-
- /* Need to make a new string */
- result = (PyStringObject *) PyString_FromStringAndSize(NULL, self_len);
- if (result == NULL)
- return NULL;
- result_s = PyString_AS_STRING(result);
- Py_MEMCPY(result_s, self_s, self_len);
-
- /* change everything in-place, starting with this one */
- start = result_s + (next-self_s);
- *start = to_c;
- start++;
- end = result_s + self_len;
-
- while (--maxcount > 0) {
- next = findchar(start, end-start, from_c);
- if (next == NULL)
- break;
- *next = to_c;
- start = next+1;
- }
-
- return result;
-}
-
-/* len(self)>=1, len(from)==len(to)>=2, maxcount>=1 */
-Py_LOCAL(PyStringObject *)
-replace_substring_in_place(PyStringObject *self,
- const char *from_s, Py_ssize_t from_len,
- const char *to_s, Py_ssize_t to_len,
- Py_ssize_t maxcount)
-{
- char *result_s, *start, *end;
- char *self_s;
- Py_ssize_t self_len, offset;
- PyStringObject *result;
-
- /* The result string will be the same size */
-
- self_s = PyString_AS_STRING(self);
- self_len = PyString_GET_SIZE(self);
-
- offset = findstring(self_s, self_len,
- from_s, from_len,
- 0, self_len, FORWARD);
- if (offset == -1) {
- /* No matches; return the original string */
- return return_self(self);
- }
-
- /* Need to make a new string */
- result = (PyStringObject *) PyString_FromStringAndSize(NULL, self_len);
- if (result == NULL)
- return NULL;
- result_s = PyString_AS_STRING(result);
- Py_MEMCPY(result_s, self_s, self_len);
-
- /* change everything in-place, starting with this one */
- start = result_s + offset;
- Py_MEMCPY(start, to_s, from_len);
- start += from_len;
- end = result_s + self_len;
-
- while ( --maxcount > 0) {
- offset = findstring(start, end-start,
- from_s, from_len,
- 0, end-start, FORWARD);
- if (offset==-1)
- break;
- Py_MEMCPY(start+offset, to_s, from_len);
- start += offset+from_len;
- }
-
- return result;
-}
-
-/* len(self)>=1, len(from)==1, len(to)>=2, maxcount>=1 */
-Py_LOCAL(PyStringObject *)
-replace_single_character(PyStringObject *self,
- char from_c,
- const char *to_s, Py_ssize_t to_len,
- Py_ssize_t maxcount)
-{
- char *self_s, *result_s;
- char *start, *next, *end;
- Py_ssize_t self_len, result_len;
- Py_ssize_t count, product;
- PyStringObject *result;
-
- self_s = PyString_AS_STRING(self);
- self_len = PyString_GET_SIZE(self);
-
- count = countchar(self_s, self_len, from_c, maxcount);
- if (count == 0) {
- /* no matches, return unchanged */
- return return_self(self);
- }
-
- /* use the difference between current and new, hence the "-1" */
- /* result_len = self_len + count * (to_len-1) */
- product = count * (to_len-1);
- if (product / (to_len-1) != count) {
- PyErr_SetString(PyExc_OverflowError, "replace string is too long");
- return NULL;
- }
- result_len = self_len + product;
- if (result_len < 0) {
- PyErr_SetString(PyExc_OverflowError, "replace string is too long");
- return NULL;
- }
-
- if ( (result = (PyStringObject *)
- PyString_FromStringAndSize(NULL, result_len)) == NULL)
- return NULL;
- result_s = PyString_AS_STRING(result);
-
- start = self_s;
- end = self_s + self_len;
- while (count-- > 0) {
- next = findchar(start, end-start, from_c);
- if (next == NULL)
- break;
-
- if (next == start) {
- /* replace with the 'to' */
- Py_MEMCPY(result_s, to_s, to_len);
- result_s += to_len;
- start += 1;
- } else {
- /* copy the unchanged old then the 'to' */
- Py_MEMCPY(result_s, start, next-start);
- result_s += (next-start);
- Py_MEMCPY(result_s, to_s, to_len);
- result_s += to_len;
- start = next+1;
- }
- }
- /* Copy the remainder of the remaining string */
- Py_MEMCPY(result_s, start, end-start);
-
- return result;
-}
-
-/* len(self)>=1, len(from)>=2, len(to)>=2, maxcount>=1 */
-Py_LOCAL(PyStringObject *)
-replace_substring(PyStringObject *self,
- const char *from_s, Py_ssize_t from_len,
- const char *to_s, Py_ssize_t to_len,
- Py_ssize_t maxcount) {
- char *self_s, *result_s;
- char *start, *next, *end;
- Py_ssize_t self_len, result_len;
- Py_ssize_t count, offset, product;
- PyStringObject *result;
-
- self_s = PyString_AS_STRING(self);
- self_len = PyString_GET_SIZE(self);
-
- count = countstring(self_s, self_len,
- from_s, from_len,
- 0, self_len, FORWARD, maxcount);
- if (count == 0) {
- /* no matches, return unchanged */
- return return_self(self);
- }
-
- /* Check for overflow */
- /* result_len = self_len + count * (to_len-from_len) */
- product = count * (to_len-from_len);
- if (product / (to_len-from_len) != count) {
- PyErr_SetString(PyExc_OverflowError, "replace string is too long");
- return NULL;
- }
- result_len = self_len + product;
- if (result_len < 0) {
- PyErr_SetString(PyExc_OverflowError, "replace string is too long");
- return NULL;
- }
-
- if ( (result = (PyStringObject *)
- PyString_FromStringAndSize(NULL, result_len)) == NULL)
- return NULL;
- result_s = PyString_AS_STRING(result);
-
- start = self_s;
- end = self_s + self_len;
- while (count-- > 0) {
- offset = findstring(start, end-start,
- from_s, from_len,
- 0, end-start, FORWARD);
- if (offset == -1)
- break;
- next = start+offset;
- if (next == start) {
- /* replace with the 'to' */
- Py_MEMCPY(result_s, to_s, to_len);
- result_s += to_len;
- start += from_len;
- } else {
- /* copy the unchanged old then the 'to' */
- Py_MEMCPY(result_s, start, next-start);
- result_s += (next-start);
- Py_MEMCPY(result_s, to_s, to_len);
- result_s += to_len;
- start = next+from_len;
- }
- }
- /* Copy the remainder of the remaining string */
- Py_MEMCPY(result_s, start, end-start);
-
- return result;
-}
-
-
-Py_LOCAL(PyStringObject *)
-replace(PyStringObject *self,
- const char *from_s, Py_ssize_t from_len,
- const char *to_s, Py_ssize_t to_len,
- Py_ssize_t maxcount)
-{
- if (maxcount < 0) {
- maxcount = PY_SSIZE_T_MAX;
- } else if (maxcount == 0 || PyString_GET_SIZE(self) == 0) {
- /* nothing to do; return the original string */
- return return_self(self);
- }
-
- if (maxcount == 0 ||
- (from_len == 0 && to_len == 0)) {
- /* nothing to do; return the original string */
- return return_self(self);
- }
-
- /* Handle zero-length special cases */
-
- if (from_len == 0) {
- /* insert the 'to' string everywhere. */
- /* >>> "Python".replace("", ".") */
- /* '.P.y.t.h.o.n.' */
- return replace_interleave(self, to_s, to_len, maxcount);
- }
-
- /* Except for "".replace("", "A") == "A" there is no way beyond this */
- /* point for an empty self string to generate a non-empty string */
- /* Special case so the remaining code always gets a non-empty string */
- if (PyString_GET_SIZE(self) == 0) {
- return return_self(self);
- }
-
- if (to_len == 0) {
- /* delete all occurances of 'from' string */
- if (from_len == 1) {
- return replace_delete_single_character(
- self, from_s[0], maxcount);
- } else {
- return replace_delete_substring(self, from_s, from_len, maxcount);
- }
- }
-
- /* Handle special case where both strings have the same length */
-
- if (from_len == to_len) {
- if (from_len == 1) {
- return replace_single_character_in_place(
- self,
- from_s[0],
- to_s[0],
- maxcount);
- } else {
- return replace_substring_in_place(
- self, from_s, from_len, to_s, to_len, maxcount);
- }
- }
-
- /* Otherwise use the more generic algorithms */
- if (from_len == 1) {
- return replace_single_character(self, from_s[0],
- to_s, to_len, maxcount);
- } else {
- /* len('from')>=2, len('to')>=1 */
- return replace_substring(self, from_s, from_len, to_s, to_len, maxcount);
- }
-}
-
-PyDoc_STRVAR(replace__doc__,
-"S.replace (old, new[, count]) -> string\n\
-\n\
-Return a copy of string S with all occurrences of substring\n\
-old replaced by new. If the optional argument count is\n\
-given, only the first count occurrences are replaced.");
-
-static PyObject *
-string_replace(PyStringObject *self, PyObject *args)
-{
- Py_ssize_t count = -1;
- PyObject *from, *to;
- const char *from_s, *to_s;
- Py_ssize_t from_len, to_len;
-
- if (!PyArg_ParseTuple(args, "OO|n:replace", &from, &to, &count))
- return NULL;
-
- if (PyString_Check(from)) {
- from_s = PyString_AS_STRING(from);
- from_len = PyString_GET_SIZE(from);
- }
-#ifdef Py_USING_UNICODE
- if (PyUnicode_Check(from))
- return PyUnicode_Replace((PyObject *)self,
- from, to, count);
-#endif
- else if (PyObject_AsCharBuffer(from, &from_s, &from_len))
- return NULL;
-
- if (PyString_Check(to)) {
- to_s = PyString_AS_STRING(to);
- to_len = PyString_GET_SIZE(to);
- }
-#ifdef Py_USING_UNICODE
- else if (PyUnicode_Check(to))
- return PyUnicode_Replace((PyObject *)self,
- from, to, count);
-#endif
- else if (PyObject_AsCharBuffer(to, &to_s, &to_len))
- return NULL;
-
- return (PyObject *)replace((PyStringObject *) self,
- from_s, from_len,
- to_s, to_len, count);
-}
-
-/** End DALKE **/
-
-/* Matches the end (direction >= 0) or start (direction < 0) of self
- * against substr, using the start and end arguments. Returns
- * -1 on error, 0 if not found and 1 if found.
- */
-Py_LOCAL(int)
-_string_tailmatch(PyStringObject *self, PyObject *substr, Py_ssize_t start,
- Py_ssize_t end, int direction)
-{
- Py_ssize_t len = PyString_GET_SIZE(self);
- Py_ssize_t slen;
- const char* sub;
- const char* str;
-
- if (PyString_Check(substr)) {
- sub = PyString_AS_STRING(substr);
- slen = PyString_GET_SIZE(substr);
- }
-#ifdef Py_USING_UNICODE
- else if (PyUnicode_Check(substr))
- return PyUnicode_Tailmatch((PyObject *)self,
- substr, start, end, direction);
-#endif
- else if (PyObject_AsCharBuffer(substr, &sub, &slen))
- return -1;
- str = PyString_AS_STRING(self);
-
- string_adjust_indices(&start, &end, len);
-
- if (direction < 0) {
- /* startswith */
- if (start+slen > len)
- return 0;
- } else {
- /* endswith */
- if (end-start < slen || start > len)
- return 0;
-
- if (end-slen > start)
- start = end - slen;
- }
- if (end-start >= slen)
- return ! memcmp(str+start, sub, slen);
- return 0;
-}
-
-
-PyDoc_STRVAR(startswith__doc__,
-"S.startswith(prefix[, start[, end]]) -> bool\n\
-\n\
-Return True if S starts with the specified prefix, False otherwise.\n\
-With optional start, test S beginning at that position.\n\
-With optional end, stop comparing S at that position.\n\
-prefix can also be a tuple of strings to try.");
-
-static PyObject *
-string_startswith(PyStringObject *self, PyObject *args)
-{
- Py_ssize_t start = 0;
- Py_ssize_t end = PY_SSIZE_T_MAX;
- PyObject *subobj;
- int result;
-
- if (!PyArg_ParseTuple(args, "O|O&O&:startswith", &subobj,
- _PyEval_SliceIndex, &start, _PyEval_SliceIndex, &end))
- return NULL;
- if (PyTuple_Check(subobj)) {
- Py_ssize_t i;
- for (i = 0; i < PyTuple_GET_SIZE(subobj); i++) {
- result = _string_tailmatch(self,
- PyTuple_GET_ITEM(subobj, i),
- start, end, -1);
- if (result == -1)
- return NULL;
- else if (result) {
- Py_RETURN_TRUE;
- }
- }
- Py_RETURN_FALSE;
- }
- result = _string_tailmatch(self, subobj, start, end, -1);
- if (result == -1)
- return NULL;
- else
- return PyBool_FromLong(result);
-}
-
-
-PyDoc_STRVAR(endswith__doc__,
-"S.endswith(suffix[, start[, end]]) -> bool\n\
-\n\
-Return True if S ends with the specified suffix, False otherwise.\n\
-With optional start, test S beginning at that position.\n\
-With optional end, stop comparing S at that position.\n\
-suffix can also be a tuple of strings to try.");
-
-static PyObject *
-string_endswith(PyStringObject *self, PyObject *args)
-{
- Py_ssize_t start = 0;
- Py_ssize_t end = PY_SSIZE_T_MAX;
- PyObject *subobj;
- int result;
-
- if (!PyArg_ParseTuple(args, "O|O&O&:endswith", &subobj,
- _PyEval_SliceIndex, &start, _PyEval_SliceIndex, &end))
- return NULL;
- if (PyTuple_Check(subobj)) {
- Py_ssize_t i;
- for (i = 0; i < PyTuple_GET_SIZE(subobj); i++) {
- result = _string_tailmatch(self,
- PyTuple_GET_ITEM(subobj, i),
- start, end, +1);
- if (result == -1)
- return NULL;
- else if (result) {
- Py_RETURN_TRUE;
- }
- }
- Py_RETURN_FALSE;
- }
- result = _string_tailmatch(self, subobj, start, end, +1);
- if (result == -1)
- return NULL;
- else
- return PyBool_FromLong(result);
-}
-
-
-PyDoc_STRVAR(encode__doc__,
-"S.encode([encoding[,errors]]) -> object\n\
-\n\
-Encodes S using the codec registered for encoding. encoding defaults\n\
-to the default encoding. errors may be given to set a different error\n\
-handling scheme. Default is 'strict' meaning that encoding errors raise\n\
-a UnicodeEncodeError. Other possible values are 'ignore', 'replace' and\n\
-'xmlcharrefreplace' as well as any other name registered with\n\
-codecs.register_error that is able to handle UnicodeEncodeErrors.");
-
-static PyObject *
-string_encode(PyStringObject *self, PyObject *args)
-{
- char *encoding = NULL;
- char *errors = NULL;
- PyObject *v;
-
- if (!PyArg_ParseTuple(args, "|ss:encode", &encoding, &errors))
- return NULL;
- v = PyString_AsEncodedObject((PyObject *)self, encoding, errors);
- if (v == NULL)
- goto onError;
- if (!PyString_Check(v) && !PyUnicode_Check(v)) {
- PyErr_Format(PyExc_TypeError,
- "encoder did not return a string/unicode object "
- "(type=%.400s)",
- Py_TYPE(v)->tp_name);
- Py_DECREF(v);
- return NULL;
- }
- return v;
-
- onError:
- return NULL;
-}
-
-
-PyDoc_STRVAR(decode__doc__,
-"S.decode([encoding[,errors]]) -> object\n\
-\n\
-Decodes S using the codec registered for encoding. encoding defaults\n\
-to the default encoding. errors may be given to set a different error\n\
-handling scheme. Default is 'strict' meaning that encoding errors raise\n\
-a UnicodeDecodeError. Other possible values are 'ignore' and 'replace'\n\
-as well as any other name registerd with codecs.register_error that is\n\
-able to handle UnicodeDecodeErrors.");
-
-static PyObject *
-string_decode(PyStringObject *self, PyObject *args)
-{
- char *encoding = NULL;
- char *errors = NULL;
- PyObject *v;
-
- if (!PyArg_ParseTuple(args, "|ss:decode", &encoding, &errors))
- return NULL;
- v = PyString_AsDecodedObject((PyObject *)self, encoding, errors);
- if (v == NULL)
- goto onError;
- if (!PyString_Check(v) && !PyUnicode_Check(v)) {
- PyErr_Format(PyExc_TypeError,
- "decoder did not return a string/unicode object "
- "(type=%.400s)",
- Py_TYPE(v)->tp_name);
- Py_DECREF(v);
- return NULL;
- }
- return v;
-
- onError:
- return NULL;
-}
-
-
-PyDoc_STRVAR(expandtabs__doc__,
-"S.expandtabs([tabsize]) -> string\n\
-\n\
-Return a copy of S where all tab characters are expanded using spaces.\n\
-If tabsize is not given, a tab size of 8 characters is assumed.");
-
-static PyObject*
-string_expandtabs(PyStringObject *self, PyObject *args)
-{
- const char *e, *p, *qe;
- char *q;
- Py_ssize_t i, j, incr;
- PyObject *u;
- int tabsize = 8;
-
- if (!PyArg_ParseTuple(args, "|i:expandtabs", &tabsize))
- return NULL;
-
- /* First pass: determine size of output string */
- i = 0; /* chars up to and including most recent \n or \r */
- j = 0; /* chars since most recent \n or \r (use in tab calculations) */
- e = PyString_AS_STRING(self) + PyString_GET_SIZE(self); /* end of input */
- for (p = PyString_AS_STRING(self); p < e; p++)
- if (*p == '\t') {
- if (tabsize > 0) {
- incr = tabsize - (j % tabsize);
- if (j > PY_SSIZE_T_MAX - incr)
- goto overflow1;
- j += incr;
- }
- }
- else {
- if (j > PY_SSIZE_T_MAX - 1)
- goto overflow1;
- j++;
- if (*p == '\n' || *p == '\r') {
- if (i > PY_SSIZE_T_MAX - j)
- goto overflow1;
- i += j;
- j = 0;
- }
- }
-
- if (i > PY_SSIZE_T_MAX - j)
- goto overflow1;
-
- /* Second pass: create output string and fill it */
- u = PyString_FromStringAndSize(NULL, i + j);
- if (!u)
- return NULL;
-
- j = 0; /* same as in first pass */
- q = PyString_AS_STRING(u); /* next output char */
- qe = PyString_AS_STRING(u) + PyString_GET_SIZE(u); /* end of output */
-
- for (p = PyString_AS_STRING(self); p < e; p++)
- if (*p == '\t') {
- if (tabsize > 0) {
- i = tabsize - (j % tabsize);
- j += i;
- while (i--) {
- if (q >= qe)
- goto overflow2;
- *q++ = ' ';
- }
- }
- }
- else {
- if (q >= qe)
- goto overflow2;
- *q++ = *p;
- j++;
- if (*p == '\n' || *p == '\r')
- j = 0;
- }
-
- return u;
-
- overflow2:
- Py_DECREF(u);
- overflow1:
- PyErr_SetString(PyExc_OverflowError, "new string is too long");
- return NULL;
-}
-
-Py_LOCAL_INLINE(PyObject *)
-pad(PyStringObject *self, Py_ssize_t left, Py_ssize_t right, char fill)
-{
- PyObject *u;
-
- if (left < 0)
- left = 0;
- if (right < 0)
- right = 0;
-
- if (left == 0 && right == 0 && PyString_CheckExact(self)) {
- Py_INCREF(self);
- return (PyObject *)self;
- }
-
- u = PyString_FromStringAndSize(NULL,
- left + PyString_GET_SIZE(self) + right);
- if (u) {
- if (left)
- memset(PyString_AS_STRING(u), fill, left);
- Py_MEMCPY(PyString_AS_STRING(u) + left,
- PyString_AS_STRING(self),
- PyString_GET_SIZE(self));
- if (right)
- memset(PyString_AS_STRING(u) + left + PyString_GET_SIZE(self),
- fill, right);
- }
-
- return u;
-}
-
-PyDoc_STRVAR(ljust__doc__,
-"S.ljust(width[, fillchar]) -> string\n"
-"\n"
-"Return S left justified in a string of length width. Padding is\n"
-"done using the specified fill character (default is a space).");
-
-static PyObject *
-string_ljust(PyStringObject *self, PyObject *args)
-{
- Py_ssize_t width;
- char fillchar = ' ';
-
- if (!PyArg_ParseTuple(args, "n|c:ljust", &width, &fillchar))
- return NULL;
-
- if (PyString_GET_SIZE(self) >= width && PyString_CheckExact(self)) {
- Py_INCREF(self);
- return (PyObject*) self;
- }
-
- return pad(self, 0, width - PyString_GET_SIZE(self), fillchar);
-}
-
-
-PyDoc_STRVAR(rjust__doc__,
-"S.rjust(width[, fillchar]) -> string\n"
-"\n"
-"Return S right justified in a string of length width. Padding is\n"
-"done using the specified fill character (default is a space)");
-
-static PyObject *
-string_rjust(PyStringObject *self, PyObject *args)
-{
- Py_ssize_t width;
- char fillchar = ' ';
-
- if (!PyArg_ParseTuple(args, "n|c:rjust", &width, &fillchar))
- return NULL;
-
- if (PyString_GET_SIZE(self) >= width && PyString_CheckExact(self)) {
- Py_INCREF(self);
- return (PyObject*) self;
- }
-
- return pad(self, width - PyString_GET_SIZE(self), 0, fillchar);
-}
-
-
-PyDoc_STRVAR(center__doc__,
-"S.center(width[, fillchar]) -> string\n"
-"\n"
-"Return S centered in a string of length width. Padding is\n"
-"done using the specified fill character (default is a space)");
-
-static PyObject *
-string_center(PyStringObject *self, PyObject *args)
-{
- Py_ssize_t marg, left;
- Py_ssize_t width;
- char fillchar = ' ';
-
- if (!PyArg_ParseTuple(args, "n|c:center", &width, &fillchar))
- return NULL;
-
- if (PyString_GET_SIZE(self) >= width && PyString_CheckExact(self)) {
- Py_INCREF(self);
- return (PyObject*) self;
- }
-
- marg = width - PyString_GET_SIZE(self);
- left = marg / 2 + (marg & width & 1);
-
- return pad(self, left, marg - left, fillchar);
-}
-
-PyDoc_STRVAR(zfill__doc__,
-"S.zfill(width) -> string\n"
-"\n"
-"Pad a numeric string S with zeros on the left, to fill a field\n"
-"of the specified width. The string S is never truncated.");
-
-static PyObject *
-string_zfill(PyStringObject *self, PyObject *args)
-{
- Py_ssize_t fill;
- PyObject *s;
- char *p;
- Py_ssize_t width;
-
- if (!PyArg_ParseTuple(args, "n:zfill", &width))
- return NULL;
-
- if (PyString_GET_SIZE(self) >= width) {
- if (PyString_CheckExact(self)) {
- Py_INCREF(self);
- return (PyObject*) self;
- }
- else
- return PyString_FromStringAndSize(
- PyString_AS_STRING(self),
- PyString_GET_SIZE(self)
- );
- }
-
- fill = width - PyString_GET_SIZE(self);
-
- s = pad(self, fill, 0, '0');
-
- if (s == NULL)
- return NULL;
-
- p = PyString_AS_STRING(s);
- if (p[fill] == '+' || p[fill] == '-') {
- /* move sign to beginning of string */
- p[0] = p[fill];
- p[fill] = '0';
- }
-
- return (PyObject*) s;
-}
-
-PyDoc_STRVAR(isspace__doc__,
-"S.isspace() -> bool\n\
-\n\
-Return True if all characters in S are whitespace\n\
-and there is at least one character in S, False otherwise.");
-
-static PyObject*
-string_isspace(PyStringObject *self)
-{
- register const unsigned char *p
- = (unsigned char *) PyString_AS_STRING(self);
- register const unsigned char *e;
-
- /* Shortcut for single character strings */
- if (PyString_GET_SIZE(self) == 1 &&
- isspace(*p))
- return PyBool_FromLong(1);
-
- /* Special case for empty strings */
- if (PyString_GET_SIZE(self) == 0)
- return PyBool_FromLong(0);
-
- e = p + PyString_GET_SIZE(self);
- for (; p < e; p++) {
- if (!isspace(*p))
- return PyBool_FromLong(0);
- }
- return PyBool_FromLong(1);
-}
-
-
-PyDoc_STRVAR(isalpha__doc__,
-"S.isalpha() -> bool\n\
-\n\
-Return True if all characters in S are alphabetic\n\
-and there is at least one character in S, False otherwise.");
-
-static PyObject*
-string_isalpha(PyStringObject *self)
-{
- register const unsigned char *p
- = (unsigned char *) PyString_AS_STRING(self);
- register const unsigned char *e;
-
- /* Shortcut for single character strings */
- if (PyString_GET_SIZE(self) == 1 &&
- isalpha(*p))
- return PyBool_FromLong(1);
-
- /* Special case for empty strings */
- if (PyString_GET_SIZE(self) == 0)
- return PyBool_FromLong(0);
-
- e = p + PyString_GET_SIZE(self);
- for (; p < e; p++) {
- if (!isalpha(*p))
- return PyBool_FromLong(0);
- }
- return PyBool_FromLong(1);
-}
-
-
-PyDoc_STRVAR(isalnum__doc__,
-"S.isalnum() -> bool\n\
-\n\
-Return True if all characters in S are alphanumeric\n\
-and there is at least one character in S, False otherwise.");
-
-static PyObject*
-string_isalnum(PyStringObject *self)
-{
- register const unsigned char *p
- = (unsigned char *) PyString_AS_STRING(self);
- register const unsigned char *e;
-
- /* Shortcut for single character strings */
- if (PyString_GET_SIZE(self) == 1 &&
- isalnum(*p))
- return PyBool_FromLong(1);
-
- /* Special case for empty strings */
- if (PyString_GET_SIZE(self) == 0)
- return PyBool_FromLong(0);
-
- e = p + PyString_GET_SIZE(self);
- for (; p < e; p++) {
- if (!isalnum(*p))
- return PyBool_FromLong(0);
- }
- return PyBool_FromLong(1);
-}
-
-
-PyDoc_STRVAR(isdigit__doc__,
-"S.isdigit() -> bool\n\
-\n\
-Return True if all characters in S are digits\n\
-and there is at least one character in S, False otherwise.");
-
-static PyObject*
-string_isdigit(PyStringObject *self)
-{
- register const unsigned char *p
- = (unsigned char *) PyString_AS_STRING(self);
- register const unsigned char *e;
-
- /* Shortcut for single character strings */
- if (PyString_GET_SIZE(self) == 1 &&
- isdigit(*p))
- return PyBool_FromLong(1);
-
- /* Special case for empty strings */
- if (PyString_GET_SIZE(self) == 0)
- return PyBool_FromLong(0);
-
- e = p + PyString_GET_SIZE(self);
- for (; p < e; p++) {
- if (!isdigit(*p))
- return PyBool_FromLong(0);
- }
- return PyBool_FromLong(1);
-}
-
-
-PyDoc_STRVAR(islower__doc__,
-"S.islower() -> bool\n\
-\n\
-Return True if all cased characters in S are lowercase and there is\n\
-at least one cased character in S, False otherwise.");
-
-static PyObject*
-string_islower(PyStringObject *self)
-{
- register const unsigned char *p
- = (unsigned char *) PyString_AS_STRING(self);
- register const unsigned char *e;
- int cased;
-
- /* Shortcut for single character strings */
- if (PyString_GET_SIZE(self) == 1)
- return PyBool_FromLong(islower(*p) != 0);
-
- /* Special case for empty strings */
- if (PyString_GET_SIZE(self) == 0)
- return PyBool_FromLong(0);
-
- e = p + PyString_GET_SIZE(self);
- cased = 0;
- for (; p < e; p++) {
- if (isupper(*p))
- return PyBool_FromLong(0);
- else if (!cased && islower(*p))
- cased = 1;
- }
- return PyBool_FromLong(cased);
-}
-
-
-PyDoc_STRVAR(isupper__doc__,
-"S.isupper() -> bool\n\
-\n\
-Return True if all cased characters in S are uppercase and there is\n\
-at least one cased character in S, False otherwise.");
-
-static PyObject*
-string_isupper(PyStringObject *self)
-{
- register const unsigned char *p
- = (unsigned char *) PyString_AS_STRING(self);
- register const unsigned char *e;
- int cased;
-
- /* Shortcut for single character strings */
- if (PyString_GET_SIZE(self) == 1)
- return PyBool_FromLong(isupper(*p) != 0);
-
- /* Special case for empty strings */
- if (PyString_GET_SIZE(self) == 0)
- return PyBool_FromLong(0);
-
- e = p + PyString_GET_SIZE(self);
- cased = 0;
- for (; p < e; p++) {
- if (islower(*p))
- return PyBool_FromLong(0);
- else if (!cased && isupper(*p))
- cased = 1;
- }
- return PyBool_FromLong(cased);
-}
-
-
-PyDoc_STRVAR(istitle__doc__,
-"S.istitle() -> bool\n\
-\n\
-Return True if S is a titlecased string and there is at least one\n\
-character in S, i.e. uppercase characters may only follow uncased\n\
-characters and lowercase characters only cased ones. Return False\n\
-otherwise.");
-
-static PyObject*
-string_istitle(PyStringObject *self, PyObject *uncased)
-{
- register const unsigned char *p
- = (unsigned char *) PyString_AS_STRING(self);
- register const unsigned char *e;
- int cased, previous_is_cased;
-
- /* Shortcut for single character strings */
- if (PyString_GET_SIZE(self) == 1)
- return PyBool_FromLong(isupper(*p) != 0);
-
- /* Special case for empty strings */
- if (PyString_GET_SIZE(self) == 0)
- return PyBool_FromLong(0);
-
- e = p + PyString_GET_SIZE(self);
- cased = 0;
- previous_is_cased = 0;
- for (; p < e; p++) {
- register const unsigned char ch = *p;
-
- if (isupper(ch)) {
- if (previous_is_cased)
- return PyBool_FromLong(0);
- previous_is_cased = 1;
- cased = 1;
- }
- else if (islower(ch)) {
- if (!previous_is_cased)
- return PyBool_FromLong(0);
- previous_is_cased = 1;
- cased = 1;
- }
- else
- previous_is_cased = 0;
- }
- return PyBool_FromLong(cased);
-}
-
-
-PyDoc_STRVAR(splitlines__doc__,
-"S.splitlines([keepends]) -> list of strings\n\
-\n\
-Return a list of the lines in S, breaking at line boundaries.\n\
-Line breaks are not included in the resulting list unless keepends\n\
-is given and true.");
-
-static PyObject*
-string_splitlines(PyStringObject *self, PyObject *args)
-{
- register Py_ssize_t i;
- register Py_ssize_t j;
- Py_ssize_t len;
- int keepends = 0;
- PyObject *list;
- PyObject *str;
- char *data;
-
- if (!PyArg_ParseTuple(args, "|i:splitlines", &keepends))
- return NULL;
-
- data = PyString_AS_STRING(self);
- len = PyString_GET_SIZE(self);
-
- /* This does not use the preallocated list because splitlines is
- usually run with hundreds of newlines. The overhead of
- switching between PyList_SET_ITEM and append causes about a
- 2-3% slowdown for that common case. A smarter implementation
- could move the if check out, so the SET_ITEMs are done first
- and the appends only done when the prealloc buffer is full.
- That's too much work for little gain.*/
-
- list = PyList_New(0);
- if (!list)
- goto onError;
-
- for (i = j = 0; i < len; ) {
- Py_ssize_t eol;
-
- /* Find a line and append it */
- while (i < len && data[i] != '\n' && data[i] != '\r')
- i++;
-
- /* Skip the line break reading CRLF as one line break */
- eol = i;
- if (i < len) {
- if (data[i] == '\r' && i + 1 < len &&
- data[i+1] == '\n')
- i += 2;
- else
- i++;
- if (keepends)
- eol = i;
- }
- SPLIT_APPEND(data, j, eol);
- j = i;
- }
- if (j < len) {
- SPLIT_APPEND(data, j, len);
- }
-
- return list;
-
- onError:
- Py_XDECREF(list);
- return NULL;
-}
-
-#undef SPLIT_APPEND
-#undef SPLIT_ADD
-#undef MAX_PREALLOC
-#undef PREALLOC_SIZE
-
-static PyObject *
-string_getnewargs(PyStringObject *v)
-{
- return Py_BuildValue("(s#)", v->ob_sval, Py_SIZE(v));
-}
-
-
-#include "stringlib/string_format.h"
-
-PyDoc_STRVAR(format__doc__,
-"S.format(*args, **kwargs) -> unicode\n\
-\n\
-");
-
-PyDoc_STRVAR(p_format__doc__,
-"S.__format__(format_spec) -> unicode\n\
-\n\
-");
-
-
-static PyMethodDef
-string_methods[] = {
- /* Counterparts of the obsolete stropmodule functions; except
- string.maketrans(). */
- {"join", (PyCFunction)string_join, METH_O, join__doc__},
- {"split", (PyCFunction)string_split, METH_VARARGS, split__doc__},
- {"rsplit", (PyCFunction)string_rsplit, METH_VARARGS, rsplit__doc__},
- {"lower", (PyCFunction)string_lower, METH_NOARGS, lower__doc__},
- {"upper", (PyCFunction)string_upper, METH_NOARGS, upper__doc__},
- {"islower", (PyCFunction)string_islower, METH_NOARGS, islower__doc__},
- {"isupper", (PyCFunction)string_isupper, METH_NOARGS, isupper__doc__},
- {"isspace", (PyCFunction)string_isspace, METH_NOARGS, isspace__doc__},
- {"isdigit", (PyCFunction)string_isdigit, METH_NOARGS, isdigit__doc__},
- {"istitle", (PyCFunction)string_istitle, METH_NOARGS, istitle__doc__},
- {"isalpha", (PyCFunction)string_isalpha, METH_NOARGS, isalpha__doc__},
- {"isalnum", (PyCFunction)string_isalnum, METH_NOARGS, isalnum__doc__},
- {"capitalize", (PyCFunction)string_capitalize, METH_NOARGS,
- capitalize__doc__},
- {"count", (PyCFunction)string_count, METH_VARARGS, count__doc__},
- {"endswith", (PyCFunction)string_endswith, METH_VARARGS,
- endswith__doc__},
- {"partition", (PyCFunction)string_partition, METH_O, partition__doc__},
- {"find", (PyCFunction)string_find, METH_VARARGS, find__doc__},
- {"index", (PyCFunction)string_index, METH_VARARGS, index__doc__},
- {"lstrip", (PyCFunction)string_lstrip, METH_VARARGS, lstrip__doc__},
- {"replace", (PyCFunction)string_replace, METH_VARARGS, replace__doc__},
- {"rfind", (PyCFunction)string_rfind, METH_VARARGS, rfind__doc__},
- {"rindex", (PyCFunction)string_rindex, METH_VARARGS, rindex__doc__},
- {"rstrip", (PyCFunction)string_rstrip, METH_VARARGS, rstrip__doc__},
- {"rpartition", (PyCFunction)string_rpartition, METH_O,
- rpartition__doc__},
- {"startswith", (PyCFunction)string_startswith, METH_VARARGS,
- startswith__doc__},
- {"strip", (PyCFunction)string_strip, METH_VARARGS, strip__doc__},
- {"swapcase", (PyCFunction)string_swapcase, METH_NOARGS,
- swapcase__doc__},
- {"translate", (PyCFunction)string_translate, METH_VARARGS,
- translate__doc__},
- {"title", (PyCFunction)string_title, METH_NOARGS, title__doc__},
- {"ljust", (PyCFunction)string_ljust, METH_VARARGS, ljust__doc__},
- {"rjust", (PyCFunction)string_rjust, METH_VARARGS, rjust__doc__},
- {"center", (PyCFunction)string_center, METH_VARARGS, center__doc__},
- {"zfill", (PyCFunction)string_zfill, METH_VARARGS, zfill__doc__},
- {"format", (PyCFunction) do_string_format, METH_VARARGS | METH_KEYWORDS, format__doc__},
- {"__format__", (PyCFunction) string__format__, METH_VARARGS, p_format__doc__},
- {"_formatter_field_name_split", (PyCFunction) formatter_field_name_split, METH_NOARGS},
- {"_formatter_parser", (PyCFunction) formatter_parser, METH_NOARGS},
- {"encode", (PyCFunction)string_encode, METH_VARARGS, encode__doc__},
- {"decode", (PyCFunction)string_decode, METH_VARARGS, decode__doc__},
- {"expandtabs", (PyCFunction)string_expandtabs, METH_VARARGS,
- expandtabs__doc__},
- {"splitlines", (PyCFunction)string_splitlines, METH_VARARGS,
- splitlines__doc__},
- {"__getnewargs__", (PyCFunction)string_getnewargs, METH_NOARGS},
- {NULL, NULL} /* sentinel */
-};
-
-static PyObject *
-str_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
-
-static PyObject *
-string_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
-{
- PyObject *x = NULL;
- static char *kwlist[] = {"object", 0};
-
- if (type != &PyString_Type)
- return str_subtype_new(type, args, kwds);
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O:str", kwlist, &x))
- return NULL;
- if (x == NULL)
- return PyString_FromString("");
- return PyObject_Str(x);
-}
-
-static PyObject *
-str_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
-{
- PyObject *tmp, *pnew;
- Py_ssize_t n;
-
- assert(PyType_IsSubtype(type, &PyString_Type));
- tmp = string_new(&PyString_Type, args, kwds);
- if (tmp == NULL)
- return NULL;
- assert(PyString_CheckExact(tmp));
- n = PyString_GET_SIZE(tmp);
- pnew = type->tp_alloc(type, n);
- if (pnew != NULL) {
- Py_MEMCPY(PyString_AS_STRING(pnew), PyString_AS_STRING(tmp), n+1);
- ((PyStringObject *)pnew)->ob_shash =
- ((PyStringObject *)tmp)->ob_shash;
- ((PyStringObject *)pnew)->ob_sstate = SSTATE_NOT_INTERNED;
- }
- Py_DECREF(tmp);
- return pnew;
-}
-
-static PyObject *
-basestring_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
-{
- PyErr_SetString(PyExc_TypeError,
- "The basestring type cannot be instantiated");
- return NULL;
-}
-
-static PyObject *
-string_mod(PyObject *v, PyObject *w)
-{
- if (!PyString_Check(v)) {
- Py_INCREF(Py_NotImplemented);
- return Py_NotImplemented;
- }
- return PyString_Format(v, w);
-}
-
-PyDoc_STRVAR(basestring_doc,
-"Type basestring cannot be instantiated; it is the base for str and unicode.");
-
-static PyNumberMethods string_as_number = {
- 0, /*nb_add*/
- 0, /*nb_subtract*/
- 0, /*nb_multiply*/
- 0, /*nb_divide*/
- string_mod, /*nb_remainder*/
-};
-
-
-PyTypeObject PyBaseString_Type = {
- PyVarObject_HEAD_INIT(&PyType_Type, 0)
- "basestring",
- 0,
- 0,
- 0, /* tp_dealloc */
- 0, /* tp_print */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_compare */
- 0, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- 0, /* tp_str */
- 0, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
- basestring_doc, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- 0, /* tp_methods */
- 0, /* tp_members */
- 0, /* tp_getset */
- &PyBaseObject_Type, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- 0, /* tp_init */
- 0, /* tp_alloc */
- basestring_new, /* tp_new */
- 0, /* tp_free */
-};
-
-PyDoc_STRVAR(string_doc,
-"str(object) -> string\n\
-\n\
-Return a nice string representation of the object.\n\
-If the argument is a string, the return value is the same object.");
-
-PyTypeObject PyString_Type = {
- PyVarObject_HEAD_INIT(&PyType_Type, 0)
- "str",
- sizeof(PyStringObject),
- sizeof(char),
- string_dealloc, /* tp_dealloc */
- (printfunc)string_print, /* tp_print */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_compare */
- string_repr, /* tp_repr */
- &string_as_number, /* tp_as_number */
- &string_as_sequence, /* tp_as_sequence */
- &string_as_mapping, /* tp_as_mapping */
- (hashfunc)string_hash, /* tp_hash */
- 0, /* tp_call */
- string_str, /* tp_str */
- PyObject_GenericGetAttr, /* tp_getattro */
- 0, /* tp_setattro */
- &string_as_buffer, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES |
- Py_TPFLAGS_BASETYPE | Py_TPFLAGS_STRING_SUBCLASS |
- Py_TPFLAGS_HAVE_NEWBUFFER, /* tp_flags */
- string_doc, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- (richcmpfunc)string_richcompare, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- string_methods, /* tp_methods */
- 0, /* tp_members */
- 0, /* tp_getset */
- &PyBaseString_Type, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- 0, /* tp_init */
- 0, /* tp_alloc */
- string_new, /* tp_new */
- PyObject_Del, /* tp_free */
-};
-
-void
-PyString_Concat(register PyObject **pv, register PyObject *w)
-{
- register PyObject *v;
- if (*pv == NULL)
- return;
- if (w == NULL || !PyString_Check(*pv)) {
- Py_DECREF(*pv);
- *pv = NULL;
- return;
- }
- v = string_concat((PyStringObject *) *pv, w);
- Py_DECREF(*pv);
- *pv = v;
-}
-
-void
-PyString_ConcatAndDel(register PyObject **pv, register PyObject *w)
-{
- PyString_Concat(pv, w);
- Py_XDECREF(w);
-}
-
-
-/* The following function breaks the notion that strings are immutable:
- it changes the size of a string. We get away with this only if there
- is only one module referencing the object. You can also think of it
- as creating a new string object and destroying the old one, only
- more efficiently. In any case, don't use this if the string may
- already be known to some other part of the code...
- Note that if there's not enough memory to resize the string, the original
- string object at *pv is deallocated, *pv is set to NULL, an "out of
- memory" exception is set, and -1 is returned. Else (on success) 0 is
- returned, and the value in *pv may or may not be the same as on input.
- As always, an extra byte is allocated for a trailing \0 byte (newsize
- does *not* include that), and a trailing \0 byte is stored.
-*/
-
-int
-_PyString_Resize(PyObject **pv, Py_ssize_t newsize)
-{
- register PyObject *v;
- register PyStringObject *sv;
- v = *pv;
- if (!PyString_Check(v) || Py_REFCNT(v) != 1 || newsize < 0 ||
- PyString_CHECK_INTERNED(v)) {
- *pv = 0;
- Py_DECREF(v);
- PyErr_BadInternalCall();
- return -1;
- }
- /* XXX UNREF/NEWREF interface should be more symmetrical */
- _Py_DEC_REFTOTAL;
- _Py_ForgetReference(v);
- *pv = (PyObject *)
- PyObject_REALLOC((char *)v, sizeof(PyStringObject) + newsize);
- if (*pv == NULL) {
- PyObject_Del(v);
- PyErr_NoMemory();
- return -1;
- }
- _Py_NewReference(*pv);
- sv = (PyStringObject *) *pv;
- Py_SIZE(sv) = newsize;
- sv->ob_sval[newsize] = '\0';
- sv->ob_shash = -1; /* invalidate cached hash value */
- return 0;
-}
-
-/* Helpers for formatstring */
-
-Py_LOCAL_INLINE(PyObject *)
-getnextarg(PyObject *args, Py_ssize_t arglen, Py_ssize_t *p_argidx)
-{
- Py_ssize_t argidx = *p_argidx;
- if (argidx < arglen) {
- (*p_argidx)++;
- if (arglen < 0)
- return args;
- else
- return PyTuple_GetItem(args, argidx);
- }
- PyErr_SetString(PyExc_TypeError,
- "not enough arguments for format string");
- return NULL;
-}
-
-/* Format codes
- * F_LJUST '-'
- * F_SIGN '+'
- * F_BLANK ' '
- * F_ALT '#'
- * F_ZERO '0'
- */
-#define F_LJUST (1<<0)
-#define F_SIGN (1<<1)
-#define F_BLANK (1<<2)
-#define F_ALT (1<<3)
-#define F_ZERO (1<<4)
-
-Py_LOCAL_INLINE(int)
-formatfloat(char *buf, size_t buflen, int flags,
- int prec, int type, PyObject *v)
-{
- /* fmt = '%#.' + `prec` + `type`
- worst case length = 3 + 10 (len of INT_MAX) + 1 = 14 (use 20)*/
- char fmt[20];
- double x;
- x = PyFloat_AsDouble(v);
- if (x == -1.0 && PyErr_Occurred()) {
- PyErr_Format(PyExc_TypeError, "float argument required, "
- "not %.200s", Py_TYPE(v)->tp_name);
- return -1;
- }
- if (prec < 0)
- prec = 6;
- if (type == 'f' && fabs(x)/1e25 >= 1e25)
- type = 'g';
- /* Worst case length calc to ensure no buffer overrun:
-
- 'g' formats:
- fmt = %#.<prec>g
- buf = '-' + [0-9]*prec + '.' + 'e+' + (longest exp
- for any double rep.)
- len = 1 + prec + 1 + 2 + 5 = 9 + prec
-
- 'f' formats:
- buf = '-' + [0-9]*x + '.' + [0-9]*prec (with x < 50)
- len = 1 + 50 + 1 + prec = 52 + prec
-
- If prec=0 the effective precision is 1 (the leading digit is
- always given), therefore increase the length by one.
-
- */
- if (((type == 'g' || type == 'G') &&
- buflen <= (size_t)10 + (size_t)prec) ||
- (type == 'f' && buflen <= (size_t)53 + (size_t)prec)) {
- PyErr_SetString(PyExc_OverflowError,
- "formatted float is too long (precision too large?)");
- return -1;
- }
- PyOS_snprintf(fmt, sizeof(fmt), "%%%s.%d%c",
- (flags&F_ALT) ? "#" : "",
- prec, type);
- PyOS_ascii_formatd(buf, buflen, fmt, x);
- return (int)strlen(buf);
-}
-
-/* _PyString_FormatLong emulates the format codes d, u, o, x and X, and
- * the F_ALT flag, for Python's long (unbounded) ints. It's not used for
- * Python's regular ints.
- * Return value: a new PyString*, or NULL if error.
- * . *pbuf is set to point into it,
- * *plen set to the # of chars following that.
- * Caller must decref it when done using pbuf.
- * The string starting at *pbuf is of the form
- * "-"? ("0x" | "0X")? digit+
- * "0x"/"0X" are present only for x and X conversions, with F_ALT
- * set in flags. The case of hex digits will be correct,
- * There will be at least prec digits, zero-filled on the left if
- * necessary to get that many.
- * val object to be converted
- * flags bitmask of format flags; only F_ALT is looked at
- * prec minimum number of digits; 0-fill on left if needed
- * type a character in [duoxX]; u acts the same as d
- *
- * CAUTION: o, x and X conversions on regular ints can never
- * produce a '-' sign, but can for Python's unbounded ints.
- */
-PyObject*
-_PyString_FormatLong(PyObject *val, int flags, int prec, int type,
- char **pbuf, int *plen)
-{
- PyObject *result = NULL;
- char *buf;
- Py_ssize_t i;
- int sign; /* 1 if '-', else 0 */
- int len; /* number of characters */
- Py_ssize_t llen;
- int numdigits; /* len == numnondigits + numdigits */
- int numnondigits = 0;
-
- switch (type) {
- case 'd':
- case 'u':
- result = Py_TYPE(val)->tp_str(val);
- break;
- case 'o':
- result = Py_TYPE(val)->tp_as_number->nb_oct(val);
- break;
- case 'x':
- case 'X':
- numnondigits = 2;
- result = Py_TYPE(val)->tp_as_number->nb_hex(val);
- break;
- default:
- assert(!"'type' not in [duoxX]");
- }
- if (!result)
- return NULL;
-
- buf = PyString_AsString(result);
- if (!buf) {
- Py_DECREF(result);
- return NULL;
- }
-
- /* To modify the string in-place, there can only be one reference. */
- if (Py_REFCNT(result) != 1) {
- PyErr_BadInternalCall();
- return NULL;
- }
- llen = PyString_Size(result);
- if (llen > INT_MAX) {
- PyErr_SetString(PyExc_ValueError, "string too large in _PyString_FormatLong");
- return NULL;
- }
- len = (int)llen;
- if (buf[len-1] == 'L') {
- --len;
- buf[len] = '\0';
- }
- sign = buf[0] == '-';
- numnondigits += sign;
- numdigits = len - numnondigits;
- assert(numdigits > 0);
-
- /* Get rid of base marker unless F_ALT */
- if ((flags & F_ALT) == 0) {
- /* Need to skip 0x, 0X or 0. */
- int skipped = 0;
- switch (type) {
- case 'o':
- assert(buf[sign] == '0');
- /* If 0 is only digit, leave it alone. */
- if (numdigits > 1) {
- skipped = 1;
- --numdigits;
- }
- break;
- case 'x':
- case 'X':
- assert(buf[sign] == '0');
- assert(buf[sign + 1] == 'x');
- skipped = 2;
- numnondigits -= 2;
- break;
- }
- if (skipped) {
- buf += skipped;
- len -= skipped;
- if (sign)
- buf[0] = '-';
- }
- assert(len == numnondigits + numdigits);
- assert(numdigits > 0);
- }
-
- /* Fill with leading zeroes to meet minimum width. */
- if (prec > numdigits) {
- PyObject *r1 = PyString_FromStringAndSize(NULL,
- numnondigits + prec);
- char *b1;
- if (!r1) {
- Py_DECREF(result);
- return NULL;
- }
- b1 = PyString_AS_STRING(r1);
- for (i = 0; i < numnondigits; ++i)
- *b1++ = *buf++;
- for (i = 0; i < prec - numdigits; i++)
- *b1++ = '0';
- for (i = 0; i < numdigits; i++)
- *b1++ = *buf++;
- *b1 = '\0';
- Py_DECREF(result);
- result = r1;
- buf = PyString_AS_STRING(result);
- len = numnondigits + prec;
- }
-
- /* Fix up case for hex conversions. */
- if (type == 'X') {
- /* Need to convert all lower case letters to upper case.
- and need to convert 0x to 0X (and -0x to -0X). */
- for (i = 0; i < len; i++)
- if (buf[i] >= 'a' && buf[i] <= 'x')
- buf[i] -= 'a'-'A';
- }
- *pbuf = buf;
- *plen = len;
- return result;
-}
-
-Py_LOCAL_INLINE(int)
-formatint(char *buf, size_t buflen, int flags,
- int prec, int type, PyObject *v)
-{
- /* fmt = '%#.' + `prec` + 'l' + `type`
- worst case length = 3 + 19 (worst len of INT_MAX on 64-bit machine)
- + 1 + 1 = 24 */
- char fmt[64]; /* plenty big enough! */
- char *sign;
- long x;
-
- x = PyInt_AsLong(v);
- if (x == -1 && PyErr_Occurred()) {
- PyErr_Format(PyExc_TypeError, "int argument required, not %.200s",
- Py_TYPE(v)->tp_name);
- return -1;
- }
- if (x < 0 && type == 'u') {
- type = 'd';
- }
- if (x < 0 && (type == 'x' || type == 'X' || type == 'o'))
- sign = "-";
- else
- sign = "";
- if (prec < 0)
- prec = 1;
-
- if ((flags & F_ALT) &&
- (type == 'x' || type == 'X')) {
- /* When converting under %#x or %#X, there are a number
- * of issues that cause pain:
- * - when 0 is being converted, the C standard leaves off
- * the '0x' or '0X', which is inconsistent with other
- * %#x/%#X conversions and inconsistent with Python's
- * hex() function
- * - there are platforms that violate the standard and
- * convert 0 with the '0x' or '0X'
- * (Metrowerks, Compaq Tru64)
- * - there are platforms that give '0x' when converting
- * under %#X, but convert 0 in accordance with the
- * standard (OS/2 EMX)
- *
- * We can achieve the desired consistency by inserting our
- * own '0x' or '0X' prefix, and substituting %x/%X in place
- * of %#x/%#X.
- *
- * Note that this is the same approach as used in
- * formatint() in unicodeobject.c
- */
- PyOS_snprintf(fmt, sizeof(fmt), "%s0%c%%.%dl%c",
- sign, type, prec, type);
- }
- else {
- PyOS_snprintf(fmt, sizeof(fmt), "%s%%%s.%dl%c",
- sign, (flags&F_ALT) ? "#" : "",
- prec, type);
- }
-
- /* buf = '+'/'-'/'' + '0'/'0x'/'' + '[0-9]'*max(prec, len(x in octal))
- * worst case buf = '-0x' + [0-9]*prec, where prec >= 11
- */
- if (buflen <= 14 || buflen <= (size_t)3 + (size_t)prec) {
- PyErr_SetString(PyExc_OverflowError,
- "formatted integer is too long (precision too large?)");
- return -1;
- }
- if (sign[0])
- PyOS_snprintf(buf, buflen, fmt, -x);
- else
- PyOS_snprintf(buf, buflen, fmt, x);
- return (int)strlen(buf);
-}
-
-Py_LOCAL_INLINE(int)
-formatchar(char *buf, size_t buflen, PyObject *v)
-{
- /* presume that the buffer is at least 2 characters long */
- if (PyString_Check(v)) {
- if (!PyArg_Parse(v, "c;%c requires int or char", &buf[0]))
- return -1;
- }
- else {
- if (!PyArg_Parse(v, "b;%c requires int or char", &buf[0]))
- return -1;
- }
- buf[1] = '\0';
- return 1;
-}
-
-/* fmt%(v1,v2,...) is roughly equivalent to sprintf(fmt, v1, v2, ...)
-
- FORMATBUFLEN is the length of the buffer in which the floats, ints, &
- chars are formatted. XXX This is a magic number. Each formatting
- routine does bounds checking to ensure no overflow, but a better
- solution may be to malloc a buffer of appropriate size for each
- format. For now, the current solution is sufficient.
-*/
-#define FORMATBUFLEN (size_t)120
-
-PyObject *
-PyString_Format(PyObject *format, PyObject *args)
-{
- char *fmt, *res;
- Py_ssize_t arglen, argidx;
- Py_ssize_t reslen, rescnt, fmtcnt;
- int args_owned = 0;
- PyObject *result, *orig_args;
-#ifdef Py_USING_UNICODE
- PyObject *v, *w;
-#endif
- PyObject *dict = NULL;
- if (format == NULL || !PyString_Check(format) || args == NULL) {
- PyErr_BadInternalCall();
- return NULL;
- }
- orig_args = args;
- fmt = PyString_AS_STRING(format);
- fmtcnt = PyString_GET_SIZE(format);
- reslen = rescnt = fmtcnt + 100;
- result = PyString_FromStringAndSize((char *)NULL, reslen);
- if (result == NULL)
- return NULL;
- res = PyString_AsString(result);
- if (PyTuple_Check(args)) {
- arglen = PyTuple_GET_SIZE(args);
- argidx = 0;
- }
- else {
- arglen = -1;
- argidx = -2;
- }
- if (Py_TYPE(args)->tp_as_mapping && !PyTuple_Check(args) &&
- !PyObject_TypeCheck(args, &PyBaseString_Type))
- dict = args;
- while (--fmtcnt >= 0) {
- if (*fmt != '%') {
- if (--rescnt < 0) {
- rescnt = fmtcnt + 100;
- reslen += rescnt;
- if (_PyString_Resize(&result, reslen) < 0)
- return NULL;
- res = PyString_AS_STRING(result)
- + reslen - rescnt;
- --rescnt;
- }
- *res++ = *fmt++;
- }
- else {
- /* Got a format specifier */
- int flags = 0;
- Py_ssize_t width = -1;
- int prec = -1;
- int c = '\0';
- int fill;
- int isnumok;
- PyObject *v = NULL;
- PyObject *temp = NULL;
- char *pbuf;
- int sign;
- Py_ssize_t len;
- char formatbuf[FORMATBUFLEN];
- /* For format{float,int,char}() */
-#ifdef Py_USING_UNICODE
- char *fmt_start = fmt;
- Py_ssize_t argidx_start = argidx;
-#endif
-
- fmt++;
- if (*fmt == '(') {
- char *keystart;
- Py_ssize_t keylen;
- PyObject *key;
- int pcount = 1;
-
- if (dict == NULL) {
- PyErr_SetString(PyExc_TypeError,
- "format requires a mapping");
- goto error;
- }
- ++fmt;
- --fmtcnt;
- keystart = fmt;
- /* Skip over balanced parentheses */
- while (pcount > 0 && --fmtcnt >= 0) {
- if (*fmt == ')')
- --pcount;
- else if (*fmt == '(')
- ++pcount;
- fmt++;
- }
- keylen = fmt - keystart - 1;
- if (fmtcnt < 0 || pcount > 0) {
- PyErr_SetString(PyExc_ValueError,
- "incomplete format key");
- goto error;
- }
- key = PyString_FromStringAndSize(keystart,
- keylen);
- if (key == NULL)
- goto error;
- if (args_owned) {
- Py_DECREF(args);
- args_owned = 0;
- }
- args = PyObject_GetItem(dict, key);
- Py_DECREF(key);
- if (args == NULL) {
- goto error;
- }
- args_owned = 1;
- arglen = -1;
- argidx = -2;
- }
- while (--fmtcnt >= 0) {
- switch (c = *fmt++) {
- case '-': flags |= F_LJUST; continue;
- case '+': flags |= F_SIGN; continue;
- case ' ': flags |= F_BLANK; continue;
- case '#': flags |= F_ALT; continue;
- case '0': flags |= F_ZERO; continue;
- }
- break;
- }
- if (c == '*') {
- v = getnextarg(args, arglen, &argidx);
- if (v == NULL)
- goto error;
- if (!PyInt_Check(v)) {
- PyErr_SetString(PyExc_TypeError,
- "* wants int");
- goto error;
- }
- width = PyInt_AsLong(v);
- if (width < 0) {
- flags |= F_LJUST;
- width = -width;
- }
- if (--fmtcnt >= 0)
- c = *fmt++;
- }
- else if (c >= 0 && isdigit(c)) {
- width = c - '0';
- while (--fmtcnt >= 0) {
- c = Py_CHARMASK(*fmt++);
- if (!isdigit(c))
- break;
- if ((width*10) / 10 != width) {
- PyErr_SetString(
- PyExc_ValueError,
- "width too big");
- goto error;
- }
- width = width*10 + (c - '0');
- }
- }
- if (c == '.') {
- prec = 0;
- if (--fmtcnt >= 0)
- c = *fmt++;
- if (c == '*') {
- v = getnextarg(args, arglen, &argidx);
- if (v == NULL)
- goto error;
- if (!PyInt_Check(v)) {
- PyErr_SetString(
- PyExc_TypeError,
- "* wants int");
- goto error;
- }
- prec = PyInt_AsLong(v);
- if (prec < 0)
- prec = 0;
- if (--fmtcnt >= 0)
- c = *fmt++;
- }
- else if (c >= 0 && isdigit(c)) {
- prec = c - '0';
- while (--fmtcnt >= 0) {
- c = Py_CHARMASK(*fmt++);
- if (!isdigit(c))
- break;
- if ((prec*10) / 10 != prec) {
- PyErr_SetString(
- PyExc_ValueError,
- "prec too big");
- goto error;
- }
- prec = prec*10 + (c - '0');
- }
- }
- } /* prec */
- if (fmtcnt >= 0) {
- if (c == 'h' || c == 'l' || c == 'L') {
- if (--fmtcnt >= 0)
- c = *fmt++;
- }
- }
- if (fmtcnt < 0) {
- PyErr_SetString(PyExc_ValueError,
- "incomplete format");
- goto error;
- }
- if (c != '%') {
- v = getnextarg(args, arglen, &argidx);
- if (v == NULL)
- goto error;
- }
- sign = 0;
- fill = ' ';
- switch (c) {
- case '%':
- pbuf = "%";
- len = 1;
- break;
- case 's':
-#ifdef Py_USING_UNICODE
- if (PyUnicode_Check(v)) {
- fmt = fmt_start;
- argidx = argidx_start;
- goto unicode;
- }
-#endif
- temp = _PyObject_Str(v);
-#ifdef Py_USING_UNICODE
- if (temp != NULL && PyUnicode_Check(temp)) {
- Py_DECREF(temp);
- fmt = fmt_start;
- argidx = argidx_start;
- goto unicode;
- }
-#endif
- /* Fall through */
- case 'r':
- if (c == 'r')
- temp = PyObject_Repr(v);
- if (temp == NULL)
- goto error;
- if (!PyString_Check(temp)) {
- PyErr_SetString(PyExc_TypeError,
- "%s argument has non-string str()");
- Py_DECREF(temp);
- goto error;
- }
- pbuf = PyString_AS_STRING(temp);
- len = PyString_GET_SIZE(temp);
- if (prec >= 0 && len > prec)
- len = prec;
- break;
- case 'i':
- case 'd':
- case 'u':
- case 'o':
- case 'x':
- case 'X':
- if (c == 'i')
- c = 'd';
- isnumok = 0;
- if (PyNumber_Check(v)) {
- PyObject *iobj=NULL;
-
- if (PyInt_Check(v) || (PyLong_Check(v))) {
- iobj = v;
- Py_INCREF(iobj);
- }
- else {
- iobj = PyNumber_Int(v);
- if (iobj==NULL) iobj = PyNumber_Long(v);
- }
- if (iobj!=NULL) {
- if (PyInt_Check(iobj)) {
- isnumok = 1;
- pbuf = formatbuf;
- len = formatint(pbuf,
- sizeof(formatbuf),
- flags, prec, c, iobj);
- Py_DECREF(iobj);
- if (len < 0)
- goto error;
- sign = 1;
- }
- else if (PyLong_Check(iobj)) {
- int ilen;
-
- isnumok = 1;
- temp = _PyString_FormatLong(iobj, flags,
- prec, c, &pbuf, &ilen);
- Py_DECREF(iobj);
- len = ilen;
- if (!temp)
- goto error;
- sign = 1;
- }
- else {
- Py_DECREF(iobj);
- }
- }
- }
- if (!isnumok) {
- PyErr_Format(PyExc_TypeError,
- "%%%c format: a number is required, "
- "not %.200s", c, Py_TYPE(v)->tp_name);
- goto error;
- }
- if (flags & F_ZERO)
- fill = '0';
- break;
- case 'e':
- case 'E':
- case 'f':
- case 'F':
- case 'g':
- case 'G':
- if (c == 'F')
- c = 'f';
- pbuf = formatbuf;
- len = formatfloat(pbuf, sizeof(formatbuf),
- flags, prec, c, v);
- if (len < 0)
- goto error;
- sign = 1;
- if (flags & F_ZERO)
- fill = '0';
- break;
- case 'c':
-#ifdef Py_USING_UNICODE
- if (PyUnicode_Check(v)) {
- fmt = fmt_start;
- argidx = argidx_start;
- goto unicode;
- }
-#endif
- pbuf = formatbuf;
- len = formatchar(pbuf, sizeof(formatbuf), v);
- if (len < 0)
- goto error;
- break;
- default:
- PyErr_Format(PyExc_ValueError,
- "unsupported format character '%c' (0x%x) "
- "at index %zd",
- c, c,
- (Py_ssize_t)(fmt - 1 -
- PyString_AsString(format)));
- goto error;
- }
- if (sign) {
- if (*pbuf == '-' || *pbuf == '+') {
- sign = *pbuf++;
- len--;
- }
- else if (flags & F_SIGN)
- sign = '+';
- else if (flags & F_BLANK)
- sign = ' ';
- else
- sign = 0;
- }
- if (width < len)
- width = len;
- if (rescnt - (sign != 0) < width) {
- reslen -= rescnt;
- rescnt = width + fmtcnt + 100;
- reslen += rescnt;
- if (reslen < 0) {
- Py_DECREF(result);
- Py_XDECREF(temp);
- return PyErr_NoMemory();
- }
- if (_PyString_Resize(&result, reslen) < 0) {
- Py_XDECREF(temp);
- return NULL;
- }
- res = PyString_AS_STRING(result)
- + reslen - rescnt;
- }
- if (sign) {
- if (fill != ' ')
- *res++ = sign;
- rescnt--;
- if (width > len)
- width--;
- }
- if ((flags & F_ALT) && (c == 'x' || c == 'X')) {
- assert(pbuf[0] == '0');
- assert(pbuf[1] == c);
- if (fill != ' ') {
- *res++ = *pbuf++;
- *res++ = *pbuf++;
- }
- rescnt -= 2;
- width -= 2;
- if (width < 0)
- width = 0;
- len -= 2;
- }
- if (width > len && !(flags & F_LJUST)) {
- do {
- --rescnt;
- *res++ = fill;
- } while (--width > len);
- }
- if (fill == ' ') {
- if (sign)
- *res++ = sign;
- if ((flags & F_ALT) &&
- (c == 'x' || c == 'X')) {
- assert(pbuf[0] == '0');
- assert(pbuf[1] == c);
- *res++ = *pbuf++;
- *res++ = *pbuf++;
- }
- }
- Py_MEMCPY(res, pbuf, len);
- res += len;
- rescnt -= len;
- while (--width >= len) {
- --rescnt;
- *res++ = ' ';
- }
- if (dict && (argidx < arglen) && c != '%') {
- PyErr_SetString(PyExc_TypeError,
- "not all arguments converted during string formatting");
- Py_XDECREF(temp);
- goto error;
- }
- Py_XDECREF(temp);
- } /* '%' */
- } /* until end */
- if (argidx < arglen && !dict) {
- PyErr_SetString(PyExc_TypeError,
- "not all arguments converted during string formatting");
- goto error;
- }
- if (args_owned) {
- Py_DECREF(args);
- }
- _PyString_Resize(&result, reslen - rescnt);
- return result;
-
-#ifdef Py_USING_UNICODE
- unicode:
- if (args_owned) {
- Py_DECREF(args);
- args_owned = 0;
- }
- /* Fiddle args right (remove the first argidx arguments) */
- if (PyTuple_Check(orig_args) && argidx > 0) {
- PyObject *v;
- Py_ssize_t n = PyTuple_GET_SIZE(orig_args) - argidx;
- v = PyTuple_New(n);
- if (v == NULL)
- goto error;
- while (--n >= 0) {
- PyObject *w = PyTuple_GET_ITEM(orig_args, n + argidx);
- Py_INCREF(w);
- PyTuple_SET_ITEM(v, n, w);
- }
- args = v;
- } else {
- Py_INCREF(orig_args);
- args = orig_args;
- }
- args_owned = 1;
- /* Take what we have of the result and let the Unicode formatting
- function format the rest of the input. */
- rescnt = res - PyString_AS_STRING(result);
- if (_PyString_Resize(&result, rescnt))
- goto error;
- fmtcnt = PyString_GET_SIZE(format) - \
- (fmt - PyString_AS_STRING(format));
- format = PyUnicode_Decode(fmt, fmtcnt, NULL, NULL);
- if (format == NULL)
- goto error;
- v = PyUnicode_Format(format, args);
- Py_DECREF(format);
- if (v == NULL)
- goto error;
- /* Paste what we have (result) to what the Unicode formatting
- function returned (v) and return the result (or error) */
- w = PyUnicode_Concat(result, v);
- Py_DECREF(result);
- Py_DECREF(v);
- Py_DECREF(args);
- return w;
-#endif /* Py_USING_UNICODE */
-
- error:
- Py_DECREF(result);
- if (args_owned) {
- Py_DECREF(args);
- }
- return NULL;
-}
-
-void
-PyString_InternInPlace(PyObject **p)
-{
- register PyStringObject *s = (PyStringObject *)(*p);
- PyObject *t;
- if (s == NULL || !PyString_Check(s))
- Py_FatalError("PyString_InternInPlace: strings only please!");
- /* If it's a string subclass, we don't really know what putting
- it in the interned dict might do. */
- if (!PyString_CheckExact(s))
- return;
- if (PyString_CHECK_INTERNED(s))
- return;
- if (interned == NULL) {
- interned = PyDict_New();
- if (interned == NULL) {
- PyErr_Clear(); /* Don't leave an exception */
- return;
- }
- }
- t = PyDict_GetItem(interned, (PyObject *)s);
- if (t) {
- Py_INCREF(t);
- Py_DECREF(*p);
- *p = t;
- return;
- }
-
- if (PyDict_SetItem(interned, (PyObject *)s, (PyObject *)s) < 0) {
- PyErr_Clear();
- return;
- }
- /* The two references in interned are not counted by refcnt.
- The string deallocator will take care of this */
- Py_REFCNT(s) -= 2;
- PyString_CHECK_INTERNED(s) = SSTATE_INTERNED_MORTAL;
-}
-
-void
-PyString_InternImmortal(PyObject **p)
-{
- PyString_InternInPlace(p);
- if (PyString_CHECK_INTERNED(*p) != SSTATE_INTERNED_IMMORTAL) {
- PyString_CHECK_INTERNED(*p) = SSTATE_INTERNED_IMMORTAL;
- Py_INCREF(*p);
- }
-}
-
-
-PyObject *
-PyString_InternFromString(const char *cp)
-{
- PyObject *s = PyString_FromString(cp);
- if (s == NULL)
- return NULL;
- PyString_InternInPlace(&s);
- return s;
-}
-
-void
-PyString_Fini(void)
-{
- int i;
- for (i = 0; i < UCHAR_MAX + 1; i++) {
- Py_XDECREF(characters[i]);
- characters[i] = NULL;
- }
- Py_XDECREF(nullstring);
- nullstring = NULL;
-}
-
-void _Py_ReleaseInternedStrings(void)
-{
- PyObject *keys;
- PyStringObject *s;
- Py_ssize_t i, n;
- Py_ssize_t immortal_size = 0, mortal_size = 0;
-
- if (interned == NULL || !PyDict_Check(interned))
- return;
- keys = PyDict_Keys(interned);
- if (keys == NULL || !PyList_Check(keys)) {
- PyErr_Clear();
- return;
- }
-
- /* Since _Py_ReleaseInternedStrings() is intended to help a leak
- detector, interned strings are not forcibly deallocated; rather, we
- give them their stolen references back, and then clear and DECREF
- the interned dict. */
-
- n = PyList_GET_SIZE(keys);
- fprintf(stderr, "releasing %" PY_FORMAT_SIZE_T "d interned strings\n",
- n);
- for (i = 0; i < n; i++) {
- s = (PyStringObject *) PyList_GET_ITEM(keys, i);
- switch (s->ob_sstate) {
- case SSTATE_NOT_INTERNED:
- /* XXX Shouldn't happen */
- break;
- case SSTATE_INTERNED_IMMORTAL:
- Py_REFCNT(s) += 1;
- immortal_size += Py_SIZE(s);
- break;
- case SSTATE_INTERNED_MORTAL:
- Py_REFCNT(s) += 2;
- mortal_size += Py_SIZE(s);
- break;
- default:
- Py_FatalError("Inconsistent interned string state.");
- }
- s->ob_sstate = SSTATE_NOT_INTERNED;
- }
- fprintf(stderr, "total size of all interned strings: "
- "%" PY_FORMAT_SIZE_T "d/%" PY_FORMAT_SIZE_T "d "
- "mortal/immortal\n", mortal_size, immortal_size);
- Py_DECREF(keys);
- PyDict_Clear(interned);
- Py_DECREF(interned);
- interned = NULL;
-}
Modified: python/branches/tlee-ast-optimize/Objects/structseq.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/structseq.c (original)
+++ python/branches/tlee-ast-optimize/Objects/structseq.c Sun Jun 1 17:18:10 2008
@@ -270,7 +270,7 @@
Py_DECREF(tup);
return NULL;
}
- crepr = PyString_AsString(repr);
+ crepr = PyBytes_AsString(repr);
if (crepr == NULL) {
Py_DECREF(tup);
Py_DECREF(repr);
@@ -306,7 +306,7 @@
*pbuf++ = ')';
*pbuf = '\0';
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
static PyObject *
Modified: python/branches/tlee-ast-optimize/Objects/tupleobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/tupleobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/tupleobject.c Sun Jun 1 17:18:10 2008
@@ -218,7 +218,7 @@
n = Py_SIZE(v);
if (n == 0)
- return PyString_FromString("()");
+ return PyBytes_FromString("()");
/* While not mutable, it is still possible to end up with a cycle in a
tuple through an object that stores itself within a tuple (and thus
@@ -226,7 +226,7 @@
possible within a type. */
i = Py_ReprEnter((PyObject *)v);
if (i != 0) {
- return i > 0 ? PyString_FromString("(...)") : NULL;
+ return i > 0 ? PyBytes_FromString("(...)") : NULL;
}
pieces = PyTuple_New(n);
@@ -246,29 +246,29 @@
/* Add "()" decorations to the first and last items. */
assert(n > 0);
- s = PyString_FromString("(");
+ s = PyBytes_FromString("(");
if (s == NULL)
goto Done;
temp = PyTuple_GET_ITEM(pieces, 0);
- PyString_ConcatAndDel(&s, temp);
+ PyBytes_ConcatAndDel(&s, temp);
PyTuple_SET_ITEM(pieces, 0, s);
if (s == NULL)
goto Done;
- s = PyString_FromString(n == 1 ? ",)" : ")");
+ s = PyBytes_FromString(n == 1 ? ",)" : ")");
if (s == NULL)
goto Done;
temp = PyTuple_GET_ITEM(pieces, n-1);
- PyString_ConcatAndDel(&temp, s);
+ PyBytes_ConcatAndDel(&temp, s);
PyTuple_SET_ITEM(pieces, n-1, temp);
if (temp == NULL)
goto Done;
/* Paste them all together with ", " between. */
- s = PyString_FromString(", ");
+ s = PyBytes_FromString(", ");
if (s == NULL)
goto Done;
- result = _PyString_Join(s, pieces);
+ result = _PyBytes_Join(s, pieces);
Py_DECREF(s);
Done:
Modified: python/branches/tlee-ast-optimize/Objects/typeobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/typeobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/typeobject.c Sun Jun 1 17:18:10 2008
@@ -19,10 +19,10 @@
>> (8*sizeof(unsigned int) - MCACHE_SIZE_EXP))
#define MCACHE_HASH_METHOD(type, name) \
MCACHE_HASH((type)->tp_version_tag, \
- ((PyStringObject *)(name))->ob_shash)
+ ((PyBytesObject *)(name))->ob_shash)
#define MCACHE_CACHEABLE_NAME(name) \
- PyString_CheckExact(name) && \
- PyString_GET_SIZE(name) <= MCACHE_MAX_ATTR_SIZE
+ PyBytes_CheckExact(name) && \
+ PyBytes_GET_SIZE(name) <= MCACHE_MAX_ATTR_SIZE
struct method_cache_entry {
unsigned int version;
@@ -32,7 +32,6 @@
static struct method_cache_entry method_cache[1 << MCACHE_SIZE_EXP];
static unsigned int next_version_tag = 0;
-static void type_modified(PyTypeObject *);
unsigned int
PyType_ClearCache(void)
@@ -47,12 +46,12 @@
}
next_version_tag = 0;
/* mark all version tags as invalid */
- type_modified(&PyBaseObject_Type);
+ PyType_Modified(&PyBaseObject_Type);
return cur_version_tag;
}
-static void
-type_modified(PyTypeObject *type)
+void
+PyType_Modified(PyTypeObject *type)
{
/* Invalidate any cached data for the specified type and all
subclasses. This function is called after the base
@@ -86,7 +85,7 @@
ref = PyList_GET_ITEM(raw, i);
ref = PyWeakref_GET_OBJECT(ref);
if (ref != Py_None) {
- type_modified((PyTypeObject *)ref);
+ PyType_Modified((PyTypeObject *)ref);
}
}
}
@@ -172,7 +171,7 @@
Py_INCREF(Py_None);
}
/* mark all version tags as invalid */
- type_modified(&PyBaseObject_Type);
+ PyType_Modified(&PyBaseObject_Type);
return 1;
}
bases = type->tp_bases;
@@ -218,7 +217,7 @@
s = type->tp_name;
else
s++;
- return PyString_FromString(s);
+ return PyBytes_FromString(s);
}
}
@@ -237,14 +236,14 @@
"can't delete %s.__name__", type->tp_name);
return -1;
}
- if (!PyString_Check(value)) {
+ if (!PyBytes_Check(value)) {
PyErr_Format(PyExc_TypeError,
"can only assign string to %s.__name__, not '%s'",
type->tp_name, Py_TYPE(value)->tp_name);
return -1;
}
- if (strlen(PyString_AS_STRING(value))
- != (size_t)PyString_GET_SIZE(value)) {
+ if (strlen(PyBytes_AS_STRING(value))
+ != (size_t)PyBytes_GET_SIZE(value)) {
PyErr_Format(PyExc_ValueError,
"__name__ must not contain null bytes");
return -1;
@@ -257,7 +256,7 @@
Py_DECREF(et->ht_name);
et->ht_name = value;
- type->tp_name = PyString_AS_STRING(value);
+ type->tp_name = PyBytes_AS_STRING(value);
return 0;
}
@@ -280,9 +279,9 @@
else {
s = strrchr(type->tp_name, '.');
if (s != NULL)
- return PyString_FromStringAndSize(
+ return PyBytes_FromStringAndSize(
type->tp_name, (Py_ssize_t)(s - type->tp_name));
- return PyString_FromString("__builtin__");
+ return PyBytes_FromString("__builtin__");
}
}
@@ -300,7 +299,7 @@
return -1;
}
- type_modified(type);
+ PyType_Modified(type);
return PyDict_SetItemString(type->tp_dict, "__module__", value);
}
@@ -328,7 +327,7 @@
int res = PyDict_SetItemString(type->tp_dict,
"__abstractmethods__", value);
if (res == 0) {
- type_modified(type);
+ PyType_Modified(type);
if (value && PyObject_IsTrue(value)) {
type->tp_flags |= Py_TPFLAGS_IS_ABSTRACT;
}
@@ -556,7 +555,7 @@
{
PyObject *result;
if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE) && type->tp_doc != NULL)
- return PyString_FromString(type->tp_doc);
+ return PyBytes_FromString(type->tp_doc);
result = PyDict_GetItemString(type->tp_dict, "__doc__");
if (result == NULL) {
result = Py_None;
@@ -645,7 +644,7 @@
mod = type_module(type, NULL);
if (mod == NULL)
PyErr_Clear();
- else if (!PyString_Check(mod)) {
+ else if (!PyBytes_Check(mod)) {
Py_DECREF(mod);
mod = NULL;
}
@@ -658,14 +657,14 @@
else
kind = "type";
- if (mod != NULL && strcmp(PyString_AS_STRING(mod), "__builtin__")) {
- rtn = PyString_FromFormat("<%s '%s.%s'>",
+ if (mod != NULL && strcmp(PyBytes_AS_STRING(mod), "__builtin__")) {
+ rtn = PyBytes_FromFormat("<%s '%s.%s'>",
kind,
- PyString_AS_STRING(mod),
- PyString_AS_STRING(name));
+ PyBytes_AS_STRING(mod),
+ PyBytes_AS_STRING(name));
}
else
- rtn = PyString_FromFormat("<%s '%s'>", kind, type->tp_name);
+ rtn = PyBytes_FromFormat("<%s '%s'>", kind, type->tp_name);
Py_XDECREF(mod);
Py_DECREF(name);
@@ -1137,7 +1136,7 @@
PyObject *res;
if (*attrobj == NULL) {
- *attrobj = PyString_InternFromString(attrstr);
+ *attrobj = PyBytes_InternFromString(attrstr);
if (*attrobj == NULL)
return NULL;
}
@@ -1329,7 +1328,7 @@
}
if (name == NULL)
return NULL;
- if (!PyString_Check(name)) {
+ if (!PyBytes_Check(name)) {
Py_DECREF(name);
return NULL;
}
@@ -1351,7 +1350,7 @@
o = class_name(o);
PyErr_Format(PyExc_TypeError,
"duplicate base class %s",
- o ? PyString_AS_STRING(o) : "?");
+ o ? PyBytes_AS_STRING(o) : "?");
Py_XDECREF(o);
return -1;
}
@@ -1397,7 +1396,7 @@
while (PyDict_Next(set, &i, &k, &v) && (size_t)off < sizeof(buf)) {
PyObject *name = class_name(k);
off += PyOS_snprintf(buf + off, sizeof(buf) - off, " %s",
- name ? PyString_AS_STRING(name) : "?");
+ name ? PyBytes_AS_STRING(name) : "?");
Py_XDECREF(name);
if (--n && (size_t)(off+1) < sizeof(buf)) {
buf[off++] = ',';
@@ -1621,7 +1620,7 @@
from the custom MRO */
type_mro_modified(type, type->tp_bases);
- type_modified(type);
+ PyType_Modified(type);
return 0;
}
@@ -1750,7 +1749,7 @@
PyObject *descr;
if (dict_str == NULL) {
- dict_str = PyString_InternFromString("__dict__");
+ dict_str = PyBytes_InternFromString("__dict__");
if (dict_str == NULL)
return NULL;
}
@@ -1899,14 +1898,14 @@
unsigned char *p;
Py_ssize_t i, n;
- if (!PyString_Check(s)) {
+ if (!PyBytes_Check(s)) {
PyErr_Format(PyExc_TypeError,
"__slots__ items must be strings, not '%.200s'",
Py_TYPE(s)->tp_name);
return 0;
}
- p = (unsigned char *) PyString_AS_STRING(s);
- n = PyString_GET_SIZE(s);
+ p = (unsigned char *) PyBytes_AS_STRING(s);
+ n = PyBytes_GET_SIZE(s);
/* We must reject an empty name. As a hack, we bump the
length to 1 so that the loop will balk on the trailing \0. */
if (n == 0)
@@ -2108,7 +2107,7 @@
/* Have slots */
/* Make it into a tuple */
- if (PyString_Check(slots) || PyUnicode_Check(slots))
+ if (PyBytes_Check(slots) || PyUnicode_Check(slots))
slots = PyTuple_Pack(1, slots);
else
slots = PySequence_Tuple(slots);
@@ -2146,8 +2145,8 @@
char *s;
if (!valid_identifier(tmp))
goto bad_slots;
- assert(PyString_Check(tmp));
- s = PyString_AS_STRING(tmp);
+ assert(PyBytes_Check(tmp));
+ s = PyBytes_AS_STRING(tmp);
if (strcmp(s, "__dict__") == 0) {
if (!may_add_dict || add_dict) {
PyErr_SetString(PyExc_TypeError,
@@ -2179,7 +2178,7 @@
for (i = j = 0; i < nslots; i++) {
char *s;
tmp = PyTuple_GET_ITEM(slots, i);
- s = PyString_AS_STRING(tmp);
+ s = PyBytes_AS_STRING(tmp);
if ((add_dict && strcmp(s, "__dict__") == 0) ||
(add_weak && strcmp(s, "__weakref__") == 0))
continue;
@@ -2272,7 +2271,7 @@
type->tp_as_sequence = &et->as_sequence;
type->tp_as_mapping = &et->as_mapping;
type->tp_as_buffer = &et->as_buffer;
- type->tp_name = PyString_AS_STRING(name);
+ type->tp_name = PyBytes_AS_STRING(name);
/* Set tp_base and tp_bases */
type->tp_bases = bases;
@@ -2305,14 +2304,14 @@
*/
{
PyObject *doc = PyDict_GetItemString(dict, "__doc__");
- if (doc != NULL && PyString_Check(doc)) {
- const size_t n = (size_t)PyString_GET_SIZE(doc);
+ if (doc != NULL && PyBytes_Check(doc)) {
+ const size_t n = (size_t)PyBytes_GET_SIZE(doc);
char *tp_doc = (char *)PyObject_MALLOC(n+1);
if (tp_doc == NULL) {
Py_DECREF(type);
return NULL;
}
- memcpy(tp_doc, PyString_AS_STRING(doc), n+1);
+ memcpy(tp_doc, PyBytes_AS_STRING(doc), n+1);
type->tp_doc = tp_doc;
}
}
@@ -2335,7 +2334,7 @@
slotoffset = base->tp_basicsize;
if (slots != NULL) {
for (i = 0; i < nslots; i++, mp++) {
- mp->name = PyString_AS_STRING(
+ mp->name = PyBytes_AS_STRING(
PyTuple_GET_ITEM(slots, i));
mp->type = T_OBJECT_EX;
mp->offset = slotoffset;
@@ -2536,7 +2535,7 @@
/* Give up */
PyErr_Format(PyExc_AttributeError,
"type object '%.50s' has no attribute '%.400s'",
- type->tp_name, PyString_AS_STRING(name));
+ type->tp_name, PyBytes_AS_STRING(name));
return NULL;
}
@@ -2855,7 +2854,7 @@
if (sorted_methods == NULL)
goto error;
if (comma == NULL) {
- comma = PyString_InternFromString(", ");
+ comma = PyBytes_InternFromString(", ");
if (comma == NULL)
goto error;
}
@@ -2863,7 +2862,7 @@
"O", sorted_methods);
if (joined == NULL)
goto error;
- joined_str = PyString_AsString(joined);
+ joined_str = PyBytes_AsString(joined);
if (joined_str == NULL)
goto error;
@@ -2897,20 +2896,20 @@
mod = type_module(type, NULL);
if (mod == NULL)
PyErr_Clear();
- else if (!PyString_Check(mod)) {
+ else if (!PyBytes_Check(mod)) {
Py_DECREF(mod);
mod = NULL;
}
name = type_name(type, NULL);
if (name == NULL)
return NULL;
- if (mod != NULL && strcmp(PyString_AS_STRING(mod), "__builtin__"))
- rtn = PyString_FromFormat("<%s.%s object at %p>",
- PyString_AS_STRING(mod),
- PyString_AS_STRING(name),
+ if (mod != NULL && strcmp(PyBytes_AS_STRING(mod), "__builtin__"))
+ rtn = PyBytes_FromFormat("<%s.%s object at %p>",
+ PyBytes_AS_STRING(mod),
+ PyBytes_AS_STRING(name),
self);
else
- rtn = PyString_FromFormat("<%s object at %p>",
+ rtn = PyBytes_FromFormat("<%s object at %p>",
type->tp_name, self);
Py_XDECREF(mod);
Py_DECREF(name);
@@ -3070,7 +3069,7 @@
static PyObject *copyreg_str;
if (!copyreg_str) {
- copyreg_str = PyString_InternFromString("copy_reg");
+ copyreg_str = PyBytes_InternFromString("copy_reg");
if (copyreg_str == NULL)
return NULL;
}
@@ -3376,7 +3375,7 @@
return NULL;
if (PyUnicode_Check(format_spec)) {
self_as_str = PyObject_Unicode(self);
- } else if (PyString_Check(format_spec)) {
+ } else if (PyBytes_Check(format_spec)) {
self_as_str = PyObject_Str(self);
} else {
PyErr_SetString(PyExc_TypeError, "argument to __format__ must be unicode or str");
@@ -3619,7 +3618,7 @@
type->tp_flags |= Py_TPFLAGS_INT_SUBCLASS;
else if (PyType_IsSubtype(base, &PyLong_Type))
type->tp_flags |= Py_TPFLAGS_LONG_SUBCLASS;
- else if (PyType_IsSubtype(base, &PyString_Type))
+ else if (PyType_IsSubtype(base, &PyBytes_Type))
type->tp_flags |= Py_TPFLAGS_STRING_SUBCLASS;
#ifdef Py_USING_UNICODE
else if (PyType_IsSubtype(base, &PyUnicode_Type))
@@ -3958,7 +3957,7 @@
*/
if (PyDict_GetItemString(type->tp_dict, "__doc__") == NULL) {
if (type->tp_doc != NULL) {
- PyObject *doc = PyString_FromString(type->tp_doc);
+ PyObject *doc = PyBytes_FromString(type->tp_doc);
if (doc == NULL)
goto error;
PyDict_SetItemString(type->tp_dict, "__doc__", doc);
@@ -4846,7 +4845,7 @@
descrgetfunc f;
if (getitem_str == NULL) {
- getitem_str = PyString_InternFromString("__getitem__");
+ getitem_str = PyBytes_InternFromString("__getitem__");
if (getitem_str == NULL)
return NULL;
}
@@ -5214,7 +5213,7 @@
return res;
}
PyErr_Clear();
- return PyString_FromFormat("<%s object at %p>",
+ return PyBytes_FromFormat("<%s object at %p>",
Py_TYPE(self)->tp_name, self);
}
@@ -5322,13 +5321,13 @@
static PyObject *getattr_str = NULL;
if (getattr_str == NULL) {
- getattr_str = PyString_InternFromString("__getattr__");
+ getattr_str = PyBytes_InternFromString("__getattr__");
if (getattr_str == NULL)
return NULL;
}
if (getattribute_str == NULL) {
getattribute_str =
- PyString_InternFromString("__getattribute__");
+ PyBytes_InternFromString("__getattribute__");
if (getattribute_str == NULL)
return NULL;
}
@@ -5469,7 +5468,7 @@
static PyObject *get_str = NULL;
if (get_str == NULL) {
- get_str = PyString_InternFromString("__get__");
+ get_str = PyBytes_InternFromString("__get__");
if (get_str == NULL)
return NULL;
}
@@ -5539,7 +5538,7 @@
Py_ssize_t i, n;
if (new_str == NULL) {
- new_str = PyString_InternFromString("__new__");
+ new_str = PyBytes_InternFromString("__new__");
if (new_str == NULL)
return NULL;
}
@@ -6069,7 +6068,7 @@
if (initialized)
return;
for (p = slotdefs; p->name; p++) {
- p->name_strobj = PyString_InternFromString(p->name);
+ p->name_strobj = PyBytes_InternFromString(p->name);
if (!p->name_strobj)
Py_FatalError("Out of memory interning slotdef names");
}
@@ -6092,7 +6091,7 @@
update_subclasses() recursion below, but carefully:
they each have their own conditions on which to stop
recursing into subclasses. */
- type_modified(type);
+ PyType_Modified(type);
init_slotdefs();
pp = ptrs;
@@ -6284,12 +6283,12 @@
superobject *su = (superobject *)self;
if (su->obj_type)
- return PyString_FromFormat(
+ return PyBytes_FromFormat(
"<super: <class '%s'>, <%s object>>",
su->type ? su->type->tp_name : "NULL",
su->obj_type->tp_name);
else
- return PyString_FromFormat(
+ return PyBytes_FromFormat(
"<super: <class '%s'>, NULL>",
su->type ? su->type->tp_name : "NULL");
}
@@ -6303,9 +6302,9 @@
if (!skip) {
/* We want __class__ to return the class of the super object
(i.e. super, or a subclass), not the class of su->obj. */
- skip = (PyString_Check(name) &&
- PyString_GET_SIZE(name) == 9 &&
- strcmp(PyString_AS_STRING(name), "__class__") == 0);
+ skip = (PyBytes_Check(name) &&
+ PyBytes_GET_SIZE(name) == 9 &&
+ strcmp(PyBytes_AS_STRING(name), "__class__") == 0);
}
if (!skip) {
@@ -6397,7 +6396,7 @@
PyObject *class_attr;
if (class_str == NULL) {
- class_str = PyString_FromString("__class__");
+ class_str = PyBytes_FromString("__class__");
if (class_str == NULL)
return NULL;
}
Modified: python/branches/tlee-ast-optimize/Objects/unicodeobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/unicodeobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/unicodeobject.c Sun Jun 1 17:18:10 2008
@@ -42,8 +42,6 @@
#define PY_SSIZE_T_CLEAN
#include "Python.h"
-#include "formatter_unicode.h"
-
#include "unicodeobject.h"
#include "ucnhash.h"
@@ -1080,11 +1078,11 @@
#endif
/* Coerce object */
- if (PyString_Check(obj)) {
- s = PyString_AS_STRING(obj);
- len = PyString_GET_SIZE(obj);
+ if (PyBytes_Check(obj)) {
+ s = PyBytes_AS_STRING(obj);
+ len = PyBytes_GET_SIZE(obj);
}
- else if (PyBytes_Check(obj)) {
+ else if (PyByteArray_Check(obj)) {
/* Python 2.x specific */
PyErr_Format(PyExc_TypeError,
"decoding bytearray is not supported");
@@ -1254,7 +1252,7 @@
v = PyCodec_Encode(unicode, encoding, errors);
if (v == NULL)
goto onError;
- if (!PyString_Check(v)) {
+ if (!PyBytes_Check(v)) {
PyErr_Format(PyExc_TypeError,
"encoder did not return a string object (type=%.400s)",
Py_TYPE(v)->tp_name);
@@ -1654,13 +1652,13 @@
char * start;
if (size == 0)
- return PyString_FromStringAndSize(NULL, 0);
+ return PyBytes_FromStringAndSize(NULL, 0);
- v = PyString_FromStringAndSize(NULL, cbAllocated);
+ v = PyBytes_FromStringAndSize(NULL, cbAllocated);
if (v == NULL)
return NULL;
- start = out = PyString_AS_STRING(v);
+ start = out = PyBytes_AS_STRING(v);
for (;i < size; ++i) {
Py_UNICODE ch = s[i];
@@ -1726,7 +1724,7 @@
*out++ = '-';
}
- _PyString_Resize(&v, out - start);
+ _PyBytes_Resize(&v, out - start);
return v;
}
@@ -1991,10 +1989,10 @@
nallocated = size * 4;
if (nallocated / 4 != size) /* overflow! */
return PyErr_NoMemory();
- v = PyString_FromStringAndSize(NULL, nallocated);
+ v = PyBytes_FromStringAndSize(NULL, nallocated);
if (v == NULL)
return NULL;
- p = PyString_AS_STRING(v);
+ p = PyBytes_AS_STRING(v);
}
for (i = 0; i < size;) {
@@ -2042,13 +2040,13 @@
/* This was stack allocated. */
nneeded = p - stackbuf;
assert(nneeded <= nallocated);
- v = PyString_FromStringAndSize(stackbuf, nneeded);
+ v = PyBytes_FromStringAndSize(stackbuf, nneeded);
}
else {
/* Cut back to size actually needed. */
- nneeded = p - PyString_AS_STRING(v);
+ nneeded = p - PyBytes_AS_STRING(v);
assert(nneeded <= nallocated);
- _PyString_Resize(&v, nneeded);
+ _PyBytes_Resize(&v, nneeded);
}
return v;
@@ -2276,12 +2274,12 @@
0xDC00 <= s[i+1] && s[i+1] <= 0xDFFF)
pairs++;
#endif
- v = PyString_FromStringAndSize(NULL,
+ v = PyBytes_FromStringAndSize(NULL,
4 * (size - pairs + (byteorder == 0)));
if (v == NULL)
return NULL;
- p = (unsigned char *)PyString_AS_STRING(v);
+ p = (unsigned char *)PyBytes_AS_STRING(v);
if (byteorder == 0)
STORECHAR(0xFEFF);
if (size == 0)
@@ -2541,12 +2539,12 @@
if (s[i] >= 0x10000)
pairs++;
#endif
- v = PyString_FromStringAndSize(NULL,
+ v = PyBytes_FromStringAndSize(NULL,
2 * (size + pairs + (byteorder == 0)));
if (v == NULL)
return NULL;
- p = (unsigned char *)PyString_AS_STRING(v);
+ p = (unsigned char *)PyBytes_AS_STRING(v);
if (byteorder == 0)
STORECHAR(0xFEFF);
if (size == 0)
@@ -2889,7 +2887,7 @@
escape.
*/
- repr = PyString_FromStringAndSize(NULL,
+ repr = PyBytes_FromStringAndSize(NULL,
2
#ifdef Py_UNICODE_WIDE
+ 10*size
@@ -2900,7 +2898,7 @@
if (repr == NULL)
return NULL;
- p = PyString_AS_STRING(repr);
+ p = PyBytes_AS_STRING(repr);
if (quotes) {
*p++ = 'u';
@@ -2912,7 +2910,7 @@
/* Escape quotes and backslashes */
if ((quotes &&
- ch == (Py_UNICODE) PyString_AS_STRING(repr)[1]) || ch == '\\') {
+ ch == (Py_UNICODE) PyBytes_AS_STRING(repr)[1]) || ch == '\\') {
*p++ = '\\';
*p++ = (char) ch;
continue;
@@ -2998,10 +2996,10 @@
*p++ = (char) ch;
}
if (quotes)
- *p++ = PyString_AS_STRING(repr)[1];
+ *p++ = PyBytes_AS_STRING(repr)[1];
*p = '\0';
- _PyString_Resize(&repr, p - PyString_AS_STRING(repr));
+ _PyBytes_Resize(&repr, p - PyBytes_AS_STRING(repr));
return repr;
}
@@ -3150,16 +3148,16 @@
static const char *hexdigit = "0123456789abcdef";
#ifdef Py_UNICODE_WIDE
- repr = PyString_FromStringAndSize(NULL, 10 * size);
+ repr = PyBytes_FromStringAndSize(NULL, 10 * size);
#else
- repr = PyString_FromStringAndSize(NULL, 6 * size);
+ repr = PyBytes_FromStringAndSize(NULL, 6 * size);
#endif
if (repr == NULL)
return NULL;
if (size == 0)
return repr;
- p = q = PyString_AS_STRING(repr);
+ p = q = PyBytes_AS_STRING(repr);
while (size-- > 0) {
Py_UNICODE ch = *s++;
#ifdef Py_UNICODE_WIDE
@@ -3218,7 +3216,7 @@
*p++ = (char) ch;
}
*p = '\0';
- _PyString_Resize(&repr, p - q);
+ _PyBytes_Resize(&repr, p - q);
return repr;
}
@@ -3458,12 +3456,12 @@
/* allocate enough for a simple encoding without
replacements, if we need more, we'll resize */
- res = PyString_FromStringAndSize(NULL, size);
+ res = PyBytes_FromStringAndSize(NULL, size);
if (res == NULL)
goto onError;
if (size == 0)
return res;
- str = PyString_AS_STRING(res);
+ str = PyBytes_AS_STRING(res);
ressize = size;
while (p<endp) {
@@ -3513,7 +3511,7 @@
p = collend;
break;
case 4: /* xmlcharrefreplace */
- respos = str-PyString_AS_STRING(res);
+ respos = str-PyBytes_AS_STRING(res);
/* determine replacement size (temporarily (mis)uses p) */
for (p = collstart, repsize = 0; p < collend; ++p) {
if (*p<10)
@@ -3540,9 +3538,9 @@
if (requiredsize > ressize) {
if (requiredsize<2*ressize)
requiredsize = 2*ressize;
- if (_PyString_Resize(&res, requiredsize))
+ if (_PyBytes_Resize(&res, requiredsize))
goto onError;
- str = PyString_AS_STRING(res) + respos;
+ str = PyBytes_AS_STRING(res) + respos;
ressize = requiredsize;
}
/* generate replacement (temporarily (mis)uses p) */
@@ -3560,17 +3558,17 @@
/* need more space? (at least enough for what we
have+the replacement+the rest of the string, so
we won't have to check space for encodable characters) */
- respos = str-PyString_AS_STRING(res);
+ respos = str-PyBytes_AS_STRING(res);
repsize = PyUnicode_GET_SIZE(repunicode);
requiredsize = respos+repsize+(endp-collend);
if (requiredsize > ressize) {
if (requiredsize<2*ressize)
requiredsize = 2*ressize;
- if (_PyString_Resize(&res, requiredsize)) {
+ if (_PyBytes_Resize(&res, requiredsize)) {
Py_DECREF(repunicode);
goto onError;
}
- str = PyString_AS_STRING(res) + respos;
+ str = PyBytes_AS_STRING(res) + respos;
ressize = requiredsize;
}
/* check if there is anything unencodable in the replacement
@@ -3591,10 +3589,10 @@
}
}
/* Resize if we allocated to much */
- respos = str-PyString_AS_STRING(res);
+ respos = str-PyBytes_AS_STRING(res);
if (respos<ressize)
/* If this falls res will be NULL */
- _PyString_Resize(&res, respos);
+ _PyBytes_Resize(&res, respos);
Py_XDECREF(errorHandler);
Py_XDECREF(exc);
return res;
@@ -3671,7 +3669,7 @@
goto onError;
}
}
- if (p - PyUnicode_AS_UNICODE(v) < PyString_GET_SIZE(v))
+ if (p - PyUnicode_AS_UNICODE(v) < PyBytes_GET_SIZE(v))
if (_PyUnicode_Resize(&v, p - PyUnicode_AS_UNICODE(v)) < 0)
goto onError;
Py_XDECREF(errorHandler);
@@ -3849,20 +3847,20 @@
if (*repr == NULL) {
/* Create string object */
- *repr = PyString_FromStringAndSize(NULL, mbcssize);
+ *repr = PyBytes_FromStringAndSize(NULL, mbcssize);
if (*repr == NULL)
return -1;
}
else {
/* Extend string object */
- n = PyString_Size(*repr);
- if (_PyString_Resize(repr, n + mbcssize) < 0)
+ n = PyBytes_Size(*repr);
+ if (_PyBytes_Resize(repr, n + mbcssize) < 0)
return -1;
}
/* Do the conversion */
if (size > 0) {
- char *s = PyString_AS_STRING(*repr) + n;
+ char *s = PyBytes_AS_STRING(*repr) + n;
if (0 == WideCharToMultiByte(CP_ACP, 0, p, size, s, mbcssize, NULL, NULL)) {
PyErr_SetFromWindowsErrWithFilename(0, NULL);
return -1;
@@ -4329,7 +4327,7 @@
}
return x;
}
- else if (PyString_Check(x))
+ else if (PyBytes_Check(x))
return x;
else {
/* wrong return value */
@@ -4343,11 +4341,11 @@
static int
charmapencode_resize(PyObject **outobj, Py_ssize_t *outpos, Py_ssize_t requiredsize)
{
- Py_ssize_t outsize = PyString_GET_SIZE(*outobj);
+ Py_ssize_t outsize = PyBytes_GET_SIZE(*outobj);
/* exponentially overallocate to minimize reallocations */
if (requiredsize < 2*outsize)
requiredsize = 2*outsize;
- if (_PyString_Resize(outobj, requiredsize)) {
+ if (_PyBytes_Resize(outobj, requiredsize)) {
return 0;
}
return 1;
@@ -4368,7 +4366,7 @@
{
PyObject *rep;
char *outstart;
- Py_ssize_t outsize = PyString_GET_SIZE(*outobj);
+ Py_ssize_t outsize = PyBytes_GET_SIZE(*outobj);
if (Py_TYPE(mapping) == &EncodingMapType) {
int res = encoding_map_lookup(c, mapping);
@@ -4378,7 +4376,7 @@
if (outsize<requiredsize)
if (!charmapencode_resize(outobj, outpos, requiredsize))
return enc_EXCEPTION;
- outstart = PyString_AS_STRING(*outobj);
+ outstart = PyBytes_AS_STRING(*outobj);
outstart[(*outpos)++] = (char)res;
return enc_SUCCESS;
}
@@ -4397,19 +4395,19 @@
Py_DECREF(rep);
return enc_EXCEPTION;
}
- outstart = PyString_AS_STRING(*outobj);
+ outstart = PyBytes_AS_STRING(*outobj);
outstart[(*outpos)++] = (char)PyInt_AS_LONG(rep);
}
else {
- const char *repchars = PyString_AS_STRING(rep);
- Py_ssize_t repsize = PyString_GET_SIZE(rep);
+ const char *repchars = PyBytes_AS_STRING(rep);
+ Py_ssize_t repsize = PyBytes_GET_SIZE(rep);
Py_ssize_t requiredsize = *outpos+repsize;
if (outsize<requiredsize)
if (!charmapencode_resize(outobj, outpos, requiredsize)) {
Py_DECREF(rep);
return enc_EXCEPTION;
}
- outstart = PyString_AS_STRING(*outobj);
+ outstart = PyBytes_AS_STRING(*outobj);
memcpy(outstart + *outpos, repchars, repsize);
*outpos += repsize;
}
@@ -4560,7 +4558,7 @@
/* allocate enough for a simple encoding without
replacements, if we need more, we'll resize */
- res = PyString_FromStringAndSize(NULL, size);
+ res = PyBytes_FromStringAndSize(NULL, size);
if (res == NULL)
goto onError;
if (size == 0)
@@ -4585,8 +4583,8 @@
}
/* Resize if we allocated to much */
- if (respos<PyString_GET_SIZE(res)) {
- if (_PyString_Resize(&res, respos))
+ if (respos<PyBytes_GET_SIZE(res)) {
+ if (_PyBytes_Resize(&res, respos))
goto onError;
}
Py_XDECREF(exc);
@@ -5484,7 +5482,7 @@
item = PySequence_Fast_GET_ITEM(fseq, i);
/* Convert item to Unicode. */
- if (! PyUnicode_Check(item) && ! PyString_Check(item)) {
+ if (! PyUnicode_Check(item) && ! PyBytes_Check(item)) {
PyErr_Format(PyExc_TypeError,
"sequence item %zd: expected string or Unicode,"
" %.80s found",
@@ -6488,7 +6486,7 @@
v = PyUnicode_AsEncodedObject((PyObject *)self, encoding, errors);
if (v == NULL)
goto onError;
- if (!PyString_Check(v) && !PyUnicode_Check(v)) {
+ if (!PyBytes_Check(v) && !PyUnicode_Check(v)) {
PyErr_Format(PyExc_TypeError,
"encoder did not return a string/unicode object "
"(type=%.400s)",
@@ -6524,7 +6522,7 @@
v = PyUnicode_AsDecodedObject((PyObject *)self, encoding, errors);
if (v == NULL)
goto onError;
- if (!PyString_Check(v) && !PyUnicode_Check(v)) {
+ if (!PyBytes_Check(v) && !PyUnicode_Check(v)) {
PyErr_Format(PyExc_TypeError,
"decoder did not return a string/unicode object "
"(type=%.400s)",
@@ -7154,7 +7152,7 @@
if (sep != NULL && sep != Py_None) {
if (PyUnicode_Check(sep))
return _PyUnicode_XStrip(self, striptype, sep);
- else if (PyString_Check(sep)) {
+ else if (PyBytes_Check(sep)) {
PyObject *res;
sep = PyUnicode_FromObject(sep);
if (sep==NULL)
@@ -7318,11 +7316,11 @@
}
PyDoc_STRVAR(replace__doc__,
-"S.replace (old, new[, maxsplit]) -> unicode\n\
+"S.replace (old, new[, count]) -> unicode\n\
\n\
Return a copy of S with all occurrences of substring\n\
-old replaced by new. If the optional argument maxsplit is\n\
-given, only the first maxsplit occurrences are replaced.");
+old replaced by new. If the optional argument count is\n\
+given, only the first count occurrences are replaced.");
static PyObject*
unicode_replace(PyUnicodeObject *self, PyObject *args)
@@ -7863,6 +7861,35 @@
\n\
");
+static PyObject *
+unicode__format__(PyObject *self, PyObject *args)
+{
+ PyObject *format_spec;
+ PyObject *result = NULL;
+ PyObject *tmp = NULL;
+
+ /* If 2.x, convert format_spec to the same type as value */
+ /* This is to allow things like u''.format('') */
+ if (!PyArg_ParseTuple(args, "O:__format__", &format_spec))
+ goto done;
+ if (!(PyBytes_Check(format_spec) || PyUnicode_Check(format_spec))) {
+ PyErr_Format(PyExc_TypeError, "__format__ arg must be str "
+ "or unicode, not %s", Py_TYPE(format_spec)->tp_name);
+ goto done;
+ }
+ tmp = PyObject_Unicode(format_spec);
+ if (tmp == NULL)
+ goto done;
+ format_spec = tmp;
+
+ result = _PyUnicode_FormatAdvanced(self,
+ PyUnicode_AS_UNICODE(format_spec),
+ PyUnicode_GET_SIZE(format_spec));
+done:
+ Py_XDECREF(tmp);
+ return result;
+}
+
PyDoc_STRVAR(p_format__doc__,
"S.__format__(format_spec) -> unicode\n\
\n\
@@ -8071,8 +8098,8 @@
str = _PyUnicode_AsDefaultEncodedString((PyObject *)self, NULL);
if (str == NULL)
return -1;
- *ptr = (void *) PyString_AS_STRING(str);
- return PyString_GET_SIZE(str);
+ *ptr = (void *) PyBytes_AS_STRING(str);
+ return PyBytes_GET_SIZE(str);
}
/* Helpers for PyUnicode_Format() */
@@ -8191,7 +8218,7 @@
PyObject *str; /* temporary string object. */
PyUnicodeObject *result;
- str = _PyString_FormatLong(val, flags, prec, type, &buf, &len);
+ str = _PyBytes_FormatLong(val, flags, prec, type, &buf, &len);
if (!str)
return NULL;
result = _PyUnicode_New(len);
@@ -8293,10 +8320,10 @@
buf[0] = PyUnicode_AS_UNICODE(v)[0];
}
- else if (PyString_Check(v)) {
- if (PyString_GET_SIZE(v) != 1)
+ else if (PyBytes_Check(v)) {
+ if (PyBytes_GET_SIZE(v) != 1)
goto onError;
- buf[0] = (Py_UNICODE)PyString_AS_STRING(v)[0];
+ buf[0] = (Py_UNICODE)PyBytes_AS_STRING(v)[0];
}
else {
@@ -8579,10 +8606,10 @@
goto onError;
if (PyUnicode_Check(temp))
/* nothing to do */;
- else if (PyString_Check(temp)) {
+ else if (PyBytes_Check(temp)) {
/* convert to string to Unicode */
- unicode = PyUnicode_Decode(PyString_AS_STRING(temp),
- PyString_GET_SIZE(temp),
+ unicode = PyUnicode_Decode(PyBytes_AS_STRING(temp),
+ PyBytes_GET_SIZE(temp),
NULL,
"strict");
Py_DECREF(temp);
Modified: python/branches/tlee-ast-optimize/Objects/weakrefobject.c
==============================================================================
--- python/branches/tlee-ast-optimize/Objects/weakrefobject.c (original)
+++ python/branches/tlee-ast-optimize/Objects/weakrefobject.c Sun Jun 1 17:18:10 2008
@@ -166,8 +166,8 @@
"__name__");
if (nameobj == NULL)
PyErr_Clear();
- else if (PyString_Check(nameobj))
- name = PyString_AS_STRING(nameobj);
+ else if (PyBytes_Check(nameobj))
+ name = PyBytes_AS_STRING(nameobj);
PyOS_snprintf(buffer, sizeof(buffer),
name ? "<weakref at %p; to '%.50s' at %p (%s)>"
: "<weakref at %p; to '%.50s' at %p>",
@@ -177,7 +177,7 @@
name);
Py_XDECREF(nameobj);
}
- return PyString_FromString(buffer);
+ return PyBytes_FromString(buffer);
}
/* Weak references only support equality, not ordering. Two weak references
@@ -448,7 +448,7 @@
"<weakproxy at %p to %.100s at %p>", proxy,
Py_TYPE(PyWeakref_GET_OBJECT(proxy))->tp_name,
PyWeakref_GET_OBJECT(proxy));
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
Modified: python/branches/tlee-ast-optimize/PC/VC6/pythoncore.dsp
==============================================================================
--- python/branches/tlee-ast-optimize/PC/VC6/pythoncore.dsp (original)
+++ python/branches/tlee-ast-optimize/PC/VC6/pythoncore.dsp Sun Jun 1 17:18:10 2008
@@ -237,6 +237,10 @@
# End Source File
# Begin Source File
+SOURCE=..\..\Objects\bytearrayobject.c
+# End Source File
+# Begin Source File
+
SOURCE=..\..\Objects\bytesobject.c
# End Source File
# Begin Source File
@@ -643,10 +647,6 @@
# End Source File
# Begin Source File
-SOURCE=..\..\Objects\stringobject.c
-# End Source File
-# Begin Source File
-
SOURCE=..\..\Modules\stropmodule.c
# End Source File
# Begin Source File
Modified: python/branches/tlee-ast-optimize/PC/VS7.1/pythoncore.vcproj
==============================================================================
--- python/branches/tlee-ast-optimize/PC/VS7.1/pythoncore.vcproj (original)
+++ python/branches/tlee-ast-optimize/PC/VS7.1/pythoncore.vcproj Sun Jun 1 17:18:10 2008
@@ -443,6 +443,9 @@
RelativePath="..\..\Objects\bufferobject.c">
</File>
<File
+ RelativePath="..\..\Objects\bytearrayobject.c">
+ </File>
+ <File
RelativePath="..\..\Objects\bytesobject.c">
</File>
<File
@@ -764,9 +767,6 @@
RelativePath="..\..\Objects\sliceobject.c">
</File>
<File
- RelativePath="..\..\Objects\stringobject.c">
- </File>
- <File
RelativePath="..\..\Modules\stropmodule.c">
</File>
<File
Modified: python/branches/tlee-ast-optimize/PC/VS8.0/_bsddb.vcproj
==============================================================================
--- python/branches/tlee-ast-optimize/PC/VS8.0/_bsddb.vcproj (original)
+++ python/branches/tlee-ast-optimize/PC/VS8.0/_bsddb.vcproj Sun Jun 1 17:18:10 2008
@@ -42,7 +42,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="$(bsddbDir)"
+ AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -52,11 +52,9 @@
/>
<Tool
Name="VCPreLinkEventTool"
- CommandLine="cd $(bsddbDir)
if exist Debug\libdb44sd.lib exit 0
devenv Berkeley_DB.sln /build Debug /project db_static
"
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="$(bsddbDir)\Debug\libdb44sd.lib"
BaseAddress="0x1e180000"
/>
<Tool
@@ -105,7 +103,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="$(bsddbDir)"
+ AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -115,11 +113,11 @@
/>
<Tool
Name="VCPreLinkEventTool"
- CommandLine="cd $(bsddbDir)
if exist Debug_AMD64\libdb44sd.lib exit 0
devenv Berkeley_DB.sln /build "Debug AMD64" /project db_static /useenv
"
+ CommandLine=""
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="$(bsddbDir)\Debug_AMD64\libdb44sd.lib"
+ AdditionalDependencies="$(bsddbDepLibs)"
BaseAddress="0x1e180000"
/>
<Tool
@@ -168,7 +166,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="$(bsddbDir)"
+ AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -178,11 +176,10 @@
/>
<Tool
Name="VCPreLinkEventTool"
- CommandLine="cd $(bsddbDir)
if exist Release\libdb44s.lib exit 0
devenv Berkeley_DB.sln /build Release /project db_static
"
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="$(bsddbDir)\Release\libdb44s.lib"
+ AdditionalDependencies="$(bsddbDepLibs)"
BaseAddress="0x1e180000"
/>
<Tool
@@ -232,7 +229,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="$(bsddbDir)"
+ AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -242,11 +239,11 @@
/>
<Tool
Name="VCPreLinkEventTool"
- CommandLine="cd $(bsddbDir)
if exist Release_AMD64\libdb44s.lib exit 0
devenv Berkeley_DB.sln /build "Release AMD64" /project db_static /useenv
"
+ CommandLine=""
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="$(bsddbDir)\Release_AMD64\libdb44s.lib"
+ AdditionalDependencies="$(bsddbDepLibs)"
BaseAddress="0x1e180000"
/>
<Tool
@@ -295,7 +292,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="$(bsddbDir)"
+ AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -305,11 +302,10 @@
/>
<Tool
Name="VCPreLinkEventTool"
- CommandLine="cd $(bsddbDir)
if exist Release\libdb44s.lib exit 0
devenv Berkeley_DB.sln /build Release /project db_static
"
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="$(bsddbDir)\Release\libdb44s.lib"
+ AdditionalDependencies="$(bsddbDepLibs)"
BaseAddress="0x1e180000"
/>
<Tool
@@ -359,7 +355,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="$(bsddbDir)"
+ AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -369,11 +365,10 @@
/>
<Tool
Name="VCPreLinkEventTool"
- CommandLine="cd $(bsddbDir)
if exist Release_AMD64\libdb44s.lib exit 0
devenv Berkeley_DB.sln /build "Release AMD64" /project db_static /useenv
"
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="$(bsddbDir)\Release_AMD64\libdb44s.lib"
+ AdditionalDependencies="$(bsddbDepLibs)"
BaseAddress="0x1e180000"
TargetMachine="17"
/>
@@ -423,7 +418,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="$(bsddbDir)"
+ AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -433,11 +428,10 @@
/>
<Tool
Name="VCPreLinkEventTool"
- CommandLine="cd $(bsddbDir)
if exist Release\libdb44s.lib exit 0
devenv Berkeley_DB.sln /build Release /project db_static
"
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="$(bsddbDir)\Release\libdb44s.lib"
+ AdditionalDependencies="$(bsddbDepLibs)"
BaseAddress="0x1e180000"
/>
<Tool
@@ -487,7 +481,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="$(bsddbDir)"
+ AdditionalIncludeDirectories="$(bsddbDir),$(bsddbDir)\.."
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -497,11 +491,10 @@
/>
<Tool
Name="VCPreLinkEventTool"
- CommandLine="cd $(bsddbDir)
if exist Release_AMD64\libdb44s.lib exit 0
devenv Berkeley_DB.sln /build "Release AMD64" /project db_static /useenv
"
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="$(bsddbDir)\Release_AMD64\libdb44s.lib"
+ AdditionalDependencies="$(bsddbDepLibs)"
BaseAddress="0x1e180000"
TargetMachine="17"
/>
Modified: python/branches/tlee-ast-optimize/PC/VS8.0/_elementtree.vcproj
==============================================================================
--- python/branches/tlee-ast-optimize/PC/VS8.0/_elementtree.vcproj (original)
+++ python/branches/tlee-ast-optimize/PC/VS8.0/_elementtree.vcproj Sun Jun 1 17:18:10 2008
@@ -56,6 +56,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="odbccp32.lib"
BaseAddress="0x1D100000"
/>
<Tool
@@ -118,6 +119,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="odbccp32.lib"
BaseAddress="0x1D100000"
/>
<Tool
@@ -180,6 +182,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="odbccp32.lib"
BaseAddress="0x1D100000"
/>
<Tool
@@ -243,6 +246,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="odbccp32.lib"
BaseAddress="0x1D100000"
/>
<Tool
@@ -305,6 +309,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="odbccp32.lib"
BaseAddress="0x1D100000"
/>
<Tool
@@ -368,6 +373,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="odbccp32.lib"
BaseAddress="0x1D100000"
TargetMachine="17"
/>
@@ -431,6 +437,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="odbccp32.lib"
BaseAddress="0x1D100000"
/>
<Tool
@@ -494,6 +501,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="odbccp32.lib"
BaseAddress="0x1D100000"
TargetMachine="17"
/>
Modified: python/branches/tlee-ast-optimize/PC/VS8.0/_sqlite3.vcproj
==============================================================================
--- python/branches/tlee-ast-optimize/PC/VS8.0/_sqlite3.vcproj (original)
+++ python/branches/tlee-ast-optimize/PC/VS8.0/_sqlite3.vcproj Sun Jun 1 17:18:10 2008
@@ -53,12 +53,9 @@
/>
<Tool
Name="VCPreLinkEventTool"
- Description="Build sqlite3 libs and dll"
- CommandLine="cd "$(sqlite3Dir)"
if not exist "$(OutDir)\sqlite3.dll" if exist $(PlatformName)\sqlite3.dll copy $(PlatformName)\sqlite3.dll "$(OutDir)"
if exist $(PlatformName)\sqlite3.lib exit 0
if not exist $(PlatformName) mkdir $(PlatformName)
cd $(PlatformName)
cl /DNO_TCL /Ox /Ob1 /Oi /GL /GF /FD /MD /Gy ..\..\*.c
link /INCREMENTAL:NO /NOLOGO /DLL /OPT:REF /OPT:ICF /def:..\..\sqlite3.def /dll /out:sqlite3.dll *.obj
if not exist "$(OutDir)\sqlite3.dll" copy sqlite3.dll "$(OutDir)"
"
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="$(sqlite3Dir)\$(PlatformName)\sqlite3.lib"
BaseAddress="0x1e180000"
/>
<Tool
@@ -118,12 +115,9 @@
/>
<Tool
Name="VCPreLinkEventTool"
- Description="Build sqlite3 libs and dll"
- CommandLine="cd "$(sqlite3Dir)"
if not exist "$(OutDir)\sqlite3.dll" if exist $(PlatformName)\sqlite3.dll copy $(PlatformName)\sqlite3.dll "$(OutDir)"
if exist $(PlatformName)\sqlite3.lib exit 0
if not exist $(PlatformName) mkdir $(PlatformName)
cd $(PlatformName)
cl /DNO_TCL /Ox /Ob1 /Oi /GL /GF /FD /MD /Gy ..\..\*.c
link /INCREMENTAL:NO /NOLOGO /DLL /OPT:REF /OPT:ICF /def:..\..\sqlite3.def /dll /out:sqlite3.dll *.obj
if not exist "$(OutDir)\sqlite3.dll" copy sqlite3.dll "$(OutDir)"
"
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="$(sqlite3Dir)\$(PlatformName)\sqlite3.lib"
BaseAddress="0x1e180000"
/>
<Tool
@@ -183,12 +177,9 @@
/>
<Tool
Name="VCPreLinkEventTool"
- Description="Build sqlite3 libs and dll"
- CommandLine="cd "$(sqlite3Dir)"
if not exist "$(OutDir)\sqlite3.dll" if exist $(PlatformName)\sqlite3.dll copy $(PlatformName)\sqlite3.dll "$(OutDir)"
if exist $(PlatformName)\sqlite3.lib exit 0
if not exist $(PlatformName) mkdir $(PlatformName)
cd $(PlatformName)
cl /DNO_TCL /Ox /Ob1 /Oi /GL /GF /FD /MD /Gy ..\..\*.c
link /INCREMENTAL:NO /NOLOGO /DLL /OPT:REF /OPT:ICF /def:..\..\sqlite3.def /dll /out:sqlite3.dll *.obj
if not exist "$(OutDir)\sqlite3.dll" copy sqlite3.dll "$(OutDir)"
"
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="$(sqlite3Dir)\$(PlatformName)\sqlite3.lib"
BaseAddress="0x1e180000"
/>
<Tool
@@ -249,12 +240,9 @@
/>
<Tool
Name="VCPreLinkEventTool"
- Description="Build sqlite3 libs and dll"
- CommandLine="cd "$(sqlite3Dir)"
if not exist "$(OutDir)\sqlite3.dll" if exist $(PlatformName)\sqlite3.dll copy $(PlatformName)\sqlite3.dll "$(OutDir)"
if exist $(PlatformName)\sqlite3.lib exit 0
if not exist $(PlatformName) mkdir $(PlatformName)
cd $(PlatformName)
cl /DNO_TCL /Ox /Ob1 /Oi /GL /GF /FD /MD /Gy ..\..\*.c
link /INCREMENTAL:NO /NOLOGO /DLL /OPT:REF /OPT:ICF /def:..\..\sqlite3.def /dll /out:sqlite3.dll *.obj
if not exist "$(OutDir)\sqlite3.dll" copy sqlite3.dll "$(OutDir)"
"
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="$(sqlite3Dir)\$(PlatformName)\sqlite3.lib"
BaseAddress="0x1e180000"
/>
<Tool
@@ -314,12 +302,9 @@
/>
<Tool
Name="VCPreLinkEventTool"
- Description="Build sqlite3 libs and dll"
- CommandLine="cd "$(sqlite3Dir)"
if not exist "$(OutDir)\sqlite3.dll" if exist $(PlatformName)\sqlite3.dll copy $(PlatformName)\sqlite3.dll "$(OutDir)"
if exist $(PlatformName)\sqlite3.lib exit 0
if not exist $(PlatformName) mkdir $(PlatformName)
cd $(PlatformName)
cl /DNO_TCL /Ox /Ob1 /Oi /GL /GF /FD /MD /Gy ..\..\*.c
link /INCREMENTAL:NO /NOLOGO /DLL /OPT:REF /OPT:ICF /def:..\..\sqlite3.def /dll /out:sqlite3.dll *.obj
if not exist "$(OutDir)\sqlite3.dll" copy sqlite3.dll "$(OutDir)"
"
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="$(sqlite3Dir)\$(PlatformName)\sqlite3.lib"
BaseAddress="0x1e180000"
/>
<Tool
@@ -380,12 +365,9 @@
/>
<Tool
Name="VCPreLinkEventTool"
- Description="Build sqlite3 libs and dll"
- CommandLine="cd "$(sqlite3Dir)"
if not exist "$(OutDir)\sqlite3.dll" if exist $(PlatformName)\sqlite3.dll copy $(PlatformName)\sqlite3.dll "$(OutDir)"
if exist $(PlatformName)\sqlite3.lib exit 0
if not exist $(PlatformName) mkdir $(PlatformName)
cd $(PlatformName)
cl /DNO_TCL /Ox /Ob1 /Oi /GL /GF /FD /MD /Gy ..\..\*.c
link /INCREMENTAL:NO /NOLOGO /DLL /OPT:REF /OPT:ICF /def:..\..\sqlite3.def /dll /out:sqlite3.dll *.obj
if not exist "$(OutDir)\sqlite3.dll" copy sqlite3.dll "$(OutDir)"
"
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="$(sqlite3Dir)\$(PlatformName)\sqlite3.lib"
BaseAddress="0x1e180000"
TargetMachine="17"
/>
@@ -446,12 +428,9 @@
/>
<Tool
Name="VCPreLinkEventTool"
- Description="Build sqlite3 libs and dll"
- CommandLine="cd "$(sqlite3Dir)"
if not exist "$(OutDir)\sqlite3.dll" if exist $(PlatformName)\sqlite3.dll copy $(PlatformName)\sqlite3.dll "$(OutDir)"
if exist $(PlatformName)\sqlite3.lib exit 0
if not exist $(PlatformName) mkdir $(PlatformName)
cd $(PlatformName)
cl /DNO_TCL /Ox /Ob1 /Oi /GL /GF /FD /MD /Gy ..\..\*.c
link /INCREMENTAL:NO /NOLOGO /DLL /OPT:REF /OPT:ICF /def:..\..\sqlite3.def /dll /out:sqlite3.dll *.obj
if not exist "$(OutDir)\sqlite3.dll" copy sqlite3.dll "$(OutDir)"
"
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="$(sqlite3Dir)\$(PlatformName)\sqlite3.lib"
BaseAddress="0x1e180000"
/>
<Tool
@@ -512,12 +491,9 @@
/>
<Tool
Name="VCPreLinkEventTool"
- Description="Build sqlite3 libs and dll"
- CommandLine="cd "$(sqlite3Dir)"
if not exist "$(OutDir)\sqlite3.dll" if exist $(PlatformName)\sqlite3.dll copy $(PlatformName)\sqlite3.dll "$(OutDir)"
if exist $(PlatformName)\sqlite3.lib exit 0
if not exist $(PlatformName) mkdir $(PlatformName)
cd $(PlatformName)
cl /DNO_TCL /Ox /Ob1 /Oi /GL /GF /FD /MD /Gy ..\..\*.c
link /INCREMENTAL:NO /NOLOGO /DLL /OPT:REF /OPT:ICF /def:..\..\sqlite3.def /dll /out:sqlite3.dll *.obj
if not exist "$(OutDir)\sqlite3.dll" copy sqlite3.dll "$(OutDir)"
"
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="$(sqlite3Dir)\$(PlatformName)\sqlite3.lib"
BaseAddress="0x1e180000"
TargetMachine="17"
/>
Modified: python/branches/tlee-ast-optimize/PC/VS8.0/_ssl.vcproj
==============================================================================
--- python/branches/tlee-ast-optimize/PC/VS8.0/_ssl.vcproj (original)
+++ python/branches/tlee-ast-optimize/PC/VS8.0/_ssl.vcproj Sun Jun 1 17:18:10 2008
@@ -27,7 +27,7 @@
>
<Tool
Name="VCPreBuildEventTool"
- CommandLine="cd "$(SolutionDir)"
"$(PythonExe)" build_ssl.py Release $(PlatformName) -a"
+ CommandLine="cd "$(SolutionDir)"
"$(PythonExe)" build_ssl.py Release $(PlatformName) -a
"
/>
<Tool
Name="VCCustomBuildTool"
@@ -89,7 +89,7 @@
>
<Tool
Name="VCPreBuildEventTool"
- CommandLine="cd "$(SolutionDir)"
"$(PythonExe)" build_ssl.py Release $(PlatformName) -a"
+ CommandLine="cd "$(SolutionDir)"
"$(PythonExe)" build_ssl.py Release $(PlatformName) -a
"
/>
<Tool
Name="VCCustomBuildTool"
@@ -153,7 +153,7 @@
>
<Tool
Name="VCPreBuildEventTool"
- CommandLine="cd "$(SolutionDir)"
"$(PythonExe)" build_ssl.py Release $(PlatformName) -a"
+ CommandLine="cd "$(SolutionDir)"
"$(PythonExe)" build_ssl.py Release $(PlatformName) -a
"
/>
<Tool
Name="VCCustomBuildTool"
@@ -216,7 +216,7 @@
>
<Tool
Name="VCPreBuildEventTool"
- CommandLine="cd "$(SolutionDir)"
"$(PythonExe)" build_ssl.py Release $(PlatformName) -a"
+ CommandLine="cd "$(SolutionDir)"
"$(PythonExe)" build_ssl.py Release $(PlatformName) -a
"
/>
<Tool
Name="VCCustomBuildTool"
@@ -280,7 +280,7 @@
>
<Tool
Name="VCPreBuildEventTool"
- CommandLine="cd "$(SolutionDir)"
"$(PythonExe)" build_ssl.py Release $(PlatformName) -a"
+ CommandLine="cd "$(SolutionDir)"
"$(PythonExe)" build_ssl.py Release $(PlatformName) -a
"
/>
<Tool
Name="VCCustomBuildTool"
@@ -343,7 +343,7 @@
>
<Tool
Name="VCPreBuildEventTool"
- CommandLine="cd "$(SolutionDir)"
"$(PythonExe)" build_ssl.py Release $(PlatformName) -a"
+ CommandLine="cd "$(SolutionDir)"
"$(PythonExe)" build_ssl.py Release $(PlatformName) -a
"
/>
<Tool
Name="VCCustomBuildTool"
@@ -408,7 +408,7 @@
>
<Tool
Name="VCPreBuildEventTool"
- CommandLine="cd "$(SolutionDir)"
"$(PythonExe)" build_ssl.py Release $(PlatformName) -a"
+ CommandLine="cd "$(SolutionDir)"
"$(PythonExe)" build_ssl.py Release $(PlatformName) -a
"
/>
<Tool
Name="VCCustomBuildTool"
@@ -471,7 +471,7 @@
>
<Tool
Name="VCPreBuildEventTool"
- CommandLine="cd "$(SolutionDir)"
"$(PythonExe)" build_ssl.py Release $(PlatformName) -a"
+ CommandLine="cd "$(SolutionDir)"
"$(PythonExe)" build_ssl.py Release $(PlatformName) -a
"
/>
<Tool
Name="VCCustomBuildTool"
@@ -535,10 +535,6 @@
Name="Source Files"
>
<File
- RelativePath="..\..\Modules\_hashopenssl.c"
- >
- </File>
- <File
RelativePath="..\..\Modules\_ssl.c"
>
</File>
Modified: python/branches/tlee-ast-optimize/PC/VS8.0/_tkinter.vcproj
==============================================================================
--- python/branches/tlee-ast-optimize/PC/VS8.0/_tkinter.vcproj (original)
+++ python/branches/tlee-ast-optimize/PC/VS8.0/_tkinter.vcproj Sun Jun 1 17:18:10 2008
@@ -56,7 +56,7 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="$(tcltkLib)"
+ AdditionalDependencies="$(tcltkLibDebug)"
/>
<Tool
Name="VCALinkTool"
@@ -104,7 +104,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""$(tcltk64Dir)\include""
+ AdditionalIncludeDirectories="$(tcltk64Dir)\include"
PreprocessorDefinitions="WITH_APPINIT"
/>
<Tool
@@ -118,7 +118,7 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="$(tcltk64Lib)"
+ AdditionalDependencies="$(tcltk64LibDebug)"
/>
<Tool
Name="VCALinkTool"
@@ -229,7 +229,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""$(tcltk64Dir)\include""
+ AdditionalIncludeDirectories="$(tcltk64Dir)\include"
PreprocessorDefinitions="WITH_APPINIT"
/>
<Tool
@@ -354,7 +354,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""$(tcltk64Dir)\include""
+ AdditionalIncludeDirectories="$(tcltk64Dir)\include"
PreprocessorDefinitions="WITH_APPINIT"
/>
<Tool
@@ -480,7 +480,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""$(tcltk64Dir)\include""
+ AdditionalIncludeDirectories="$(tcltk64Dir)\include"
PreprocessorDefinitions="WITH_APPINIT"
/>
<Tool
Modified: python/branches/tlee-ast-optimize/PC/VS8.0/bdist_wininst.vcproj
==============================================================================
--- python/branches/tlee-ast-optimize/PC/VS8.0/bdist_wininst.vcproj (original)
+++ python/branches/tlee-ast-optimize/PC/VS8.0/bdist_wininst.vcproj Sun Jun 1 17:18:10 2008
@@ -11,6 +11,9 @@
<Platform
Name="Win32"
/>
+ <Platform
+ Name="x64"
+ />
</Platforms>
<ToolFiles>
</ToolFiles>
@@ -104,6 +107,96 @@
Name="VCPostBuildEventTool"
/>
</Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="0"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName=".\..\..\lib\distutils\command\wininst.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\PC\bdist_wininst;..\..\Include;..\..\Modules\zlib"
+ PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="0"
+ AdditionalIncludeDirectories="..\..\PC;..\..\PC\bdist_wininst;..\..\Include"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="comctl32.lib imagehlp.lib"
+ OutputFile="..\..\lib\distutils\command\wininst-8.0-amd64.exe"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ IgnoreDefaultLibraryNames="LIBC"
+ ProgramDatabaseFile="..\..\lib\distutils\command\wininst-8.0-amd64.pdb"
+ SubSystem="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
</Configurations>
<References>
</References>
Modified: python/branches/tlee-ast-optimize/PC/VS8.0/debug.vsprops
==============================================================================
--- python/branches/tlee-ast-optimize/PC/VS8.0/debug.vsprops (original)
+++ python/branches/tlee-ast-optimize/PC/VS8.0/debug.vsprops Sun Jun 1 17:18:10 2008
@@ -8,4 +8,8 @@
Name="VCCLCompilerTool"
PreprocessorDefinitions="_DEBUG"
/>
-</VisualStudioPropertySheet>
\ No newline at end of file
+ <UserMacro
+ Name="KillPythonExe"
+ Value="$(OutDir)\kill_python_d.exe"
+ />
+</VisualStudioPropertySheet>
Modified: python/branches/tlee-ast-optimize/PC/VS8.0/make_versioninfo.vcproj
==============================================================================
--- python/branches/tlee-ast-optimize/PC/VS8.0/make_versioninfo.vcproj (original)
+++ python/branches/tlee-ast-optimize/PC/VS8.0/make_versioninfo.vcproj Sun Jun 1 17:18:10 2008
@@ -67,6 +67,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="odbccp32.lib"
OutputFile="$(SolutionDir)make_versioninfo.exe"
ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"
SubSystem="1"
@@ -210,6 +211,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="odbccp32.lib"
OutputFile="$(SolutionDir)make_versioninfo_d.exe"
ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"
SubSystem="1"
Modified: python/branches/tlee-ast-optimize/PC/VS8.0/pcbuild.sln
==============================================================================
--- python/branches/tlee-ast-optimize/PC/VS8.0/pcbuild.sln (original)
+++ python/branches/tlee-ast-optimize/PC/VS8.0/pcbuild.sln Sun Jun 1 17:18:10 2008
@@ -11,6 +11,7 @@
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythoncore", "pythoncore.vcproj", "{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}"
ProjectSection(ProjectDependencies) = postProject
{F0E0541E-F17D-430B-97C4-93ADF0DD284E} = {F0E0541E-F17D-430B-97C4-93ADF0DD284E}
+ {6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}
{C73F0EC1-358B-4177-940F-0846AC8B04CD} = {C73F0EC1-358B-4177-940F-0846AC8B04CD}
EndProjectSection
EndProject
@@ -20,6 +21,9 @@
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "w9xpopen", "w9xpopen.vcproj", "{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}"
+ ProjectSection(ProjectDependencies) = postProject
+ {6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}
+ EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_buildinfo", "make_buildinfo.vcproj", "{C73F0EC1-358B-4177-940F-0846AC8B04CD}"
EndProject
@@ -36,6 +40,8 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_bsddb", "_bsddb.vcproj", "{B4D38F3F-68FB-42EC-A45D-E00657BB3627}"
ProjectSection(ProjectDependencies) = postProject
+ {6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}
+ {62172C7D-B39E-409A-B352-370FF5098C19} = {62172C7D-B39E-409A-B352-370FF5098C19}
{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
EndProjectSection
EndProject
@@ -67,6 +73,7 @@
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_sqlite3", "_sqlite3.vcproj", "{13CECB97-4119-4316-9D42-8534019A5A44}"
ProjectSection(ProjectDependencies) = postProject
{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+ {A1A295E5-463C-437F-81CA-1F32367685DA} = {A1A295E5-463C-437F-81CA-1F32367685DA}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ssl", "_ssl.vcproj", "{C6E20F84-3247-4AD6-B051-B073268F73BA}"
@@ -108,6 +115,24 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bdist_wininst", "bdist_wininst.vcproj", "{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_hashlib", "_hashlib.vcproj", "{447F05A8-F581-4CAC-A466-5AC7936E207E}"
+ ProjectSection(ProjectDependencies) = postProject
+ {B11D750F-CD1F-4A96-85CE-E69A5C5259F9} = {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}
+ {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_bsddb44", "_bsddb44.vcproj", "{62172C7D-B39E-409A-B352-370FF5098C19}"
+ ProjectSection(ProjectDependencies) = postProject
+ {6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sqlite3", "sqlite3.vcproj", "{A1A295E5-463C-437F-81CA-1F32367685DA}"
+ ProjectSection(ProjectDependencies) = postProject
+ {6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kill_python", "kill_python.vcproj", "{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
@@ -457,13 +482,77 @@
{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|x64.ActiveCfg = Release|x64
{D06B6426-4762-44CC-8BAD-D79052507F2F}.Release|x64.Build.0 = Release|x64
{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug|Win32.ActiveCfg = Release|Win32
- {EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug|x64.ActiveCfg = Release|Win32
+ {EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug|x64.ActiveCfg = Release|x64
{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGInstrument|Win32.ActiveCfg = Release|Win32
- {EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGInstrument|x64.ActiveCfg = Release|Win32
+ {EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGInstrument|x64.ActiveCfg = Release|x64
{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGUpdate|Win32.ActiveCfg = Release|Win32
- {EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGUpdate|x64.ActiveCfg = Release|Win32
+ {EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.PGUpdate|x64.ActiveCfg = Release|x64
{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release|Win32.ActiveCfg = Release|Win32
- {EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release|x64.ActiveCfg = Release|Win32
+ {EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release|x64.ActiveCfg = Release|x64
+ {447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|Win32.ActiveCfg = Debug|Win32
+ {447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|Win32.Build.0 = Debug|Win32
+ {447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|x64.ActiveCfg = Debug|x64
+ {447F05A8-F581-4CAC-A466-5AC7936E207E}.Debug|x64.Build.0 = Debug|x64
+ {447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+ {447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+ {447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+ {447F05A8-F581-4CAC-A466-5AC7936E207E}.PGInstrument|x64.Build.0 = PGInstrument|x64
+ {447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+ {447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+ {447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+ {447F05A8-F581-4CAC-A466-5AC7936E207E}.PGUpdate|x64.Build.0 = PGUpdate|x64
+ {447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|Win32.ActiveCfg = Release|Win32
+ {447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|Win32.Build.0 = Release|Win32
+ {447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|x64.ActiveCfg = Release|x64
+ {447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|x64.Build.0 = Release|x64
+ {62172C7D-B39E-409A-B352-370FF5098C19}.Debug|Win32.ActiveCfg = Debug|Win32
+ {62172C7D-B39E-409A-B352-370FF5098C19}.Debug|Win32.Build.0 = Debug|Win32
+ {62172C7D-B39E-409A-B352-370FF5098C19}.Debug|x64.ActiveCfg = Debug|x64
+ {62172C7D-B39E-409A-B352-370FF5098C19}.Debug|x64.Build.0 = Debug|x64
+ {62172C7D-B39E-409A-B352-370FF5098C19}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+ {62172C7D-B39E-409A-B352-370FF5098C19}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+ {62172C7D-B39E-409A-B352-370FF5098C19}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+ {62172C7D-B39E-409A-B352-370FF5098C19}.PGInstrument|x64.Build.0 = PGInstrument|x64
+ {62172C7D-B39E-409A-B352-370FF5098C19}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+ {62172C7D-B39E-409A-B352-370FF5098C19}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+ {62172C7D-B39E-409A-B352-370FF5098C19}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+ {62172C7D-B39E-409A-B352-370FF5098C19}.PGUpdate|x64.Build.0 = PGUpdate|x64
+ {62172C7D-B39E-409A-B352-370FF5098C19}.Release|Win32.ActiveCfg = Release|Win32
+ {62172C7D-B39E-409A-B352-370FF5098C19}.Release|Win32.Build.0 = Release|Win32
+ {62172C7D-B39E-409A-B352-370FF5098C19}.Release|x64.ActiveCfg = Release|x64
+ {62172C7D-B39E-409A-B352-370FF5098C19}.Release|x64.Build.0 = Release|x64
+ {A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|Win32.Build.0 = Debug|Win32
+ {A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|x64.ActiveCfg = Debug|x64
+ {A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|x64.Build.0 = Debug|x64
+ {A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+ {A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+ {A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+ {A1A295E5-463C-437F-81CA-1F32367685DA}.PGInstrument|x64.Build.0 = PGInstrument|x64
+ {A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+ {A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+ {A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+ {A1A295E5-463C-437F-81CA-1F32367685DA}.PGUpdate|x64.Build.0 = PGUpdate|x64
+ {A1A295E5-463C-437F-81CA-1F32367685DA}.Release|Win32.ActiveCfg = Release|Win32
+ {A1A295E5-463C-437F-81CA-1F32367685DA}.Release|Win32.Build.0 = Release|Win32
+ {A1A295E5-463C-437F-81CA-1F32367685DA}.Release|x64.ActiveCfg = Release|x64
+ {A1A295E5-463C-437F-81CA-1F32367685DA}.Release|x64.Build.0 = Release|x64
+ {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Debug|Win32.Build.0 = Debug|Win32
+ {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Debug|x64.ActiveCfg = Debug|x64
+ {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Debug|x64.Build.0 = Debug|x64
+ {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGInstrument|Win32.ActiveCfg = Release|Win32
+ {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGInstrument|Win32.Build.0 = Release|Win32
+ {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGInstrument|x64.ActiveCfg = Release|x64
+ {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGInstrument|x64.Build.0 = Release|x64
+ {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGUpdate|Win32.ActiveCfg = Release|Win32
+ {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGUpdate|Win32.Build.0 = Release|Win32
+ {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGUpdate|x64.ActiveCfg = Release|x64
+ {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.PGUpdate|x64.Build.0 = Release|x64
+ {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Release|Win32.ActiveCfg = Release|Win32
+ {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Release|Win32.Build.0 = Release|Win32
+ {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Release|x64.ActiveCfg = Release|x64
+ {6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Modified: python/branches/tlee-ast-optimize/PC/VS8.0/pyd.vsprops
==============================================================================
--- python/branches/tlee-ast-optimize/PC/VS8.0/pyd.vsprops (original)
+++ python/branches/tlee-ast-optimize/PC/VS8.0/pyd.vsprops Sun Jun 1 17:18:10 2008
@@ -7,6 +7,7 @@
>
<Tool
Name="VCCLCompilerTool"
+ PreprocessorDefinitions="Py_BUILD_CORE_MODULE"
RuntimeLibrary="2"
/>
<Tool
Modified: python/branches/tlee-ast-optimize/PC/VS8.0/pyd_d.vsprops
==============================================================================
--- python/branches/tlee-ast-optimize/PC/VS8.0/pyd_d.vsprops (original)
+++ python/branches/tlee-ast-optimize/PC/VS8.0/pyd_d.vsprops Sun Jun 1 17:18:10 2008
@@ -10,6 +10,7 @@
Optimization="0"
InlineFunctionExpansion="0"
EnableIntrinsicFunctions="false"
+ PreprocessorDefinitions="Py_BUILD_CORE_MODULE"
RuntimeLibrary="3"
/>
<Tool
Modified: python/branches/tlee-ast-optimize/PC/VS8.0/pyproject.vsprops
==============================================================================
--- python/branches/tlee-ast-optimize/PC/VS8.0/pyproject.vsprops (original)
+++ python/branches/tlee-ast-optimize/PC/VS8.0/pyproject.vsprops Sun Jun 1 17:18:10 2008
@@ -45,35 +45,67 @@
Value="$(SolutionDir)\python.exe"
/>
<UserMacro
+ Name="externalsDir"
+ Value="..\..\.."
+ />
+ <UserMacro
Name="bsddbDir"
- Value="..\..\..\db-4.4.20\build_win32\"
+ Value="$(bsddb44Dir)"
+ />
+ <UserMacro
+ Name="bsddbDepLibs"
+ Value="$(bsddb44DepLibs)"
+ />
+ <UserMacro
+ Name="bsddb44Dir"
+ Value="$(externalsDir)\db-4.4.20\build_win32"
+ />
+ <UserMacro
+ Name="bsddb44DepLibs"
+ Value=""
+ />
+ <UserMacro
+ Name="bsddb45Dir"
+ Value="$(externalsDir)\db-4.5.20.x\build_windows"
+ />
+ <UserMacro
+ Name="bsddb45DepLibs"
+ Value="ws2_32.lib"
/>
<UserMacro
Name="sqlite3Dir"
- Value="..\..\..\sqlite-source-3.3.4\"
+ Value="$(externalsDir)\sqlite-source-3.3.4"
/>
<UserMacro
Name="bz2Dir"
- Value="..\..\..\bzip2-1.0.3\"
+ Value="$(externalsDir)\bzip2-1.0.3"
/>
<UserMacro
Name="opensslDir"
- Value="..\..\..\openssl-0.9.8g\"
+ Value="$(externalsDir)\openssl-0.9.8g"
/>
<UserMacro
Name="tcltkDir"
- Value="..\..\..\tcltk\"
+ Value="$(externalsDir)\tcltk"
/>
<UserMacro
Name="tcltk64Dir"
- Value="..\..\..\tcltk64"
+ Value="$(externalsDir)\tcltk64"
/>
<UserMacro
Name="tcltkLib"
Value="$(tcltkDir)\lib\tcl84.lib $(tcltkDir)\lib\tk84.lib"
/>
<UserMacro
+ Name="tcltkLibDebug"
+ Value="$(tcltkDir)\lib\tcl84g.lib $(tcltkDir)\lib\tk84g.lib"
+ />
+ <UserMacro
Name="tcltk64Lib"
Value="$(tcltk64Dir)\lib\tcl84.lib $(tcltk64Dir)\lib\tk84.lib"
/>
+ <UserMacro
+ Name="tcltk64LibDebug"
+ Value="$(tcltk64Dir)\lib\tcl84g.lib $(tcltk64Dir)\lib\tk84g.lib"
+ />
</VisualStudioPropertySheet>
Modified: python/branches/tlee-ast-optimize/PC/VS8.0/python.vcproj
==============================================================================
--- python/branches/tlee-ast-optimize/PC/VS8.0/python.vcproj (original)
+++ python/branches/tlee-ast-optimize/PC/VS8.0/python.vcproj Sun Jun 1 17:18:10 2008
@@ -62,6 +62,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="odbccp32.lib"
OutputFile="$(OutDir)\python.exe"
SubSystem="1"
StackReserveSize="2000000"
@@ -135,6 +136,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="odbccp32.lib"
OutputFile="$(OutDir)\python.exe"
SubSystem="1"
StackReserveSize="2000000"
@@ -209,6 +211,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="odbccp32.lib"
OutputFile="$(OutDir)\python_d.exe"
SubSystem="1"
StackReserveSize="2000000"
@@ -284,9 +287,10 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="odbccp32.lib"
OutputFile="$(OutDir)\python_d.exe"
SubSystem="1"
- StackReserveSize="2000000"
+ StackReserveSize="2100000"
BaseAddress="0x1d000000"
/>
<Tool
@@ -356,6 +360,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="odbccp32.lib"
OutputFile="$(OutDir)\python.exe"
SubSystem="1"
StackReserveSize="2000000"
@@ -430,6 +435,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="odbccp32.lib"
OutputFile="$(OutDir)\python.exe"
SubSystem="1"
StackReserveSize="2000000"
@@ -504,6 +510,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="odbccp32.lib"
OutputFile="$(OutDir)\python.exe"
SubSystem="1"
StackReserveSize="2000000"
@@ -578,6 +585,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="odbccp32.lib"
OutputFile="$(OutDir)\python.exe"
SubSystem="1"
StackReserveSize="2000000"
Modified: python/branches/tlee-ast-optimize/PC/VS8.0/pythoncore.vcproj
==============================================================================
--- python/branches/tlee-ast-optimize/PC/VS8.0/pythoncore.vcproj (original)
+++ python/branches/tlee-ast-optimize/PC/VS8.0/pythoncore.vcproj Sun Jun 1 17:18:10 2008
@@ -58,8 +58,8 @@
/>
<Tool
Name="VCPreLinkEventTool"
- Description="generate buildinfo"
- CommandLine=""$(SolutionDir)make_buildinfo.exe" $(ConfigurationName)"
+ Description="Generate build information..."
+ CommandLine=""$(SolutionDir)make_buildinfo.exe" Release"
/>
<Tool
Name="VCLinkerTool"
@@ -133,8 +133,8 @@
/>
<Tool
Name="VCPreLinkEventTool"
- Description="generate buildinfo"
- CommandLine="$(SolutionDir)make_buildinfo.exe $(ConfigurationName)"
+ Description="Generate build information..."
+ CommandLine=""$(SolutionDir)make_buildinfo.exe" Release"
/>
<Tool
Name="VCLinkerTool"
@@ -211,8 +211,8 @@
/>
<Tool
Name="VCPreLinkEventTool"
- Description="generate buildinfo"
- CommandLine=""$(SolutionDir)make_buildinfo.exe" $(ConfigurationName)"
+ Description="Generate build information..."
+ CommandLine=""$(SolutionDir)make_buildinfo.exe" Debug"
/>
<Tool
Name="VCLinkerTool"
@@ -289,8 +289,8 @@
/>
<Tool
Name="VCPreLinkEventTool"
- Description="generate buildinfo"
- CommandLine="$(SolutionDir)make_buildinfo.exe $(ConfigurationName)"
+ Description="Generate build information..."
+ CommandLine=""$(SolutionDir)make_buildinfo.exe" Debug"
/>
<Tool
Name="VCLinkerTool"
@@ -363,8 +363,8 @@
/>
<Tool
Name="VCPreLinkEventTool"
- Description="generate buildinfo"
- CommandLine="$(SolutionDir)make_buildinfo.exe Release"
+ Description="Generate build information..."
+ CommandLine=""$(SolutionDir)make_buildinfo.exe" Release"
/>
<Tool
Name="VCLinkerTool"
@@ -438,8 +438,8 @@
/>
<Tool
Name="VCPreLinkEventTool"
- Description="generate buildinfo"
- CommandLine="$(SolutionDir)make_buildinfo.exe $(ConfigurationName)"
+ Description="Generate build information..."
+ CommandLine=""$(SolutionDir)make_buildinfo.exe" Release"
/>
<Tool
Name="VCLinkerTool"
@@ -513,8 +513,8 @@
/>
<Tool
Name="VCPreLinkEventTool"
- Description="generate buildinfo"
- CommandLine="$(SolutionDir)make_buildinfo.exe Release"
+ Description="Generate build information..."
+ CommandLine=""$(SolutionDir)make_buildinfo.exe" Release"
/>
<Tool
Name="VCLinkerTool"
@@ -588,8 +588,8 @@
/>
<Tool
Name="VCPreLinkEventTool"
- Description="generate buildinfo"
- CommandLine="$(SolutionDir)make_buildinfo.exe $(ConfigurationName)"
+ Description="Generate build information..."
+ CommandLine=""$(SolutionDir)make_buildinfo.exe" Release"
/>
<Tool
Name="VCLinkerTool"
@@ -655,11 +655,15 @@
>
</File>
<File
- RelativePath="..\..\Include\bytesobject.h"
+ RelativePath="..\..\Include\bytes_methods.h"
>
</File>
<File
- RelativePath="..\..\Include\bytes_methods.h"
+ RelativePath="..\..\Include\bytearrayobject.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\Include\bytesobject.h"
>
</File>
<File
@@ -871,6 +875,10 @@
>
</File>
<File
+ RelativePath="..\..\Include\pymath.h"
+ >
+ </File>
+ <File
RelativePath="..\..\Include\pymem.h"
>
</File>
@@ -1363,11 +1371,15 @@
>
</File>
<File
- RelativePath="..\..\Objects\bytesobject.c"
+ RelativePath="..\..\Objects\bytes_methods.c"
>
</File>
<File
- RelativePath="..\..\Objects\bytes_methods.c"
+ RelativePath="..\..\Objects\bytearrayobject.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\Objects\bytesobject.c"
>
</File>
<File
@@ -1487,10 +1499,6 @@
>
</File>
<File
- RelativePath="..\..\Objects\stringobject.c"
- >
- </File>
- <File
RelativePath="..\..\Objects\structseq.c"
>
</File>
Modified: python/branches/tlee-ast-optimize/PC/VS8.0/release.vsprops
==============================================================================
--- python/branches/tlee-ast-optimize/PC/VS8.0/release.vsprops (original)
+++ python/branches/tlee-ast-optimize/PC/VS8.0/release.vsprops Sun Jun 1 17:18:10 2008
@@ -8,4 +8,8 @@
Name="VCCLCompilerTool"
PreprocessorDefinitions="NDEBUG"
/>
+ <UserMacro
+ Name="KillPythonExe"
+ Value="$(OutDir)\kill_python.exe"
+ />
</VisualStudioPropertySheet>
Modified: python/branches/tlee-ast-optimize/PC/VS8.0/x64.vsprops
==============================================================================
--- python/branches/tlee-ast-optimize/PC/VS8.0/x64.vsprops (original)
+++ python/branches/tlee-ast-optimize/PC/VS8.0/x64.vsprops Sun Jun 1 17:18:10 2008
@@ -15,4 +15,8 @@
Name="VCLinkerTool"
TargetMachine="17"
/>
+ <UserMacro
+ Name="PythonExe"
+ Value="$(HOST_PYTHON)"
+ />
</VisualStudioPropertySheet>
Modified: python/branches/tlee-ast-optimize/PC/_msi.c
==============================================================================
--- python/branches/tlee-ast-optimize/PC/_msi.c (original)
+++ python/branches/tlee-ast-optimize/PC/_msi.c Sun Jun 1 17:18:10 2008
@@ -35,7 +35,7 @@
return NULL;
}
- oresult = PyString_FromString(cresult);
+ oresult = PyBytes_FromString(cresult);
RpcStringFree(&cresult);
return oresult;
@@ -136,14 +136,14 @@
PyObject *result = PyObject_CallMethod(pv, "getnextcabinet", "i", pccab->iCab);
if (result == NULL)
return -1;
- if (!PyString_Check(result)) {
+ if (!PyBytes_Check(result)) {
PyErr_Format(PyExc_TypeError,
"Incorrect return type %s from getnextcabinet",
result->ob_type->tp_name);
Py_DECREF(result);
return FALSE;
}
- strncpy(pccab->szCab, PyString_AsString(result), sizeof(pccab->szCab));
+ strncpy(pccab->szCab, PyBytes_AsString(result), sizeof(pccab->szCab));
return TRUE;
}
return FALSE;
@@ -507,7 +507,7 @@
PyErr_SetString(PyExc_NotImplementedError, "FILETIME result");
return NULL;
case VT_LPSTR:
- result = PyString_FromStringAndSize(sval, ssize);
+ result = PyBytes_FromStringAndSize(sval, ssize);
if (sval != sbuf)
free(sval);
return result;
@@ -539,9 +539,9 @@
if (!PyArg_ParseTuple(args, "iO:SetProperty", &field, &data))
return NULL;
- if (PyString_Check(data)) {
+ if (PyBytes_Check(data)) {
status = MsiSummaryInfoSetProperty(si->h, field, VT_LPSTR,
- 0, NULL, PyString_AsString(data));
+ 0, NULL, PyBytes_AsString(data));
} else if (PyInt_Check(data)) {
status = MsiSummaryInfoSetProperty(si->h, field, VT_I4,
PyInt_AsLong(data), NULL, NULL);
Modified: python/branches/tlee-ast-optimize/PC/_subprocess.c
==============================================================================
--- python/branches/tlee-ast-optimize/PC/_subprocess.c (original)
+++ python/branches/tlee-ast-optimize/PC/_subprocess.c Sun Jun 1 17:18:10 2008
@@ -304,42 +304,42 @@
if (!keys || !values)
goto error;
- out = PyString_FromStringAndSize(NULL, 2048);
+ out = PyBytes_FromStringAndSize(NULL, 2048);
if (! out)
goto error;
- p = PyString_AS_STRING(out);
+ p = PyBytes_AS_STRING(out);
for (i = 0; i < envsize; i++) {
int ksize, vsize, totalsize;
PyObject* key = PyList_GET_ITEM(keys, i);
PyObject* value = PyList_GET_ITEM(values, i);
- if (! PyString_Check(key) || ! PyString_Check(value)) {
+ if (! PyBytes_Check(key) || ! PyBytes_Check(value)) {
PyErr_SetString(PyExc_TypeError,
"environment can only contain strings");
goto error;
}
- ksize = PyString_GET_SIZE(key);
- vsize = PyString_GET_SIZE(value);
- totalsize = (p - PyString_AS_STRING(out)) + ksize + 1 +
+ ksize = PyBytes_GET_SIZE(key);
+ vsize = PyBytes_GET_SIZE(value);
+ totalsize = (p - PyBytes_AS_STRING(out)) + ksize + 1 +
vsize + 1 + 1;
- if (totalsize > PyString_GET_SIZE(out)) {
- int offset = p - PyString_AS_STRING(out);
- _PyString_Resize(&out, totalsize + 1024);
- p = PyString_AS_STRING(out) + offset;
+ if (totalsize > PyBytes_GET_SIZE(out)) {
+ int offset = p - PyBytes_AS_STRING(out);
+ _PyBytes_Resize(&out, totalsize + 1024);
+ p = PyBytes_AS_STRING(out) + offset;
}
- memcpy(p, PyString_AS_STRING(key), ksize);
+ memcpy(p, PyBytes_AS_STRING(key), ksize);
p += ksize;
*p++ = '=';
- memcpy(p, PyString_AS_STRING(value), vsize);
+ memcpy(p, PyBytes_AS_STRING(value), vsize);
p += vsize;
*p++ = '\0';
}
/* add trailing null byte */
*p++ = '\0';
- _PyString_Resize(&out, p - PyString_AS_STRING(out));
+ _PyBytes_Resize(&out, p - PyBytes_AS_STRING(out));
/* PyObject_Print(out, stdout, 0); */
@@ -413,7 +413,7 @@
NULL,
inherit_handles,
creation_flags,
- environment ? PyString_AS_STRING(environment) : NULL,
+ environment ? PyBytes_AS_STRING(environment) : NULL,
current_directory,
&si,
&pi);
@@ -516,7 +516,7 @@
if (! result)
return PyErr_SetFromWindowsErr(GetLastError());
- return PyString_FromString(filename);
+ return PyBytes_FromString(filename);
}
static PyMethodDef sp_functions[] = {
Modified: python/branches/tlee-ast-optimize/PC/_winreg.c
==============================================================================
--- python/branches/tlee-ast-optimize/PC/_winreg.c (original)
+++ python/branches/tlee-ast-optimize/PC/_winreg.c Sun Jun 1 17:18:10 2008
@@ -424,7 +424,7 @@
PyHKEYObject *pyhkey = (PyHKEYObject *)ob;
char resBuf[160];
wsprintf(resBuf, "<PyHKEY:%p>", pyhkey->hkey);
- return PyString_FromString(resBuf);
+ return PyBytes_FromString(resBuf);
}
static int
@@ -767,11 +767,11 @@
return FALSE;
need_decref = 1;
}
- if (!PyString_Check(value))
+ if (!PyBytes_Check(value))
return FALSE;
*retDataSize = 1 + strlen(
- PyString_AS_STRING(
- (PyStringObject *)value));
+ PyBytes_AS_STRING(
+ (PyBytesObject *)value));
}
*retDataBuf = (BYTE *)PyMem_NEW(DWORD, *retDataSize);
if (*retDataBuf==NULL){
@@ -782,8 +782,8 @@
strcpy((char *)*retDataBuf, "");
else
strcpy((char *)*retDataBuf,
- PyString_AS_STRING(
- (PyStringObject *)value));
+ PyBytes_AS_STRING(
+ (PyBytesObject *)value));
if (need_decref)
Py_DECREF(value);
break;
@@ -808,7 +808,7 @@
PyObject *t;
t = PyList_GET_ITEM(
(PyListObject *)value,j);
- if (PyString_Check(t)) {
+ if (PyBytes_Check(t)) {
obs[j] = t;
Py_INCREF(t);
} else if (PyUnicode_Check(t)) {
@@ -821,8 +821,8 @@
} else
goto reg_multi_fail;
size += 1 + strlen(
- PyString_AS_STRING(
- (PyStringObject *)obs[j]));
+ PyBytes_AS_STRING(
+ (PyBytesObject *)obs[j]));
}
*retDataSize = size + 1;
@@ -839,11 +839,11 @@
PyObject *t;
t = obs[j];
strcpy(P,
- PyString_AS_STRING(
- (PyStringObject *)t));
+ PyBytes_AS_STRING(
+ (PyBytesObject *)t));
P += 1 + strlen(
- PyString_AS_STRING(
- (PyStringObject *)t));
+ PyBytes_AS_STRING(
+ (PyBytesObject *)t));
Py_DECREF(obs[j]);
}
/* And doubly-terminate the list... */
@@ -1085,7 +1085,7 @@
if (rc != ERROR_SUCCESS)
return PyErr_SetFromWindowsErrWithFunction(rc, "RegEnumKeyEx");
- retStr = PyString_FromStringAndSize(tmpbuf, len);
+ retStr = PyBytes_FromStringAndSize(tmpbuf, len);
return retStr; /* can be NULL */
}
@@ -1303,17 +1303,17 @@
!= ERROR_SUCCESS)
return PyErr_SetFromWindowsErrWithFunction(rc,
"RegQueryValue");
- retStr = PyString_FromStringAndSize(NULL, bufSize);
+ retStr = PyBytes_FromStringAndSize(NULL, bufSize);
if (retStr == NULL)
return NULL;
- retBuf = PyString_AS_STRING(retStr);
+ retBuf = PyBytes_AS_STRING(retStr);
if ((rc = RegQueryValue(hKey, subKey, retBuf, &bufSize))
!= ERROR_SUCCESS) {
Py_DECREF(retStr);
return PyErr_SetFromWindowsErrWithFunction(rc,
"RegQueryValue");
}
- _PyString_Resize(&retStr, strlen(retBuf));
+ _PyBytes_Resize(&retStr, strlen(retBuf));
return retStr;
}
@@ -1414,14 +1414,14 @@
return NULL;
}
/* XXX - need Unicode support */
- str = PyString_AsString(obStrVal);
+ str = PyBytes_AsString(obStrVal);
if (str == NULL)
return NULL;
- len = PyString_Size(obStrVal);
+ len = PyBytes_Size(obStrVal);
if (obSubKey == Py_None)
subKey = NULL;
else {
- subKey = PyString_AsString(obSubKey);
+ subKey = PyBytes_AsString(obSubKey);
if (subKey == NULL)
return NULL;
}
Modified: python/branches/tlee-ast-optimize/PC/bdist_wininst/install.c
==============================================================================
--- python/branches/tlee-ast-optimize/PC/bdist_wininst/install.c (original)
+++ python/branches/tlee-ast-optimize/PC/bdist_wininst/install.c Sun Jun 1 17:18:10 2008
@@ -2115,11 +2115,6 @@
{
HKEY hk;
char key_name[80];
- OSVERSIONINFO winverinfo;
- winverinfo.dwOSVersionInfoSize = sizeof(winverinfo);
- // If less than XP, then we can't do it (and its not necessary).
- if (!GetVersionEx(&winverinfo) || winverinfo.dwMajorVersion < 5)
- return FALSE;
// no Python version info == we can't know yet.
if (target_version[0] == '\0')
return FALSE;
@@ -2135,6 +2130,23 @@
return TRUE;
}
+// Returns TRUE if the platform supports UAC.
+BOOL PlatformSupportsUAC()
+{
+ // Note that win2k does seem to support ShellExecute with 'runas',
+ // but does *not* support IsUserAnAdmin - so we just pretend things
+ // only work on XP and later.
+ BOOL bIsWindowsXPorLater;
+ OSVERSIONINFO winverinfo;
+ winverinfo.dwOSVersionInfoSize = sizeof(winverinfo);
+ if (!GetVersionEx(&winverinfo))
+ return FALSE; // something bad has gone wrong
+ bIsWindowsXPorLater =
+ ( (winverinfo.dwMajorVersion > 5) ||
+ ( (winverinfo.dwMajorVersion == 5) && (winverinfo.dwMinorVersion >= 1) ));
+ return bIsWindowsXPorLater;
+}
+
// Spawn ourself as an elevated application. On failure, a message is
// displayed to the user - but this app will always terminate, even
// on error.
@@ -2190,7 +2202,7 @@
// See if we need to do the Vista UAC magic.
if (strcmp(user_access_control, "force")==0) {
- if (!MyIsUserAnAdmin()) {
+ if (PlatformSupportsUAC() && !MyIsUserAnAdmin()) {
SpawnUAC();
return 0;
}
@@ -2198,7 +2210,7 @@
} else if (strcmp(user_access_control, "auto")==0) {
// Check if it looks like we need UAC control, based
// on how Python itself was installed.
- if (!MyIsUserAnAdmin() && NeedAutoUAC()) {
+ if (PlatformSupportsUAC() && !MyIsUserAnAdmin() && NeedAutoUAC()) {
SpawnUAC();
return 0;
}
Modified: python/branches/tlee-ast-optimize/PC/msvcrtmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/PC/msvcrtmodule.c (original)
+++ python/branches/tlee-ast-optimize/PC/msvcrtmodule.c Sun Jun 1 17:18:10 2008
@@ -140,7 +140,7 @@
ch = _getch();
Py_END_ALLOW_THREADS
s[0] = ch;
- return PyString_FromStringAndSize(s, 1);
+ return PyBytes_FromStringAndSize(s, 1);
}
static PyObject *
@@ -172,7 +172,7 @@
ch = _getche();
Py_END_ALLOW_THREADS
s[0] = ch;
- return PyString_FromStringAndSize(s, 1);
+ return PyBytes_FromStringAndSize(s, 1);
}
static PyObject *
Modified: python/branches/tlee-ast-optimize/PC/winsound.c
==============================================================================
--- python/branches/tlee-ast-optimize/PC/winsound.c (original)
+++ python/branches/tlee-ast-optimize/PC/winsound.c Sun Jun 1 17:18:10 2008
@@ -151,7 +151,7 @@
static void
add_define(PyObject *dict, const char *key, long value)
{
- PyObject *k=PyString_FromString(key);
+ PyObject *k=PyBytes_FromString(key);
PyObject *v=PyLong_FromLong(value);
if(v&&k)
{
Modified: python/branches/tlee-ast-optimize/PCbuild/pythoncore.vcproj
==============================================================================
--- python/branches/tlee-ast-optimize/PCbuild/pythoncore.vcproj (original)
+++ python/branches/tlee-ast-optimize/PCbuild/pythoncore.vcproj Sun Jun 1 17:18:10 2008
@@ -659,6 +659,10 @@
>
</File>
<File
+ RelativePath="..\Include\bytearrayobject.h"
+ >
+ </File>
+ <File
RelativePath="..\Include\bytesobject.h"
>
</File>
@@ -1371,6 +1375,10 @@
>
</File>
<File
+ RelativePath="..\Objects\bytearrayobject.c"
+ >
+ </File>
+ <File
RelativePath="..\Objects\bytesobject.c"
>
</File>
@@ -1491,10 +1499,6 @@
>
</File>
<File
- RelativePath="..\Objects\stringobject.c"
- >
- </File>
- <File
RelativePath="..\Objects\structseq.c"
>
</File>
Modified: python/branches/tlee-ast-optimize/Parser/asdl_c.py
==============================================================================
--- python/branches/tlee-ast-optimize/Parser/asdl_c.py (original)
+++ python/branches/tlee-ast-optimize/Parser/asdl_c.py Sun Jun 1 17:18:10 2008
@@ -375,7 +375,7 @@
# there's really nothing more we can do if this fails ...
self.emit("if (tmp == NULL) goto failed;", 1)
error = "expected some sort of %s, but got %%.400s" % name
- format = "PyErr_Format(PyExc_TypeError, \"%s\", PyString_AS_STRING(tmp));"
+ format = "PyErr_Format(PyExc_TypeError, \"%s\", PyBytes_AS_STRING(tmp));"
self.emit(format % error, 1, reflow=False)
self.emit("failed:", 0)
self.emit("Py_XDECREF(tmp);", 1)
@@ -710,7 +710,7 @@
fnames = PyTuple_New(num_fields);
if (!fnames) return NULL;
for (i = 0; i < num_fields; i++) {
- PyObject *field = PyString_FromString(fields[i]);
+ PyObject *field = PyBytes_FromString(fields[i]);
if (!field) {
Py_DECREF(fnames);
return NULL;
@@ -729,7 +729,7 @@
PyObject *s, *l = PyTuple_New(num_fields);
if (!l) return 0;
for(i = 0; i < num_fields; i++) {
- s = PyString_FromString(attrs[i]);
+ s = PyBytes_FromString(attrs[i]);
if (!s) {
Py_DECREF(l);
return 0;
@@ -803,7 +803,7 @@
PyObject *s = PyObject_Repr(obj);
if (s == NULL) return 1;
PyErr_Format(PyExc_ValueError, "invalid integer value: %.400s",
- PyString_AS_STRING(s));
+ PyBytes_AS_STRING(s));
Py_DECREF(s);
return 1;
}
@@ -821,7 +821,7 @@
PyObject *s = PyObject_Repr(obj);
if (s == NULL) return 1;
PyErr_Format(PyExc_ValueError, "invalid boolean value: %.400s",
- PyString_AS_STRING(s));
+ PyBytes_AS_STRING(s));
Py_DECREF(s);
return 1;
}
Modified: python/branches/tlee-ast-optimize/Parser/tokenizer.c
==============================================================================
--- python/branches/tlee-ast-optimize/Parser/tokenizer.c (original)
+++ python/branches/tlee-ast-optimize/Parser/tokenizer.c Sun Jun 1 17:18:10 2008
@@ -12,7 +12,7 @@
#ifndef PGEN
#include "unicodeobject.h"
-#include "stringobject.h"
+#include "bytesobject.h"
#include "fileobject.h"
#include "codecs.h"
#include "abstract.h"
@@ -344,7 +344,7 @@
1) NULL: need to call tok->decoding_readline to get a new line
2) PyUnicodeObject *: decoding_feof has called tok->decoding_readline and
stored the result in tok->decoding_buffer
- 3) PyStringObject *: previous call to fp_readl did not have enough room
+ 3) PyBytesObject *: previous call to fp_readl did not have enough room
(in the s buffer) to copy entire contents of the line read
by tok->decoding_readline. tok->decoding_buffer has the overflow.
In this case, fp_readl is called in a loop (with an expanded buffer)
@@ -375,7 +375,7 @@
return error_ret(tok);
} else {
tok->decoding_buffer = NULL;
- if (PyString_CheckExact(buf))
+ if (PyBytes_CheckExact(buf))
utf8 = buf;
}
if (utf8 == NULL) {
@@ -384,10 +384,10 @@
if (utf8 == NULL)
return error_ret(tok);
}
- str = PyString_AsString(utf8);
- utf8len = PyString_GET_SIZE(utf8);
+ str = PyBytes_AsString(utf8);
+ utf8len = PyBytes_GET_SIZE(utf8);
if (utf8len > size) {
- tok->decoding_buffer = PyString_FromStringAndSize(str+size, utf8len-size);
+ tok->decoding_buffer = PyBytes_FromStringAndSize(str+size, utf8len-size);
if (tok->decoding_buffer == NULL) {
Py_DECREF(utf8);
return error_ret(tok);
@@ -591,7 +591,7 @@
utf8 = translate_into_utf8(str, tok->enc);
if (utf8 == NULL)
return error_ret(tok);
- str = PyString_AsString(utf8);
+ str = PyBytes_AsString(utf8);
}
#endif
for (s = str;; s++) {
@@ -624,7 +624,7 @@
"unknown encoding: %s", tok->enc);
return error_ret(tok);
}
- str = PyString_AsString(utf8);
+ str = PyBytes_AsString(utf8);
}
#endif
assert(tok->decoding_buffer == NULL);
@@ -706,11 +706,11 @@
return 0;
enc = ((PyFileObject *)sysstdin)->f_encoding;
- if (enc == NULL || !PyString_Check(enc))
+ if (enc == NULL || !PyBytes_Check(enc))
return 0;
Py_INCREF(enc);
- encoding = PyString_AsString(enc);
+ encoding = PyBytes_AsString(enc);
decoded = PyUnicode_Decode(*inp, strlen(*inp), encoding, NULL);
if (decoded == NULL)
goto error_clear;
@@ -720,9 +720,9 @@
if (utf8 == NULL)
goto error_clear;
- assert(PyString_Check(utf8));
- converted = new_string(PyString_AS_STRING(utf8),
- PyString_GET_SIZE(utf8));
+ assert(PyBytes_Check(utf8));
+ converted = new_string(PyBytes_AS_STRING(utf8),
+ PyBytes_GET_SIZE(utf8));
Py_DECREF(utf8);
if (converted == NULL)
goto error_nomem;
@@ -1609,8 +1609,8 @@
/* convert source to original encondig */
PyObject *lineobj = dec_utf8(tok->encoding, tok->buf, len);
if (lineobj != NULL) {
- int linelen = PyString_Size(lineobj);
- const char *line = PyString_AsString(lineobj);
+ int linelen = PyBytes_Size(lineobj);
+ const char *line = PyBytes_AsString(lineobj);
text = PyObject_MALLOC(linelen + 1);
if (text != NULL && line != NULL) {
if (linelen)
@@ -1624,7 +1624,7 @@
PyObject *offsetobj = dec_utf8(tok->encoding,
tok->buf, *offset-1);
if (offsetobj) {
- *offset = PyString_Size(offsetobj) + 1;
+ *offset = PyBytes_Size(offsetobj) + 1;
Py_DECREF(offsetobj);
}
}
Modified: python/branches/tlee-ast-optimize/Python/Python-ast.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/Python-ast.c (original)
+++ python/branches/tlee-ast-optimize/Python/Python-ast.c Sun Jun 1 17:18:10 2008
@@ -499,7 +499,7 @@
fnames = PyTuple_New(num_fields);
if (!fnames) return NULL;
for (i = 0; i < num_fields; i++) {
- PyObject *field = PyString_FromString(fields[i]);
+ PyObject *field = PyBytes_FromString(fields[i]);
if (!field) {
Py_DECREF(fnames);
return NULL;
@@ -518,7 +518,7 @@
PyObject *s, *l = PyTuple_New(num_fields);
if (!l) return 0;
for(i = 0; i < num_fields; i++) {
- s = PyString_FromString(attrs[i]);
+ s = PyBytes_FromString(attrs[i]);
if (!s) {
Py_DECREF(l);
return 0;
@@ -592,7 +592,7 @@
PyObject *s = PyObject_Repr(obj);
if (s == NULL) return 1;
PyErr_Format(PyExc_ValueError, "invalid integer value: %.400s",
- PyString_AS_STRING(s));
+ PyBytes_AS_STRING(s));
Py_DECREF(s);
return 1;
}
@@ -610,7 +610,7 @@
PyObject *s = PyObject_Repr(obj);
if (s == NULL) return 1;
PyErr_Format(PyExc_ValueError, "invalid boolean value: %.400s",
- PyString_AS_STRING(s));
+ PyBytes_AS_STRING(s));
Py_DECREF(s);
return 1;
}
@@ -3320,7 +3320,7 @@
tmp = PyObject_Repr(obj);
if (tmp == NULL) goto failed;
- PyErr_Format(PyExc_TypeError, "expected some sort of mod, but got %.400s", PyString_AS_STRING(tmp));
+ PyErr_Format(PyExc_TypeError, "expected some sort of mod, but got %.400s", PyBytes_AS_STRING(tmp));
failed:
Py_XDECREF(tmp);
return 1;
@@ -4448,7 +4448,7 @@
tmp = PyObject_Repr(obj);
if (tmp == NULL) goto failed;
- PyErr_Format(PyExc_TypeError, "expected some sort of stmt, but got %.400s", PyString_AS_STRING(tmp));
+ PyErr_Format(PyExc_TypeError, "expected some sort of stmt, but got %.400s", PyBytes_AS_STRING(tmp));
failed:
Py_XDECREF(tmp);
return 1;
@@ -5318,7 +5318,7 @@
tmp = PyObject_Repr(obj);
if (tmp == NULL) goto failed;
- PyErr_Format(PyExc_TypeError, "expected some sort of expr, but got %.400s", PyString_AS_STRING(tmp));
+ PyErr_Format(PyExc_TypeError, "expected some sort of expr, but got %.400s", PyBytes_AS_STRING(tmp));
failed:
Py_XDECREF(tmp);
return 1;
@@ -5356,7 +5356,7 @@
tmp = PyObject_Repr(obj);
if (tmp == NULL) goto failed;
- PyErr_Format(PyExc_TypeError, "expected some sort of expr_context, but got %.400s", PyString_AS_STRING(tmp));
+ PyErr_Format(PyExc_TypeError, "expected some sort of expr_context, but got %.400s", PyBytes_AS_STRING(tmp));
failed:
Py_XDECREF(tmp);
return 1;
@@ -5474,7 +5474,7 @@
tmp = PyObject_Repr(obj);
if (tmp == NULL) goto failed;
- PyErr_Format(PyExc_TypeError, "expected some sort of slice, but got %.400s", PyString_AS_STRING(tmp));
+ PyErr_Format(PyExc_TypeError, "expected some sort of slice, but got %.400s", PyBytes_AS_STRING(tmp));
failed:
Py_XDECREF(tmp);
return 1;
@@ -5496,7 +5496,7 @@
tmp = PyObject_Repr(obj);
if (tmp == NULL) goto failed;
- PyErr_Format(PyExc_TypeError, "expected some sort of boolop, but got %.400s", PyString_AS_STRING(tmp));
+ PyErr_Format(PyExc_TypeError, "expected some sort of boolop, but got %.400s", PyBytes_AS_STRING(tmp));
failed:
Py_XDECREF(tmp);
return 1;
@@ -5558,7 +5558,7 @@
tmp = PyObject_Repr(obj);
if (tmp == NULL) goto failed;
- PyErr_Format(PyExc_TypeError, "expected some sort of operator, but got %.400s", PyString_AS_STRING(tmp));
+ PyErr_Format(PyExc_TypeError, "expected some sort of operator, but got %.400s", PyBytes_AS_STRING(tmp));
failed:
Py_XDECREF(tmp);
return 1;
@@ -5588,7 +5588,7 @@
tmp = PyObject_Repr(obj);
if (tmp == NULL) goto failed;
- PyErr_Format(PyExc_TypeError, "expected some sort of unaryop, but got %.400s", PyString_AS_STRING(tmp));
+ PyErr_Format(PyExc_TypeError, "expected some sort of unaryop, but got %.400s", PyBytes_AS_STRING(tmp));
failed:
Py_XDECREF(tmp);
return 1;
@@ -5642,7 +5642,7 @@
tmp = PyObject_Repr(obj);
if (tmp == NULL) goto failed;
- PyErr_Format(PyExc_TypeError, "expected some sort of cmpop, but got %.400s", PyString_AS_STRING(tmp));
+ PyErr_Format(PyExc_TypeError, "expected some sort of cmpop, but got %.400s", PyBytes_AS_STRING(tmp));
failed:
Py_XDECREF(tmp);
return 1;
@@ -5808,7 +5808,7 @@
tmp = PyObject_Repr(obj);
if (tmp == NULL) goto failed;
- PyErr_Format(PyExc_TypeError, "expected some sort of excepthandler, but got %.400s", PyString_AS_STRING(tmp));
+ PyErr_Format(PyExc_TypeError, "expected some sort of excepthandler, but got %.400s", PyBytes_AS_STRING(tmp));
failed:
Py_XDECREF(tmp);
return 1;
Modified: python/branches/tlee-ast-optimize/Python/_warnings.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/_warnings.c (original)
+++ python/branches/tlee-ast-optimize/Python/_warnings.c Sun Jun 1 17:18:10 2008
@@ -44,7 +44,7 @@
int result;
if (warnings_str == NULL) {
- warnings_str = PyString_InternFromString("warnings");
+ warnings_str = PyBytes_InternFromString("warnings");
if (warnings_str == NULL)
return NULL;
}
@@ -132,7 +132,7 @@
return NULL;
if (good_msg && is_subclass && good_mod && (ln == 0 || lineno == ln))
- return PyString_AsString(action);
+ return PyBytes_AsString(action);
}
m = PyImport_ImportModule(MODULE_NAME);
@@ -144,7 +144,7 @@
return NULL;
action = PyDict_GetItemString(d, DEFAULT_ACTION_NAME);
if (action != NULL)
- return PyString_AsString(action);
+ return PyBytes_AsString(action);
PyErr_SetString(PyExc_ValueError,
MODULE_NAME "." DEFAULT_ACTION_NAME " not found");
@@ -184,17 +184,17 @@
if (rc == -1)
return NULL;
else if (rc == 0)
- return PyString_FromString("<unknown>");
+ return PyBytes_FromString("<unknown>");
- mod_str = PyString_AsString(filename);
+ mod_str = PyBytes_AsString(filename);
if (mod_str == NULL)
return NULL;
- len = PyString_Size(filename);
+ len = PyBytes_Size(filename);
if (len < 0)
return NULL;
if (len >= 3 &&
strncmp(mod_str + (len - 3), ".py", 3) == 0) {
- module = PyString_FromStringAndSize(mod_str, len-3);
+ module = PyBytes_FromStringAndSize(mod_str, len-3);
}
else {
module = filename;
@@ -258,7 +258,7 @@
/* Print " source_line\n" */
PyFile_WriteString(" ", f_stderr);
if (sourceline) {
- char *source_line_str = PyString_AS_STRING(sourceline);
+ char *source_line_str = PyBytes_AS_STRING(sourceline);
while (*source_line_str == ' ' || *source_line_str == '\t' ||
*source_line_str == '\014')
source_line_str++;
@@ -267,7 +267,7 @@
PyFile_WriteString("\n", f_stderr);
}
else
- Py_DisplaySourceLine(f_stderr, PyString_AS_STRING(filename), lineno);
+ Py_DisplaySourceLine(f_stderr, PyBytes_AS_STRING(filename), lineno);
PyErr_Clear();
}
@@ -359,7 +359,7 @@
const char *err_str = "???";
if (to_str != NULL)
- err_str = PyString_AS_STRING(to_str);
+ err_str = PyBytes_AS_STRING(to_str);
PyErr_Format(PyExc_RuntimeError,
"Unrecognized action (%s) in warnings.filters:\n %s",
action, err_str);
@@ -380,7 +380,7 @@
else {
const char *msg = "functions overriding warnings.showwarning() "
"must support the 'line' argument";
- const char *text_char = PyString_AS_STRING(text);
+ const char *text_char = PyBytes_AS_STRING(text);
if (strcmp(msg, text_char) == 0) {
/* Prevent infinite recursion by using built-in implementation
@@ -484,7 +484,7 @@
/* Setup module. */
*module = PyDict_GetItemString(globals, "__name__");
if (*module == NULL) {
- *module = PyString_FromString("<string>");
+ *module = PyBytes_FromString("<string>");
if (*module == NULL)
goto handle_error;
}
@@ -494,8 +494,8 @@
/* Setup filename. */
*filename = PyDict_GetItemString(globals, "__file__");
if (*filename != NULL) {
- Py_ssize_t len = PyString_Size(*filename);
- const char *file_str = PyString_AsString(*filename);
+ Py_ssize_t len = PyBytes_Size(*filename);
+ const char *file_str = PyBytes_AsString(*filename);
if (file_str == NULL || (len < 0 && PyErr_Occurred()))
goto handle_error;
@@ -507,7 +507,7 @@
(tolower(file_str[len-1]) == 'c' ||
tolower(file_str[len-1]) == 'o'))
{
- *filename = PyString_FromStringAndSize(file_str, len-1);
+ *filename = PyBytes_FromStringAndSize(file_str, len-1);
if (*filename == NULL)
goto handle_error;
}
@@ -515,7 +515,7 @@
Py_INCREF(*filename);
}
else {
- const char *module_str = PyString_AsString(*module);
+ const char *module_str = PyBytes_AsString(*module);
if (module_str && strcmp(module_str, "__main__") == 0) {
PyObject *argv = PySys_GetObject("argv");
if (argv != NULL && PyList_Size(argv) > 0) {
@@ -530,14 +530,14 @@
}
else if (!is_true) {
Py_DECREF(*filename);
- *filename = PyString_FromString("__main__");
+ *filename = PyBytes_FromString("__main__");
if (*filename == NULL)
goto handle_error;
}
}
else {
/* embedded interpreters don't have sys.argv, see bug #839151 */
- *filename = PyString_FromString("__main__");
+ *filename = PyBytes_FromString("__main__");
if (*filename == NULL)
goto handle_error;
}
@@ -649,12 +649,12 @@
PyObject *returned;
if (get_source_name == NULL) {
- get_source_name = PyString_InternFromString("get_source");
+ get_source_name = PyBytes_InternFromString("get_source");
if (!get_source_name)
return NULL;
}
if (splitlines_name == NULL) {
- splitlines_name = PyString_InternFromString("splitlines");
+ splitlines_name = PyBytes_InternFromString("splitlines");
if (!splitlines_name)
return NULL;
}
@@ -711,7 +711,7 @@
PyErr_WarnEx(PyObject *category, const char *text, Py_ssize_t stack_level)
{
PyObject *res;
- PyObject *message = PyString_FromString(text);
+ PyObject *message = PyBytes_FromString(text);
if (message == NULL)
return -1;
@@ -745,15 +745,15 @@
const char *module_str, PyObject *registry)
{
PyObject *res;
- PyObject *message = PyString_FromString(text);
- PyObject *filename = PyString_FromString(filename_str);
+ PyObject *message = PyBytes_FromString(text);
+ PyObject *filename = PyBytes_FromString(filename_str);
PyObject *module = NULL;
int ret = -1;
if (message == NULL || filename == NULL)
goto exit;
if (module_str != NULL) {
- module = PyString_FromString(module_str);
+ module = PyBytes_FromString(module_str);
if (module == NULL)
goto exit;
}
@@ -775,15 +775,6 @@
}
-int
-PyErr_WarnPy3k(const char *text, Py_ssize_t stacklevel)
-{
- if (Py_Py3kWarningFlag)
- return PyErr_WarnEx(PyExc_DeprecationWarning, text, stacklevel);
- return 0;
-}
-
-
PyDoc_STRVAR(warn_doc,
"Issue a warning, or maybe ignore it or raise an exception.");
@@ -812,7 +803,7 @@
if (!strcmp(action, "ignore")) {
if (ignore_str == NULL) {
- ignore_str = PyString_InternFromString("ignore");
+ ignore_str = PyBytes_InternFromString("ignore");
if (ignore_str == NULL)
return NULL;
}
@@ -820,7 +811,7 @@
}
else if (!strcmp(action, "error")) {
if (error_str == NULL) {
- error_str = PyString_InternFromString("error");
+ error_str = PyBytes_InternFromString("error");
if (error_str == NULL)
return NULL;
}
@@ -828,7 +819,7 @@
}
else if (!strcmp(action, "default")) {
if (default_str == NULL) {
- default_str = PyString_InternFromString("default");
+ default_str = PyBytes_InternFromString("default");
if (default_str == NULL)
return NULL;
}
@@ -901,7 +892,7 @@
if (PyModule_AddObject(m, "once_registry", _once_registry) < 0)
return;
- default_action = PyString_InternFromString("default");
+ default_action = PyBytes_InternFromString("default");
if (default_action == NULL)
return;
if (PyModule_AddObject(m, DEFAULT_ACTION_NAME, default_action) < 0)
Modified: python/branches/tlee-ast-optimize/Python/ast.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/ast.c (original)
+++ python/branches/tlee-ast-optimize/Python/ast.c Sun Jun 1 17:18:10 2008
@@ -46,7 +46,7 @@
static identifier
new_identifier(const char* n, PyArena *arena) {
- PyObject* id = PyString_InternFromString(n);
+ PyObject* id = PyBytes_InternFromString(n);
PyArena_AddPyObject(arena, id);
return id;
}
@@ -352,7 +352,7 @@
switch (e->kind) {
case Attribute_kind:
if (ctx == Store &&
- !strcmp(PyString_AS_STRING(e->v.Attribute.attr), "None")) {
+ !strcmp(PyBytes_AS_STRING(e->v.Attribute.attr), "None")) {
return ast_error(n, "assignment to None");
}
e->v.Attribute.ctx = ctx;
@@ -362,7 +362,7 @@
break;
case Name_kind:
if (ctx == Store &&
- !strcmp(PyString_AS_STRING(e->v.Name.id), "None")) {
+ !strcmp(PyBytes_AS_STRING(e->v.Name.id), "None")) {
return ast_error(n, "assignment to None");
}
e->v.Name.ctx = ctx;
@@ -1276,7 +1276,7 @@
if (errstr) {
char *s = "";
char buf[128];
- s = PyString_AsString(errstr);
+ s = PyBytes_AsString(errstr);
PyOS_snprintf(buf, sizeof(buf), "(unicode error) %s", s);
ast_error(n, buf);
} else {
@@ -1921,7 +1921,7 @@
return NULL;
}
key = e->v.Name.id;
- if (!strcmp(PyString_AS_STRING(key), "None")) {
+ if (!strcmp(PyBytes_AS_STRING(key), "None")) {
ast_error(CHILD(ch, 0), "assignment to None");
return NULL;
}
@@ -2050,7 +2050,7 @@
"expression not possible");
return NULL;
case Name_kind: {
- const char *var_name = PyString_AS_STRING(expr1->v.Name.id);
+ const char *var_name = PyBytes_AS_STRING(expr1->v.Name.id);
if (var_name[0] == 'N' && !strcmp(var_name, "None")) {
ast_error(ch, "assignment to None");
return NULL;
@@ -2326,10 +2326,10 @@
/* length of string plus one for the dot */
len += strlen(STR(CHILD(n, i))) + 1;
len--; /* the last name doesn't have a dot */
- str = PyString_FromStringAndSize(NULL, len);
+ str = PyBytes_FromStringAndSize(NULL, len);
if (!str)
return NULL;
- s = PyString_AS_STRING(str);
+ s = PyBytes_AS_STRING(str);
if (!s)
return NULL;
for (i = 0; i < NCH(n); i += 2) {
@@ -2340,13 +2340,13 @@
}
--s;
*s = '\0';
- PyString_InternInPlace(&str);
+ PyBytes_InternInPlace(&str);
PyArena_AddPyObject(c->c_arena, str);
return alias(str, NULL, c->c_arena);
}
break;
case STAR:
- str = PyString_InternFromString("*");
+ str = PyBytes_InternFromString("*");
PyArena_AddPyObject(c->c_arena, str);
return alias(str, NULL, c->c_arena);
default:
@@ -3196,10 +3196,10 @@
u = NULL;
} else {
/* "\XX" may become "\u005c\uHHLL" (12 bytes) */
- u = PyString_FromStringAndSize((char *)NULL, len * 4);
+ u = PyBytes_FromStringAndSize((char *)NULL, len * 4);
if (u == NULL)
return NULL;
- p = buf = PyString_AsString(u);
+ p = buf = PyBytes_AsString(u);
end = s + len;
while (s < end) {
if (*s == '\\') {
@@ -3218,8 +3218,8 @@
Py_DECREF(u);
return NULL;
}
- r = PyString_AsString(w);
- rn = PyString_Size(w);
+ r = PyBytes_AsString(w);
+ rn = PyBytes_Size(w);
assert(rn % 2 == 0);
for (i = 0; i < rn; i += 2) {
sprintf(p, "\\u%02x%02x",
@@ -3318,11 +3318,11 @@
return v;
#endif
} else {
- return PyString_FromStringAndSize(s, len);
+ return PyBytes_FromStringAndSize(s, len);
}
}
- return PyString_DecodeEscape(s, len, NULL, unicode,
+ return PyBytes_DecodeEscape(s, len, NULL, unicode,
need_encoding ? c->c_encoding : NULL);
}
@@ -3343,8 +3343,8 @@
s = parsestr(c, STR(CHILD(n, i)));
if (s == NULL)
goto onError;
- if (PyString_Check(v) && PyString_Check(s)) {
- PyString_ConcatAndDel(&v, s);
+ if (PyBytes_Check(v) && PyBytes_Check(s)) {
+ PyBytes_ConcatAndDel(&v, s);
if (v == NULL)
goto onError;
}
Modified: python/branches/tlee-ast-optimize/Python/bltinmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/bltinmodule.c (original)
+++ python/branches/tlee-ast-optimize/Python/bltinmodule.c Sun Jun 1 17:18:10 2008
@@ -249,7 +249,7 @@
return NULL;
/* Strings and tuples return a result of the same type. */
- if (PyString_Check(seq))
+ if (PyBytes_Check(seq))
return filterstring(func, seq);
#ifdef Py_USING_UNICODE
if (PyUnicode_Check(seq))
@@ -383,7 +383,7 @@
return NULL;
}
s[0] = (char)x;
- return PyString_FromStringAndSize(s, 1);
+ return PyBytes_FromStringAndSize(s, 1);
}
PyDoc_STRVAR(chr_doc,
@@ -671,7 +671,7 @@
return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
}
- if (!PyString_Check(cmd) &&
+ if (!PyBytes_Check(cmd) &&
!PyUnicode_Check(cmd)) {
PyErr_SetString(PyExc_TypeError,
"eval() arg 1 must be a string or code object");
@@ -688,7 +688,7 @@
cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
}
#endif
- if (PyString_AsStringAndSize(cmd, &str, NULL)) {
+ if (PyBytes_AsStringAndSize(cmd, &str, NULL)) {
Py_XDECREF(tmp);
return NULL;
}
@@ -833,7 +833,7 @@
}
#endif
- if (!PyString_Check(name)) {
+ if (!PyBytes_Check(name)) {
PyErr_SetString(PyExc_TypeError,
"getattr(): attribute name must be string");
return NULL;
@@ -889,7 +889,7 @@
}
#endif
- if (!PyString_Check(name)) {
+ if (!PyBytes_Check(name)) {
PyErr_SetString(PyExc_TypeError,
"hasattr(): attribute name must be string");
return NULL;
@@ -1208,7 +1208,7 @@
return NULL;
}
res = (*nb->nb_hex)(v);
- if (res && !PyString_Check(res)) {
+ if (res && !PyBytes_Check(res)) {
PyErr_Format(PyExc_TypeError,
"__hex__ returned non-string (type %.200s)",
res->ob_type->tp_name);
@@ -1268,13 +1268,13 @@
PyObject *s;
if (!PyArg_ParseTuple(args, "S:intern", &s))
return NULL;
- if (!PyString_CheckExact(s)) {
+ if (!PyBytes_CheckExact(s)) {
PyErr_SetString(PyExc_TypeError,
"can't intern subclass of string");
return NULL;
}
Py_INCREF(s);
- PyString_InternInPlace(&s);
+ PyBytes_InternInPlace(&s);
return s;
}
@@ -1476,7 +1476,7 @@
return NULL;
}
res = (*nb->nb_oct)(v);
- if (res && !PyString_Check(res)) {
+ if (res && !PyBytes_Check(res)) {
PyErr_Format(PyExc_TypeError,
"__oct__ returned non-string (type %.200s)",
res->ob_type->tp_name);
@@ -1511,16 +1511,16 @@
long ord;
Py_ssize_t size;
- if (PyString_Check(obj)) {
- size = PyString_GET_SIZE(obj);
+ if (PyBytes_Check(obj)) {
+ size = PyBytes_GET_SIZE(obj);
if (size == 1) {
- ord = (long)((unsigned char)*PyString_AS_STRING(obj));
+ ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
return PyInt_FromLong(ord);
}
- } else if (PyBytes_Check(obj)) {
- size = PyBytes_GET_SIZE(obj);
+ } else if (PyByteArray_Check(obj)) {
+ size = PyByteArray_GET_SIZE(obj);
if (size == 1) {
- ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
+ ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
return PyInt_FromLong(ord);
}
@@ -1591,14 +1591,14 @@
Py_RETURN_NONE;
}
- if (sep && sep != Py_None && !PyString_Check(sep) &&
+ if (sep && sep != Py_None && !PyBytes_Check(sep) &&
!PyUnicode_Check(sep)) {
PyErr_Format(PyExc_TypeError,
"sep must be None, str or unicode, not %.200s",
sep->ob_type->tp_name);
return NULL;
}
- if (end && end != Py_None && !PyString_Check(end) &&
+ if (end && end != Py_None && !PyBytes_Check(end) &&
!PyUnicode_Check(end)) {
PyErr_Format(PyExc_TypeError,
"end must be None, str or unicode, not %.200s",
@@ -1967,7 +1967,7 @@
po = PyObject_Str(v);
if (po == NULL)
return NULL;
- prompt = PyString_AsString(po);
+ prompt = PyBytes_AsString(po);
if (prompt == NULL)
return NULL;
}
@@ -1995,7 +1995,7 @@
result = NULL;
}
else {
- result = PyString_FromStringAndSize(s, len-1);
+ result = PyBytes_FromStringAndSize(s, len-1);
}
}
PyMem_FREE(s);
@@ -2324,14 +2324,14 @@
return PyFloat_FromDouble(f_result);
}
if (PyFloat_CheckExact(item)) {
- PyFPE_START_PROTECT("add", return 0)
+ PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
f_result += PyFloat_AS_DOUBLE(item);
PyFPE_END_PROTECT(f_result)
Py_DECREF(item);
continue;
}
if (PyInt_CheckExact(item)) {
- PyFPE_START_PROTECT("add", return 0)
+ PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
f_result += (double)PyInt_AS_LONG(item);
PyFPE_END_PROTECT(f_result)
Py_DECREF(item);
@@ -2637,8 +2637,8 @@
SETBUILTIN("basestring", &PyBaseString_Type);
SETBUILTIN("bool", &PyBool_Type);
/* SETBUILTIN("memoryview", &PyMemoryView_Type); */
- SETBUILTIN("bytearray", &PyBytes_Type);
- SETBUILTIN("bytes", &PyString_Type);
+ SETBUILTIN("bytearray", &PyByteArray_Type);
+ SETBUILTIN("bytes", &PyBytes_Type);
SETBUILTIN("buffer", &PyBuffer_Type);
SETBUILTIN("classmethod", &PyClassMethod_Type);
#ifndef WITHOUT_COMPLEX
@@ -2658,7 +2658,7 @@
SETBUILTIN("set", &PySet_Type);
SETBUILTIN("slice", &PySlice_Type);
SETBUILTIN("staticmethod", &PyStaticMethod_Type);
- SETBUILTIN("str", &PyString_Type);
+ SETBUILTIN("str", &PyBytes_Type);
SETBUILTIN("super", &PySuper_Type);
SETBUILTIN("tuple", &PyTuple_Type);
SETBUILTIN("type", &PyType_Type);
@@ -2756,7 +2756,7 @@
{
PyObject *result;
Py_ssize_t i, j;
- Py_ssize_t len = PyString_Size(strobj);
+ Py_ssize_t len = PyBytes_Size(strobj);
Py_ssize_t outlen = len;
if (func == Py_None) {
@@ -2764,12 +2764,12 @@
* as no character is ever false and __getitem__
* does return this character. If it's a subclass
* we must go through the __getitem__ loop */
- if (PyString_CheckExact(strobj)) {
+ if (PyBytes_CheckExact(strobj)) {
Py_INCREF(strobj);
return strobj;
}
}
- if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
+ if ((result = PyBytes_FromStringAndSize(NULL, len)) == NULL)
return NULL;
for (i = j = 0; i < len; ++i) {
@@ -2799,16 +2799,16 @@
}
if (ok) {
Py_ssize_t reslen;
- if (!PyString_Check(item)) {
+ if (!PyBytes_Check(item)) {
PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
" __getitem__ returned different type");
Py_DECREF(item);
goto Fail_1;
}
- reslen = PyString_GET_SIZE(item);
+ reslen = PyBytes_GET_SIZE(item);
if (reslen == 1) {
- PyString_AS_STRING(result)[j++] =
- PyString_AS_STRING(item)[0];
+ PyBytes_AS_STRING(result)[j++] =
+ PyBytes_AS_STRING(item)[0];
} else {
/* do we need more space? */
Py_ssize_t need = j + reslen + len-i-1;
@@ -2816,15 +2816,15 @@
/* overallocate, to avoid reallocations */
if (need<2*outlen)
need = 2*outlen;
- if (_PyString_Resize(&result, need)) {
+ if (_PyBytes_Resize(&result, need)) {
Py_DECREF(item);
return NULL;
}
outlen = need;
}
memcpy(
- PyString_AS_STRING(result) + j,
- PyString_AS_STRING(item),
+ PyBytes_AS_STRING(result) + j,
+ PyBytes_AS_STRING(item),
reslen
);
j += reslen;
@@ -2834,7 +2834,7 @@
}
if (j < outlen)
- _PyString_Resize(&result, j);
+ _PyBytes_Resize(&result, j);
return result;
Modified: python/branches/tlee-ast-optimize/Python/ceval.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/ceval.c (original)
+++ python/branches/tlee-ast-optimize/Python/ceval.c Sun Jun 1 17:18:10 2008
@@ -739,7 +739,7 @@
consts = co->co_consts;
fastlocals = f->f_localsplus;
freevars = f->f_localsplus + co->co_nlocals;
- first_instr = (unsigned char*) PyString_AS_STRING(co->co_code);
+ first_instr = (unsigned char*) PyBytes_AS_STRING(co->co_code);
/* An explanation is in order for the next line.
f->f_lasti now refers to the index of the last instruction
@@ -766,7 +766,7 @@
lltrace = PyDict_GetItemString(f->f_globals, "__lltrace__") != NULL;
#endif
#if defined(Py_DEBUG) || defined(LLTRACE)
- filename = PyString_AsString(co->co_filename);
+ filename = PyBytes_AsString(co->co_filename);
#endif
why = WHY_NOT;
@@ -1147,8 +1147,8 @@
goto slow_add;
x = PyInt_FromLong(i);
}
- else if (PyString_CheckExact(v) &&
- PyString_CheckExact(w)) {
+ else if (PyBytes_CheckExact(v) &&
+ PyBytes_CheckExact(w)) {
x = string_concatenate(v, w, f, next_instr);
/* string_concatenate consumed the ref to v */
goto skip_decref_vx;
@@ -1349,8 +1349,8 @@
goto slow_iadd;
x = PyInt_FromLong(i);
}
- else if (PyString_CheckExact(v) &&
- PyString_CheckExact(w)) {
+ else if (PyBytes_CheckExact(v) &&
+ PyBytes_CheckExact(w)) {
x = string_concatenate(v, w, f, next_instr);
/* string_concatenate consumed the ref to v */
goto skip_decref_v;
@@ -1576,9 +1576,9 @@
err = PyFile_WriteObject(v, w, Py_PRINT_RAW);
if (err == 0) {
/* XXX move into writeobject() ? */
- if (PyString_Check(v)) {
- char *s = PyString_AS_STRING(v);
- Py_ssize_t len = PyString_GET_SIZE(v);
+ if (PyBytes_Check(v)) {
+ char *s = PyBytes_AS_STRING(v);
+ Py_ssize_t len = PyBytes_GET_SIZE(v);
if (len == 0 ||
!isspace(Py_CHARMASK(s[len-1])) ||
s[len-1] == ' ')
@@ -1705,7 +1705,7 @@
retval = POP();
}
else if (PyExceptionClass_Check(v) ||
- PyString_Check(v)) {
+ PyBytes_Check(v)) {
w = POP();
u = POP();
PyErr_Restore(v, w, u);
@@ -1869,11 +1869,11 @@
case LOAD_GLOBAL:
w = GETITEM(names, oparg);
- if (PyString_CheckExact(w)) {
+ if (PyBytes_CheckExact(w)) {
/* Inline the PyDict_GetItem() calls.
WARNING: this is an extreme speed hack.
Do not try this at home. */
- long hash = ((PyStringObject *)w)->ob_shash;
+ long hash = ((PyBytesObject *)w)->ob_shash;
if (hash != -1) {
PyDictObject *d;
PyDictEntry *e;
@@ -2726,7 +2726,7 @@
PyErr_Format(PyExc_TypeError,
"%.200s() takes %s %d "
"%sargument%s (%d given)",
- PyString_AsString(co->co_name),
+ PyBytes_AsString(co->co_name),
defcount ? "at most" : "exactly",
co->co_argcount,
kwcount ? "non-keyword " : "",
@@ -2756,10 +2756,10 @@
PyObject *keyword = kws[2*i];
PyObject *value = kws[2*i + 1];
int j;
- if (keyword == NULL || !PyString_Check(keyword)) {
+ if (keyword == NULL || !PyBytes_Check(keyword)) {
PyErr_Format(PyExc_TypeError,
"%.200s() keywords must be strings",
- PyString_AsString(co->co_name));
+ PyBytes_AsString(co->co_name));
goto fail;
}
/* XXX slow -- speed up using dictionary? */
@@ -2781,8 +2781,8 @@
PyErr_Format(PyExc_TypeError,
"%.200s() got an unexpected "
"keyword argument '%.400s'",
- PyString_AsString(co->co_name),
- PyString_AsString(keyword));
+ PyBytes_AsString(co->co_name),
+ PyBytes_AsString(keyword));
goto fail;
}
PyDict_SetItem(kwdict, keyword, value);
@@ -2793,8 +2793,8 @@
"%.200s() got multiple "
"values for keyword "
"argument '%.400s'",
- PyString_AsString(co->co_name),
- PyString_AsString(keyword));
+ PyBytes_AsString(co->co_name),
+ PyBytes_AsString(keyword));
goto fail;
}
Py_INCREF(value);
@@ -2808,7 +2808,7 @@
PyErr_Format(PyExc_TypeError,
"%.200s() takes %s %d "
"%sargument%s (%d given)",
- PyString_AsString(co->co_name),
+ PyBytes_AsString(co->co_name),
((co->co_flags & CO_VARARGS) ||
defcount) ? "at least"
: "exactly",
@@ -2834,7 +2834,7 @@
if (argcount > 0 || kwcount > 0) {
PyErr_Format(PyExc_TypeError,
"%.200s() takes no arguments (%d given)",
- PyString_AsString(co->co_name),
+ PyBytes_AsString(co->co_name),
argcount + kwcount);
goto fail;
}
@@ -2860,11 +2860,11 @@
list so that we can march over it more efficiently?
*/
for (i = 0; i < PyTuple_GET_SIZE(co->co_cellvars); ++i) {
- cellname = PyString_AS_STRING(
+ cellname = PyBytes_AS_STRING(
PyTuple_GET_ITEM(co->co_cellvars, i));
found = 0;
for (j = 0; j < nargs; j++) {
- argname = PyString_AS_STRING(
+ argname = PyBytes_AS_STRING(
PyTuple_GET_ITEM(co->co_varnames, j));
if (strcmp(cellname, argname) == 0) {
c = PyCell_New(GETLOCAL(j));
@@ -3522,13 +3522,13 @@
if (PyMethod_Check(func))
return PyEval_GetFuncName(PyMethod_GET_FUNCTION(func));
else if (PyFunction_Check(func))
- return PyString_AsString(((PyFunctionObject*)func)->func_name);
+ return PyBytes_AsString(((PyFunctionObject*)func)->func_name);
else if (PyCFunction_Check(func))
return ((PyCFunctionObject*)func)->m_ml->ml_name;
else if (PyClass_Check(func))
- return PyString_AsString(((PyClassObject*)func)->cl_name);
+ return PyBytes_AsString(((PyClassObject*)func)->cl_name);
else if (PyInstance_Check(func)) {
- return PyString_AsString(
+ return PyBytes_AsString(
((PyInstanceObject*)func)->in_class->cl_name);
} else {
return func->ob_type->tp_name;
@@ -3767,7 +3767,7 @@
"for keyword argument '%.200s'",
PyEval_GetFuncName(func),
PyEval_GetFuncDesc(func),
- PyString_AsString(key));
+ PyBytes_AsString(key));
Py_DECREF(key);
Py_DECREF(value);
Py_DECREF(kwdict);
@@ -4086,7 +4086,7 @@
length = PyTuple_Size(w);
for (i = 0; i < length; i += 1) {
PyObject *exc = PyTuple_GET_ITEM(w, i);
- if (PyString_Check(exc)) {
+ if (PyBytes_Check(exc)) {
int ret_val;
ret_val = PyErr_WarnEx(
PyExc_DeprecationWarning,
@@ -4109,7 +4109,7 @@
}
}
else {
- if (PyString_Check(w)) {
+ if (PyBytes_Check(w)) {
int ret_val;
ret_val = PyErr_WarnEx(
PyExc_DeprecationWarning,
@@ -4149,7 +4149,7 @@
if (x == NULL && PyErr_ExceptionMatches(PyExc_AttributeError)) {
PyErr_Format(PyExc_ImportError,
"cannot import name %.230s",
- PyString_AsString(name));
+ PyBytes_AsString(name));
}
return x;
}
@@ -4191,8 +4191,8 @@
break;
}
if (skip_leading_underscores &&
- PyString_Check(name) &&
- PyString_AS_STRING(name)[0] == '_')
+ PyBytes_Check(name) &&
+ PyBytes_AS_STRING(name)[0] == '_')
{
Py_DECREF(name);
continue;
@@ -4251,12 +4251,12 @@
PyObject *ptype, *pvalue, *ptraceback;
PyErr_Fetch(&ptype, &pvalue, &ptraceback);
- if (PyString_Check(pvalue)) {
+ if (PyBytes_Check(pvalue)) {
PyObject *newmsg;
- newmsg = PyString_FromFormat(
+ newmsg = PyBytes_FromFormat(
"Error when calling the metaclass bases\n"
" %s",
- PyString_AS_STRING(pvalue));
+ PyBytes_AS_STRING(pvalue));
if (newmsg != NULL) {
Py_DECREF(pvalue);
pvalue = newmsg;
@@ -4297,7 +4297,7 @@
}
else if (locals == Py_None)
locals = globals;
- if (!PyString_Check(prog) &&
+ if (!PyBytes_Check(prog) &&
!PyUnicode_Check(prog) &&
!PyCode_Check(prog) &&
!PyFile_Check(prog)) {
@@ -4327,7 +4327,7 @@
}
else if (PyFile_Check(prog)) {
FILE *fp = PyFile_AsFile(prog);
- char *name = PyString_AsString(PyFile_Name(prog));
+ char *name = PyBytes_AsString(PyFile_Name(prog));
PyCompilerFlags cf;
if (name == NULL)
return -1;
@@ -4353,7 +4353,7 @@
cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
}
#endif
- if (PyString_AsStringAndSize(prog, &str, NULL))
+ if (PyBytes_AsStringAndSize(prog, &str, NULL))
return -1;
if (PyEval_MergeCompilerFlags(&cf))
v = PyRun_StringFlags(str, Py_file_input, globals,
@@ -4378,7 +4378,7 @@
if (!obj)
return;
- obj_str = PyString_AsString(obj);
+ obj_str = PyBytes_AsString(obj);
if (!obj_str)
return;
@@ -4391,8 +4391,8 @@
{
/* This function implements 'variable += expr' when both arguments
are strings. */
- Py_ssize_t v_len = PyString_GET_SIZE(v);
- Py_ssize_t w_len = PyString_GET_SIZE(w);
+ Py_ssize_t v_len = PyBytes_GET_SIZE(v);
+ Py_ssize_t w_len = PyBytes_GET_SIZE(w);
Py_ssize_t new_len = v_len + w_len;
if (new_len < 0) {
PyErr_SetString(PyExc_OverflowError,
@@ -4441,12 +4441,12 @@
}
}
- if (v->ob_refcnt == 1 && !PyString_CHECK_INTERNED(v)) {
+ if (v->ob_refcnt == 1 && !PyBytes_CHECK_INTERNED(v)) {
/* Now we own the last reference to 'v', so we can resize it
* in-place.
*/
- if (_PyString_Resize(&v, new_len) != 0) {
- /* XXX if _PyString_Resize() fails, 'v' has been
+ if (_PyBytes_Resize(&v, new_len) != 0) {
+ /* XXX if _PyBytes_Resize() fails, 'v' has been
* deallocated so it cannot be put back into
* 'variable'. The MemoryError is raised when there
* is no value in 'variable', which might (very
@@ -4455,13 +4455,13 @@
return NULL;
}
/* copy 'w' into the newly allocated area of 'v' */
- memcpy(PyString_AS_STRING(v) + v_len,
- PyString_AS_STRING(w), w_len);
+ memcpy(PyBytes_AS_STRING(v) + v_len,
+ PyBytes_AS_STRING(w), w_len);
return v;
}
else {
/* When in-place resizing is not an option. */
- PyString_Concat(&v, w);
+ PyBytes_Concat(&v, w);
return v;
}
}
Modified: python/branches/tlee-ast-optimize/Python/codecs.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/codecs.c (original)
+++ python/branches/tlee-ast-optimize/Python/codecs.c Sun Jun 1 17:18:10 2008
@@ -61,10 +61,10 @@
return NULL;
}
- v = PyString_FromStringAndSize(NULL, len);
+ v = PyBytes_FromStringAndSize(NULL, len);
if (v == NULL)
return NULL;
- p = PyString_AS_STRING(v);
+ p = PyBytes_AS_STRING(v);
for (i = 0; i < len; i++) {
register char ch = string[i];
if (ch == ' ')
@@ -112,7 +112,7 @@
v = normalizestring(encoding);
if (v == NULL)
goto onError;
- PyString_InternInPlace(&v);
+ PyBytes_InternInPlace(&v);
/* First, try to lookup the name in the registry dictionary */
result = PyDict_GetItem(interp->codec_search_cache, v);
@@ -190,7 +190,7 @@
if (errors) {
PyObject *v;
- v = PyString_FromString(errors);
+ v = PyBytes_FromString(errors);
if (v == NULL) {
Py_DECREF(args);
return NULL;
@@ -451,7 +451,7 @@
if (string != NULL) {
PyErr_Format(PyExc_TypeError,
"don't know how to handle %.400s in error callback",
- PyString_AS_STRING(string));
+ PyBytes_AS_STRING(string));
Py_DECREF(string);
}
}
Modified: python/branches/tlee-ast-optimize/Python/compile.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/compile.c (original)
+++ python/branches/tlee-ast-optimize/Python/compile.c Sun Jun 1 17:18:10 2008
@@ -210,15 +210,15 @@
{
/* Name mangling: __private becomes _classname__private.
This is independent from how the name is used. */
- const char *p, *name = PyString_AsString(ident);
+ const char *p, *name = PyBytes_AsString(ident);
char *buffer;
size_t nlen, plen;
- if (privateobj == NULL || !PyString_Check(privateobj) ||
+ if (privateobj == NULL || !PyBytes_Check(privateobj) ||
name == NULL || name[0] != '_' || name[1] != '_') {
Py_INCREF(ident);
return ident;
}
- p = PyString_AsString(privateobj);
+ p = PyBytes_AsString(privateobj);
nlen = strlen(name);
/* Don't mangle __id__ or names with dots.
@@ -242,11 +242,11 @@
return ident; /* Don't mangle if class is just underscores */
}
plen = strlen(p);
- ident = PyString_FromStringAndSize(NULL, 1 + nlen + plen);
+ ident = PyBytes_FromStringAndSize(NULL, 1 + nlen + plen);
if (!ident)
return 0;
/* ident = "_" + p[:plen] + name # i.e. 1+plen+nlen bytes */
- buffer = PyString_AS_STRING(ident);
+ buffer = PyBytes_AS_STRING(ident);
buffer[0] = '_';
strncpy(buffer+1, p, plen);
strcpy(buffer+1+plen, name);
@@ -274,7 +274,7 @@
PyCompilerFlags local_flags;
if (!__doc__) {
- __doc__ = PyString_InternFromString("__doc__");
+ __doc__ = PyBytes_InternFromString("__doc__");
if (!__doc__)
return NULL;
}
@@ -563,7 +563,7 @@
{
char tmpname[256];
PyOS_snprintf(tmpname, sizeof(tmpname), "_[%d]", ++c->u->u_tmpname);
- return PyString_FromString(tmpname);
+ return PyBytes_FromString(tmpname);
}
/* Allocate a new block and return a pointer to it.
@@ -1216,7 +1216,7 @@
int addNone = 1;
static PyObject *module;
if (!module) {
- module = PyString_InternFromString("<module>");
+ module = PyBytes_InternFromString("<module>");
if (!module)
return NULL;
}
@@ -1268,8 +1268,8 @@
PyOS_snprintf(buf, sizeof(buf),
"unknown scope for %.100s in %.100s(%s) in %s\n"
"symbols: %s\nlocals: %s\nglobals: %s\n",
- PyString_AS_STRING(name),
- PyString_AS_STRING(c->u->u_name),
+ PyBytes_AS_STRING(name),
+ PyBytes_AS_STRING(c->u->u_name),
PyObject_REPR(c->u->u_ste->ste_id),
c->c_filename,
PyObject_REPR(c->u->u_ste->ste_symbols),
@@ -1327,9 +1327,9 @@
printf("lookup %s in %s %d %d\n"
"freevars of %s: %s\n",
PyObject_REPR(name),
- PyString_AS_STRING(c->u->u_name),
+ PyBytes_AS_STRING(c->u->u_name),
reftype, arg,
- PyString_AS_STRING(co->co_name),
+ PyBytes_AS_STRING(co->co_name),
PyObject_REPR(co->co_freevars));
Py_FatalError("compiler_make_closure()");
}
@@ -1364,7 +1364,7 @@
for (i = 0; i < n; i++) {
expr_ty arg = (expr_ty)asdl_seq_GET(args->args, i);
if (arg->kind == Tuple_kind) {
- PyObject *id = PyString_FromFormat(".%d", i);
+ PyObject *id = PyBytes_FromFormat(".%d", i);
if (id == NULL) {
return 0;
}
@@ -1457,7 +1457,7 @@
Py_XDECREF(c->u->u_private);
c->u->u_private = s->v.ClassDef.name;
Py_INCREF(c->u->u_private);
- str = PyString_InternFromString("__name__");
+ str = PyBytes_InternFromString("__name__");
if (!str || !compiler_nameop(c, str, Load)) {
Py_XDECREF(str);
compiler_exit_scope(c);
@@ -1465,7 +1465,7 @@
}
Py_DECREF(str);
- str = PyString_InternFromString("__module__");
+ str = PyBytes_InternFromString("__module__");
if (!str || !compiler_nameop(c, str, Store)) {
Py_XDECREF(str);
compiler_exit_scope(c);
@@ -1532,7 +1532,7 @@
assert(e->kind == Lambda_kind);
if (!name) {
- name = PyString_InternFromString("<lambda>");
+ name = PyBytes_InternFromString("<lambda>");
if (!name)
return 0;
}
@@ -1922,7 +1922,7 @@
If there is a dot in name, we need to split it and emit a
LOAD_ATTR for each name.
*/
- const char *src = PyString_AS_STRING(name);
+ const char *src = PyBytes_AS_STRING(name);
const char *dot = strchr(src, '.');
if (dot) {
/* Consume the base module name to get the first attribute */
@@ -1931,7 +1931,7 @@
/* NB src is only defined when dot != NULL */
PyObject *attr;
dot = strchr(src, '.');
- attr = PyString_FromStringAndSize(src,
+ attr = PyBytes_FromStringAndSize(src,
dot ? dot - src : strlen(src));
if (!attr)
return -1;
@@ -1980,10 +1980,10 @@
}
else {
identifier tmp = alias->name;
- const char *base = PyString_AS_STRING(alias->name);
+ const char *base = PyBytes_AS_STRING(alias->name);
char *dot = strchr(base, '.');
if (dot)
- tmp = PyString_FromStringAndSize(base,
+ tmp = PyBytes_FromStringAndSize(base,
dot - base);
r = compiler_nameop(c, tmp, Store);
if (dot) {
@@ -2026,7 +2026,7 @@
}
if (s->lineno > c->c_future->ff_lineno) {
- if (!strcmp(PyString_AS_STRING(s->v.ImportFrom.module),
+ if (!strcmp(PyBytes_AS_STRING(s->v.ImportFrom.module),
"__future__")) {
Py_DECREF(level);
Py_DECREF(names);
@@ -2046,7 +2046,7 @@
alias_ty alias = (alias_ty)asdl_seq_GET(s->v.ImportFrom.names, i);
identifier store_name;
- if (i == 0 && *PyString_AS_STRING(alias->name) == '*') {
+ if (i == 0 && *PyBytes_AS_STRING(alias->name) == '*') {
assert(n == 1);
ADDOP(c, IMPORT_STAR);
return 1;
@@ -2076,7 +2076,7 @@
if (Py_OptimizeFlag)
return 1;
if (assertion_error == NULL) {
- assertion_error = PyString_InternFromString("AssertionError");
+ assertion_error = PyBytes_InternFromString("AssertionError");
if (assertion_error == NULL)
return 0;
}
@@ -2359,7 +2359,7 @@
/* First check for assignment to __debug__. Param? */
if ((ctx == Store || ctx == AugStore || ctx == Del)
- && !strcmp(PyString_AS_STRING(name), "__debug__")) {
+ && !strcmp(PyBytes_AS_STRING(name), "__debug__")) {
return compiler_error(c, "can not assign to __debug__");
}
@@ -2397,7 +2397,7 @@
}
/* XXX Leave assert here, but handle __doc__ and the like better */
- assert(scope || PyString_AS_STRING(name)[0] == '_');
+ assert(scope || PyBytes_AS_STRING(name)[0] == '_');
switch (optype) {
case OP_DEREF:
@@ -2411,7 +2411,7 @@
PyErr_Format(PyExc_SyntaxError,
"can not delete variable '%s' referenced "
"in nested scope",
- PyString_AS_STRING(name));
+ PyBytes_AS_STRING(name));
Py_DECREF(mangled);
return 0;
case Param:
@@ -2796,7 +2796,7 @@
0)))->iter;
if (!name) {
- name = PyString_FromString("<genexpr>");
+ name = PyBytes_FromString("<genexpr>");
if (!name)
return 0;
}
@@ -2845,7 +2845,7 @@
case Name_kind:
/* __debug__ is not assignable, so we can optimize
* it away in if and while statements */
- if (strcmp(PyString_AS_STRING(e->v.Name.id),
+ if (strcmp(PyBytes_AS_STRING(e->v.Name.id),
"__debug__") == 0)
return ! Py_OptimizeFlag;
/* fall through */
@@ -2887,12 +2887,12 @@
assert(s->kind == With_kind);
if (!enter_attr) {
- enter_attr = PyString_InternFromString("__enter__");
+ enter_attr = PyBytes_InternFromString("__enter__");
if (!enter_attr)
return 0;
}
if (!exit_attr) {
- exit_attr = PyString_InternFromString("__exit__");
+ exit_attr = PyBytes_InternFromString("__exit__");
if (!exit_attr)
return 0;
}
@@ -3498,10 +3498,10 @@
{
memset(a, 0, sizeof(struct assembler));
a->a_lineno = firstlineno;
- a->a_bytecode = PyString_FromStringAndSize(NULL, DEFAULT_CODE_SIZE);
+ a->a_bytecode = PyBytes_FromStringAndSize(NULL, DEFAULT_CODE_SIZE);
if (!a->a_bytecode)
return 0;
- a->a_lnotab = PyString_FromStringAndSize(NULL, DEFAULT_LNOTAB_SIZE);
+ a->a_lnotab = PyBytes_FromStringAndSize(NULL, DEFAULT_LNOTAB_SIZE);
if (!a->a_lnotab)
return 0;
a->a_postorder = (basicblock **)PyObject_Malloc(
@@ -3613,17 +3613,17 @@
if (d_bytecode > 255) {
int j, nbytes, ncodes = d_bytecode / 255;
nbytes = a->a_lnotab_off + 2 * ncodes;
- len = PyString_GET_SIZE(a->a_lnotab);
+ len = PyBytes_GET_SIZE(a->a_lnotab);
if (nbytes >= len) {
if (len * 2 < nbytes)
len = nbytes;
else
len *= 2;
- if (_PyString_Resize(&a->a_lnotab, len) < 0)
+ if (_PyBytes_Resize(&a->a_lnotab, len) < 0)
return 0;
}
lnotab = (unsigned char *)
- PyString_AS_STRING(a->a_lnotab) + a->a_lnotab_off;
+ PyBytes_AS_STRING(a->a_lnotab) + a->a_lnotab_off;
for (j = 0; j < ncodes; j++) {
*lnotab++ = 255;
*lnotab++ = 0;
@@ -3635,17 +3635,17 @@
if (d_lineno > 255) {
int j, nbytes, ncodes = d_lineno / 255;
nbytes = a->a_lnotab_off + 2 * ncodes;
- len = PyString_GET_SIZE(a->a_lnotab);
+ len = PyBytes_GET_SIZE(a->a_lnotab);
if (nbytes >= len) {
if (len * 2 < nbytes)
len = nbytes;
else
len *= 2;
- if (_PyString_Resize(&a->a_lnotab, len) < 0)
+ if (_PyBytes_Resize(&a->a_lnotab, len) < 0)
return 0;
}
lnotab = (unsigned char *)
- PyString_AS_STRING(a->a_lnotab) + a->a_lnotab_off;
+ PyBytes_AS_STRING(a->a_lnotab) + a->a_lnotab_off;
*lnotab++ = d_bytecode;
*lnotab++ = 255;
d_bytecode = 0;
@@ -3657,13 +3657,13 @@
a->a_lnotab_off += ncodes * 2;
}
- len = PyString_GET_SIZE(a->a_lnotab);
+ len = PyBytes_GET_SIZE(a->a_lnotab);
if (a->a_lnotab_off + 2 >= len) {
- if (_PyString_Resize(&a->a_lnotab, len * 2) < 0)
+ if (_PyBytes_Resize(&a->a_lnotab, len * 2) < 0)
return 0;
}
lnotab = (unsigned char *)
- PyString_AS_STRING(a->a_lnotab) + a->a_lnotab_off;
+ PyBytes_AS_STRING(a->a_lnotab) + a->a_lnotab_off;
a->a_lnotab_off += 2;
if (d_bytecode) {
@@ -3688,7 +3688,7 @@
assemble_emit(struct assembler *a, struct instr *i)
{
int size, arg = 0, ext = 0;
- Py_ssize_t len = PyString_GET_SIZE(a->a_bytecode);
+ Py_ssize_t len = PyBytes_GET_SIZE(a->a_bytecode);
char *code;
size = instrsize(i);
@@ -3699,10 +3699,10 @@
if (i->i_lineno && !assemble_lnotab(a, i))
return 0;
if (a->a_offset + size >= len) {
- if (_PyString_Resize(&a->a_bytecode, len * 2) < 0)
+ if (_PyBytes_Resize(&a->a_bytecode, len * 2) < 0)
return 0;
}
- code = PyString_AS_STRING(a->a_bytecode) + a->a_offset;
+ code = PyBytes_AS_STRING(a->a_bytecode) + a->a_offset;
a->a_offset += size;
if (size == 6) {
assert(i->i_hasarg);
@@ -3875,7 +3875,7 @@
freevars = dict_keys_inorder(c->u->u_freevars, PyTuple_Size(cellvars));
if (!freevars)
goto error;
- filename = PyString_FromString(c->c_filename);
+ filename = PyBytes_FromString(c->c_filename);
if (!filename)
goto error;
@@ -3995,9 +3995,9 @@
goto error;
}
- if (_PyString_Resize(&a.a_lnotab, a.a_lnotab_off) < 0)
+ if (_PyBytes_Resize(&a.a_lnotab, a.a_lnotab_off) < 0)
goto error;
- if (_PyString_Resize(&a.a_bytecode, a.a_offset) < 0)
+ if (_PyBytes_Resize(&a.a_bytecode, a.a_offset) < 0)
goto error;
co = makecode(c, &a);
Modified: python/branches/tlee-ast-optimize/Python/errors.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/errors.c (original)
+++ python/branches/tlee-ast-optimize/Python/errors.c Sun Jun 1 17:18:10 2008
@@ -66,7 +66,7 @@
void
PyErr_SetString(PyObject *exception, const char *string)
{
- PyObject *value = PyString_FromString(string);
+ PyObject *value = PyBytes_FromString(string);
PyErr_SetObject(exception, value);
Py_XDECREF(value);
}
@@ -351,7 +351,7 @@
PyObject *
PyErr_SetFromErrnoWithFilename(PyObject *exc, char *filename)
{
- PyObject *name = filename ? PyString_FromString(filename) : NULL;
+ PyObject *name = filename ? PyBytes_FromString(filename) : NULL;
PyObject *result = PyErr_SetFromErrnoWithFilenameObject(exc, name);
Py_XDECREF(name);
return result;
@@ -430,7 +430,7 @@
int ierr,
const char *filename)
{
- PyObject *name = filename ? PyString_FromString(filename) : NULL;
+ PyObject *name = filename ? PyBytes_FromString(filename) : NULL;
PyObject *ret = PyErr_SetExcFromWindowsErrWithFilenameObject(exc,
ierr,
name);
@@ -469,7 +469,7 @@
int ierr,
const char *filename)
{
- PyObject *name = filename ? PyString_FromString(filename) : NULL;
+ PyObject *name = filename ? PyBytes_FromString(filename) : NULL;
PyObject *result = PyErr_SetExcFromWindowsErrWithFilenameObject(
PyExc_WindowsError,
ierr, name);
@@ -527,7 +527,7 @@
va_start(vargs);
#endif
- string = PyString_FromFormatV(format, vargs);
+ string = PyBytes_FromFormatV(format, vargs);
PyErr_SetObject(exception, string);
Py_XDECREF(string);
va_end(vargs);
@@ -559,7 +559,7 @@
goto failure;
}
if (PyDict_GetItemString(dict, "__module__") == NULL) {
- modulename = PyString_FromStringAndSize(name,
+ modulename = PyBytes_FromStringAndSize(name,
(Py_ssize_t)(dot-name));
if (modulename == NULL)
goto failure;
@@ -611,7 +611,7 @@
if (moduleName == NULL)
PyFile_WriteString("<unknown>", f);
else {
- char* modstr = PyString_AsString(moduleName);
+ char* modstr = PyBytes_AsString(moduleName);
if (modstr &&
strcmp(modstr, "exceptions") != 0)
{
@@ -665,7 +665,7 @@
Py_DECREF(tmp);
}
if (filename != NULL) {
- tmp = PyString_FromString(filename);
+ tmp = PyBytes_FromString(filename);
if (tmp == NULL)
PyErr_Clear();
else {
@@ -742,7 +742,7 @@
char *p = linebuf;
while (*p == ' ' || *p == '\t' || *p == '\014')
p++;
- return PyString_FromString(p);
+ return PyBytes_FromString(p);
}
return NULL;
}
Modified: python/branches/tlee-ast-optimize/Python/formatter_string.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/formatter_string.c (original)
+++ python/branches/tlee-ast-optimize/Python/formatter_string.c Sun Jun 1 17:18:10 2008
@@ -4,12 +4,11 @@
of int.__float__, etc., that take and return string objects */
#include "Python.h"
-#include "formatter_string.h"
-
#include "../Objects/stringlib/stringdefs.h"
-#define FORMAT_STRING string__format__
-#define FORMAT_LONG string_long__format__
-#define FORMAT_INT string_int__format__
-#define FORMAT_FLOAT string_float__format__
+#define FORMAT_STRING _PyBytes_FormatAdvanced
+#define FORMAT_LONG _PyLong_FormatAdvanced
+#define FORMAT_INT _PyInt_FormatAdvanced
+#define FORMAT_FLOAT _PyFloat_FormatAdvanced
+
#include "../Objects/stringlib/formatter.h"
Modified: python/branches/tlee-ast-optimize/Python/formatter_unicode.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/formatter_unicode.c (original)
+++ python/branches/tlee-ast-optimize/Python/formatter_unicode.c Sun Jun 1 17:18:10 2008
@@ -2,12 +2,12 @@
built-in formatter for unicode. That is, unicode.__format__(). */
#include "Python.h"
-#include "formatter_unicode.h"
-
#include "../Objects/stringlib/unicodedefs.h"
-#define FORMAT_STRING unicode__format__
+#define FORMAT_STRING _PyUnicode_FormatAdvanced
+
/* don't define FORMAT_LONG and FORMAT_FLOAT, since we can live
with only the string versions of those. The builtin format()
will convert them to unicode. */
+
#include "../Objects/stringlib/formatter.h"
Modified: python/branches/tlee-ast-optimize/Python/future.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/future.c (original)
+++ python/branches/tlee-ast-optimize/Python/future.c Sun Jun 1 17:18:10 2008
@@ -20,7 +20,7 @@
names = s->v.ImportFrom.names;
for (i = 0; i < asdl_seq_LEN(names); i++) {
alias_ty name = (alias_ty)asdl_seq_GET(names, i);
- const char *feature = PyString_AsString(name->name);
+ const char *feature = PyBytes_AsString(name->name);
if (!feature)
return 0;
if (strcmp(feature, FUTURE_NESTED_SCOPES) == 0) {
@@ -59,7 +59,7 @@
static PyObject *future;
if (!future) {
- future = PyString_InternFromString("__future__");
+ future = PyBytes_InternFromString("__future__");
if (!future)
return 0;
}
Modified: python/branches/tlee-ast-optimize/Python/getargs.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/getargs.c (original)
+++ python/branches/tlee-ast-optimize/Python/getargs.c Sun Jun 1 17:18:10 2008
@@ -418,7 +418,7 @@
n++;
}
- if (!PySequence_Check(arg) || PyString_Check(arg)) {
+ if (!PySequence_Check(arg) || PyBytes_Check(arg)) {
levels[0] = 0;
PyOS_snprintf(msgbuf, bufsize,
toplevel ? "expected %d arguments, not %.50s" :
@@ -765,8 +765,8 @@
case 'c': {/* char */
char *p = va_arg(*p_va, char *);
- if (PyString_Check(arg) && PyString_Size(arg) == 1)
- *p = PyString_AS_STRING(arg)[0];
+ if (PyBytes_Check(arg) && PyBytes_Size(arg) == 1)
+ *p = PyBytes_AS_STRING(arg)[0];
else
return converterr("char", arg, msgbuf, bufsize);
break;
@@ -777,9 +777,9 @@
void **p = (void **)va_arg(*p_va, char **);
FETCH_SIZE;
- if (PyString_Check(arg)) {
- *p = PyString_AS_STRING(arg);
- STORE_SIZE(PyString_GET_SIZE(arg));
+ if (PyBytes_Check(arg)) {
+ *p = PyBytes_AS_STRING(arg);
+ STORE_SIZE(PyBytes_GET_SIZE(arg));
}
#ifdef Py_USING_UNICODE
else if (PyUnicode_Check(arg)) {
@@ -787,8 +787,8 @@
if (uarg == NULL)
return converterr(CONV_UNICODE,
arg, msgbuf, bufsize);
- *p = PyString_AS_STRING(uarg);
- STORE_SIZE(PyString_GET_SIZE(uarg));
+ *p = PyBytes_AS_STRING(uarg);
+ STORE_SIZE(PyBytes_GET_SIZE(uarg));
}
#endif
else { /* any buffer-like object */
@@ -802,20 +802,20 @@
} else {
char **p = va_arg(*p_va, char **);
- if (PyString_Check(arg))
- *p = PyString_AS_STRING(arg);
+ if (PyBytes_Check(arg))
+ *p = PyBytes_AS_STRING(arg);
#ifdef Py_USING_UNICODE
else if (PyUnicode_Check(arg)) {
uarg = UNICODE_DEFAULT_ENCODING(arg);
if (uarg == NULL)
return converterr(CONV_UNICODE,
arg, msgbuf, bufsize);
- *p = PyString_AS_STRING(uarg);
+ *p = PyBytes_AS_STRING(uarg);
}
#endif
else
return converterr("string", arg, msgbuf, bufsize);
- if ((Py_ssize_t)strlen(*p) != PyString_Size(arg))
+ if ((Py_ssize_t)strlen(*p) != PyBytes_Size(arg))
return converterr("string without null bytes",
arg, msgbuf, bufsize);
}
@@ -831,9 +831,9 @@
*p = 0;
STORE_SIZE(0);
}
- else if (PyString_Check(arg)) {
- *p = PyString_AS_STRING(arg);
- STORE_SIZE(PyString_GET_SIZE(arg));
+ else if (PyBytes_Check(arg)) {
+ *p = PyBytes_AS_STRING(arg);
+ STORE_SIZE(PyBytes_GET_SIZE(arg));
}
#ifdef Py_USING_UNICODE
else if (PyUnicode_Check(arg)) {
@@ -841,8 +841,8 @@
if (uarg == NULL)
return converterr(CONV_UNICODE,
arg, msgbuf, bufsize);
- *p = PyString_AS_STRING(uarg);
- STORE_SIZE(PyString_GET_SIZE(uarg));
+ *p = PyBytes_AS_STRING(uarg);
+ STORE_SIZE(PyBytes_GET_SIZE(uarg));
}
#endif
else { /* any buffer-like object */
@@ -858,15 +858,15 @@
if (arg == Py_None)
*p = 0;
- else if (PyString_Check(arg))
- *p = PyString_AS_STRING(arg);
+ else if (PyBytes_Check(arg))
+ *p = PyBytes_AS_STRING(arg);
#ifdef Py_USING_UNICODE
else if (PyUnicode_Check(arg)) {
uarg = UNICODE_DEFAULT_ENCODING(arg);
if (uarg == NULL)
return converterr(CONV_UNICODE,
arg, msgbuf, bufsize);
- *p = PyString_AS_STRING(uarg);
+ *p = PyBytes_AS_STRING(uarg);
}
#endif
else
@@ -878,11 +878,11 @@
if (arg == Py_None)
*q = 0;
else
- *q = PyString_Size(arg);
+ *q = PyBytes_Size(arg);
format++;
}
else if (*p != NULL &&
- (Py_ssize_t)strlen(*p) != PyString_Size(arg))
+ (Py_ssize_t)strlen(*p) != PyBytes_Size(arg))
return converterr(
"string without null bytes or None",
arg, msgbuf, bufsize);
@@ -923,7 +923,7 @@
arg, msgbuf, bufsize);
/* Encode object */
- if (!recode_strings && PyString_Check(arg)) {
+ if (!recode_strings && PyBytes_Check(arg)) {
s = arg;
Py_INCREF(s);
}
@@ -946,7 +946,7 @@
if (s == NULL)
return converterr("(encoding failed)",
arg, msgbuf, bufsize);
- if (!PyString_Check(s)) {
+ if (!PyBytes_Check(s)) {
Py_DECREF(s);
return converterr(
"(encoder failed to return a string)",
@@ -956,7 +956,7 @@
return converterr("string<e>", arg, msgbuf, bufsize);
#endif
}
- size = PyString_GET_SIZE(s);
+ size = PyBytes_GET_SIZE(s);
/* Write output; output is guaranteed to be 0-terminated */
if (*format == '#') {
@@ -1013,7 +1013,7 @@
}
}
memcpy(*buffer,
- PyString_AS_STRING(s),
+ PyBytes_AS_STRING(s),
size + 1);
STORE_SIZE(size);
} else {
@@ -1030,7 +1030,7 @@
PyMem_Free()ing it after usage
*/
- if ((Py_ssize_t)strlen(PyString_AS_STRING(s))
+ if ((Py_ssize_t)strlen(PyBytes_AS_STRING(s))
!= size) {
Py_DECREF(s);
return converterr(
@@ -1049,7 +1049,7 @@
arg, msgbuf, bufsize);
}
memcpy(*buffer,
- PyString_AS_STRING(s),
+ PyBytes_AS_STRING(s),
size + 1);
}
Py_DECREF(s);
@@ -1083,7 +1083,7 @@
case 'S': { /* string object */
PyObject **p = va_arg(*p_va, PyObject **);
- if (PyString_Check(arg))
+ if (PyBytes_Check(arg))
*p = arg;
else
return converterr("string", arg, msgbuf, bufsize);
@@ -1473,12 +1473,12 @@
while (PyDict_Next(keywords, &pos, &key, &value)) {
int match = 0;
char *ks;
- if (!PyString_Check(key)) {
+ if (!PyBytes_Check(key)) {
PyErr_SetString(PyExc_TypeError,
"keywords must be strings");
return cleanreturn(0, freelist);
}
- ks = PyString_AsString(key);
+ ks = PyBytes_AsString(key);
for (i = 0; i < len; i++) {
if (!strcmp(ks, kwlist[i])) {
match = 1;
Modified: python/branches/tlee-ast-optimize/Python/import.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/import.c (original)
+++ python/branches/tlee-ast-optimize/Python/import.c Sun Jun 1 17:18:10 2008
@@ -467,8 +467,8 @@
while (PyDict_Next(modules, &pos, &key, &value)) {
if (value->ob_refcnt != 1)
continue;
- if (PyString_Check(key) && PyModule_Check(value)) {
- name = PyString_AS_STRING(key);
+ if (PyBytes_Check(key) && PyModule_Check(value)) {
+ name = PyBytes_AS_STRING(key);
if (strcmp(name, "__builtin__") == 0)
continue;
if (strcmp(name, "sys") == 0)
@@ -486,8 +486,8 @@
/* Next, delete all modules (still skipping __builtin__ and sys) */
pos = 0;
while (PyDict_Next(modules, &pos, &key, &value)) {
- if (PyString_Check(key) && PyModule_Check(value)) {
- name = PyString_AS_STRING(key);
+ if (PyBytes_Check(key) && PyModule_Check(value)) {
+ name = PyBytes_AS_STRING(key);
if (strcmp(name, "__builtin__") == 0)
continue;
if (strcmp(name, "sys") == 0)
@@ -665,7 +665,7 @@
/* Remember the filename as the __file__ attribute */
v = NULL;
if (pathname != NULL) {
- v = PyString_FromString(pathname);
+ v = PyBytes_FromString(pathname);
if (v == NULL)
PyErr_Clear();
}
@@ -1002,7 +1002,7 @@
PySys_WriteStderr("import %s # directory %s\n",
name, pathname);
d = PyModule_GetDict(m);
- file = PyString_FromString(pathname);
+ file = PyBytes_FromString(pathname);
if (file == NULL)
goto error;
path = Py_BuildValue("[O]", file);
@@ -1214,15 +1214,15 @@
Py_DECREF(meta_path);
}
- if (path != NULL && PyString_Check(path)) {
+ if (path != NULL && PyBytes_Check(path)) {
/* The only type of submodule allowed inside a "frozen"
package are other frozen modules or packages. */
- if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
+ if (PyBytes_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
PyErr_SetString(PyExc_ImportError,
"full frozen module name too long");
return NULL;
}
- strcpy(buf, PyString_AsString(path));
+ strcpy(buf, PyBytes_AsString(path));
strcat(buf, ".");
strcat(buf, name);
strcpy(name, buf);
@@ -1291,14 +1291,14 @@
}
else
#endif
- if (!PyString_Check(v))
+ if (!PyBytes_Check(v))
continue;
- len = PyString_GET_SIZE(v);
+ len = PyBytes_GET_SIZE(v);
if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
Py_XDECREF(copy);
continue; /* Too long */
}
- strcpy(buf, PyString_AS_STRING(v));
+ strcpy(buf, PyBytes_AS_STRING(v));
if (strlen(buf) != len) {
Py_XDECREF(copy);
continue; /* v contains '\0' */
@@ -1963,7 +1963,7 @@
if (m == NULL)
goto err_return;
d = PyModule_GetDict(m);
- s = PyString_InternFromString(name);
+ s = PyBytes_InternFromString(name);
if (s == NULL)
goto err_return;
err = PyDict_SetItemString(d, "__path__", s);
@@ -1992,7 +1992,7 @@
PyObject *pname;
PyObject *result;
- pname = PyString_FromString(name);
+ pname = PyBytes_FromString(name);
if (pname == NULL)
return NULL;
result = PyImport_Import(pname);
@@ -2165,17 +2165,17 @@
return Py_None;
if (namestr == NULL) {
- namestr = PyString_InternFromString("__name__");
+ namestr = PyBytes_InternFromString("__name__");
if (namestr == NULL)
return NULL;
}
if (pathstr == NULL) {
- pathstr = PyString_InternFromString("__path__");
+ pathstr = PyBytes_InternFromString("__path__");
if (pathstr == NULL)
return NULL;
}
if (pkgstr == NULL) {
- pkgstr = PyString_InternFromString("__package__");
+ pkgstr = PyBytes_InternFromString("__package__");
if (pkgstr == NULL)
return NULL;
}
@@ -2187,12 +2187,12 @@
if ((pkgname != NULL) && (pkgname != Py_None)) {
/* __package__ is set, so use it */
Py_ssize_t len;
- if (!PyString_Check(pkgname)) {
+ if (!PyBytes_Check(pkgname)) {
PyErr_SetString(PyExc_ValueError,
"__package__ set to non-string");
return NULL;
}
- len = PyString_GET_SIZE(pkgname);
+ len = PyBytes_GET_SIZE(pkgname);
if (len == 0) {
if (level > 0) {
PyErr_SetString(PyExc_ValueError,
@@ -2206,24 +2206,24 @@
"Package name too long");
return NULL;
}
- strcpy(buf, PyString_AS_STRING(pkgname));
+ strcpy(buf, PyBytes_AS_STRING(pkgname));
} else {
/* __package__ not set, so figure it out and set it */
modname = PyDict_GetItem(globals, namestr);
- if (modname == NULL || !PyString_Check(modname))
+ if (modname == NULL || !PyBytes_Check(modname))
return Py_None;
modpath = PyDict_GetItem(globals, pathstr);
if (modpath != NULL) {
/* __path__ is set, so modname is already the package name */
- Py_ssize_t len = PyString_GET_SIZE(modname);
+ Py_ssize_t len = PyBytes_GET_SIZE(modname);
int error;
if (len > MAXPATHLEN) {
PyErr_SetString(PyExc_ValueError,
"Module name too long");
return NULL;
}
- strcpy(buf, PyString_AS_STRING(modname));
+ strcpy(buf, PyBytes_AS_STRING(modname));
error = PyDict_SetItem(globals, pkgstr, modname);
if (error) {
PyErr_SetString(PyExc_ValueError,
@@ -2232,7 +2232,7 @@
}
} else {
/* Normal module, so work out the package name if any */
- char *start = PyString_AS_STRING(modname);
+ char *start = PyBytes_AS_STRING(modname);
char *lastdot = strrchr(start, '.');
size_t len;
int error;
@@ -2258,7 +2258,7 @@
}
strncpy(buf, start, len);
buf[len] = '\0';
- pkgname = PyString_FromString(buf);
+ pkgname = PyBytes_FromString(buf);
if (pkgname == NULL) {
return NULL;
}
@@ -2394,13 +2394,13 @@
}
return 0;
}
- if (!PyString_Check(item)) {
+ if (!PyBytes_Check(item)) {
PyErr_SetString(PyExc_TypeError,
"Item in ``from list'' not a string");
Py_DECREF(item);
return 0;
}
- if (PyString_AS_STRING(item)[0] == '*') {
+ if (PyBytes_AS_STRING(item)[0] == '*') {
PyObject *all;
Py_DECREF(item);
/* See if the package defines __all__ */
@@ -2419,7 +2419,7 @@
}
hasit = PyObject_HasAttr(mod, item);
if (!hasit) {
- char *subname = PyString_AS_STRING(item);
+ char *subname = PyBytes_AS_STRING(item);
PyObject *submod;
char *p;
if (buflen + strlen(subname) >= MAXPATHLEN) {
@@ -2585,7 +2585,7 @@
subname = name;
else {
PyObject *parentname, *parent;
- parentname = PyString_FromStringAndSize(name, (subname-name));
+ parentname = PyBytes_FromStringAndSize(name, (subname-name));
if (parentname == NULL) {
imp_modules_reloading_clear();
return NULL;
@@ -2594,7 +2594,7 @@
if (parent == NULL) {
PyErr_Format(PyExc_ImportError,
"reload(): parent %.200s not in sys.modules",
- PyString_AS_STRING(parentname));
+ PyBytes_AS_STRING(parentname));
Py_DECREF(parentname);
imp_modules_reloading_clear();
return NULL;
@@ -2639,7 +2639,7 @@
done using whatever import hooks are installed in the current
environment, e.g. by "rexec".
A dummy list ["__doc__"] is passed as the 4th argument so that
- e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
+ e.g. PyImport_Import(PyBytes_FromString("win32com.client.gencache"))
will return <module "gencache"> instead of <module "win32com">. */
PyObject *
@@ -2655,10 +2655,10 @@
/* Initialize constant string objects */
if (silly_list == NULL) {
- import_str = PyString_InternFromString("__import__");
+ import_str = PyBytes_InternFromString("__import__");
if (import_str == NULL)
return NULL;
- builtins_str = PyString_InternFromString("__builtins__");
+ builtins_str = PyBytes_InternFromString("__builtins__");
if (builtins_str == NULL)
return NULL;
silly_list = Py_BuildValue("[s]", "__doc__");
@@ -2726,7 +2726,7 @@
buf[2] = (char) ((pyc_magic >> 16) & 0xff);
buf[3] = (char) ((pyc_magic >> 24) & 0xff);
- return PyString_FromStringAndSize(buf, 4);
+ return PyBytes_FromStringAndSize(buf, 4);
}
static PyObject *
Modified: python/branches/tlee-ast-optimize/Python/mactoolboxglue.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/mactoolboxglue.c (original)
+++ python/branches/tlee-ast-optimize/Python/mactoolboxglue.c Sun Jun 1 17:18:10 2008
@@ -52,7 +52,7 @@
buf[0] = '\0';
}
else {
- char *input = PyString_AsString(rv);
+ char *input = PyBytes_AsString(rv);
if (!input) {
PyErr_Clear();
buf[0] = '\0';
@@ -124,7 +124,7 @@
if (!rv)
goto error;
- input = PyString_AsString(rv);
+ input = PyBytes_AsString(rv);
if (!input)
goto error;
@@ -159,12 +159,12 @@
PyMac_GetOSType(PyObject *v, OSType *pr)
{
uint32_t tmp;
- if (!PyString_Check(v) || PyString_Size(v) != 4) {
+ if (!PyBytes_Check(v) || PyBytes_Size(v) != 4) {
PyErr_SetString(PyExc_TypeError,
"OSType arg must be string of 4 chars");
return 0;
}
- memcpy((char *)&tmp, PyString_AsString(v), 4);
+ memcpy((char *)&tmp, PyBytes_AsString(v), 4);
*pr = (OSType)ntohl(tmp);
return 1;
}
@@ -174,7 +174,7 @@
PyMac_BuildOSType(OSType t)
{
uint32_t tmp = htonl((uint32_t)t);
- return PyString_FromStringAndSize((char *)&tmp, 4);
+ return PyBytes_FromStringAndSize((char *)&tmp, 4);
}
/* Convert an NumVersion value to a 4-element tuple */
@@ -190,13 +190,13 @@
PyMac_GetStr255(PyObject *v, Str255 pbuf)
{
int len;
- if (!PyString_Check(v) || (len = PyString_Size(v)) > 255) {
+ if (!PyBytes_Check(v) || (len = PyBytes_Size(v)) > 255) {
PyErr_SetString(PyExc_TypeError,
"Str255 arg must be string of at most 255 chars");
return 0;
}
pbuf[0] = len;
- memcpy((char *)(pbuf+1), PyString_AsString(v), len);
+ memcpy((char *)(pbuf+1), PyBytes_AsString(v), len);
return 1;
}
@@ -208,7 +208,7 @@
PyErr_SetString(PyExc_SystemError, "Str255 pointer is NULL");
return NULL;
}
- return PyString_FromStringAndSize((char *)&s[1], (int)s[0]);
+ return PyBytes_FromStringAndSize((char *)&s[1], (int)s[0]);
}
PyObject *
@@ -218,7 +218,7 @@
Py_INCREF(Py_None);
return Py_None;
}
- return PyString_FromStringAndSize((char *)&s[1], (int)s[0]);
+ return PyBytes_FromStringAndSize((char *)&s[1], (int)s[0]);
}
Modified: python/branches/tlee-ast-optimize/Python/marshal.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/marshal.c (original)
+++ python/branches/tlee-ast-optimize/Python/marshal.c Sun Jun 1 17:18:10 2008
@@ -64,18 +64,18 @@
Py_ssize_t size, newsize;
if (p->str == NULL)
return; /* An error already occurred */
- size = PyString_Size(p->str);
+ size = PyBytes_Size(p->str);
newsize = size + size + 1024;
if (newsize > 32*1024*1024) {
newsize = size + 1024*1024;
}
- if (_PyString_Resize(&p->str, newsize) != 0) {
+ if (_PyBytes_Resize(&p->str, newsize) != 0) {
p->ptr = p->end = NULL;
}
else {
- p->ptr = PyString_AS_STRING((PyStringObject *)p->str) + size;
+ p->ptr = PyBytes_AS_STRING((PyBytesObject *)p->str) + size;
p->end =
- PyString_AS_STRING((PyStringObject *)p->str) + newsize;
+ PyBytes_AS_STRING((PyBytesObject *)p->str) + newsize;
*p->ptr++ = Py_SAFE_DOWNCAST(c, int, char);
}
}
@@ -239,8 +239,8 @@
}
}
#endif
- else if (PyString_CheckExact(v)) {
- if (p->strings && PyString_CHECK_INTERNED(v)) {
+ else if (PyBytes_CheckExact(v)) {
+ if (p->strings && PyBytes_CHECK_INTERNED(v)) {
PyObject *o = PyDict_GetItem(p->strings, v);
if (o) {
long w = PyInt_AsLong(o);
@@ -265,7 +265,7 @@
else {
w_byte(TYPE_STRING, p);
}
- n = PyString_GET_SIZE(v);
+ n = PyBytes_GET_SIZE(v);
if (n > INT_MAX) {
/* huge strings are not supported */
p->depth--;
@@ -273,7 +273,7 @@
return;
}
w_long((long)n, p);
- w_string(PyString_AS_STRING(v), (int)n, p);
+ w_string(PyBytes_AS_STRING(v), (int)n, p);
}
#ifdef Py_USING_UNICODE
else if (PyUnicode_CheckExact(v)) {
@@ -285,14 +285,14 @@
return;
}
w_byte(TYPE_UNICODE, p);
- n = PyString_GET_SIZE(utf8);
+ n = PyBytes_GET_SIZE(utf8);
if (n > INT_MAX) {
p->depth--;
p->error = 1;
return;
}
w_long((long)n, p);
- w_string(PyString_AS_STRING(utf8), (int)n, p);
+ w_string(PyBytes_AS_STRING(utf8), (int)n, p);
Py_DECREF(utf8);
}
#endif
@@ -713,12 +713,12 @@
retval = NULL;
break;
}
- v = PyString_FromStringAndSize((char *)NULL, n);
+ v = PyBytes_FromStringAndSize((char *)NULL, n);
if (v == NULL) {
retval = NULL;
break;
}
- if (r_string(PyString_AS_STRING(v), (int)n, p) != n) {
+ if (r_string(PyBytes_AS_STRING(v), (int)n, p) != n) {
Py_DECREF(v);
PyErr_SetString(PyExc_EOFError,
"EOF read where object expected");
@@ -726,7 +726,7 @@
break;
}
if (type == TYPE_INTERNED) {
- PyString_InternInPlace(&v);
+ PyBytes_InternInPlace(&v);
if (PyList_Append(p->strings, v) < 0) {
retval = NULL;
break;
@@ -1113,11 +1113,11 @@
{
WFILE wf;
wf.fp = NULL;
- wf.str = PyString_FromStringAndSize((char *)NULL, 50);
+ wf.str = PyBytes_FromStringAndSize((char *)NULL, 50);
if (wf.str == NULL)
return NULL;
- wf.ptr = PyString_AS_STRING((PyStringObject *)wf.str);
- wf.end = wf.ptr + PyString_Size(wf.str);
+ wf.ptr = PyBytes_AS_STRING((PyBytesObject *)wf.str);
+ wf.end = wf.ptr + PyBytes_Size(wf.str);
wf.error = 0;
wf.depth = 0;
wf.version = version;
@@ -1125,14 +1125,14 @@
w_object(x, &wf);
Py_XDECREF(wf.strings);
if (wf.str != NULL) {
- char *base = PyString_AS_STRING((PyStringObject *)wf.str);
+ char *base = PyBytes_AS_STRING((PyBytesObject *)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));
+ _PyBytes_Resize(&wf.str, (Py_ssize_t)(wf.ptr - base));
}
if (wf.error) {
Py_XDECREF(wf.str);
Modified: python/branches/tlee-ast-optimize/Python/modsupport.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/modsupport.c (original)
+++ python/branches/tlee-ast-optimize/Python/modsupport.c Sun Jun 1 17:18:10 2008
@@ -65,7 +65,7 @@
return NULL;
d = PyModule_GetDict(m);
if (methods != NULL) {
- n = PyString_FromString(name);
+ n = PyBytes_FromString(name);
if (n == NULL)
return NULL;
for (ml = methods; ml->ml_name != NULL; ml++) {
@@ -92,7 +92,7 @@
Py_DECREF(n);
}
if (doc != NULL) {
- v = PyString_FromString(doc);
+ v = PyBytes_FromString(doc);
if (v == NULL || PyDict_SetItemString(d, "__doc__", v) != 0) {
Py_XDECREF(v);
return NULL;
@@ -391,7 +391,7 @@
{
char p[1];
p[0] = (char)va_arg(*p_va, int);
- return PyString_FromStringAndSize(p, 1);
+ return PyBytes_FromStringAndSize(p, 1);
}
case 's':
@@ -423,7 +423,7 @@
}
n = (Py_ssize_t)m;
}
- v = PyString_FromStringAndSize(str, n);
+ v = PyBytes_FromStringAndSize(str, n);
}
return v;
}
@@ -633,7 +633,7 @@
int
PyModule_AddStringConstant(PyObject *m, const char *name, const char *value)
{
- PyObject *o = PyString_FromString(value);
+ PyObject *o = PyBytes_FromString(value);
if (!o)
return -1;
if (PyModule_AddObject(m, name, o) == 0)
Modified: python/branches/tlee-ast-optimize/Python/mysnprintf.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/mysnprintf.c (original)
+++ python/branches/tlee-ast-optimize/Python/mysnprintf.c Sun Jun 1 17:18:10 2008
@@ -54,18 +54,28 @@
PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va)
{
int len; /* # bytes written, excluding \0 */
-#ifndef HAVE_SNPRINTF
+#ifdef HAVE_SNPRINTF
+#define _PyOS_vsnprintf_EXTRA_SPACE 1
+#else
+#define _PyOS_vsnprintf_EXTRA_SPACE 512
char *buffer;
#endif
assert(str != NULL);
assert(size > 0);
assert(format != NULL);
+ /* We take a size_t as input but return an int. Sanity check
+ * our input so that it won't cause an overflow in the
+ * vsnprintf return value or the buffer malloc size. */
+ if (size > INT_MAX - _PyOS_vsnprintf_EXTRA_SPACE) {
+ len = -666;
+ goto Done;
+ }
#ifdef HAVE_SNPRINTF
len = vsnprintf(str, size, format, va);
#else
/* Emulate it. */
- buffer = PyMem_MALLOC(size + 512);
+ buffer = PyMem_MALLOC(size + _PyOS_vsnprintf_EXTRA_SPACE);
if (buffer == NULL) {
len = -666;
goto Done;
@@ -75,7 +85,7 @@
if (len < 0)
/* ignore the error */;
- else if ((size_t)len >= size + 512)
+ else if ((size_t)len >= size + _PyOS_vsnprintf_EXTRA_SPACE)
Py_FatalError("Buffer overflow in PyOS_snprintf/PyOS_vsnprintf");
else {
@@ -86,8 +96,10 @@
str[to_copy] = '\0';
}
PyMem_FREE(buffer);
-Done:
#endif
- str[size-1] = '\0';
+Done:
+ if (size > 0)
+ str[size-1] = '\0';
return len;
+#undef _PyOS_vsnprintf_EXTRA_SPACE
}
Modified: python/branches/tlee-ast-optimize/Python/peephole.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/peephole.c (original)
+++ python/branches/tlee-ast-optimize/Python/peephole.c Sun Jun 1 17:18:10 2008
@@ -141,15 +141,15 @@
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);
+ assert(PyBytes_Check(lineno_obj));
+ lineno = (unsigned char*)PyBytes_AS_STRING(lineno_obj);
+ tabsiz = PyBytes_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_GET_SIZE(code);
+ assert(PyBytes_Check(code));
+ codelen = PyBytes_GET_SIZE(code);
if (codelen > 32700)
goto exitUnchanged;
@@ -158,7 +158,7 @@
if (codestr == NULL)
goto exitUnchanged;
codestr = (unsigned char *)memcpy(codestr,
- PyString_AS_STRING(code), codelen);
+ PyBytes_AS_STRING(code), codelen);
/* Verify that RETURN_VALUE terminates the codestring. This allows
the various transformation patterns to look ahead several
@@ -347,7 +347,7 @@
}
assert(h + nops == codelen);
- code = PyString_FromStringAndSize((char *)codestr, h);
+ code = PyBytes_FromStringAndSize((char *)codestr, h);
PyMem_Free(addrmap);
PyMem_Free(codestr);
PyMem_Free(blocks);
Modified: python/branches/tlee-ast-optimize/Python/pystrtod.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/pystrtod.c (original)
+++ python/branches/tlee-ast-optimize/Python/pystrtod.c Sun Jun 1 17:18:10 2008
@@ -364,7 +364,7 @@
/* At this point, p points just past the right-most character we
want to format. We need to add the grouping string for the
characters between buffer and p. */
- return _PyString_InsertThousandsGrouping(buffer, len, p,
+ return _PyBytes_InsertThousandsGrouping(buffer, len, p,
buf_size, NULL, 1);
}
Modified: python/branches/tlee-ast-optimize/Python/pythonrun.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/pythonrun.c (original)
+++ python/branches/tlee-ast-optimize/Python/pythonrun.c Sun Jun 1 17:18:10 2008
@@ -134,10 +134,19 @@
PyThreadState *tstate;
PyObject *bimod, *sysmod;
char *p;
-#if defined(Py_USING_UNICODE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
- char *codeset;
- char *saved_locale;
+ char *icodeset; /* On Windows, input codeset may theoretically
+ differ from output codeset. */
+ char *codeset = NULL;
+ char *errors = NULL;
+ int free_codeset = 0;
+ int overridden = 0;
PyObject *sys_stream, *sys_isatty;
+#if defined(Py_USING_UNICODE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
+ char *saved_locale, *loc_codeset;
+#endif
+#ifdef MS_WINDOWS
+ char ibuf[128];
+ char buf[128];
#endif
extern void _Py_ReadyTypes(void);
@@ -171,7 +180,7 @@
if (!_PyInt_Init())
Py_FatalError("Py_Initialize: can't init ints");
- if (!PyBytes_Init())
+ if (!PyByteArray_Init())
Py_FatalError("Py_Initialize: can't init bytearray");
_PyFloat_Init();
@@ -240,38 +249,75 @@
_PyGILState_Init(interp, tstate);
#endif /* WITH_THREAD */
+ if ((p = Py_GETENV("PYTHONIOENCODING")) && *p != '\0') {
+ p = icodeset = codeset = strdup(p);
+ free_codeset = 1;
+ errors = strchr(p, ':');
+ if (errors) {
+ *errors = '\0';
+ errors++;
+ }
+ overridden = 1;
+ }
+
#if defined(Py_USING_UNICODE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
/* On Unix, set the file system encoding according to the
user's preference, if the CODESET names a well-known
Python codec, and Py_FileSystemDefaultEncoding isn't
initialized by other means. Also set the encoding of
- stdin and stdout if these are terminals. */
+ stdin and stdout if these are terminals, unless overridden. */
- saved_locale = strdup(setlocale(LC_CTYPE, NULL));
- setlocale(LC_CTYPE, "");
- codeset = nl_langinfo(CODESET);
- if (codeset && *codeset) {
- PyObject *enc = PyCodec_Encoder(codeset);
- if (enc) {
- codeset = strdup(codeset);
- Py_DECREF(enc);
- } else {
- codeset = NULL;
- PyErr_Clear();
+ if (!overridden || !Py_FileSystemDefaultEncoding) {
+ saved_locale = strdup(setlocale(LC_CTYPE, NULL));
+ setlocale(LC_CTYPE, "");
+ loc_codeset = nl_langinfo(CODESET);
+ if (loc_codeset && *loc_codeset) {
+ PyObject *enc = PyCodec_Encoder(loc_codeset);
+ if (enc) {
+ loc_codeset = strdup(loc_codeset);
+ Py_DECREF(enc);
+ } else {
+ loc_codeset = NULL;
+ PyErr_Clear();
+ }
+ } else
+ loc_codeset = NULL;
+ setlocale(LC_CTYPE, saved_locale);
+ free(saved_locale);
+
+ if (!overridden) {
+ codeset = icodeset = loc_codeset;
+ free_codeset = 1;
+ }
+
+ /* Initialize Py_FileSystemDefaultEncoding from
+ locale even if PYTHONIOENCODING is set. */
+ if (!Py_FileSystemDefaultEncoding) {
+ Py_FileSystemDefaultEncoding = loc_codeset;
+ if (!overridden)
+ free_codeset = 0;
}
- } else
- codeset = NULL;
- setlocale(LC_CTYPE, saved_locale);
- free(saved_locale);
+ }
+#endif
+
+#ifdef MS_WINDOWS
+ if (!overridden) {
+ icodeset = ibuf;
+ codeset = buf;
+ sprintf(ibuf, "cp%d", GetConsoleCP());
+ sprintf(buf, "cp%d", GetConsoleOutputCP());
+ }
+#endif
if (codeset) {
sys_stream = PySys_GetObject("stdin");
sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
if (!sys_isatty)
PyErr_Clear();
- if(sys_isatty && PyObject_IsTrue(sys_isatty) &&
+ if ((overridden ||
+ (sys_isatty && PyObject_IsTrue(sys_isatty))) &&
PyFile_Check(sys_stream)) {
- if (!PyFile_SetEncoding(sys_stream, codeset))
+ if (!PyFile_SetEncodingAndErrors(sys_stream, icodeset, errors))
Py_FatalError("Cannot set codeset of stdin");
}
Py_XDECREF(sys_isatty);
@@ -280,9 +326,10 @@
sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
if (!sys_isatty)
PyErr_Clear();
- if(sys_isatty && PyObject_IsTrue(sys_isatty) &&
+ if ((overridden ||
+ (sys_isatty && PyObject_IsTrue(sys_isatty))) &&
PyFile_Check(sys_stream)) {
- if (!PyFile_SetEncoding(sys_stream, codeset))
+ if (!PyFile_SetEncodingAndErrors(sys_stream, codeset, errors))
Py_FatalError("Cannot set codeset of stdout");
}
Py_XDECREF(sys_isatty);
@@ -291,19 +338,17 @@
sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
if (!sys_isatty)
PyErr_Clear();
- if(sys_isatty && PyObject_IsTrue(sys_isatty) &&
+ if((overridden ||
+ (sys_isatty && PyObject_IsTrue(sys_isatty))) &&
PyFile_Check(sys_stream)) {
- if (!PyFile_SetEncoding(sys_stream, codeset))
+ if (!PyFile_SetEncodingAndErrors(sys_stream, codeset, errors))
Py_FatalError("Cannot set codeset of stderr");
}
Py_XDECREF(sys_isatty);
- if (!Py_FileSystemDefaultEncoding)
- Py_FileSystemDefaultEncoding = codeset;
- else
+ if (free_codeset)
free(codeset);
}
-#endif
}
void
@@ -452,8 +497,8 @@
PyTuple_Fini();
PyList_Fini();
PySet_Fini();
- PyString_Fini();
PyBytes_Fini();
+ PyByteArray_Fini();
PyInt_Fini();
PyFloat_Fini();
PyDict_Fini();
@@ -701,12 +746,12 @@
}
v = PySys_GetObject("ps1");
if (v == NULL) {
- PySys_SetObject("ps1", v = PyString_FromString(">>> "));
+ PySys_SetObject("ps1", v = PyBytes_FromString(">>> "));
Py_XDECREF(v);
}
v = PySys_GetObject("ps2");
if (v == NULL) {
- PySys_SetObject("ps2", v = PyString_FromString("... "));
+ PySys_SetObject("ps2", v = PyBytes_FromString("... "));
Py_XDECREF(v);
}
for (;;) {
@@ -753,16 +798,16 @@
v = PyObject_Str(v);
if (v == NULL)
PyErr_Clear();
- else if (PyString_Check(v))
- ps1 = PyString_AsString(v);
+ else if (PyBytes_Check(v))
+ ps1 = PyBytes_AsString(v);
}
w = PySys_GetObject("ps2");
if (w != NULL) {
w = PyObject_Str(w);
if (w == NULL)
PyErr_Clear();
- else if (PyString_Check(w))
- ps2 = PyString_AsString(w);
+ else if (PyBytes_Check(w))
+ ps2 = PyBytes_AsString(w);
}
arena = PyArena_New();
if (arena == NULL) {
@@ -855,7 +900,7 @@
return -1;
d = PyModule_GetDict(m);
if (PyDict_GetItemString(d, "__file__") == NULL) {
- PyObject *f = PyString_FromString(filename);
+ PyObject *f = PyBytes_FromString(filename);
if (f == NULL)
return -1;
if (PyDict_SetItemString(d, "__file__", f) < 0) {
@@ -939,7 +984,7 @@
goto finally;
if (v == Py_None)
*filename = NULL;
- else if (! (*filename = PyString_AsString(v)))
+ else if (! (*filename = PyBytes_AsString(v)))
goto finally;
Py_DECREF(v);
@@ -971,7 +1016,7 @@
goto finally;
if (v == Py_None)
*text = NULL;
- else if (! (*text = PyString_AsString(v)))
+ else if (! (*text = PyBytes_AsString(v)))
goto finally;
Py_DECREF(v);
return 1;
@@ -1194,7 +1239,7 @@
if (moduleName == NULL)
err = PyFile_WriteString("<unknown>", f);
else {
- char* modstr = PyString_AsString(moduleName);
+ char* modstr = PyBytes_AsString(moduleName);
if (modstr && strcmp(modstr, "exceptions"))
{
err = PyFile_WriteString(modstr, f);
@@ -1218,8 +1263,8 @@
*/
if (s == NULL)
err = -1;
- else if (!PyString_Check(s) ||
- PyString_GET_SIZE(s) != 0)
+ else if (!PyBytes_Check(s) ||
+ PyBytes_GET_SIZE(s) != 0)
err = PyFile_WriteString(": ", f);
if (err == 0)
err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
@@ -1566,7 +1611,7 @@
if (value != NULL) {
u = PyObject_Str(value);
if (u != NULL) {
- msg = PyString_AsString(u);
+ msg = PyBytes_AsString(u);
}
}
if (msg == NULL)
Modified: python/branches/tlee-ast-optimize/Python/structmember.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/structmember.c (original)
+++ python/branches/tlee-ast-optimize/Python/structmember.c Sun Jun 1 17:18:10 2008
@@ -16,7 +16,7 @@
if (v != NULL) {
for (i = 0; i < n; i++)
PyList_SetItem(v, i,
- PyString_FromString(mlist[i].name));
+ PyBytes_FromString(mlist[i].name));
if (PyErr_Occurred()) {
Py_DECREF(v);
v = NULL;
@@ -103,13 +103,13 @@
v = Py_None;
}
else
- v = PyString_FromString(*(char**)addr);
+ v = PyBytes_FromString(*(char**)addr);
break;
case T_STRING_INPLACE:
- v = PyString_FromString((char*)addr);
+ v = PyBytes_FromString((char*)addr);
break;
case T_CHAR:
- v = PyString_FromStringAndSize((char*)addr, 1);
+ v = PyBytes_FromStringAndSize((char*)addr, 1);
break;
case T_OBJECT:
v = *(PyObject **)addr;
@@ -310,8 +310,8 @@
Py_XDECREF(oldv);
break;
case T_CHAR:
- if (PyString_Check(v) && PyString_Size(v) == 1) {
- *(char*)addr = PyString_AsString(v)[0];
+ if (PyBytes_Check(v) && PyBytes_Size(v) == 1) {
+ *(char*)addr = PyBytes_AsString(v)[0];
}
else {
PyErr_BadArgument();
Modified: python/branches/tlee-ast-optimize/Python/symtable.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/symtable.c (original)
+++ python/branches/tlee-ast-optimize/Python/symtable.c Sun Jun 1 17:18:10 2008
@@ -87,9 +87,9 @@
PyOS_snprintf(buf, sizeof(buf),
"<symtable entry %.100s(%ld), line %d>",
- PyString_AS_STRING(ste->ste_name),
+ PyBytes_AS_STRING(ste->ste_name),
PyInt_AS_LONG(ste->ste_id), ste->ste_lineno);
- return PyString_FromString(buf);
+ return PyBytes_FromString(buf);
}
static void
@@ -180,7 +180,7 @@
static identifier top = NULL, lambda = NULL, genexpr = NULL;
#define GET_IDENTIFIER(VAR) \
- ((VAR) ? (VAR) : ((VAR) = PyString_InternFromString(# VAR)))
+ ((VAR) ? (VAR) : ((VAR) = PyBytes_InternFromString(# VAR)))
#define DUPLICATE_ARGUMENT \
"duplicate argument '%s' in function definition"
@@ -372,7 +372,7 @@
if (flags & DEF_PARAM) {
PyErr_Format(PyExc_SyntaxError,
"name '%s' is local and global",
- PyString_AS_STRING(name));
+ PyBytes_AS_STRING(name));
return 0;
}
SET_SCOPE(dict, name, GLOBAL_EXPLICIT);
@@ -487,19 +487,19 @@
PyOS_snprintf(buf, sizeof(buf),
"import * is not allowed in function '%.100s' "
"because it is %s",
- PyString_AS_STRING(ste->ste_name), trailer);
+ PyBytes_AS_STRING(ste->ste_name), trailer);
break;
case OPT_BARE_EXEC:
PyOS_snprintf(buf, sizeof(buf),
"unqualified exec is not allowed in function "
"'%.100s' it %s",
- PyString_AS_STRING(ste->ste_name), trailer);
+ PyBytes_AS_STRING(ste->ste_name), trailer);
break;
default:
PyOS_snprintf(buf, sizeof(buf),
"function '%.100s' uses import * and bare exec, "
"which are illegal because it %s",
- PyString_AS_STRING(ste->ste_name), trailer);
+ PyBytes_AS_STRING(ste->ste_name), trailer);
break;
}
@@ -800,7 +800,7 @@
if ((flag & DEF_PARAM) && (val & DEF_PARAM)) {
/* Is it better to use 'mangled' or 'name' here? */
PyErr_Format(PyExc_SyntaxError, DUPLICATE_ARGUMENT,
- PyString_AsString(name));
+ PyBytes_AsString(name));
PyErr_SyntaxLocation(st->st_filename,
st->st_cur->ste_lineno);
goto error;
@@ -914,7 +914,7 @@
PyOS_snprintf(tmpname, sizeof(tmpname), "_[%d]",
++st->st_cur->ste_tmpname);
- tmp = PyString_InternFromString(tmpname);
+ tmp = PyBytes_InternFromString(tmpname);
if (!tmp)
return 0;
if (!symtable_add_def(st, tmp, DEF_LOCAL))
@@ -1065,7 +1065,7 @@
asdl_seq *seq = s->v.Global.names;
for (i = 0; i < asdl_seq_LEN(seq); i++) {
identifier name = (identifier)asdl_seq_GET(seq, i);
- char *c_name = PyString_AS_STRING(name);
+ char *c_name = PyBytes_AS_STRING(name);
long cur = symtable_lookup(st, name);
if (cur < 0)
return 0;
@@ -1219,7 +1219,7 @@
static int
symtable_implicit_arg(struct symtable *st, int pos)
{
- PyObject *id = PyString_FromFormat(".%d", pos);
+ PyObject *id = PyBytes_FromFormat(".%d", pos);
if (id == NULL)
return 0;
if (!symtable_add_def(st, id, DEF_PARAM)) {
@@ -1327,10 +1327,10 @@
*/
PyObject *store_name;
PyObject *name = (a->asname == NULL) ? a->name : a->asname;
- const char *base = PyString_AS_STRING(name);
+ const char *base = PyBytes_AS_STRING(name);
char *dot = strchr(base, '.');
if (dot) {
- store_name = PyString_FromStringAndSize(base, dot - base);
+ store_name = PyBytes_FromStringAndSize(base, dot - base);
if (!store_name)
return 0;
}
@@ -1338,7 +1338,7 @@
store_name = name;
Py_INCREF(store_name);
}
- if (strcmp(PyString_AS_STRING(name), "*")) {
+ if (strcmp(PyBytes_AS_STRING(name), "*")) {
int r = symtable_add_def(st, store_name, DEF_IMPORT);
Py_DECREF(store_name);
return r;
Modified: python/branches/tlee-ast-optimize/Python/sysmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/sysmodule.c (original)
+++ python/branches/tlee-ast-optimize/Python/sysmodule.c Sun Jun 1 17:18:10 2008
@@ -229,7 +229,7 @@
static PyObject *
sys_getdefaultencoding(PyObject *self)
{
- return PyString_FromString(PyUnicode_GetDefaultEncoding());
+ return PyBytes_FromString(PyUnicode_GetDefaultEncoding());
}
PyDoc_STRVAR(getdefaultencoding_doc,
@@ -261,7 +261,7 @@
sys_getfilesystemencoding(PyObject *self)
{
if (Py_FileSystemDefaultEncoding)
- return PyString_FromString(Py_FileSystemDefaultEncoding);
+ return PyBytes_FromString(Py_FileSystemDefaultEncoding);
Py_INCREF(Py_None);
return Py_None;
}
@@ -290,7 +290,7 @@
int i;
for (i = 0; i < 7; ++i) {
if (whatstrings[i] == NULL) {
- name = PyString_InternFromString(whatnames[i]);
+ name = PyBytes_InternFromString(whatnames[i]);
if (name == NULL)
return -1;
whatstrings[i] = name;
@@ -891,7 +891,7 @@
if (list == NULL)
return NULL;
for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
- PyObject *name = PyString_FromString(
+ PyObject *name = PyBytes_FromString(
PyImport_Inittab[i].name);
if (name == NULL)
break;
@@ -931,7 +931,7 @@
if (warnoptions == NULL)
return;
}
- str = PyString_FromString(s);
+ str = PyBytes_FromString(s);
if (str != NULL) {
PyList_Append(warnoptions, str);
Py_DECREF(str);
@@ -1232,9 +1232,6 @@
PyObject *m, *v, *sysdict;
PyObject *sysin, *sysout, *syserr;
char *s;
-#ifdef MS_WINDOWS
- char buf[128];
-#endif
m = Py_InitModule3("sys", sys_methods, sys_doc);
if (m == NULL)
@@ -1272,23 +1269,6 @@
syserr = PyFile_FromFile(stderr, "<stderr>", "w", _check_and_flush);
if (PyErr_Occurred())
return NULL;
-#ifdef MS_WINDOWS
- if(isatty(_fileno(stdin)) && PyFile_Check(sysin)) {
- sprintf(buf, "cp%d", GetConsoleCP());
- if (!PyFile_SetEncoding(sysin, buf))
- return NULL;
- }
- if(isatty(_fileno(stdout)) && PyFile_Check(sysout)) {
- sprintf(buf, "cp%d", GetConsoleOutputCP());
- if (!PyFile_SetEncoding(sysout, buf))
- return NULL;
- }
- if(isatty(_fileno(stderr)) && PyFile_Check(syserr)) {
- sprintf(buf, "cp%d", GetConsoleOutputCP());
- if (!PyFile_SetEncoding(syserr, buf))
- return NULL;
- }
-#endif
PyDict_SetItemString(sysdict, "stdin", sysin);
PyDict_SetItemString(sysdict, "stdout", sysout);
@@ -1306,7 +1286,7 @@
Py_XDECREF(syserr);
SET_SYS_FROM_STRING("version",
- PyString_FromString(Py_GetVersion()));
+ PyBytes_FromString(Py_GetVersion()));
SET_SYS_FROM_STRING("hexversion",
PyInt_FromLong(PY_VERSION_HEX));
svnversion_init();
@@ -1337,15 +1317,15 @@
SET_SYS_FROM_STRING("api_version",
PyInt_FromLong(PYTHON_API_VERSION));
SET_SYS_FROM_STRING("copyright",
- PyString_FromString(Py_GetCopyright()));
+ PyBytes_FromString(Py_GetCopyright()));
SET_SYS_FROM_STRING("platform",
- PyString_FromString(Py_GetPlatform()));
+ PyBytes_FromString(Py_GetPlatform()));
SET_SYS_FROM_STRING("executable",
- PyString_FromString(Py_GetProgramFullPath()));
+ PyBytes_FromString(Py_GetProgramFullPath()));
SET_SYS_FROM_STRING("prefix",
- PyString_FromString(Py_GetPrefix()));
+ PyBytes_FromString(Py_GetPrefix()));
SET_SYS_FROM_STRING("exec_prefix",
- PyString_FromString(Py_GetExecPrefix()));
+ PyBytes_FromString(Py_GetExecPrefix()));
SET_SYS_FROM_STRING("maxsize",
PyInt_FromSsize_t(PY_SSIZE_T_MAX));
SET_SYS_FROM_STRING("maxint",
@@ -1372,13 +1352,13 @@
else
value = "little";
SET_SYS_FROM_STRING("byteorder",
- PyString_FromString(value));
+ PyBytes_FromString(value));
}
#ifdef MS_COREDLL
SET_SYS_FROM_STRING("dllhandle",
PyLong_FromVoidPtr(PyWin_DLLhModule));
SET_SYS_FROM_STRING("winver",
- PyString_FromString(PyWin_DLLVersionString));
+ PyBytes_FromString(PyWin_DLLVersionString));
#endif
if (warnoptions == NULL) {
warnoptions = PyList_New(0);
@@ -1423,7 +1403,7 @@
p = strchr(path, delim);
if (p == NULL)
p = strchr(path, '\0'); /* End of string */
- w = PyString_FromStringAndSize(path, (Py_ssize_t) (p - path));
+ w = PyBytes_FromStringAndSize(path, (Py_ssize_t) (p - path));
if (w == NULL) {
Py_DECREF(v);
return NULL;
@@ -1468,14 +1448,14 @@
if (i == 0) {
char* fn = decc$translate_vms(argv[0]);
if ((fn == (char *)0) || fn == (char *)-1)
- v = PyString_FromString(argv[0]);
+ v = PyBytes_FromString(argv[0]);
else
- v = PyString_FromString(
+ v = PyBytes_FromString(
decc$translate_vms(argv[0]));
} else
- v = PyString_FromString(argv[i]);
+ v = PyBytes_FromString(argv[i]);
#else
- PyObject *v = PyString_FromString(argv[i]);
+ PyObject *v = PyBytes_FromString(argv[i]);
#endif
if (v == NULL) {
Py_DECREF(av);
@@ -1579,7 +1559,7 @@
#endif /* Unix */
}
#endif /* All others */
- a = PyString_FromStringAndSize(argv0, n);
+ a = PyBytes_FromStringAndSize(argv0, n);
if (a == NULL)
Py_FatalError("no mem for sys.path insertion");
if (PyList_Insert(path, 0, a) < 0)
Modified: python/branches/tlee-ast-optimize/Python/traceback.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/traceback.c (original)
+++ python/branches/tlee-ast-optimize/Python/traceback.c Sun Jun 1 17:18:10 2008
@@ -155,12 +155,12 @@
PyErr_Clear();
break;
}
- if (PyString_Check(v)) {
+ if (PyBytes_Check(v)) {
size_t len;
- len = PyString_GET_SIZE(v);
+ len = PyBytes_GET_SIZE(v);
if (len + 1 + taillen >= MAXPATHLEN)
continue; /* Too long */
- strcpy(namebuf, PyString_AsString(v));
+ strcpy(namebuf, PyBytes_AsString(v));
if (strlen(namebuf) != len)
continue; /* v contains '\0' */
if (len > 0 && namebuf[len-1] != SEP)
@@ -238,10 +238,10 @@
while (tb != NULL && err == 0) {
if (depth <= limit) {
err = tb_displayline(f,
- PyString_AsString(
+ PyBytes_AsString(
tb->tb_frame->f_code->co_filename),
tb->tb_lineno,
- PyString_AsString(tb->tb_frame->f_code->co_name));
+ PyBytes_AsString(tb->tb_frame->f_code->co_name));
}
depth--;
tb = tb->tb_next;
Modified: python/branches/tlee-ast-optimize/RISCOS/Modules/drawfmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/RISCOS/Modules/drawfmodule.c (original)
+++ python/branches/tlee-ast-optimize/RISCOS/Modules/drawfmodule.c Sun Jun 1 17:18:10 2008
@@ -333,7 +333,7 @@
char *dtable;
if(!PyArg_ParseTuple(arg,"O!",&PyDict_Type,&d)) return NULL;
while(PyDict_Next(d,&n,&key,&value))
- { int m=PyString_Size(value);
+ { int m=PyBytes_Size(value);
if(m<0||!PyInt_Check(key)) return NULL;
size+=m+2;
}
@@ -350,9 +350,9 @@
memset(dtable,0,size-8);
n=0;
while(PyDict_Next(d,&n,&key,&value))
- { int m=PyString_Size(value);
+ { int m=PyBytes_Size(value);
*dtable=(char)PyInt_AsLong(key);
- strcpy(dtable+1,PyString_AsString(value));
+ strcpy(dtable+1,PyBytes_AsString(value));
dtable+=m+2;
}
Py_INCREF(Py_None);return Py_None;
@@ -609,8 +609,8 @@
if (!strcmp(name, "__members__"))
{ PyObject *list = PyList_New(2);
if (list)
- { PyList_SetItem(list, 0, PyString_FromString("size"));
- PyList_SetItem(list, 1, PyString_FromString("start"));
+ { PyList_SetItem(list, 0, PyBytes_FromString("size"));
+ PyList_SetItem(list, 1, PyBytes_FromString("start"));
if (PyErr_Occurred()) { Py_DECREF(list);list = NULL;}
}
return list;
@@ -659,6 +659,6 @@
{ PyObject *m, *d;
m = Py_InitModule("drawf", DrawFMethods);
d = PyModule_GetDict(m);
- DrawFError=PyString_FromString("drawf.error");
+ DrawFError=PyBytes_FromString("drawf.error");
PyDict_SetItemString(d,"error",DrawFError);
}
Modified: python/branches/tlee-ast-optimize/RISCOS/Modules/riscosmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/RISCOS/Modules/riscosmodule.c (original)
+++ python/branches/tlee-ast-optimize/RISCOS/Modules/riscosmodule.c Sun Jun 1 17:18:10 2008
@@ -79,9 +79,9 @@
char *buf;
e=xosfscontrol_canonicalise_path(path,0,0,0,0,&len);
if(e) return riscos_oserror();
- obj=PyString_FromStringAndSize(NULL,-len);
+ obj=PyBytes_FromStringAndSize(NULL,-len);
if(obj==NULL) return NULL;
- buf=PyString_AsString(obj);
+ buf=PyBytes_AsString(obj);
e=xosfscontrol_canonicalise_path(path,buf,0,0,1-len,&len);
if(len!=1) return riscos_error("Error expanding path");
if(!e) return obj;
@@ -131,7 +131,7 @@
{ Py_DECREF(d);return riscos_oserror();
}
if(count)
- { v=PyString_FromString(buf);
+ { v=PyBytes_FromString(buf);
if(!v) { Py_DECREF(d);return 0;}
if(PyList_Append(d,v)) {Py_DECREF(d);Py_DECREF(v);return 0;}
}
@@ -320,7 +320,7 @@
char *name,*value;
if(!PyArg_ParseTuple(args,"s:getenv",&name)) return NULL;
value=getenv(name);
- if(value) return PyString_FromString(value);
+ if(value) return PyBytes_FromString(value);
Py_INCREF(Py_None);
return Py_None;
}
@@ -371,7 +371,7 @@
os_VARTYPE_EXPANDED,&size,(int *)&context,0))
{ PyObject *v;
value[size]='\0';
- v = PyString_FromString(value);
+ v = PyBytes_FromString(value);
if (v == NULL) continue;
PyDict_SetItemString(dict, context, v);
Py_DECREF(v);
Modified: python/branches/tlee-ast-optimize/RISCOS/Modules/swimodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/RISCOS/Modules/swimodule.c (original)
+++ python/branches/tlee-ast-optimize/RISCOS/Modules/swimodule.c Sun Jun 1 17:18:10 2008
@@ -66,10 +66,10 @@
b->length=4*size;
b->heap=1;
if(init)
- { if(PyString_Check(init))
- { int n=PyString_Size(init);
+ { if(PyBytes_Check(init))
+ { int n=PyBytes_Size(init);
if (n>4*size) n=4*size;
- memcpy(b->block,PyString_AsString(init),n);
+ memcpy(b->block,PyBytes_AsString(init),n);
memset((char*)b->block+n,0,4*size-n);
}
else
@@ -113,7 +113,7 @@
{ PyErr_SetString(PyExc_IndexError,"block index out of range");
return NULL;
}
- return PyString_FromStringAndSize((char*)self->block+s,e-s);
+ return PyBytes_FromStringAndSize((char*)self->block+s,e-s);
}
static PyObject *PyBlock_NullString(PyBlockObject *self,PyObject *arg)
@@ -125,7 +125,7 @@
return NULL;
}
for(i=s;i<e;i++) if(p[i]==0) break;
- return PyString_FromStringAndSize((char*)self->block+s,i-s);
+ return PyBytes_FromStringAndSize((char*)self->block+s,i-s);
}
static PyObject *PyBlock_CtrlString(PyBlockObject *self,PyObject *arg)
@@ -137,7 +137,7 @@
return NULL;
}
for(i=s;i<e;i++) if(p[i]<32) break;
- return PyString_FromStringAndSize((char*)self->block+s,i-s);
+ return PyBytes_FromStringAndSize((char*)self->block+s,i-s);
}
static PyObject *PyBlock_PadString(PyBlockObject *self,PyObject *arg)
@@ -296,9 +296,9 @@
if (!strcmp(name, "__members__"))
{ PyObject *list = PyList_New(3);
if (list)
- { PyList_SetItem(list, 0, PyString_FromString("length"));
- PyList_SetItem(list, 1, PyString_FromString("start"));
- PyList_SetItem(list, 2, PyString_FromString("end"));
+ { PyList_SetItem(list, 0, PyBytes_FromString("length"));
+ PyList_SetItem(list, 1, PyBytes_FromString("start"));
+ PyList_SetItem(list, 2, PyBytes_FromString("end"));
if (PyErr_Occurred()) { Py_DECREF(list);list = NULL;}
}
return list;
@@ -402,7 +402,7 @@
for(;*fmt;fmt++)
{ switch(*fmt)
{ case 'i':v=PyInt_FromLong((long)r.r[rno++]); break;
- case 's':v=PyString_FromString((char*)(r.r[rno++])); break;
+ case 's':v=PyBytes_FromString((char*)(r.r[rno++])); break;
case '.':rno++; continue;
case '*':v=PyInt_FromLong((long)carry); break;
}
@@ -421,7 +421,7 @@
if(!PyArg_ParseTuple(arg,"i|i",(unsigned int *)&s, &l)) return NULL;
if (l==-1)
l = strlen(s);
- return PyString_FromStringAndSize((char*)s, l);
+ return PyBytes_FromStringAndSize((char*)s, l);
}
static char swi_string__doc__[] =
Modified: python/branches/tlee-ast-optimize/configure.in
==============================================================================
--- python/branches/tlee-ast-optimize/configure.in (original)
+++ python/branches/tlee-ast-optimize/configure.in Sun Jun 1 17:18:10 2008
@@ -1,4 +1,7 @@
-dnl Process this file with autoconf 2.0 or later to make a configure script.
+dnl ***********************************************
+dnl * Please run autoreconf to test your changes! *
+dnl ***********************************************
+dnl NOTE: autoconf 2.64 doesn't seem to work (use 2.63).
# Set VERSION so we only need to edit in one place (i.e., here)
m4_define(PYTHON_VERSION, 2.6)
Modified: python/branches/tlee-ast-optimize/setup.py
==============================================================================
--- python/branches/tlee-ast-optimize/setup.py (original)
+++ python/branches/tlee-ast-optimize/setup.py Sun Jun 1 17:18:10 2008
@@ -5,6 +5,7 @@
import sys, os, imp, re, optparse
from glob import glob
+from platform import machine as platform_machine
from distutils import log
from distutils import sysconfig
@@ -687,13 +688,39 @@
# a release. Most open source OSes come with one or more
# versions of BerkeleyDB already installed.
- max_db_ver = (4, 5) # XXX(gregory.p.smith): 4.6 "works" but seems to
- # have issues on many platforms. I've temporarily
- # disabled 4.6 to see what the odd platform
- # buildbots say.
+ max_db_ver = (4, 7)
min_db_ver = (3, 3)
db_setup_debug = False # verbose debug prints from this script?
+ def allow_db_ver(db_ver):
+ """Returns a boolean if the given BerkeleyDB version is acceptable.
+
+ Args:
+ db_ver: A tuple of the version to verify.
+ """
+ if not (min_db_ver <= db_ver <= max_db_ver):
+ return False
+ # Use this function to filter out known bad configurations.
+ if (4, 6) == db_ver[:2]:
+ # BerkeleyDB 4.6.x is not stable on many architectures.
+ arch = platform_machine()
+ if arch not in ('i386', 'i486', 'i586', 'i686',
+ 'x86_64', 'ia64'):
+ return False
+ return True
+
+ def gen_db_minor_ver_nums(major):
+ if major == 4:
+ for x in range(max_db_ver[1]+1):
+ if allow_db_ver((4, x)):
+ yield x
+ elif major == 3:
+ for x in (3,):
+ if allow_db_ver((3, x)):
+ yield x
+ else:
+ raise ValueError("unknown major BerkeleyDB version", major)
+
# construct a list of paths to look for the header file in on
# top of the normal inc_dirs.
db_inc_paths = [
@@ -708,7 +735,7 @@
'/sw/include/db3',
]
# 4.x minor number specific paths
- for x in range(max_db_ver[1]+1):
+ for x in gen_db_minor_ver_nums(4):
db_inc_paths.append('/usr/include/db4%d' % x)
db_inc_paths.append('/usr/include/db4.%d' % x)
db_inc_paths.append('/usr/local/BerkeleyDB.4.%d/include' % x)
@@ -718,7 +745,7 @@
# MacPorts default (http://www.macports.org/)
db_inc_paths.append('/opt/local/include/db4%d' % x)
# 3.x minor number specific paths
- for x in (3,):
+ for x in gen_db_minor_ver_nums(3):
db_inc_paths.append('/usr/include/db3%d' % x)
db_inc_paths.append('/usr/local/BerkeleyDB.3.%d/include' % x)
db_inc_paths.append('/usr/local/include/db3%d' % x)
@@ -733,10 +760,10 @@
for dn in inc_dirs:
std_variants.append(os.path.join(dn, 'db3'))
std_variants.append(os.path.join(dn, 'db4'))
- for x in range(max_db_ver[1]+1):
+ for x in gen_db_minor_ver_nums(4):
std_variants.append(os.path.join(dn, "db4%d"%x))
std_variants.append(os.path.join(dn, "db4.%d"%x))
- for x in (3,):
+ for x in gen_db_minor_ver_nums(3):
std_variants.append(os.path.join(dn, "db3%d"%x))
std_variants.append(os.path.join(dn, "db3.%d"%x))
@@ -771,7 +798,7 @@
continue
if ( (not db_ver_inc_map.has_key(db_ver)) and
- (db_ver <= max_db_ver and db_ver >= min_db_ver) ):
+ allow_db_ver(db_ver) ):
# save the include directory with the db.h version
# (first occurrence only)
db_ver_inc_map[db_ver] = d
@@ -815,8 +842,9 @@
if db_setup_debug: print "db lib: ", dblib, "not found"
except db_found:
- print "bsddb using BerkeleyDB lib:", db_ver, dblib
- print "bsddb lib dir:", dblib_dir, " inc dir:", db_incdir
+ if db_setup_debug:
+ print "bsddb using BerkeleyDB lib:", db_ver, dblib
+ print "bsddb lib dir:", dblib_dir, " inc dir:", db_incdir
db_incs = [db_incdir]
dblibs = [dblib]
# We add the runtime_library_dirs argument because the
More information about the Python-checkins
mailing list