# - Handles blank input lines correctly
import re
-import string
import sys
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
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('<span class="versionmodified">%s</span>' % text)
+
# Support for marking up and linking to bugs.python.org issues
/* -- main layout ----------------------------------------------------------- */
-div.documentwrapper {
- float: left;
- width: 100%;
-}
-
-div.bodywrapper {
- margin: 0 0 0 230px;
-}
-
div.clearer {
clear: both;
}
font-style: italic;
}
+p.deprecated {
+ background-color: #ffe4e4;
+ border: 1px solid #f66;
+ padding: 7px
+}
+
.system-message {
background-color: #fda;
padding: 5px;
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 --------------------------------------------------------- */
vertical-align: middle;
}
-div.math p {
+div.body div.math p {
text-align: center;
}
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()
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):
"""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:]
"""
# This module is maintained by Marc-Andre Lemburg <mal@egenix.com>.
# 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.
#
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)
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
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?)
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
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)
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:
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
# 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
# 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))
}
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;
#endif
if (stgdict->format == NULL) {
Py_DECREF(result);
+ Py_DECREF(proto);
Py_DECREF((PyObject *)stgdict);
return NULL;
}
if (nevents < 0) {
PyErr_Format(PyExc_ValueError,
"Length of eventlist must be 0 or positive, got %d",
- nchanges);
+ nevents);
return NULL;
}
PyErr_NoMemory();
return NULL;
}
+ i = 0;
while ((ei = PyIter_Next(it)) != NULL) {
if (!kqueue_event_Check(ei)) {
Py_DECREF(ei);
"select.kevent objects");
goto error;
} else {
- chl[i] = ((kqueue_event_Object *)ei)->e;
+ chl[i++] = ((kqueue_event_Object *)ei)->e;
}
Py_DECREF(ei);
}
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);
/* 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));
/* 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);
/* 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<codelen ; i += CODESIZE(codestr[i])) {
}
if (j == PyList_GET_SIZE(consts)) {
if (PyList_Append(consts, Py_None) == -1)
- goto exitUnchanged;
+ goto exitError;
}
assert(PyList_GET_ITEM(consts, j) == Py_None);
codestr[i] = LOAD_CONST;
PyMem_Free(blocks);
return code;
+ exitError:
+ code = NULL;
+
exitUnchanged:
if (blocks != NULL)
PyMem_Free(blocks);
PyMem_Free(addrmap);
if (codestr != NULL)
PyMem_Free(codestr);
- Py_INCREF(code);
+ Py_XINCREF(code);
return code;
}
Read comp.lang.python, a high-volume discussion newsgroup about
Python, or comp.lang.python.announce, a low-volume moderated newsgroup
for Python-related announcements. These are also accessible as
-mailing lists: see http://www.python.org/community/lists.html for an
+mailing lists: see http://www.python.org/community/lists/ for an
overview of these and many other Python-related mailing lists.
Archives are accessible via the Google Groups Usenet archive; see
http://groups.google.com/. The mailing lists are also archived, see
-http://www.python.org/community/lists.html for details.
+http://www.python.org/community/lists/ for details.
Bug reports
-----------
To report or search for bugs, please use the Python Bug
-Tracker at http://bugs.python.org.
+Tracker at http://bugs.python.org/.
Patches and contributions
-------------------------
To submit a patch or other contribution, please use the Python Patch
-Manager at http://bugs.python.org. Guidelines
+Manager at http://bugs.python.org/. Guidelines
for patch submission may be found at http://www.python.org/dev/patches/.
If you have a proposal to change Python, you may want to send an email to the
See also the platform specific notes in the next section.
If you run into other trouble, see the FAQ
-(http://www.python.org/doc/faq) for hints on what can go wrong, and
+(http://www.python.org/doc/faq/) for hints on what can go wrong, and
how to fix it.
If you rerun the configure script with different options, remove all
HP-UX ia64: When building on the ia64 (Itanium) platform using HP's
compiler, some experience has shown that the compiler's
optimiser produces a completely broken version of python
- (see http://www.python.org/sf/814976). To work around this,
+ (see http://bugs.python.org/814976). To work around this,
edit the Makefile and remove -O from the OPT line.
To build a 64-bit executable on an Itanium 2 system using HP's
if it remains set.) You still have to edit the Makefile and
remove -O from the OPT line.
-HP PA-RISC 2.0: A recent bug report (http://www.python.org/sf/546117)
+HP PA-RISC 2.0: A recent bug report (http://bugs.python.org/546117)
suggests that the C compiler in this 64-bit system has bugs
in the optimizer that break Python. Compiling without
optimization solves the problems.
is now maintained by the equally famous Barry Warsaw (it's no
coincidence that they now both work on the same team). The latest
version, along with various other contributed Python-related Emacs
-goodies, is online at http://www.python.org/emacs/python-mode. And
+goodies, is online at http://www.python.org/emacs/python-mode/. And
if you are planning to edit the Python C code, please pick up the
-latest version of CC Mode http://www.python.org/emacs/cc-mode; it
+latest version of CC Mode http://www.python.org/emacs/cc-mode/; it
contains a "python" style used throughout most of the Python C source
files. (Newer versions of Emacs or XEmacs may already come with the
latest version of python-mode.)
next['if'] = next['elif'] = 'elif', 'else', 'end'
next['while'] = next['for'] = 'else', 'end'
next['try'] = 'except', 'finally'
-next['except'] = 'except', 'else', 'end'
+next['except'] = 'except', 'else', 'finally', 'end'
next['else'] = next['finally'] = next['def'] = next['class'] = 'end'
next['end'] = ()
-start = 'if', 'while', 'for', 'try', 'def', 'class'
+start = 'if', 'while', 'for', 'try', 'with', 'def', 'class'
class PythonIndenter: