summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/Makefile2
-rw-r--r--Doc/distutils/index.rst1
-rw-r--r--Doc/documenting/index.rst1
-rw-r--r--Doc/extending/index.rst1
-rw-r--r--Doc/library/index.rst1
-rw-r--r--Doc/library/os.rst10
-rw-r--r--Doc/library/string.rst1
-rw-r--r--Doc/library/webbrowser.rst4
-rw-r--r--Doc/reference/index.rst1
-rw-r--r--Doc/tools/sphinxext/pyspecific.py4
-rw-r--r--Doc/tutorial/index.rst1
-rw-r--r--Doc/using/index.rst1
-rw-r--r--Lib/distutils/version.py2
-rw-r--r--Lib/idlelib/configHandler.py2
-rw-r--r--Lib/test/crashers/bogus_sre_bytecode.py47
-rw-r--r--Lib/test/crashers/multithreaded_close.py14
-rw-r--r--Modules/_tkinter.c34
17 files changed, 50 insertions, 77 deletions
diff --git a/Doc/Makefile b/Doc/Makefile
index 0fc1124..317fcb0 100644
--- a/Doc/Makefile
+++ b/Doc/Makefile
@@ -31,7 +31,7 @@ help:
checkout:
@if [ ! -d tools/sphinx ]; then \
echo "Checking out Sphinx..."; \
- svn checkout $(SVNROOT)/doctools/trunk/sphinx tools/sphinx; \
+ svn checkout $(SVNROOT)/external/Sphinx-0.6.1/sphinx tools/sphinx; \
fi
@if [ ! -d tools/docutils ]; then \
echo "Checking out Docutils..."; \
diff --git a/Doc/distutils/index.rst b/Doc/distutils/index.rst
index 6d82c84..ace8280 100644
--- a/Doc/distutils/index.rst
+++ b/Doc/distutils/index.rst
@@ -16,6 +16,7 @@ very little overhead for build/release/install mechanics.
.. toctree::
:maxdepth: 2
+ :numbered:
introduction.rst
setupscript.rst
diff --git a/Doc/documenting/index.rst b/Doc/documenting/index.rst
index 5ec9fb6..b64dc75 100644
--- a/Doc/documenting/index.rst
+++ b/Doc/documenting/index.rst
@@ -23,6 +23,7 @@ to write reStructuredText if you're not so inclined; plain text contributions
are more than welcome as well.
.. toctree::
+ :numbered:
intro.rst
style.rst
diff --git a/Doc/extending/index.rst b/Doc/extending/index.rst
index 6e8cf79..92e6132 100644
--- a/Doc/extending/index.rst
+++ b/Doc/extending/index.rst
@@ -26,6 +26,7 @@ For a detailed description of the whole Python/C API, see the separate
.. toctree::
:maxdepth: 2
+ :numbered:
extending.rst
newtypes.rst
diff --git a/Doc/library/index.rst b/Doc/library/index.rst
index 236b6e7..aa582de 100644
--- a/Doc/library/index.rst
+++ b/Doc/library/index.rst
@@ -38,6 +38,7 @@ the `Python Package Index <http://pypi.python.org/pypi>`_.
.. toctree::
:maxdepth: 2
+ :numbered:
intro.rst
functions.rst
diff --git a/Doc/library/os.rst b/Doc/library/os.rst
index ef5beaa..fc62b0b 100644
--- a/Doc/library/os.rst
+++ b/Doc/library/os.rst
@@ -796,9 +796,10 @@ Files and Directories
function will not follow symbolic links. Availability: Unix.
-.. function:: link(src, dst)
+.. function:: link(source, link_name)
- Create a hard link pointing to *src* named *dst*. Availability: Unix.
+ Create a hard link pointing to *source* named *link_name*. Availability:
+ Unix.
.. function:: listdir(path)
@@ -1078,9 +1079,10 @@ Files and Directories
:attr:`f_flag`, :attr:`f_namemax`. Availability: Unix.
-.. function:: symlink(src, dst)
+.. function:: symlink(source, link_name)
- Create a symbolic link pointing to *src* named *dst*. Availability: Unix.
+ Create a symbolic link pointing to *source* named *link_name*. Availability:
+ Unix.
.. function:: unlink(path)
diff --git a/Doc/library/string.rst b/Doc/library/string.rst
index 2e444ad..5867a5a 100644
--- a/Doc/library/string.rst
+++ b/Doc/library/string.rst
@@ -218,6 +218,7 @@ does an index lookup using :func:`__getitem__`.
Some simple format string examples::
"First, thou shalt count to {0}" # References first positional argument
+ "Bring me a {}" # Implicitly references the first positional argument
"My quest is {name}" # References keyword argument 'name'
"Weight in tons {0.weight}" # 'weight' attribute of first positional arg
"Units destroyed: {players[0]}" # First element of keyword argument 'players'.
diff --git a/Doc/library/webbrowser.rst b/Doc/library/webbrowser.rst
index ed56741..c42283f 100644
--- a/Doc/library/webbrowser.rst
+++ b/Doc/library/webbrowser.rst
@@ -167,8 +167,8 @@ Here are some simple examples::
Browser Controller Objects
--------------------------
-Browser controllers provide these methods which parallel two of the module-level
-convenience functions:
+Browser controllers provide these methods which parallel three of the
+module-level convenience functions:
.. method:: controller.open(url[, new[, autoraise=1]])
diff --git a/Doc/reference/index.rst b/Doc/reference/index.rst
index dff745c..bd1a281 100644
--- a/Doc/reference/index.rst
+++ b/Doc/reference/index.rst
@@ -18,6 +18,7 @@ interfaces available to C/C++ programmers in detail.
.. toctree::
:maxdepth: 2
+ :numbered:
introduction.rst
lexical_analysis.rst
diff --git a/Doc/tools/sphinxext/pyspecific.py b/Doc/tools/sphinxext/pyspecific.py
index dc8a834..024a5fa 100644
--- a/Doc/tools/sphinxext/pyspecific.py
+++ b/Doc/tools/sphinxext/pyspecific.py
@@ -72,7 +72,9 @@ class PydocTopicsBuilder(Builder):
def write(self, *ignored):
writer = TextWriter(self)
- for label in self.status_iterator(pydoc_topic_labels, 'building topics... '):
+ for label in self.status_iterator(pydoc_topic_labels,
+ 'building topics... ',
+ length=len(pydoc_topic_labels)):
if label not in self.env.labels:
self.warn('label %r not in documentation' % label)
continue
diff --git a/Doc/tutorial/index.rst b/Doc/tutorial/index.rst
index dfc6ac0..8a1a8fb 100644
--- a/Doc/tutorial/index.rst
+++ b/Doc/tutorial/index.rst
@@ -44,6 +44,7 @@ various Python library modules described in the Python Library Reference.
The :ref:`glossary` is also worth going through.
.. toctree::
+ :numbered:
appetite.rst
interpreter.rst
diff --git a/Doc/using/index.rst b/Doc/using/index.rst
index ac5fd3c..6ce5a00 100644
--- a/Doc/using/index.rst
+++ b/Doc/using/index.rst
@@ -11,6 +11,7 @@ interpreter and things that make working with Python easier.
.. toctree::
+ :numbered:
cmdline.rst
unix.rst
diff --git a/Lib/distutils/version.py b/Lib/distutils/version.py
index 79d458d..ebcab84 100644
--- a/Lib/distutils/version.py
+++ b/Lib/distutils/version.py
@@ -207,7 +207,7 @@ class StrictVersion (Version):
# The rules according to Greg Stein:
-# 1) a version number has 1 or more numbers separate by a period or by
+# 1) a version number has 1 or more numbers separated by a period or by
# sequences of letters. If only periods, then these are compared
# left-to-right to determine an ordering.
# 2) sequences of letters are part of the tuple for comparison and are
diff --git a/Lib/idlelib/configHandler.py b/Lib/idlelib/configHandler.py
index 8b58bbe..73b8db5 100644
--- a/Lib/idlelib/configHandler.py
+++ b/Lib/idlelib/configHandler.py
@@ -246,7 +246,7 @@ class IdleConf:
else: #returning default, print warning
if warn_on_default:
warning = ('\n Warning: configHandler.py - IdleConf.GetOption -\n'
- ' problem retrieving configration option %r\n'
+ ' problem retrieving configuration option %r\n'
' from section %r.\n'
' returning default value: %r\n' %
(option, section, default))
diff --git a/Lib/test/crashers/bogus_sre_bytecode.py b/Lib/test/crashers/bogus_sre_bytecode.py
deleted file mode 100644
index 7f006d9..0000000
--- a/Lib/test/crashers/bogus_sre_bytecode.py
+++ /dev/null
@@ -1,47 +0,0 @@
-"""
-The regular expression engine in '_sre' can segfault when interpreting
-bogus bytecode.
-
-It is unclear whether this is a real bug or a "won't fix" case like
-bogus_code_obj.py, because it requires bytecode that is built by hand,
-as opposed to compiled by 're' from a string-source regexp. The
-difference with bogus_code_obj, though, is that the only existing regexp
-compiler is written in Python, so that the C code has no choice but
-accept arbitrary bytecode from Python-level.
-
-The test below builds and runs random bytecodes until 'match' crashes
-Python. I have not investigated why exactly segfaults occur nor how
-hard they would be to fix. Here are a few examples of 'code' that
-segfault for me:
-
- [21, 50814, 8, 29, 16]
- [21, 3967, 26, 10, 23, 54113]
- [29, 23, 0, 2, 5]
- [31, 64351, 0, 28, 3, 22281, 20, 4463, 9, 25, 59154, 15245, 2,
- 16343, 3, 11600, 24380, 10, 37556, 10, 31, 15, 31]
-
-Here is also a 'code' that triggers an infinite uninterruptible loop:
-
- [29, 1, 8, 21, 1, 43083, 6]
-
-"""
-
-import _sre, random
-
-def pick():
- n = random.randrange(-65536, 65536)
- if n < 0:
- n &= 31
- return n
-
-ss = ["", "world", "x" * 500]
-
-while 1:
- code = [pick() for i in range(random.randrange(5, 25))]
- print(code)
- pat = _sre.compile(None, 0, code)
- for s in ss:
- try:
- pat.match(s)
- except RuntimeError:
- pass
diff --git a/Lib/test/crashers/multithreaded_close.py b/Lib/test/crashers/multithreaded_close.py
deleted file mode 100644
index f862d28..0000000
--- a/Lib/test/crashers/multithreaded_close.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# f.close() is not thread-safe: calling it at the same time as another
-# operation (or another close) on the same file, but done from another
-# thread, causes crashes. The issue is more complicated than it seems,
-# witness the discussions in:
-#
-# http://bugs.python.org/issue595601
-# http://bugs.python.org/issue815646
-
-import _thread
-
-while 1:
- f = open("multithreaded_close.tmp", "w")
- _thread.start_new_thread(f.close, ())
- f.close()
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c
index 9e7f374..4d81058 100644
--- a/Modules/_tkinter.c
+++ b/Modules/_tkinter.c
@@ -732,6 +732,7 @@ Tkapp_New(char *screenName, char *className,
}
+#ifdef WITH_THREAD
static void
Tkapp_ThreadSend(TkappObject *self, Tcl_Event *ev,
Tcl_Condition *cond, Tcl_Mutex *mutex)
@@ -744,6 +745,7 @@ Tkapp_ThreadSend(TkappObject *self, Tcl_Event *ev,
Tcl_MutexUnlock(mutex);
Py_END_ALLOW_THREADS
}
+#endif
/** Tcl Eval **/
@@ -1110,8 +1112,8 @@ FromObj(PyObject* tkapp, Tcl_Obj *value)
return newPyTclObject(value);
}
+#ifdef WITH_THREAD
/* This mutex synchronizes inter-thread command calls. */
-
TCL_DECLARE_MUTEX(call_mutex)
typedef struct Tkapp_CallEvent {
@@ -1123,6 +1125,7 @@ typedef struct Tkapp_CallEvent {
PyObject **exc_type, **exc_value, **exc_tb;
Tcl_Condition *done;
} Tkapp_CallEvent;
+#endif
void
Tkapp_CallDeallocArgs(Tcl_Obj** objv, Tcl_Obj** objStore, int objc)
@@ -1210,6 +1213,8 @@ Tkapp_CallResult(TkappObject *self)
return res;
}
+#ifdef WITH_THREAD
+
/* Tkapp_CallProc is the event procedure that is executed in the context of
the Tcl interpreter thread. Initially, it holds the Tcl lock, and doesn't
hold the Python lock. */
@@ -1254,6 +1259,8 @@ done:
return 1;
}
+#endif
+
/* This is the main entry point for calling a Tcl command.
It supports three cases, with regard to threading:
1. Tcl is not threaded: Must have the Tcl lock, then can invoke command in
@@ -1483,9 +1490,11 @@ Tkapp_AddErrorInfo(PyObject *self, PyObject *args)
/** Tcl Variable **/
+typedef PyObject* (*EventFunc)(PyObject*, PyObject *args, int flags);
+
+#ifdef WITH_THREAD
TCL_DECLARE_MUTEX(var_mutex)
-typedef PyObject* (*EventFunc)(PyObject*, PyObject *args, int flags);
typedef struct VarEvent {
Tcl_Event ev; /* must be first */
PyObject *self;
@@ -1497,6 +1506,7 @@ typedef struct VarEvent {
PyObject **exc_val;
Tcl_Condition *cond;
} VarEvent;
+#endif
static int
varname_converter(PyObject *in, void *_out)
@@ -1518,6 +1528,8 @@ varname_converter(PyObject *in, void *_out)
return 0;
}
+#ifdef WITH_THREAD
+
static void
var_perform(VarEvent *ev)
{
@@ -1545,11 +1557,13 @@ var_proc(VarEvent* ev, int flags)
return 1;
}
+#endif
+
static PyObject*
var_invoke(EventFunc func, PyObject *selfptr, PyObject *args, int flags)
{
- TkappObject *self = (TkappObject*)selfptr;
#ifdef WITH_THREAD
+ TkappObject *self = (TkappObject*)selfptr;
if (self->threaded && self->thread_id != Tcl_GetCurrentThread()) {
TkappObject *self = (TkappObject*)selfptr;
VarEvent *ev;
@@ -2052,6 +2066,7 @@ PythonCmdDelete(ClientData clientData)
+#ifdef WITH_THREAD
TCL_DECLARE_MUTEX(command_mutex)
typedef struct CommandEvent{
@@ -2078,6 +2093,7 @@ Tkapp_CommandProc(CommandEvent *ev, int flags)
Tcl_MutexUnlock(&command_mutex);
return 1;
}
+#endif
static PyObject *
Tkapp_CreateCommand(PyObject *selfptr, PyObject *args)
@@ -2108,7 +2124,7 @@ Tkapp_CreateCommand(PyObject *selfptr, PyObject *args)
Py_INCREF(func);
data->self = selfptr;
data->func = func;
-
+#ifdef WITH_THREAD
if (self->threaded && self->thread_id != Tcl_GetCurrentThread()) {
Tcl_Condition cond = NULL;
CommandEvent *ev = (CommandEvent*)ckalloc(sizeof(CommandEvent));
@@ -2122,7 +2138,9 @@ Tkapp_CreateCommand(PyObject *selfptr, PyObject *args)
Tkapp_ThreadSend(self, (Tcl_Event*)ev, &cond, &command_mutex);
Tcl_ConditionFinalize(&cond);
}
- else {
+ else
+#endif
+ {
ENTER_TCL
err = Tcl_CreateCommand(
Tkapp_Interp(self), cmdName, PythonCmd,
@@ -2150,6 +2168,8 @@ Tkapp_DeleteCommand(PyObject *selfptr, PyObject *args)
if (!PyArg_ParseTuple(args, "s:deletecommand", &cmdName))
return NULL;
+
+#ifdef WITH_THREAD
if (self->threaded && self->thread_id != Tcl_GetCurrentThread()) {
Tcl_Condition cond = NULL;
CommandEvent *ev;
@@ -2164,7 +2184,9 @@ Tkapp_DeleteCommand(PyObject *selfptr, PyObject *args)
&command_mutex);
Tcl_ConditionFinalize(&cond);
}
- else {
+ else
+#endif
+ {
ENTER_TCL
err = Tcl_DeleteCommand(self->interp, cmdName);
LEAVE_TCL