summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/c-api/arg.rst26
-rw-r--r--Doc/includes/mp_benchmarks.py3
-rw-r--r--Doc/includes/mp_distributing.py3
-rw-r--r--Doc/includes/mp_newtype.py3
-rw-r--r--Doc/includes/mp_pool.py3
-rw-r--r--Doc/includes/mp_synchronize.py3
-rw-r--r--Doc/includes/mp_webserver.py3
-rw-r--r--Doc/includes/mp_workers.py3
-rw-r--r--Doc/library/bdb.rst5
-rw-r--r--Doc/library/collections.rst10
-rw-r--r--Doc/library/ctypes.rst2
-rw-r--r--Doc/library/os.rst8
-rw-r--r--Doc/library/sqlite3.rst4
-rw-r--r--Doc/tools/sphinxext/pyspecific.py2
-rw-r--r--Lib/multiprocessing/__init__.py2
-rw-r--r--Lib/optparse.py2
-rw-r--r--Lib/test/test_parser.py4
-rw-r--r--Modules/_multiprocessing/semaphore.c2
-rw-r--r--Modules/parsermodule.c38
-rw-r--r--Objects/unicodeobject.c2
-rwxr-xr-xPC/msvcrtmodule.c27
-rw-r--r--Tools/scripts/svneol.py6
-rw-r--r--configure.in2
23 files changed, 129 insertions, 34 deletions
diff --git a/Doc/c-api/arg.rst b/Doc/c-api/arg.rst
index e4b91b9..d64cc5c 100644
--- a/Doc/c-api/arg.rst
+++ b/Doc/c-api/arg.rst
@@ -32,6 +32,11 @@ variable(s) whose address should be passed.
converted to C strings using the default encoding. If this conversion fails, a
:exc:`UnicodeError` is raised.
+ Starting with Python 2.5 the type of the length argument can be
+ controlled by defining the macro :cmacro:`PY_SSIZE_T_CLEAN` before
+ including :file:`Python.h`. If the macro is defined, length is a
+ :ctype:`Py_ssize_t` rather than an int.
+
``s*`` (string, Unicode, or any buffer compatible object) [Py_buffer \*]
This is similar to ``s``, but the code fills a :ctype:`Py_buffer` structure
provided by the caller. In this case the Python string may contain embedded
@@ -43,17 +48,20 @@ variable(s) whose address should be passed.
has processed the data.
``s#`` (string, Unicode or any read buffer compatible object) [const char \*, int or :ctype:`Py_ssize_t`]
- This variant on ``s*`` stores into two C variables, the first one a pointer
- to a character string, the second one its length. All other read-buffer
- compatible objects pass back a reference to the raw internal data
- representation. Since this format doesn't allow writable buffer compatible
- objects like byte arrays, ``s*`` is to be preferred. The type of
- the length argument (int or :ctype:`Py_ssize_t`) is controlled by
+ This variant on ``s`` stores into two C variables, the first one a pointer to
+ a character string, the second one its length. In this case the Python
+ string may contain embedded null bytes. Unicode objects pass back a pointer
+ to the default encoded string version of the object if such a conversion is
+ possible. All other read-buffer compatible objects pass back a reference to
+ the raw internal data representation. Since this format doesn't allow writable buffer compatible objects like byte
+ arrays, ``s*`` is to be preferred.
+
+ The type of the length argument (int or :ctype:`Py_ssize_t`) is controlled by
defining the macro :cmacro:`PY_SSIZE_T_CLEAN` before including
:file:`Python.h`. If the macro was defined, length is a :ctype:`Py_ssize_t`
- rather than an int. This behavior will change in a future Python
- version to only support :ctype:`Py_ssize_t` and drop int support.
- It is best to always define :cmacro:`PY_SSIZE_T_CLEAN`.
+ rather than an int. This behavior will change in a future Python version to
+ only support :ctype:`Py_ssize_t` and drop int support. It is best to always
+ define :cmacro:`PY_SSIZE_T_CLEAN`.
``y`` (bytes object) [const char \*]
This variant on ``s`` converts a Python bytes or bytearray object to a C
diff --git a/Doc/includes/mp_benchmarks.py b/Doc/includes/mp_benchmarks.py
index 4556de0..72d4426 100644
--- a/Doc/includes/mp_benchmarks.py
+++ b/Doc/includes/mp_benchmarks.py
@@ -1,6 +1,9 @@
#
# Simple benchmarks for the multiprocessing package
#
+# Copyright (c) 2006-2008, R Oudkerk
+# All rights reserved.
+#
import time, sys, multiprocessing, threading, queue, gc
diff --git a/Doc/includes/mp_distributing.py b/Doc/includes/mp_distributing.py
index 3c61902..ef1e862 100644
--- a/Doc/includes/mp_distributing.py
+++ b/Doc/includes/mp_distributing.py
@@ -3,6 +3,9 @@
#
# Depends on `multiprocessing` package -- tested with `processing-0.60`
#
+# Copyright (c) 2006-2008, R Oudkerk
+# All rights reserved.
+#
__all__ = ['Cluster', 'Host', 'get_logger', 'current_process']
diff --git a/Doc/includes/mp_newtype.py b/Doc/includes/mp_newtype.py
index f020c93..d1a55a6 100644
--- a/Doc/includes/mp_newtype.py
+++ b/Doc/includes/mp_newtype.py
@@ -2,6 +2,9 @@
# This module shows how to use arbitrary callables with a subclass of
# `BaseManager`.
#
+# Copyright (c) 2006-2008, R Oudkerk
+# All rights reserved.
+#
from multiprocessing import freeze_support
from multiprocessing.managers import BaseManager, BaseProxy
diff --git a/Doc/includes/mp_pool.py b/Doc/includes/mp_pool.py
index c9f5815..46eac5a 100644
--- a/Doc/includes/mp_pool.py
+++ b/Doc/includes/mp_pool.py
@@ -1,6 +1,9 @@
#
# A test of `multiprocessing.Pool` class
#
+# Copyright (c) 2006-2008, R Oudkerk
+# All rights reserved.
+#
import multiprocessing
import time
diff --git a/Doc/includes/mp_synchronize.py b/Doc/includes/mp_synchronize.py
index 2939fc6..fd393f2 100644
--- a/Doc/includes/mp_synchronize.py
+++ b/Doc/includes/mp_synchronize.py
@@ -1,6 +1,9 @@
#
# A test file for the `multiprocessing` package
#
+# Copyright (c) 2006-2008, R Oudkerk
+# All rights reserved.
+#
import time, sys, random
from queue import Empty
diff --git a/Doc/includes/mp_webserver.py b/Doc/includes/mp_webserver.py
index b0f001d..0878de1 100644
--- a/Doc/includes/mp_webserver.py
+++ b/Doc/includes/mp_webserver.py
@@ -8,6 +8,9 @@
# Not sure if we should synchronize access to `socket.accept()` method by
# using a process-shared lock -- does not seem to be necessary.
#
+# Copyright (c) 2006-2008, R Oudkerk
+# All rights reserved.
+#
import os
import sys
diff --git a/Doc/includes/mp_workers.py b/Doc/includes/mp_workers.py
index 47dfb54..e66d97b 100644
--- a/Doc/includes/mp_workers.py
+++ b/Doc/includes/mp_workers.py
@@ -7,6 +7,9 @@
# in the original order then consider using `Pool.map()` or
# `Pool.imap()` (which will save on the amount of code needed anyway).
#
+# Copyright (c) 2006-2008, R Oudkerk
+# All rights reserved.
+#
import time
import random
diff --git a/Doc/library/bdb.rst b/Doc/library/bdb.rst
index fefb2ad..555b634 100644
--- a/Doc/library/bdb.rst
+++ b/Doc/library/bdb.rst
@@ -107,8 +107,9 @@ The :mod:`bdb` module also defines two classes:
The *arg* parameter depends on the previous event.
- For more information on trace functions, see :ref:`debugger-hooks`. For
- more information on code and frame objects, refer to :ref:`types`.
+ See the documentation for :func:`sys.settrace` for more information on the
+ trace function. For more information on code and frame objects, refer to
+ :ref:`types`.
.. method:: dispatch_line(frame)
diff --git a/Doc/library/collections.rst b/Doc/library/collections.rst
index 2edbbac..b12bd7a 100644
--- a/Doc/library/collections.rst
+++ b/Doc/library/collections.rst
@@ -48,7 +48,7 @@ ABC Inherits Abstract Methods Mixin
:class:`Iterable`, and ``__len__`` ``index``, and ``count``
:class:`Container`
-:class:`MutableSequnce` :class:`Sequence` ``__getitem__`` Inherited Sequence methods and
+:class:`MutableSequence` :class:`Sequence` ``__getitem__`` Inherited Sequence methods and
``__delitem__``, ``append``, ``reverse``, ``extend``, ``pop``,
``insert``, ``remove``, and ``__iadd__``
and ``__len__``
@@ -466,16 +466,16 @@ Named tuples assign meaning to each position in a tuple and allow for more reada
self-documenting code. They can be used wherever regular tuples are used, and
they add the ability to access fields by name instead of position index.
-.. function:: namedtuple(typename, fieldnames, [verbose])
+.. function:: namedtuple(typename, field_names, [verbose])
Returns a new tuple subclass named *typename*. The new subclass is used to
create tuple-like objects that have fields accessible by attribute lookup as
well as being indexable and iterable. Instances of the subclass also have a
- helpful docstring (with typename and fieldnames) and a helpful :meth:`__repr__`
+ helpful docstring (with typename and field_names) and a helpful :meth:`__repr__`
method which lists the tuple contents in a ``name=value`` format.
- The *fieldnames* are a single string with each fieldname separated by whitespace
- and/or commas, for example ``'x y'`` or ``'x, y'``. Alternatively, *fieldnames*
+ The *field_names* are a single string with each fieldname separated by whitespace
+ and/or commas, for example ``'x y'`` or ``'x, y'``. Alternatively, *field_names*
can be a sequence of strings such as ``['x', 'y']``.
Any valid Python identifier may be used for a fieldname except for names
diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst
index cacb5ab..a574b56 100644
--- a/Doc/library/ctypes.rst
+++ b/Doc/library/ctypes.rst
@@ -1368,7 +1368,7 @@ function exported by these libraries, and reacquired afterwards.
All these classes can be instantiated by calling them with at least one
argument, the pathname of the shared library. If you have an existing handle to
-an already loaded shard library, it can be passed as the ``handle`` named
+an already loaded shared library, it can be passed as the ``handle`` named
parameter, otherwise the underlying platforms ``dlopen`` or :meth:`LoadLibrary`
function is used to load the library into the process, and to get a handle to
it.
diff --git a/Doc/library/os.rst b/Doc/library/os.rst
index 81a3f35..3cc77bc 100644
--- a/Doc/library/os.rst
+++ b/Doc/library/os.rst
@@ -805,10 +805,10 @@ Files and Directories
.. function:: listdir(path)
- Return a list containing the names of the entries in the directory. The list
- is in arbitrary order. It does not include the special entries ``.`` and
- ``..`` even if they are present in the directory. Availability: Unix,
- Windows.
+ Return a list containing the names of the entries in the directory given by
+ *path*. The list is in arbitrary order. It does not include the special
+ entries ``'.'`` and ``'..'`` even if they are present in the directory.
+ Availability: Unix, Windows.
This function can be called with a bytes or string argument. In the bytes
case, all filenames will be listed as returned by the underlying API. In the
diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst
index 5a22ae4..2dd29c1 100644
--- a/Doc/library/sqlite3.rst
+++ b/Doc/library/sqlite3.rst
@@ -221,8 +221,8 @@ Connection Objects
.. attribute:: Connection.isolation_level
- Get or set the current isolation level. :const:`None` for autocommit mode or one of
- "DEFERRED", "IMMEDIATE" or "EXLUSIVE". See section
+ Get or set the current isolation level. :const:`None` for autocommit mode or
+ one of "DEFERRED", "IMMEDIATE" or "EXCLUSIVE". See section
:ref:`sqlite3-controlling-transactions` for a more detailed explanation.
diff --git a/Doc/tools/sphinxext/pyspecific.py b/Doc/tools/sphinxext/pyspecific.py
index 42bb1bf..9ff9a7a 100644
--- a/Doc/tools/sphinxext/pyspecific.py
+++ b/Doc/tools/sphinxext/pyspecific.py
@@ -46,7 +46,7 @@ from pprint import pformat
from docutils.io import StringOutput
from docutils.utils import new_document
from sphinx.builder import Builder
-from sphinx.textwriter import TextWriter
+from sphinx.writers.text import TextWriter
class PydocTopicsBuilder(Builder):
name = 'pydoc-topics'
diff --git a/Lib/multiprocessing/__init__.py b/Lib/multiprocessing/__init__.py
index a9e2086..aad4191 100644
--- a/Lib/multiprocessing/__init__.py
+++ b/Lib/multiprocessing/__init__.py
@@ -112,7 +112,7 @@ def cpu_count():
num = int(os.environ['NUMBER_OF_PROCESSORS'])
except (ValueError, KeyError):
num = 0
- elif sys.platform == 'darwin':
+ elif 'bsd' in sys.platform or sys.platform == 'darwin':
try:
num = int(os.popen('sysctl -n hw.ncpu').read())
except ValueError:
diff --git a/Lib/optparse.py b/Lib/optparse.py
index 3792e76..2511595 100644
--- a/Lib/optparse.py
+++ b/Lib/optparse.py
@@ -797,7 +797,7 @@ class Option:
parser.print_version()
parser.exit()
else:
- raise RuntimeError("unknown action %r" % self.action)
+ raise ValueError("unknown action %r" % self.action)
return 1
diff --git a/Lib/test/test_parser.py b/Lib/test/test_parser.py
index 4490052..17d1988 100644
--- a/Lib/test/test_parser.py
+++ b/Lib/test/test_parser.py
@@ -189,6 +189,10 @@ class RoundtripLegalSyntaxTestCase(unittest.TestCase):
def test_assert(self):
self.check_suite("assert alo < ahi and blo < bhi\n")
+ def test_with(self):
+ self.check_suite("with open('x'): pass\n")
+ self.check_suite("with open('x') as f: pass\n")
+
def test_position(self):
# An absolutely minimal test of position information. Better
# tests would be a big project.
diff --git a/Modules/_multiprocessing/semaphore.c b/Modules/_multiprocessing/semaphore.c
index a7ffd1e..a5ba71e 100644
--- a/Modules/_multiprocessing/semaphore.c
+++ b/Modules/_multiprocessing/semaphore.c
@@ -512,7 +512,6 @@ semlock_getvalue(SemLockObject *self)
static PyObject *
semlock_iszero(SemLockObject *self)
{
- int sval;
#if HAVE_BROKEN_SEM_GETVALUE
if (sem_trywait(self->handle) < 0) {
if (errno == EAGAIN)
@@ -524,6 +523,7 @@ semlock_iszero(SemLockObject *self)
Py_RETURN_FALSE;
}
#else
+ int sval;
if (SEM_GETVALUE(self->handle, &sval) < 0)
return mp_SetError(NULL, MP_STANDARD_ERROR);
return PyBool_FromLong((long)sval == 0);
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c
index 58d7dfb..51660aa 100644
--- a/Modules/parsermodule.c
+++ b/Modules/parsermodule.c
@@ -1438,7 +1438,7 @@ validate_small_stmt(node *tree)
/* compound_stmt:
- * if_stmt | while_stmt | for_stmt | try_stmt | funcdef | classdef | decorated
+ * if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated
*/
static int
validate_compound_stmt(node *tree)
@@ -1456,6 +1456,7 @@ validate_compound_stmt(node *tree)
|| (ntype == while_stmt)
|| (ntype == for_stmt)
|| (ntype == try_stmt)
+ || (ntype == with_stmt)
|| (ntype == funcdef)
|| (ntype == classdef)
|| (ntype == decorated))
@@ -2399,6 +2400,38 @@ validate_decorators(node *tree)
return ok;
}
+/* with_var
+with_var: 'as' expr
+ */
+static int
+validate_with_var(node *tree)
+{
+ int nch = NCH(tree);
+ int ok = (validate_ntype(tree, with_var)
+ && (nch == 2)
+ && validate_name(CHILD(tree, 0), "as")
+ && validate_expr(CHILD(tree, 1)));
+ return ok;
+}
+
+/* with_stmt
+ * 0 1 2 -2 -1
+with_stmt: 'with' test [ with_var ] ':' suite
+ */
+static int
+validate_with_stmt(node *tree)
+{
+ int nch = NCH(tree);
+ int ok = (validate_ntype(tree, with_stmt)
+ && ((nch == 4) || (nch == 5))
+ && validate_name(CHILD(tree, 0), "with")
+ && validate_test(CHILD(tree, 1))
+ && (nch == 4 || validate_with_var(CHILD(tree, 2)))
+ && validate_colon(RCHILD(tree, -2))
+ && validate_suite(RCHILD(tree, -1)));
+ return ok;
+}
+
/* funcdef:
*
* -5 -4 -3 -2 -1
@@ -2775,6 +2808,9 @@ validate_node(node *tree)
case funcdef:
res = validate_funcdef(tree);
break;
+ case with_stmt:
+ res = validate_with_stmt(tree);
+ break;
case classdef:
res = validate_class(tree);
break;
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 2beb098..6f64a07 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -8030,7 +8030,7 @@ unicode_rsplit(PyUnicodeObject *self, PyObject *args)
}
PyDoc_STRVAR(splitlines__doc__,
-"S.splitlines([keepends]]) -> list of strings\n\
+"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\
diff --git a/PC/msvcrtmodule.c b/PC/msvcrtmodule.c
index 542b4f7..f441aa3 100755
--- a/PC/msvcrtmodule.c
+++ b/PC/msvcrtmodule.c
@@ -24,6 +24,12 @@
#include <crtdbg.h>
#include <windows.h>
+#ifdef _MSC_VER
+#if _MSC_VER >= 1500
+#include <crtassem.h>
+#endif
+#endif
+
// Force the malloc heap to clean itself up, and free unused blocks
// back to the OS. (According to the docs, only works on NT.)
static PyObject *
@@ -373,6 +379,7 @@ static struct PyModuleDef msvcrtmodule = {
PyMODINIT_FUNC
PyInit_msvcrt(void)
{
+ int st;
PyObject *d;
PyObject *m = PyModule_Create(&msvcrtmodule);
if (m == NULL)
@@ -401,5 +408,23 @@ PyInit_msvcrt(void)
insertint(d, "CRTDBG_FILE_STDOUT", (int)_CRTDBG_FILE_STDOUT);
insertint(d, "CRTDBG_REPORT_FILE", (int)_CRTDBG_REPORT_FILE);
#endif
- return m;
+
+ /* constants for the crt versions */
+#ifdef _VC_ASSEMBLY_PUBLICKEYTOKEN
+ st = PyModule_AddStringConstant(m, "VC_ASSEMBLY_PUBLICKEYTOKEN",
+ _VC_ASSEMBLY_PUBLICKEYTOKEN);
+ if (st < 0) return NULL;
+#endif
+#ifdef _CRT_ASSEMBLY_VERSION
+ st = PyModule_AddStringConstant(m, "CRT_ASSEMBLY_VERSION",
+ _CRT_ASSEMBLY_VERSION);
+ if (st < 0) return NULL;
+#endif
+#ifdef __LIBRARIES_ASSEMBLY_NAME_PREFIX
+ st = PyModule_AddStringConstant(m, "LIBRARIES_ASSEMBLY_NAME_PREFIX",
+ __LIBRARIES_ASSEMBLY_NAME_PREFIX);
+ if (st < 0) return NULL;
+#endif
+
+ return m;
}
diff --git a/Tools/scripts/svneol.py b/Tools/scripts/svneol.py
index 9e57bb4..9357c7e 100644
--- a/Tools/scripts/svneol.py
+++ b/Tools/scripts/svneol.py
@@ -39,9 +39,9 @@ def propfiles(root, fn):
format = int(open(os.path.join(root, ".svn", "format")).read().strip())
except IOError:
return []
- if format == 8:
- # In version 8, committed props are stored in prop-base,
- # local modifications in props
+ if format in (8, 9):
+ # In version 8 and 9, committed props are stored in prop-base, local
+ # modifications in props
return [os.path.join(root, ".svn", "prop-base", fn+".svn-base"),
os.path.join(root, ".svn", "props", fn+".svn-work")]
raise ValueError, "Unknown repository format"
diff --git a/configure.in b/configure.in
index 5a8bfe8..4f10986 100644
--- a/configure.in
+++ b/configure.in
@@ -1,7 +1,7 @@
dnl ***********************************************
dnl * Please run autoreconf to test your changes! *
dnl ***********************************************
-dnl NOTE: autoconf 2.64 doesn't seem to work (use 2.63).
+dnl NOTE: autoconf 2.64 doesn't seem to work (use 2.61).
# Set VERSION so we only need to edit in one place (i.e., here)
m4_define(PYTHON_VERSION, 3.0)