From f004d9dc844ea0f0a8c2cc599518904124887152 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Tue, 27 Oct 2009 15:39:53 +0000 Subject: Merged revisions 73206,73232,73299,73683,74020,74185,74544,74643,74647,74817,74838-74839,74865,74946,75402,75459,75604,75696 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73206 | georg.brandl | 2009-06-04 11:15:12 +0200 (Do, 04 Jun 2009) | 1 line #3584: ignore trailing newlines when placing the caret for a SyntaxError location. ........ r73232 | georg.brandl | 2009-06-04 20:59:58 +0200 (Do, 04 Jun 2009) | 1 line Add test for #3684. ........ r73299 | georg.brandl | 2009-06-08 20:41:36 +0200 (Mo, 08 Jun 2009) | 1 line Typo fix. ........ r73683 | georg.brandl | 2009-06-29 16:44:49 +0200 (Mo, 29 Jun 2009) | 1 line Fix error handling in PyCode_Optimize, by Alexander Schremmer at EuroPython sprint. ........ r74020 | georg.brandl | 2009-07-16 09:18:07 +0200 (Do, 16 Jul 2009) | 1 line #5910: fix kqueue for calls with more than one event. ........ r74185 | georg.brandl | 2009-07-23 11:17:09 +0200 (Do, 23 Jul 2009) | 1 line Fix the "pylocals" gdb command. ........ r74544 | georg.brandl | 2009-08-24 19:12:30 +0200 (Mo, 24 Aug 2009) | 1 line #6775: fix python.org URLs in README. ........ r74643 | georg.brandl | 2009-09-04 08:59:20 +0200 (Fr, 04 Sep 2009) | 2 lines Issue #2666: Handle BROWSER environment variable properly for unknown browser names in the webbrowser module. ........ r74647 | georg.brandl | 2009-09-04 10:17:04 +0200 (Fr, 04 Sep 2009) | 2 lines Issue #5275: In Cookie's Cookie.load(), properly handle non-string arguments as documented. ........ r74817 | georg.brandl | 2009-09-16 11:05:11 +0200 (Mi, 16 Sep 2009) | 1 line Make deprecation notices as visible as warnings are right now. ........ r74838 | georg.brandl | 2009-09-16 18:22:12 +0200 (Mi, 16 Sep 2009) | 1 line Remove some more boilerplate from the actual tests in test_pdb. ........ r74839 | georg.brandl | 2009-09-16 18:36:39 +0200 (Mi, 16 Sep 2009) | 1 line Make the pdb displayhook compatible with the standard displayhook: do not print Nones. Add a test for that. ........ r74865 | georg.brandl | 2009-09-17 09:49:37 +0200 (Do, 17 Sep 2009) | 1 line #6912: add "with" block support to pindent. ........ r74946 | georg.brandl | 2009-09-19 10:43:16 +0200 (Sa, 19 Sep 2009) | 1 line Update bug tracker reference. ........ r75402 | georg.brandl | 2009-10-14 17:51:48 +0200 (Mi, 14 Okt 2009) | 1 line #7125: fix typo. ........ r75459 | georg.brandl | 2009-10-17 10:57:43 +0200 (Sa, 17 Okt 2009) | 1 line Fix refleaks in _ctypes PyCSimpleType_New, which fixes the refleak seen in test___all__. ........ r75604 | georg.brandl | 2009-10-22 13:36:50 +0200 (Do, 22 Okt 2009) | 1 line Fix stylesheet for multi-paragraph impl-details. ........ r75696 | georg.brandl | 2009-10-25 21:25:43 +0100 (So, 25 Okt 2009) | 1 line Fix a demo. ........ --- Demo/comparisons/sortingtest.py | 14 ++++---------- Doc/tools/sphinxext/pyspecific.py | 14 ++++++++++++++ Doc/tools/sphinxext/static/basic.css | 25 +++++++++++++------------ Lib/Cookie.py | 4 +++- Lib/multiprocessing/queues.py | 2 +- Lib/pdb.py | 4 +++- Lib/platform.py | 2 +- Lib/test/test_kqueue.py | 16 ++++++++++++++++ Lib/test/test_traceback.py | 9 +++++++++ Lib/threading.py | 6 +++--- Lib/traceback.py | 2 +- Lib/webbrowser.py | 4 +++- Misc/gdbinit | 2 +- Modules/_ctypes/_ctypes.c | 6 +++--- Modules/selectmodule.c | 7 ++++--- Python/peephole.c | 15 +++++++++------ README | 18 +++++++++--------- Tools/scripts/pindent.py | 4 ++-- 18 files changed, 99 insertions(+), 55 deletions(-) diff --git a/Demo/comparisons/sortingtest.py b/Demo/comparisons/sortingtest.py index cabf626..08a73e3 100755 --- a/Demo/comparisons/sortingtest.py +++ b/Demo/comparisons/sortingtest.py @@ -24,7 +24,6 @@ # - Handles blank input lines correctly import re -import string import sys def main(): @@ -32,18 +31,13 @@ def main(): def makekey(item, prog=prog): match = prog.match(item) if match: - var, num = match.group(1, 2) - return string.atoi(num), var + var, num = match.groups() + return int(num), var else: # Bad input -- pretend it's a var with value 0 return 0, item - while 1: - line = sys.stdin.readline() - if not line: - break - items = line.split() - items = map(makekey, items) - items.sort() + for line in sys.stdin: + items = sorted(makekey(item) for item in line.split()) for num, var in items: print "%s=%s" % (var, num), print diff --git a/Doc/tools/sphinxext/pyspecific.py b/Doc/tools/sphinxext/pyspecific.py index ab2c545..8607531 100644 --- a/Doc/tools/sphinxext/pyspecific.py +++ b/Doc/tools/sphinxext/pyspecific.py @@ -20,6 +20,20 @@ Body.enum.converters['loweralpha'] = \ Body.enum.converters['lowerroman'] = \ Body.enum.converters['upperroman'] = lambda x: None +# monkey-patch HTML translator to give versionmodified paragraphs a class +from sphinx.writers.html import HTMLTranslator +from sphinx.locale import versionlabels +HTMLTranslator.visit_versionmodified = new_visit_versionmodified + +def new_visit_versionmodified(self, node): + self.body.append(self.starttag(node, 'p', CLASS=node['type'])) + text = versionlabels[node['type']] % node['version'] + if len(node): + text += ': ' + else: + text += '.' + self.body.append('%s' % text) + # Support for marking up and linking to bugs.python.org issues diff --git a/Doc/tools/sphinxext/static/basic.css b/Doc/tools/sphinxext/static/basic.css index caf52e1..aeb1381 100644 --- a/Doc/tools/sphinxext/static/basic.css +++ b/Doc/tools/sphinxext/static/basic.css @@ -5,15 +5,6 @@ /* -- main layout ----------------------------------------------------------- */ -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 0 0 0 230px; -} - div.clearer { clear: both; } @@ -338,6 +329,12 @@ dl.glossary dt { font-style: italic; } +p.deprecated { + background-color: #ffe4e4; + border: 1px solid #f66; + padding: 7px +} + .system-message { background-color: #fda; padding: 5px; @@ -355,8 +352,12 @@ dl.glossary dt { border: 1px solid #ccc; } -.impl-detail p { - margin: 0; +.impl-detail .compound-first { + margin-top: 0; +} + +.impl-detail .compound-last { + margin-bottom: 0; } /* -- code displays --------------------------------------------------------- */ @@ -405,7 +406,7 @@ img.math { vertical-align: middle; } -div.math p { +div.body div.math p { text-align: center; } diff --git a/Lib/Cookie.py b/Lib/Cookie.py index b2f7427..99a94da 100644 --- a/Lib/Cookie.py +++ b/Lib/Cookie.py @@ -624,7 +624,9 @@ class BaseCookie(dict): if type(rawdata) == type(""): self.__ParseString(rawdata) else: - self.update(rawdata) + # self.update() wouldn't call our custom __setitem__ + for k, v in rawdata.items(): + self[k] = v return # end load() diff --git a/Lib/multiprocessing/queues.py b/Lib/multiprocessing/queues.py index 0294678..ea27991 100644 --- a/Lib/multiprocessing/queues.py +++ b/Lib/multiprocessing/queues.py @@ -109,7 +109,7 @@ class Queue(object): self._rlock.release() def qsize(self): - # Raises NotImplementError on Mac OSX because of broken sem_getvalue() + # Raises NotImplementedError on Mac OSX because of broken sem_getvalue() return self._maxsize - self._sem._semlock._get_value() def empty(self): diff --git a/Lib/pdb.py b/Lib/pdb.py index e9f5632..3e5e898 100755 --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -198,7 +198,9 @@ class Pdb(bdb.Bdb, cmd.Cmd): """Custom displayhook for the exec in default(), which prevents assignment of the _ variable in the builtins. """ - print repr(obj) + # reproduce the behavior of the standard displayhook, not printing None + if obj is not None: + print repr(obj) def default(self, line): if line[:1] == '!': line = line[1:] diff --git a/Lib/platform.py b/Lib/platform.py index ee18749..90ad93d 100755 --- a/Lib/platform.py +++ b/Lib/platform.py @@ -10,7 +10,7 @@ """ # This module is maintained by Marc-Andre Lemburg . # If you find problems, please submit bug reports/patches via the -# Python SourceForge Project Page and assign them to "lemburg". +# Python bug tracker (http://bugs.python.org) and assign them to "lemburg". # # Note: Please keep this module compatible to Python 1.5.2. # diff --git a/Lib/test/test_kqueue.py b/Lib/test/test_kqueue.py index 05c1013..b887dc0 100644 --- a/Lib/test/test_kqueue.py +++ b/Lib/test/test_kqueue.py @@ -162,6 +162,22 @@ class TestKQueue(unittest.TestCase): server.close() serverSocket.close() + def testPair(self): + kq = select.kqueue() + a, b = socket.socketpair() + + a.send(b'foo') + event1 = select.kevent(a, select.KQ_FILTER_READ, select.KQ_EV_ADD | select.KQ_EV_ENABLE) + event2 = select.kevent(b, select.KQ_FILTER_READ, select.KQ_EV_ADD | select.KQ_EV_ENABLE) + r = kq.control([event1, event2], 1, 1) + self.assertTrue(r) + self.assertFalse(r[0].flags & select.KQ_EV_ERROR) + self.assertEquals(b.recv(r[0].data), b'foo') + + a.close() + b.close() + kq.close() + def test_main(): test_support.run_unittest(TestKQueue) diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py index 0708f81..1c067d7 100644 --- a/Lib/test/test_traceback.py +++ b/Lib/test/test_traceback.py @@ -34,6 +34,9 @@ class TracebackCases(unittest.TestCase): def syntax_error_with_caret(self): compile("def fact(x):\n\treturn x!\n", "?", "exec") + def syntax_error_with_caret_2(self): + compile("1 +\n", "?", "exec") + def syntax_error_without_caret(self): # XXX why doesn't compile raise the same traceback? import test.badsyntax_nocaret @@ -49,6 +52,12 @@ class TracebackCases(unittest.TestCase): self.assert_("^" in err[2]) # third line has caret self.assert_(err[1].find("!") == err[2].find("^")) # in the right place + err = self.get_exception_format(self.syntax_error_with_caret_2, + SyntaxError) + self.assert_("^" in err[2]) # third line has caret + self.assert_(err[2].count('\n') == 1) # and no additional newline + self.assert_(err[1].find("+") == err[2].find("^")) # in the right place + def test_nocaret(self): if is_jython: # jython adds a caret in this case (why shouldn't it?) diff --git a/Lib/threading.py b/Lib/threading.py index c1791d7..1182f19 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -133,7 +133,7 @@ class _RLock(_Verbose): def release(self): if self.__owner is not current_thread(): - raise RuntimeError("cannot release un-aquired lock") + raise RuntimeError("cannot release un-acquired lock") self.__count = count = self.__count - 1 if not count: self.__owner = None @@ -227,7 +227,7 @@ class _Condition(_Verbose): def wait(self, timeout=None): if not self._is_owned(): - raise RuntimeError("cannot wait on un-aquired lock") + raise RuntimeError("cannot wait on un-acquired lock") waiter = _allocate_lock() waiter.acquire() self.__waiters.append(waiter) @@ -269,7 +269,7 @@ class _Condition(_Verbose): def notify(self, n=1): if not self._is_owned(): - raise RuntimeError("cannot notify on un-aquired lock") + raise RuntimeError("cannot notify on un-acquired lock") __waiters = self.__waiters waiters = __waiters[:n] if not waiters: diff --git a/Lib/traceback.py b/Lib/traceback.py index 3d877ee..ed0f256 100644 --- a/Lib/traceback.py +++ b/Lib/traceback.py @@ -190,7 +190,7 @@ def format_exception_only(etype, value): if badline is not None: lines.append(' %s\n' % badline.strip()) if offset is not None: - caretspace = badline[:offset].lstrip() + caretspace = badline.rstrip('\n')[:offset].lstrip() # non-space whitespace (likes tabs) must be kept for alignment caretspace = ((c.isspace() and c or ' ') for c in caretspace) # only three spaces to account for offset1 == pos 0 diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py index 6cf8942..5cc0653 100644 --- a/Lib/webbrowser.py +++ b/Lib/webbrowser.py @@ -625,7 +625,9 @@ if "BROWSER" in os.environ: # and prepend to _tryorder for cmdline in _userchoices: if cmdline != '': - _synthesize(cmdline, -1) + cmd = _synthesize(cmdline, -1) + if cmd[1] is None: + register(cmdline, None, GenericBrowser(cmdline), -1) cmdline = None # to make del work if _userchoices was empty del cmdline del _userchoices diff --git a/Misc/gdbinit b/Misc/gdbinit index e648f16..316ff3d 100644 --- a/Misc/gdbinit +++ b/Misc/gdbinit @@ -29,7 +29,7 @@ end # print the local variables of the current frame define pylocals set $_i = 0 - while $_i < f->f_nlocals + while $_i < f->f_code->co_nlocals if f->f_localsplus + $_i != 0 set $_names = co->co_varnames set $_name = PyString_AsString(PyTuple_GetItem($_names, $_i)) diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 7e144f2..c62cec5 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -1889,17 +1889,16 @@ SimpleType_new(PyTypeObject *type, PyObject *args, PyObject *kwds) } fmt = getentry(PyString_AS_STRING(proto)); if (fmt == NULL) { - Py_DECREF(result); PyErr_Format(PyExc_ValueError, "_type_ '%s' not supported", PyString_AS_STRING(proto)); - return NULL; + goto error; } stgdict = (StgDictObject *)PyObject_CallObject( (PyObject *)&StgDict_Type, NULL); if (!stgdict) - return NULL; + goto error; stgdict->ffi_type_pointer = *fmt->pffi_type; stgdict->align = fmt->pffi_type->alignment; @@ -1914,6 +1913,7 @@ SimpleType_new(PyTypeObject *type, PyObject *args, PyObject *kwds) #endif if (stgdict->format == NULL) { Py_DECREF(result); + Py_DECREF(proto); Py_DECREF((PyObject *)stgdict); return NULL; } diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index 2638bdc..a254233 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -1487,7 +1487,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) if (nevents < 0) { PyErr_Format(PyExc_ValueError, "Length of eventlist must be 0 or positive, got %d", - nchanges); + nevents); return NULL; } @@ -1545,6 +1545,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) PyErr_NoMemory(); return NULL; } + i = 0; while ((ei = PyIter_Next(it)) != NULL) { if (!kqueue_event_Check(ei)) { Py_DECREF(ei); @@ -1553,7 +1554,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) "select.kevent objects"); goto error; } else { - chl[i] = ((kqueue_event_Object *)ei)->e; + chl[i++] = ((kqueue_event_Object *)ei)->e; } Py_DECREF(ei); } @@ -1584,7 +1585,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) goto error; } - for (i=0; i < gotevents; i++) { + for (i = 0; i < gotevents; i++) { kqueue_event_Object *ch; ch = PyObject_New(kqueue_event_Object, &kqueue_event_Type); diff --git a/Python/peephole.c b/Python/peephole.c index e9da377..139a62b 100644 --- a/Python/peephole.c +++ b/Python/peephole.c @@ -297,7 +297,7 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, /* Bail out if an exception is set */ if (PyErr_Occurred()) - goto exitUnchanged; + goto exitError; /* Bypass optimization when the lineno table is too complex */ assert(PyString_Check(lineno_obj)); @@ -315,7 +315,7 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, /* Make a modifiable copy of the code string */ codestr = (unsigned char *)PyMem_Malloc(codelen); if (codestr == NULL) - goto exitUnchanged; + goto exitError; codestr = (unsigned char *)memcpy(codestr, PyString_AS_STRING(code), codelen); @@ -330,11 +330,11 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, /* Mapping to new jump targets after NOPs are removed */ addrmap = (int *)PyMem_Malloc(codelen * sizeof(int)); if (addrmap == NULL) - goto exitUnchanged; + goto exitError; blocks = markblocks(codestr, codelen); if (blocks == NULL) - goto exitUnchanged; + goto exitError; assert(PyList_Check(consts)); for (i=0 ; i