Commit f004d9dc authored by Georg Brandl's avatar Georg Brandl

Merged revisions...

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.
........
parent a7fef6aa
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
# - Handles blank input lines correctly # - Handles blank input lines correctly
import re import re
import string
import sys import sys
def main(): def main():
...@@ -32,18 +31,13 @@ def main(): ...@@ -32,18 +31,13 @@ def main():
def makekey(item, prog=prog): def makekey(item, prog=prog):
match = prog.match(item) match = prog.match(item)
if match: if match:
var, num = match.group(1, 2) var, num = match.groups()
return string.atoi(num), var return int(num), var
else: else:
# Bad input -- pretend it's a var with value 0 # Bad input -- pretend it's a var with value 0
return 0, item return 0, item
while 1: for line in sys.stdin:
line = sys.stdin.readline() items = sorted(makekey(item) for item in line.split())
if not line:
break
items = line.split()
items = map(makekey, items)
items.sort()
for num, var in items: for num, var in items:
print "%s=%s" % (var, num), print "%s=%s" % (var, num),
print print
......
...@@ -20,6 +20,20 @@ Body.enum.converters['loweralpha'] = \ ...@@ -20,6 +20,20 @@ Body.enum.converters['loweralpha'] = \
Body.enum.converters['lowerroman'] = \ Body.enum.converters['lowerroman'] = \
Body.enum.converters['upperroman'] = lambda x: None 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 # Support for marking up and linking to bugs.python.org issues
......
...@@ -5,15 +5,6 @@ ...@@ -5,15 +5,6 @@
/* -- main layout ----------------------------------------------------------- */ /* -- main layout ----------------------------------------------------------- */
div.documentwrapper {
float: left;
width: 100%;
}
div.bodywrapper {
margin: 0 0 0 230px;
}
div.clearer { div.clearer {
clear: both; clear: both;
} }
...@@ -338,6 +329,12 @@ dl.glossary dt { ...@@ -338,6 +329,12 @@ dl.glossary dt {
font-style: italic; font-style: italic;
} }
p.deprecated {
background-color: #ffe4e4;
border: 1px solid #f66;
padding: 7px
}
.system-message { .system-message {
background-color: #fda; background-color: #fda;
padding: 5px; padding: 5px;
...@@ -355,8 +352,12 @@ dl.glossary dt { ...@@ -355,8 +352,12 @@ dl.glossary dt {
border: 1px solid #ccc; border: 1px solid #ccc;
} }
.impl-detail p { .impl-detail .compound-first {
margin: 0; margin-top: 0;
}
.impl-detail .compound-last {
margin-bottom: 0;
} }
/* -- code displays --------------------------------------------------------- */ /* -- code displays --------------------------------------------------------- */
...@@ -405,7 +406,7 @@ img.math { ...@@ -405,7 +406,7 @@ img.math {
vertical-align: middle; vertical-align: middle;
} }
div.math p { div.body div.math p {
text-align: center; text-align: center;
} }
......
...@@ -624,7 +624,9 @@ class BaseCookie(dict): ...@@ -624,7 +624,9 @@ class BaseCookie(dict):
if type(rawdata) == type(""): if type(rawdata) == type(""):
self.__ParseString(rawdata) self.__ParseString(rawdata)
else: else:
self.update(rawdata) # self.update() wouldn't call our custom __setitem__
for k, v in rawdata.items():
self[k] = v
return return
# end load() # end load()
......
...@@ -109,7 +109,7 @@ class Queue(object): ...@@ -109,7 +109,7 @@ class Queue(object):
self._rlock.release() self._rlock.release()
def qsize(self): 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() return self._maxsize - self._sem._semlock._get_value()
def empty(self): def empty(self):
......
...@@ -198,7 +198,9 @@ class Pdb(bdb.Bdb, cmd.Cmd): ...@@ -198,7 +198,9 @@ class Pdb(bdb.Bdb, cmd.Cmd):
"""Custom displayhook for the exec in default(), which prevents """Custom displayhook for the exec in default(), which prevents
assignment of the _ variable in the builtins. 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): def default(self, line):
if line[:1] == '!': line = line[1:] if line[:1] == '!': line = line[1:]
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
""" """
# This module is maintained by Marc-Andre Lemburg <mal@egenix.com>. # This module is maintained by Marc-Andre Lemburg <mal@egenix.com>.
# If you find problems, please submit bug reports/patches via the # 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. # Note: Please keep this module compatible to Python 1.5.2.
# #
......
...@@ -162,6 +162,22 @@ class TestKQueue(unittest.TestCase): ...@@ -162,6 +162,22 @@ class TestKQueue(unittest.TestCase):
server.close() server.close()
serverSocket.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(): def test_main():
test_support.run_unittest(TestKQueue) test_support.run_unittest(TestKQueue)
......
...@@ -34,6 +34,9 @@ class TracebackCases(unittest.TestCase): ...@@ -34,6 +34,9 @@ class TracebackCases(unittest.TestCase):
def syntax_error_with_caret(self): def syntax_error_with_caret(self):
compile("def fact(x):\n\treturn x!\n", "?", "exec") 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): def syntax_error_without_caret(self):
# XXX why doesn't compile raise the same traceback? # XXX why doesn't compile raise the same traceback?
import test.badsyntax_nocaret import test.badsyntax_nocaret
...@@ -49,6 +52,12 @@ class TracebackCases(unittest.TestCase): ...@@ -49,6 +52,12 @@ class TracebackCases(unittest.TestCase):
self.assert_("^" in err[2]) # third line has caret self.assert_("^" in err[2]) # third line has caret
self.assert_(err[1].find("!") == err[2].find("^")) # in the right place 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): def test_nocaret(self):
if is_jython: if is_jython:
# jython adds a caret in this case (why shouldn't it?) # jython adds a caret in this case (why shouldn't it?)
......
...@@ -133,7 +133,7 @@ class _RLock(_Verbose): ...@@ -133,7 +133,7 @@ class _RLock(_Verbose):
def release(self): def release(self):
if self.__owner is not current_thread(): 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 self.__count = count = self.__count - 1
if not count: if not count:
self.__owner = None self.__owner = None
...@@ -227,7 +227,7 @@ class _Condition(_Verbose): ...@@ -227,7 +227,7 @@ class _Condition(_Verbose):
def wait(self, timeout=None): def wait(self, timeout=None):
if not self._is_owned(): 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 = _allocate_lock()
waiter.acquire() waiter.acquire()
self.__waiters.append(waiter) self.__waiters.append(waiter)
...@@ -269,7 +269,7 @@ class _Condition(_Verbose): ...@@ -269,7 +269,7 @@ class _Condition(_Verbose):
def notify(self, n=1): def notify(self, n=1):
if not self._is_owned(): 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 = self.__waiters
waiters = __waiters[:n] waiters = __waiters[:n]
if not waiters: if not waiters:
......
...@@ -190,7 +190,7 @@ def format_exception_only(etype, value): ...@@ -190,7 +190,7 @@ def format_exception_only(etype, value):
if badline is not None: if badline is not None:
lines.append(' %s\n' % badline.strip()) lines.append(' %s\n' % badline.strip())
if offset is not None: 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 # non-space whitespace (likes tabs) must be kept for alignment
caretspace = ((c.isspace() and c or ' ') for c in caretspace) caretspace = ((c.isspace() and c or ' ') for c in caretspace)
# only three spaces to account for offset1 == pos 0 # only three spaces to account for offset1 == pos 0
......
...@@ -625,7 +625,9 @@ if "BROWSER" in os.environ: ...@@ -625,7 +625,9 @@ if "BROWSER" in os.environ:
# and prepend to _tryorder # and prepend to _tryorder
for cmdline in _userchoices: for cmdline in _userchoices:
if cmdline != '': 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 cmdline = None # to make del work if _userchoices was empty
del cmdline del cmdline
del _userchoices del _userchoices
......
...@@ -29,7 +29,7 @@ end ...@@ -29,7 +29,7 @@ end
# print the local variables of the current frame # print the local variables of the current frame
define pylocals define pylocals
set $_i = 0 set $_i = 0
while $_i < f->f_nlocals while $_i < f->f_code->co_nlocals
if f->f_localsplus + $_i != 0 if f->f_localsplus + $_i != 0
set $_names = co->co_varnames set $_names = co->co_varnames
set $_name = PyString_AsString(PyTuple_GetItem($_names, $_i)) set $_name = PyString_AsString(PyTuple_GetItem($_names, $_i))
......
...@@ -1889,17 +1889,16 @@ SimpleType_new(PyTypeObject *type, PyObject *args, PyObject *kwds) ...@@ -1889,17 +1889,16 @@ SimpleType_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
} }
fmt = getentry(PyString_AS_STRING(proto)); fmt = getentry(PyString_AS_STRING(proto));
if (fmt == NULL) { if (fmt == NULL) {
Py_DECREF(result);
PyErr_Format(PyExc_ValueError, PyErr_Format(PyExc_ValueError,
"_type_ '%s' not supported", "_type_ '%s' not supported",
PyString_AS_STRING(proto)); PyString_AS_STRING(proto));
return NULL; goto error;
} }
stgdict = (StgDictObject *)PyObject_CallObject( stgdict = (StgDictObject *)PyObject_CallObject(
(PyObject *)&StgDict_Type, NULL); (PyObject *)&StgDict_Type, NULL);
if (!stgdict) if (!stgdict)
return NULL; goto error;
stgdict->ffi_type_pointer = *fmt->pffi_type; stgdict->ffi_type_pointer = *fmt->pffi_type;
stgdict->align = fmt->pffi_type->alignment; stgdict->align = fmt->pffi_type->alignment;
...@@ -1914,6 +1913,7 @@ SimpleType_new(PyTypeObject *type, PyObject *args, PyObject *kwds) ...@@ -1914,6 +1913,7 @@ SimpleType_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
#endif #endif
if (stgdict->format == NULL) { if (stgdict->format == NULL) {
Py_DECREF(result); Py_DECREF(result);
Py_DECREF(proto);
Py_DECREF((PyObject *)stgdict); Py_DECREF((PyObject *)stgdict);
return NULL; return NULL;
} }
......
...@@ -1487,7 +1487,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) ...@@ -1487,7 +1487,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args)
if (nevents < 0) { if (nevents < 0) {
PyErr_Format(PyExc_ValueError, PyErr_Format(PyExc_ValueError,
"Length of eventlist must be 0 or positive, got %d", "Length of eventlist must be 0 or positive, got %d",
nchanges); nevents);
return NULL; return NULL;
} }
...@@ -1545,6 +1545,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) ...@@ -1545,6 +1545,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args)
PyErr_NoMemory(); PyErr_NoMemory();
return NULL; return NULL;
} }
i = 0;
while ((ei = PyIter_Next(it)) != NULL) { while ((ei = PyIter_Next(it)) != NULL) {
if (!kqueue_event_Check(ei)) { if (!kqueue_event_Check(ei)) {
Py_DECREF(ei); Py_DECREF(ei);
...@@ -1553,7 +1554,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) ...@@ -1553,7 +1554,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args)
"select.kevent objects"); "select.kevent objects");
goto error; goto error;
} else { } else {
chl[i] = ((kqueue_event_Object *)ei)->e; chl[i++] = ((kqueue_event_Object *)ei)->e;
} }
Py_DECREF(ei); Py_DECREF(ei);
} }
...@@ -1584,7 +1585,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) ...@@ -1584,7 +1585,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args)
goto error; goto error;
} }
for (i=0; i < gotevents; i++) { for (i = 0; i < gotevents; i++) {
kqueue_event_Object *ch; kqueue_event_Object *ch;
ch = PyObject_New(kqueue_event_Object, &kqueue_event_Type); ch = PyObject_New(kqueue_event_Object, &kqueue_event_Type);
......
...@@ -297,7 +297,7 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, ...@@ -297,7 +297,7 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
/* Bail out if an exception is set */ /* Bail out if an exception is set */
if (PyErr_Occurred()) if (PyErr_Occurred())
goto exitUnchanged; goto exitError;
/* Bypass optimization when the lineno table is too complex */ /* Bypass optimization when the lineno table is too complex */
assert(PyString_Check(lineno_obj)); assert(PyString_Check(lineno_obj));
...@@ -315,7 +315,7 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, ...@@ -315,7 +315,7 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
/* Make a modifiable copy of the code string */ /* Make a modifiable copy of the code string */
codestr = (unsigned char *)PyMem_Malloc(codelen); codestr = (unsigned char *)PyMem_Malloc(codelen);
if (codestr == NULL) if (codestr == NULL)
goto exitUnchanged; goto exitError;
codestr = (unsigned char *)memcpy(codestr, codestr = (unsigned char *)memcpy(codestr,
PyString_AS_STRING(code), codelen); PyString_AS_STRING(code), codelen);
...@@ -330,11 +330,11 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, ...@@ -330,11 +330,11 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
/* Mapping to new jump targets after NOPs are removed */ /* Mapping to new jump targets after NOPs are removed */
addrmap = (int *)PyMem_Malloc(codelen * sizeof(int)); addrmap = (int *)PyMem_Malloc(codelen * sizeof(int));
if (addrmap == NULL) if (addrmap == NULL)
goto exitUnchanged; goto exitError;
blocks = markblocks(codestr, codelen); blocks = markblocks(codestr, codelen);
if (blocks == NULL) if (blocks == NULL)
goto exitUnchanged; goto exitError;
assert(PyList_Check(consts)); assert(PyList_Check(consts));
for (i=0 ; i<codelen ; i += CODESIZE(codestr[i])) { for (i=0 ; i<codelen ; i += CODESIZE(codestr[i])) {
...@@ -391,7 +391,7 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, ...@@ -391,7 +391,7 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
} }
if (j == PyList_GET_SIZE(consts)) { if (j == PyList_GET_SIZE(consts)) {
if (PyList_Append(consts, Py_None) == -1) if (PyList_Append(consts, Py_None) == -1)
goto exitUnchanged; goto exitError;
} }
assert(PyList_GET_ITEM(consts, j) == Py_None); assert(PyList_GET_ITEM(consts, j) == Py_None);
codestr[i] = LOAD_CONST; codestr[i] = LOAD_CONST;
...@@ -618,6 +618,9 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, ...@@ -618,6 +618,9 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
PyMem_Free(blocks); PyMem_Free(blocks);
return code; return code;
exitError:
code = NULL;
exitUnchanged: exitUnchanged:
if (blocks != NULL) if (blocks != NULL)
PyMem_Free(blocks); PyMem_Free(blocks);
...@@ -625,6 +628,6 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, ...@@ -625,6 +628,6 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
PyMem_Free(addrmap); PyMem_Free(addrmap);
if (codestr != NULL) if (codestr != NULL)
PyMem_Free(codestr); PyMem_Free(codestr);
Py_INCREF(code); Py_XINCREF(code);
return code; return code;
} }
...@@ -107,26 +107,26 @@ Newsgroups and Mailing Lists ...@@ -107,26 +107,26 @@ Newsgroups and Mailing Lists
Read comp.lang.python, a high-volume discussion newsgroup about Read comp.lang.python, a high-volume discussion newsgroup about
Python, or comp.lang.python.announce, a low-volume moderated newsgroup Python, or comp.lang.python.announce, a low-volume moderated newsgroup
for Python-related announcements. These are also accessible as 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. overview of these and many other Python-related mailing lists.
Archives are accessible via the Google Groups Usenet archive; see Archives are accessible via the Google Groups Usenet archive; see
http://groups.google.com/. The mailing lists are also archived, 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 Bug reports
----------- -----------
To report or search for bugs, please use the Python Bug 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 Patches and contributions
------------------------- -------------------------
To submit a patch or other contribution, please use the Python Patch 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/. 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 If you have a proposal to change Python, you may want to send an email to the
...@@ -188,7 +188,7 @@ Troubleshooting ...@@ -188,7 +188,7 @@ Troubleshooting
See also the platform specific notes in the next section. See also the platform specific notes in the next section.
If you run into other trouble, see the FAQ 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. how to fix it.
If you rerun the configure script with different options, remove all If you rerun the configure script with different options, remove all
...@@ -404,7 +404,7 @@ HP-UX: When using threading, you may have to add -D_REENTRANT to the ...@@ -404,7 +404,7 @@ HP-UX: When using threading, you may have to add -D_REENTRANT to the
HP-UX ia64: When building on the ia64 (Itanium) platform using HP's HP-UX ia64: When building on the ia64 (Itanium) platform using HP's
compiler, some experience has shown that the compiler's compiler, some experience has shown that the compiler's
optimiser produces a completely broken version of python 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. edit the Makefile and remove -O from the OPT line.
To build a 64-bit executable on an Itanium 2 system using HP's To build a 64-bit executable on an Itanium 2 system using HP's
...@@ -424,7 +424,7 @@ HP-UX ia64: When building on the ia64 (Itanium) platform using HP's ...@@ -424,7 +424,7 @@ HP-UX ia64: When building on the ia64 (Itanium) platform using HP's
if it remains set.) You still have to edit the Makefile and if it remains set.) You still have to edit the Makefile and
remove -O from the OPT line. 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 suggests that the C compiler in this 64-bit system has bugs
in the optimizer that break Python. Compiling without in the optimizer that break Python. Compiling without
optimization solves the problems. optimization solves the problems.
...@@ -1171,9 +1171,9 @@ Misc/python-mode.el. Originally written by the famous Tim Peters, it ...@@ -1171,9 +1171,9 @@ Misc/python-mode.el. Originally written by the famous Tim Peters, it
is now maintained by the equally famous Barry Warsaw (it's no is now maintained by the equally famous Barry Warsaw (it's no
coincidence that they now both work on the same team). The latest coincidence that they now both work on the same team). The latest
version, along with various other contributed Python-related Emacs 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 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 contains a "python" style used throughout most of the Python C source
files. (Newer versions of Emacs or XEmacs may already come with the files. (Newer versions of Emacs or XEmacs may already come with the
latest version of python-mode.) latest version of python-mode.)
......
...@@ -88,10 +88,10 @@ next = {} ...@@ -88,10 +88,10 @@ next = {}
next['if'] = next['elif'] = 'elif', 'else', 'end' next['if'] = next['elif'] = 'elif', 'else', 'end'
next['while'] = next['for'] = 'else', 'end' next['while'] = next['for'] = 'else', 'end'
next['try'] = 'except', 'finally' 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['else'] = next['finally'] = next['def'] = next['class'] = 'end'
next['end'] = () next['end'] = ()
start = 'if', 'while', 'for', 'try', 'def', 'class' start = 'if', 'while', 'for', 'try', 'with', 'def', 'class'
class PythonIndenter: class PythonIndenter:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment