[pypy-commit] pypy guard-compatible: merge default
cfbolz
pypy.commits at gmail.com
Mon Jun 13 09:51:48 EDT 2016
Author: Carl Friedrich Bolz <cfbolz at gmx.de>
Branch: guard-compatible
Changeset: r85129:6ead2971b58b
Date: 2016-06-13 15:49 +0200
http://bitbucket.org/pypy/pypy/changeset/6ead2971b58b/
Log: merge default
diff too long, truncating to 2000 out of 16968 lines
diff --git a/.hgtags b/.hgtags
--- a/.hgtags
+++ b/.hgtags
@@ -22,3 +22,7 @@
bbd45126bc691f669c4ebdfbd74456cd274c6b92 release-5.0.1
3260adbeba4a8b6659d1cc0d0b41f266769b74da release-5.1
b0a649e90b6642251fb4a765fe5b27a97b1319a9 release-5.1.1
+80ef432a32d9baa4b3c5a54c215e8ebe499f6374 release-5.1.2
+40497617ae91caa1a394d8be6f9cd2de31cb0628 release-pypy3.3-v5.2
+40497617ae91caa1a394d8be6f9cd2de31cb0628 release-pypy3.3-v5.2
+c09c19272c990a0611b17569a0085ad1ab00c8ff release-pypy2.7-v5.3
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -43,17 +43,17 @@
Samuele Pedroni
Matti Picus
Alex Gaynor
+ Philip Jenvey
Brian Kearns
- Philip Jenvey
+ Ronan Lamy
Michael Hudson
- Ronan Lamy
+ Manuel Jacob
David Schneider
- Manuel Jacob
Holger Krekel
Christian Tismer
Hakan Ardo
+ Richard Plangger
Benjamin Peterson
- Richard Plangger
Anders Chrigstrom
Eric van Riet Paap
Wim Lavrijsen
@@ -93,9 +93,9 @@
stian
Jan de Mooij
Tyler Wade
+ Vincent Legoll
Michael Foord
Stephan Diehl
- Vincent Legoll
Stefan Schwarzer
Valentino Volonghi
Tomek Meka
@@ -104,17 +104,20 @@
Bruno Gola
David Malcolm
Jean-Paul Calderone
+ Mark Young
Timo Paulssen
Squeaky
+ Devin Jeanpierre
Marius Gedminas
Alexandre Fayolle
Simon Burton
+ Stefano Rivera
Martin Matusiak
Konstantin Lopuhin
- Stefano Rivera
Wenzhu Man
John Witulski
Laurence Tratt
+ Raffael Tfirst
Ivan Sichmann Freitas
Greg Price
Dario Bertini
@@ -122,13 +125,13 @@
Simon Cross
Edd Barrett
Andreas Stührk
+ Tobias Pape
Jean-Philippe St. Pierre
Guido van Rossum
Pavel Vinogradov
Spenser Bauman
Jeremy Thurgood
Paweł Piotr Przeradowski
- Tobias Pape
Paul deGrandis
Ilya Osadchiy
marky1991
@@ -140,7 +143,6 @@
Georg Brandl
Bert Freudenberg
Stian Andreassen
- Mark Young
Wanja Saatkamp
Gerald Klix
Mike Blume
@@ -156,11 +158,13 @@
Dusty Phillips
Lukas Renggli
Guenter Jantzen
+ William Leslie
Ned Batchelder
Tim Felgentreff
Anton Gulenko
Amit Regmi
Ben Young
+ Sergey Matyunin
Nicolas Chauvat
Andrew Durdin
Andrew Chambers
@@ -171,9 +175,9 @@
Yichao Yu
Rocco Moretti
Gintautas Miliauskas
- Devin Jeanpierre
Michael Twomey
Lucian Branescu Mihaila
+ anatoly techtonik
Gabriel Lavoie
Olivier Dormond
Jared Grubb
@@ -183,8 +187,6 @@
Brian Dorsey
Victor Stinner
Andrews Medina
- anatoly techtonik
- Sergey Matyunin
Stuart Williams
Jasper Schulz
Christian Hudon
@@ -208,11 +210,11 @@
Alex Perry
Vaibhav Sood
Alan McIntyre
- William Leslie
Alexander Sedov
Attila Gobi
Jasper.Schulz
Christopher Pope
+ Florin Papa
Christian Tismer
Marc Abramowitz
Dan Stromberg
@@ -228,7 +230,6 @@
Lukas Vacek
Kunal Grover
Andrew Dalke
- Florin Papa
Sylvain Thenault
Jakub Stasiak
Nathan Taylor
@@ -270,8 +271,9 @@
Yury V. Zaytsev
Anna Katrina Dominguez
Bobby Impollonia
- timo at eistee.fritz.box
+ Vasantha Ganesh K
Andrew Thompson
+ florinpapa
Yusei Tahara
Aaron Tubbs
Ben Darnell
@@ -295,9 +297,9 @@
Akira Li
Gustavo Niemeyer
Stephan Busemann
- florinpapa
Rafał Gałczyński
Matt Bogosian
+ timo
Christian Muirhead
Berker Peksag
James Lan
diff --git a/lib-python/2.7/subprocess.py b/lib-python/2.7/subprocess.py
--- a/lib-python/2.7/subprocess.py
+++ b/lib-python/2.7/subprocess.py
@@ -834,54 +834,63 @@
c2pread, c2pwrite = None, None
errread, errwrite = None, None
+ ispread = False
if stdin is None:
p2cread = _subprocess.GetStdHandle(_subprocess.STD_INPUT_HANDLE)
if p2cread is None:
p2cread, _ = _subprocess.CreatePipe(None, 0)
+ ispread = True
elif stdin == PIPE:
p2cread, p2cwrite = _subprocess.CreatePipe(None, 0)
+ ispread = True
elif isinstance(stdin, int):
p2cread = msvcrt.get_osfhandle(stdin)
else:
# Assuming file-like object
p2cread = msvcrt.get_osfhandle(stdin.fileno())
- p2cread = self._make_inheritable(p2cread)
+ p2cread = self._make_inheritable(p2cread, ispread)
# We just duplicated the handle, it has to be closed at the end
to_close.add(p2cread)
if stdin == PIPE:
to_close.add(p2cwrite)
+ ispwrite = False
if stdout is None:
c2pwrite = _subprocess.GetStdHandle(_subprocess.STD_OUTPUT_HANDLE)
if c2pwrite is None:
_, c2pwrite = _subprocess.CreatePipe(None, 0)
+ ispwrite = True
elif stdout == PIPE:
c2pread, c2pwrite = _subprocess.CreatePipe(None, 0)
+ ispwrite = True
elif isinstance(stdout, int):
c2pwrite = msvcrt.get_osfhandle(stdout)
else:
# Assuming file-like object
c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
- c2pwrite = self._make_inheritable(c2pwrite)
+ c2pwrite = self._make_inheritable(c2pwrite, ispwrite)
# We just duplicated the handle, it has to be closed at the end
to_close.add(c2pwrite)
if stdout == PIPE:
to_close.add(c2pread)
+ ispwrite = False
if stderr is None:
errwrite = _subprocess.GetStdHandle(_subprocess.STD_ERROR_HANDLE)
if errwrite is None:
_, errwrite = _subprocess.CreatePipe(None, 0)
+ ispwrite = True
elif stderr == PIPE:
errread, errwrite = _subprocess.CreatePipe(None, 0)
+ ispwrite = True
elif stderr == STDOUT:
- errwrite = c2pwrite.handle # pass id to not close it
+ errwrite = c2pwrite
elif isinstance(stderr, int):
errwrite = msvcrt.get_osfhandle(stderr)
else:
# Assuming file-like object
errwrite = msvcrt.get_osfhandle(stderr.fileno())
- errwrite = self._make_inheritable(errwrite)
+ errwrite = self._make_inheritable(errwrite, ispwrite)
# We just duplicated the handle, it has to be closed at the end
to_close.add(errwrite)
if stderr == PIPE:
@@ -892,13 +901,14 @@
errread, errwrite), to_close
- def _make_inheritable(self, handle):
+ def _make_inheritable(self, handle, close=False):
"""Return a duplicate of handle, which is inheritable"""
dupl = _subprocess.DuplicateHandle(_subprocess.GetCurrentProcess(),
handle, _subprocess.GetCurrentProcess(), 0, 1,
_subprocess.DUPLICATE_SAME_ACCESS)
- # If the initial handle was obtained with CreatePipe, close it.
- if not isinstance(handle, int):
+ # PyPy: If the initial handle was obtained with CreatePipe,
+ # close it.
+ if close:
handle.Close()
return dupl
diff --git a/lib-python/2.7/test/test_sys_settrace.py b/lib-python/2.7/test/test_sys_settrace.py
--- a/lib-python/2.7/test/test_sys_settrace.py
+++ b/lib-python/2.7/test/test_sys_settrace.py
@@ -328,8 +328,8 @@
def test_13_genexp(self):
if self.using_gc:
+ gc.enable()
test_support.gc_collect()
- gc.enable()
try:
self.run_test(generator_example)
# issue1265: if the trace function contains a generator,
diff --git a/lib_pypy/_pypy_interact.py b/lib_pypy/_pypy_interact.py
--- a/lib_pypy/_pypy_interact.py
+++ b/lib_pypy/_pypy_interact.py
@@ -6,7 +6,7 @@
irc_header = "And now for something completely different"
-def interactive_console(mainmodule=None, quiet=False):
+def interactive_console(mainmodule=None, quiet=False, future_flags=0):
# set sys.{ps1,ps2} just before invoking the interactive interpreter. This
# mimics what CPython does in pythonrun.c
if not hasattr(sys, 'ps1'):
@@ -37,15 +37,17 @@
raise ImportError
from pyrepl.simple_interact import run_multiline_interactive_console
except ImportError:
- run_simple_interactive_console(mainmodule)
+ run_simple_interactive_console(mainmodule, future_flags=future_flags)
else:
- run_multiline_interactive_console(mainmodule)
+ run_multiline_interactive_console(mainmodule, future_flags=future_flags)
-def run_simple_interactive_console(mainmodule):
+def run_simple_interactive_console(mainmodule, future_flags=0):
import code
if mainmodule is None:
import __main__ as mainmodule
console = code.InteractiveConsole(mainmodule.__dict__, filename='<stdin>')
+ if future_flags:
+ console.compile.compiler.flags |= future_flags
# some parts of code.py are copied here because it seems to be impossible
# to start an interactive console without printing at least one line
# of banner
diff --git a/lib_pypy/_pypy_irc_topic.py b/lib_pypy/_pypy_irc_topic.py
--- a/lib_pypy/_pypy_irc_topic.py
+++ b/lib_pypy/_pypy_irc_topic.py
@@ -224,23 +224,9 @@
va ClCl orvat bayl zbqrengryl zntvp vf n tbbq guvat <psobym>
"""
-from string import ascii_uppercase, ascii_lowercase
-
def rot13(data):
- """ A simple rot-13 encoder since `str.encode('rot13')` was removed from
- Python as of version 3.0. It rotates both uppercase and lowercase letters individually.
- """
- total = []
- for char in data:
- if char in ascii_uppercase:
- index = (ascii_uppercase.find(char) + 13) % 26
- total.append(ascii_uppercase[index])
- elif char in ascii_lowercase:
- index = (ascii_lowercase.find(char) + 13) % 26
- total.append(ascii_lowercase[index])
- else:
- total.append(char)
- return "".join(total)
+ return ''.join(chr(ord(c)+(13 if 'A'<=c.upper()<='M' else
+ -13 if 'N'<=c.upper()<='Z' else 0)) for c in data)
def some_topic():
import time
diff --git a/lib_pypy/_subprocess.py b/lib_pypy/_subprocess.py
--- a/lib_pypy/_subprocess.py
+++ b/lib_pypy/_subprocess.py
@@ -4,6 +4,9 @@
subprocess module on Windows.
"""
+import sys
+if sys.platform != 'win32':
+ raise ImportError("The '_subprocess' module is only available on Windows")
# Declare external Win32 functions
diff --git a/lib_pypy/cffi.egg-info/PKG-INFO b/lib_pypy/cffi.egg-info/PKG-INFO
--- a/lib_pypy/cffi.egg-info/PKG-INFO
+++ b/lib_pypy/cffi.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: cffi
-Version: 1.6.0
+Version: 1.7.0
Summary: Foreign Function Interface for Python calling C code.
Home-page: http://cffi.readthedocs.org
Author: Armin Rigo, Maciej Fijalkowski
diff --git a/lib_pypy/cffi/__init__.py b/lib_pypy/cffi/__init__.py
--- a/lib_pypy/cffi/__init__.py
+++ b/lib_pypy/cffi/__init__.py
@@ -4,8 +4,8 @@
from .api import FFI, CDefError, FFIError
from .ffiplatform import VerificationError, VerificationMissing
-__version__ = "1.6.0"
-__version_info__ = (1, 6, 0)
+__version__ = "1.7.0"
+__version_info__ = (1, 7, 0)
# The verifier module file names are based on the CRC32 of a string that
# contains the following version number. It may be older than __version__
diff --git a/lib_pypy/cffi/_cffi_include.h b/lib_pypy/cffi/_cffi_include.h
--- a/lib_pypy/cffi/_cffi_include.h
+++ b/lib_pypy/cffi/_cffi_include.h
@@ -57,6 +57,12 @@
# define _CFFI_UNUSED_FN /* nothing */
#endif
+#ifdef __cplusplus
+# ifndef _Bool
+# define _Bool bool /* semi-hackish: C++ has no _Bool; bool is builtin */
+# endif
+#endif
+
/********** CPython-specific section **********/
#ifndef PYPY_VERSION
diff --git a/lib_pypy/cffi/_embedding.h b/lib_pypy/cffi/_embedding.h
--- a/lib_pypy/cffi/_embedding.h
+++ b/lib_pypy/cffi/_embedding.h
@@ -233,7 +233,7 @@
f = PySys_GetObject((char *)"stderr");
if (f != NULL && f != Py_None) {
PyFile_WriteString("\nFrom: " _CFFI_MODULE_NAME
- "\ncompiled with cffi version: 1.6.0"
+ "\ncompiled with cffi version: 1.7.0"
"\n_cffi_backend module: ", f);
modules = PyImport_GetModuleDict();
mod = PyDict_GetItemString(modules, "_cffi_backend");
diff --git a/lib_pypy/cffi/api.py b/lib_pypy/cffi/api.py
--- a/lib_pypy/cffi/api.py
+++ b/lib_pypy/cffi/api.py
@@ -332,8 +332,8 @@
def from_buffer(self, python_buffer):
"""Return a <cdata 'char[]'> that points to the data of the
given Python object, which must support the buffer interface.
- Note that this is not meant to be used on the built-in types str,
- unicode, or bytearray (you can build 'char[]' arrays explicitly)
+ Note that this is not meant to be used on the built-in types
+ str or unicode (you can build 'char[]' arrays explicitly)
but only on objects containing large quantities of raw data
in some other format, like 'array.array' or numpy arrays.
"""
diff --git a/lib_pypy/cffi/backend_ctypes.py b/lib_pypy/cffi/backend_ctypes.py
--- a/lib_pypy/cffi/backend_ctypes.py
+++ b/lib_pypy/cffi/backend_ctypes.py
@@ -205,9 +205,7 @@
def __nonzero__(self):
return bool(self._address)
-
- def __bool__(self):
- return bool(self._address)
+ __bool__ = __nonzero__
@classmethod
def _to_ctypes(cls, value):
@@ -465,6 +463,7 @@
else:
def __nonzero__(self):
return self._value != 0
+ __bool__ = __nonzero__
if kind == 'float':
@staticmethod
diff --git a/lib_pypy/cffi/commontypes.py b/lib_pypy/cffi/commontypes.py
--- a/lib_pypy/cffi/commontypes.py
+++ b/lib_pypy/cffi/commontypes.py
@@ -35,8 +35,11 @@
"you call ffi.set_unicode()" % (commontype,))
else:
if commontype == cdecl:
- raise api.FFIError("Unsupported type: %r. Please file a bug "
- "if you think it should be." % (commontype,))
+ raise api.FFIError(
+ "Unsupported type: %r. Please look at "
+ "http://cffi.readthedocs.io/en/latest/cdef.html#ffi-cdef-limitations "
+ "and file an issue if you think this type should really "
+ "be supported." % (commontype,))
result, quals = parser.parse_type_and_quals(cdecl) # recursive
assert isinstance(result, model.BaseTypeByIdentity)
diff --git a/lib_pypy/cffi/recompiler.py b/lib_pypy/cffi/recompiler.py
--- a/lib_pypy/cffi/recompiler.py
+++ b/lib_pypy/cffi/recompiler.py
@@ -814,7 +814,7 @@
try:
if ftype.is_integer_type() or fbitsize >= 0:
# accept all integers, but complain on float or double
- prnt(" (void)((p->%s) << 1); /* check that '%s.%s' is "
+ prnt(" (void)((p->%s) | 0); /* check that '%s.%s' is "
"an integer */" % (fname, cname, fname))
continue
# only accept exactly the type declared, except that '[]'
@@ -991,7 +991,7 @@
prnt('static int %s(unsigned long long *o)' % funcname)
prnt('{')
prnt(' int n = (%s) <= 0;' % (name,))
- prnt(' *o = (unsigned long long)((%s) << 0);'
+ prnt(' *o = (unsigned long long)((%s) | 0);'
' /* check that %s is an integer */' % (name, name))
if check_value is not None:
if check_value > 0:
@@ -1250,7 +1250,7 @@
def _emit_bytecode_UnknownIntegerType(self, tp, index):
s = ('_cffi_prim_int(sizeof(%s), (\n'
- ' ((%s)-1) << 0 /* check that %s is an integer type */\n'
+ ' ((%s)-1) | 0 /* check that %s is an integer type */\n'
' ) <= 0)' % (tp.name, tp.name, tp.name))
self.cffi_types[index] = CffiOp(OP_PRIMITIVE, s)
diff --git a/lib_pypy/pyrepl/simple_interact.py b/lib_pypy/pyrepl/simple_interact.py
--- a/lib_pypy/pyrepl/simple_interact.py
+++ b/lib_pypy/pyrepl/simple_interact.py
@@ -43,11 +43,13 @@
return short
return text
-def run_multiline_interactive_console(mainmodule=None):
+def run_multiline_interactive_console(mainmodule=None, future_flags=0):
import code
if mainmodule is None:
import __main__ as mainmodule
console = code.InteractiveConsole(mainmodule.__dict__, filename='<stdin>')
+ if future_flags:
+ console.compile.compiler.flags |= future_flags
def more_lines(unicodetext):
# ooh, look at the hack:
diff --git a/pypy/__init__.py b/pypy/__init__.py
--- a/pypy/__init__.py
+++ b/pypy/__init__.py
@@ -1,4 +1,5 @@
-# Empty
+import os
+pypydir = os.path.realpath(os.path.dirname(__file__))
# XXX Should be empty again, soon.
# XXX hack for win64:
diff --git a/pypy/conftest.py b/pypy/conftest.py
--- a/pypy/conftest.py
+++ b/pypy/conftest.py
@@ -1,4 +1,4 @@
-import py, pytest, sys, os, textwrap
+import py, pytest, sys, textwrap
from inspect import isclass
# pytest settings
@@ -10,8 +10,6 @@
#
option = None
-pypydir = os.path.realpath(os.path.dirname(__file__))
-
def braindead_deindent(self):
"""monkeypatch that wont end up doing stupid in the python tokenizer"""
text = '\n'.join(self.lines)
@@ -78,6 +76,20 @@
def pytest_pycollect_makemodule(path, parent):
return PyPyModule(path, parent)
+def is_applevel(item):
+ from pypy.tool.pytest.apptest import AppTestFunction
+ return isinstance(item, AppTestFunction)
+
+def pytest_collection_modifyitems(config, items):
+ if config.option.runappdirect:
+ return
+ for item in items:
+ if isinstance(item, py.test.Function):
+ if is_applevel(item):
+ item.add_marker('applevel')
+ else:
+ item.add_marker('interplevel')
+
class PyPyModule(py.test.collect.Module):
""" we take care of collecting classes both at app level
and at interp-level (because we need to stick a space
@@ -112,9 +124,6 @@
if name.startswith('AppTest'):
from pypy.tool.pytest.apptest import AppClassCollector
return AppClassCollector(name, parent=self)
- else:
- from pypy.tool.pytest.inttest import IntClassCollector
- return IntClassCollector(name, parent=self)
elif hasattr(obj, 'func_code') and self.funcnamefilter(name):
if name.startswith('app_test_'):
@@ -122,11 +131,7 @@
"generator app level functions? you must be joking"
from pypy.tool.pytest.apptest import AppTestFunction
return AppTestFunction(name, parent=self)
- elif obj.func_code.co_flags & 32: # generator function
- return pytest.Generator(name, parent=self)
- else:
- from pypy.tool.pytest.inttest import IntTestFunction
- return IntTestFunction(name, parent=self)
+ return super(PyPyModule, self).makeitem(name, obj)
def skip_on_missing_buildoption(**ropts):
__tracebackhide__ = True
@@ -155,35 +160,19 @@
def pytest_runtest_setup(__multicall__, item):
if isinstance(item, py.test.collect.Function):
- appclass = item.getparent(PyPyClassCollector)
+ appclass = item.getparent(py.test.Class)
if appclass is not None:
# Make cls.space and cls.runappdirect available in tests.
spaceconfig = getattr(appclass.obj, 'spaceconfig', None)
if spaceconfig is not None:
from pypy.tool.pytest.objspace import gettestobjspace
appclass.obj.space = gettestobjspace(**spaceconfig)
+ else:
+ appclass.obj.space = LazyObjSpaceGetter()
appclass.obj.runappdirect = option.runappdirect
__multicall__.execute()
-def pytest_runtest_teardown(__multicall__, item):
- __multicall__.execute()
-
- if 'pygame' in sys.modules:
- assert option.view, ("should not invoke Pygame "
- "if conftest.option.view is False")
-
-
-class PyPyClassCollector(py.test.collect.Class):
- # All pypy Test classes have a "space" member.
- def setup(self):
- cls = self.obj
- if not hasattr(cls, 'spaceconfig'):
- cls.space = LazyObjSpaceGetter()
- else:
- assert hasattr(cls, 'space') # set by pytest_runtest_setup
- super(PyPyClassCollector, self).setup()
-
def pytest_ignore_collect(path):
return path.check(link=1)
diff --git a/pypy/doc/build.rst b/pypy/doc/build.rst
--- a/pypy/doc/build.rst
+++ b/pypy/doc/build.rst
@@ -70,9 +70,6 @@
bz2
libbz2
-lzma (PyPy3 only)
- liblzma
-
pyexpat
libexpat1
@@ -98,11 +95,16 @@
tk
tk-dev
+lzma (PyPy3 only)
+ liblzma
+
+To run untranslated tests, you need the Boehm garbage collector libgc.
+
On Debian, this is the command to install all build-time dependencies::
apt-get install gcc make libffi-dev pkg-config libz-dev libbz2-dev \
libsqlite3-dev libncurses-dev libexpat1-dev libssl-dev libgdbm-dev \
- tk-dev libgc-dev
+ tk-dev libgc-dev liblzma-dev
For the optional lzma module on PyPy3 you will also need ``liblzma-dev``.
diff --git a/pypy/doc/contributor.rst b/pypy/doc/contributor.rst
--- a/pypy/doc/contributor.rst
+++ b/pypy/doc/contributor.rst
@@ -13,17 +13,17 @@
Samuele Pedroni
Matti Picus
Alex Gaynor
+ Philip Jenvey
Brian Kearns
- Philip Jenvey
+ Ronan Lamy
Michael Hudson
- Ronan Lamy
+ Manuel Jacob
David Schneider
- Manuel Jacob
Holger Krekel
Christian Tismer
Hakan Ardo
+ Richard Plangger
Benjamin Peterson
- Richard Plangger
Anders Chrigstrom
Eric van Riet Paap
Wim Lavrijsen
@@ -63,9 +63,9 @@
stian
Jan de Mooij
Tyler Wade
+ Vincent Legoll
Michael Foord
Stephan Diehl
- Vincent Legoll
Stefan Schwarzer
Valentino Volonghi
Tomek Meka
@@ -74,31 +74,34 @@
Bruno Gola
David Malcolm
Jean-Paul Calderone
+ Mark Young
Timo Paulssen
Squeaky
+ Devin Jeanpierre
Marius Gedminas
Alexandre Fayolle
Simon Burton
+ Stefano Rivera
Martin Matusiak
Konstantin Lopuhin
- Stefano Rivera
Wenzhu Man
John Witulski
Laurence Tratt
+ Raffael Tfirst
Ivan Sichmann Freitas
Greg Price
Dario Bertini
Mark Pearse
Simon Cross
+ Edd Barrett
Andreas Stührk
- Edd Barrett
+ Tobias Pape
Jean-Philippe St. Pierre
Guido van Rossum
Pavel Vinogradov
Spenser Bauman
Jeremy Thurgood
Paweł Piotr Przeradowski
- Tobias Pape
Paul deGrandis
Ilya Osadchiy
marky1991
@@ -110,7 +113,6 @@
Georg Brandl
Bert Freudenberg
Stian Andreassen
- Mark Young
Wanja Saatkamp
Gerald Klix
Mike Blume
@@ -126,11 +128,13 @@
Dusty Phillips
Lukas Renggli
Guenter Jantzen
+ William Leslie
Ned Batchelder
Tim Felgentreff
Anton Gulenko
Amit Regmi
Ben Young
+ Sergey Matyunin
Nicolas Chauvat
Andrew Durdin
Andrew Chambers
@@ -141,9 +145,9 @@
Yichao Yu
Rocco Moretti
Gintautas Miliauskas
- Devin Jeanpierre
Michael Twomey
Lucian Branescu Mihaila
+ anatoly techtonik
Gabriel Lavoie
Olivier Dormond
Jared Grubb
@@ -153,8 +157,6 @@
Brian Dorsey
Victor Stinner
Andrews Medina
- anatoly techtonik
- Sergey Matyunin
Stuart Williams
Jasper Schulz
Christian Hudon
@@ -178,11 +180,11 @@
Alex Perry
Vaibhav Sood
Alan McIntyre
- William Leslie
Alexander Sedov
Attila Gobi
Jasper.Schulz
Christopher Pope
+ Florin Papa
Christian Tismer
Marc Abramowitz
Dan Stromberg
@@ -198,7 +200,6 @@
Lukas Vacek
Kunal Grover
Andrew Dalke
- Florin Papa
Sylvain Thenault
Jakub Stasiak
Nathan Taylor
@@ -240,8 +241,9 @@
Yury V. Zaytsev
Anna Katrina Dominguez
Bobby Impollonia
- timo at eistee.fritz.box
+ Vasantha Ganesh K
Andrew Thompson
+ florinpapa
Yusei Tahara
Aaron Tubbs
Ben Darnell
@@ -265,9 +267,9 @@
Akira Li
Gustavo Niemeyer
Stephan Busemann
- florinpapa
Rafał Gałczyński
Matt Bogosian
+ timo
Christian Muirhead
Berker Peksag
James Lan
diff --git a/pypy/doc/index-of-release-notes.rst b/pypy/doc/index-of-release-notes.rst
--- a/pypy/doc/index-of-release-notes.rst
+++ b/pypy/doc/index-of-release-notes.rst
@@ -6,6 +6,7 @@
.. toctree::
+ release-pypy2.7-v5.3.0.rst
release-5.1.1.rst
release-5.1.0.rst
release-5.0.1.rst
@@ -49,6 +50,13 @@
release-0.6
+CPython 3.3 compatible versions
+-------------------------------
+
+.. toctree::
+
+ release-pypy3.3-v5.2-alpha1.rst
+
CPython 3.2 compatible versions
-------------------------------
diff --git a/pypy/doc/index-of-whatsnew.rst b/pypy/doc/index-of-whatsnew.rst
--- a/pypy/doc/index-of-whatsnew.rst
+++ b/pypy/doc/index-of-whatsnew.rst
@@ -7,6 +7,7 @@
.. toctree::
whatsnew-head.rst
+ whatsnew-pypy2-5.3.0.rst
whatsnew-5.1.0.rst
whatsnew-5.0.0.rst
whatsnew-4.0.1.rst
diff --git a/pypy/doc/project-ideas.rst b/pypy/doc/project-ideas.rst
--- a/pypy/doc/project-ideas.rst
+++ b/pypy/doc/project-ideas.rst
@@ -53,15 +53,17 @@
immediately, but only when (and if) ``myslice`` or ``mylist`` are mutated.
-Numpy improvements
-------------------
+NumPy rebooted
+--------------
-The numpy is rapidly progressing in pypy, so feel free to come to IRC and
-ask for proposed topic. A not necesarilly up-to-date `list of topics`_
-is also available.
+Our cpyext C-API compatiblity layer can now run upstream NumPy unmodified.
+Release PyPy2.7-v5.3 still fails about 200 of the ~6000 test in the NumPy
+test suite. We could use help analyzing the failures and fixing them either
+as patches to upstream NumPy, or as fixes to PyPy.
-.. _list of topics: https://bitbucket.org/pypy/extradoc/src/extradoc/planning/micronumpy.txt
-
+We also are looking for help in how to hijack NumPy dtype conversion and
+ufunc calls to allow the JIT to make them fast, using our internal _numpypy
+module.
Improving the jitviewer
------------------------
diff --git a/pypy/doc/release-pypy2.7-v5.3.0.rst b/pypy/doc/release-pypy2.7-v5.3.0.rst
new file mode 100644
--- /dev/null
+++ b/pypy/doc/release-pypy2.7-v5.3.0.rst
@@ -0,0 +1,193 @@
+============
+PyPy2.7 v5.3
+============
+
+We have released PyPy2.7 v5.3, about six weeks after PyPy 5.1 and a week after
+`PyPy3.3 v5.2 alpha 1`_, the first PyPy release targetting 3.3
+compatibility. This new PyPy2.7 release includes further improvements for the
+CAPI compatibility layer which we call cpyext. In addtion to complete support
+for lxml, we now pass most (more than 90%) of the upstream numpy test suite,
+and much of SciPy is supported as well.
+
+We updated cffi_ to version 1.7 (small changes, documented here_).
+
+.. _`PyPy3.3 v5.2 alpha 1`: http://morepypy.blogspot.com/2016/05/pypy33-v52-alpha-1-released.html
+.. _cffi: https://cffi.readthedocs.org
+.. _here: http://cffi.readthedocs.io/en/latest/whatsnew.html
+
+You can download the PyPy2.7 v5.3 release here:
+
+ http://pypy.org/download.html
+
+We would like to thank our donors for the continued support of the PyPy
+project.
+
+We would also like to thank our contributors and
+encourage new people to join the project. PyPy has many
+layers and we need help with all of them: `PyPy`_ and `RPython`_ documentation
+improvements, tweaking popular `modules`_ to run on pypy, or general `help`_
+with making RPython's JIT even better.
+
+.. _`PyPy`: http://doc.pypy.org
+.. _`RPython`: https://rpython.readthedocs.org
+.. _`modules`: http://doc.pypy.org/en/latest/project-ideas.html#make-more-python-modules-pypy-friendly
+.. _`help`: http://doc.pypy.org/en/latest/project-ideas.html
+
+What is PyPy?
+=============
+
+PyPy is a very compliant Python interpreter, almost a drop-in replacement for
+CPython 2.7. It's fast (`PyPy and CPython 2.7.x`_ performance comparison)
+due to its integrated tracing JIT compiler.
+
+We also welcome developers of other `dynamic languages`_ to see what RPython
+can do for them.
+
+This release supports:
+
+ * **x86** machines on most common operating systems
+ (Linux 32/64 bits, Mac OS X 64 bits, Windows 32 bits, OpenBSD, FreeBSD)
+
+ * newer **ARM** hardware (ARMv6 or ARMv7, with VFPv3) running Linux,
+
+ * big- and little-endian variants of **PPC64** running Linux,
+
+ * **s390x** running Linux
+
+.. _`PyPy and CPython 2.7.x`: http://speed.pypy.org
+.. _`dynamic languages`: http://pypyjs.org
+
+Other Highlights (since 5.1 released in April 2016)
+=========================================================
+
+* New features:
+
+ * Merge a major expansion of the C-API support in cpyext, here are some of
+ the highlights:
+
+ - allow c-snippet tests to be run with -A so we can verify we are compatible
+ - fix many edge cases exposed by fixing tests to run with -A
+ - issequence() logic matches cpython
+ - make PyStringObject and PyUnicodeObject field names compatible with cpython
+ - add prelminary support for PyDateTime_*
+ - support PyComplexObject, PyFloatObject, PyDict_Merge, PyDictProxy,
+ PyMemoryView_*, _Py_HashDouble, PyFile_AsFile, PyFile_FromFile,
+ PyAnySet_CheckExact, PyUnicode_Concat, PyDateTime_TZInfo
+ - improve support for PyGILState_Ensure, PyGILState_Release, and thread
+ primitives, also find a case where CPython will allow thread creation
+ before PyEval_InitThreads is run, dissallow on PyPy
+ - create a PyObject-specific list strategy
+ - rewrite slot assignment for typeobjects
+ - improve tracking of PyObject to rpython object mapping
+ - support tp_as_{number, sequence, mapping, buffer} slots
+ - support ByteArrayObject via the new resizable_list_supporting_raw_ptr
+ - implement PyList_SET_ITEM with CPython's behavior, instead of SetItem's
+ - fix the signature of PyUFunc_FromFuncAndDataAndSignature
+ - implement many PyWhatever_FOO() as a macro taking a `void *`
+
+ * CPyExt tweak: instead of "GIL not held when a CPython C extension module
+ calls PyXxx", we now silently acquire/release the GIL. Helps with
+ CPython C extension modules that call some PyXxx() functions without
+ holding the GIL (arguably, they are theorically buggy).
+
+ * Add rgc.FinalizerQueue, documented in pypy/doc/discussion/finalizer-order.rst.
+ It is a more flexible way to make RPython finalizers. Use this mechanism to
+ clean up handling of ``__del__`` methods, fixing issue #2287
+
+ * Generalize cpyext old-style buffers to more than just str/buffer, add
+ support for mmap
+
+ * Support command line -v to trace import statements
+
+ * Add rposix functions for PyPy3.3 support
+
+ * Give super an __init__ and a simple __new__ for CPython compatibility
+
+ * Revive traceviewer, a tool to use pygame to view traces
+
+* Bug Fixes
+
+ * Fix issue #2277: only special-case two exact lists in zip(), not list
+ subclasses, because an overridden __iter__() should be called (probably)
+
+ * Fix issue #2226: Another tweak in the incremental GC- this should ensure
+ that progress in the major GC occurs quickly enough in all cases.
+
+ * Clarify and refactor documentation on http://doc.pypy.org
+
+ * Use "must be unicode, not %T" in unicodedata TypeErrors.
+
+ * Manually reset sys.settrace() and sys.setprofile() when we're done running.
+ This is not exactly what CPython does, but if we get an exception, unlike
+ CPython, we call functions from the 'traceback' module, and these would
+ call more the trace/profile function. That's unexpected and can lead
+ to more crashes at this point.
+
+ * Use the appropriate tp_dealloc on a subclass of a builtin type, and call
+ tp_new for a python-sublcass of a C-API type
+
+ * Fix for issue #2285 - rare vmprof segfaults on OS/X
+
+ * Fixed issue #2172 - where a test specified an invalid parameter to mmap on powerpc
+
+ * Fix issue #2311 - grab the `__future__` flags imported in the main script, in
+ `-c`, or in `PYTHON_STARTUP`, and expose them to the `-i` console
+
+ * Issues reported with our previous release were resolved_ after reports from users on
+ our issue tracker at https://bitbucket.org/pypy/pypy/issues or on IRC at
+ #pypy
+
+* Numpy_:
+
+ * Implement ufunc.outer on numpypy
+
+ * Move PyPy-specific numpy headers to a subdirectory (also changed `the repo`_
+ accordingly)
+
+* Performance improvements:
+
+ * Use bitstrings to compress lists of descriptors that are attached to an
+ EffectInfo
+
+ * Remove most of the _ovf, _zer and _val operations from RPython. Kills
+ quite some code internally, and allows the JIT to do better
+ optimizations: for example, app-level code like ``x / 2`` or ``x % 2``
+ can now be turned into ``x >> 1`` or ``x & 1``, even if x is possibly
+ negative.
+
+ * Copy CPython's 'optimization': ignore __iter__ etc. for `f(**dict_subclass())`
+
+ * Use the __builtin_add_overflow built-ins if they are available
+
+ * Rework the way registers are moved/spilled in before_call()
+
+* Internal refactorings:
+
+ * Refactor code to better support Python3-compatible syntax
+
+ * Document and refactor OperationError -> oefmt
+
+ * Reduce the size of generated C sources during translation by
+ eliminating many many unused struct declarations (Issue #2281)
+
+ * Remove a number of translation-time options that were not tested and
+ never used. Also fix a performance bug in the method cache
+
+ * Reduce the size of generated code by using the same function objects in
+ all generated subclasses
+
+ * Share cpyext Py* function wrappers according to the signature, shrinking the
+ translated libpypy.so by about 10% (measured without the JIT)
+
+ * Compile c snippets with -Werror, and fix warnings it exposed
+
+.. _resolved: http://doc.pypy.org/en/latest/whatsnew-5.3.0.html
+.. _Numpy: https://bitbucket.org/pypy/numpy
+.. _`the repo`: https://bitbucket.org/pypy/numpy
+
+Please update, and continue to help us make PyPy better.
+
+Cheers
+
+The PyPy Team
+
diff --git a/pypy/doc/release-pypy3.3-v5.2-alpha1.rst b/pypy/doc/release-pypy3.3-v5.2-alpha1.rst
new file mode 100644
--- /dev/null
+++ b/pypy/doc/release-pypy3.3-v5.2-alpha1.rst
@@ -0,0 +1,69 @@
+===================
+PyPy3 v5.2 alpha 1
+===================
+
+We're pleased to announce the first alpha release of PyPy3.3 v5.2. This is the
+first release of PyPy which targets Python 3.3 (3.3.5) compatibility.
+
+We would like to thank all of the people who donated_ to the `py3k proposal`_
+for supporting the work that went into this and future releases.
+
+You can download the PyPy3.3 v5.2 alpha 1 release here:
+
+ http://pypy.org/download.html#python-3-3-5-compatible-pypy3-3-v5-2
+
+Highlights
+==========
+
+* Python 3.3.5 support!
+
+ - Being an early alpha release, there are some `missing features`_ such as a
+ `PEP 393-like space efficient string representation`_ and `known issues`_
+ including performance regressions (e.g. issue `#2305`_). The focus for this
+ release has been updating to 3.3 compatibility. Windows is also not yet
+ supported.
+
+* `ensurepip`_ is also included (it's only included in CPython 3 >= 3.4).
+
+What is PyPy?
+==============
+
+PyPy is a very compliant Python interpreter, almost a drop-in replacement for
+CPython 2.7.10 and one day 3.3.5. It's fast due to its integrated tracing JIT
+compiler.
+
+We also welcome developers of other `dynamic languages`_ to see what RPython
+can do for them.
+
+This release supports:
+
+ * **x86** machines on most common operating systems except Windows
+ (Linux 32/64, Mac OS X 64, OpenBSD, FreeBSD),
+
+ * newer **ARM** hardware (ARMv6 or ARMv7, with VFPv3) running Linux,
+
+ * big- and little-endian variants of **PPC64** running Linux,
+
+ * **s390x** running Linux
+
+Please try it out and let us know what you think. We welcome feedback, we know
+you are using PyPy, please tell us about it!
+
+We'd especially like to thank these people for their contributions to this
+release:
+
+Manuel Jacob, Ronan Lamy, Mark Young, Amaury Forgeot d'Arc, Philip Jenvey,
+Martin Matusiak, Vasily Kuznetsov, Matti Picus, Armin Rigo and many others.
+
+Cheers
+
+The PyPy Team
+
+.. _donated: http://morepypy.blogspot.com/2012/01/py3k-and-numpy-first-stage-thanks-to.html
+.. _`py3k proposal`: http://pypy.org/py3donate.html
+.. _`PEP 393-like space efficient string representation`: https://bitbucket.org/pypy/pypy/issues/2309/optimized-unicode-representation
+.. _`missing features`: https://bitbucket.org/pypy/pypy/issues?status=new&status=open&component=PyPy3+%28running+Python+3.x%29&kind=enhancement
+.. _`known issues`: https://bitbucket.org/pypy/pypy/issues?status=new&status=open&component=PyPy3%20%28running%20Python%203.x%29
+.. _`#2305`: https://bitbucket.org/pypy/pypy/issues/2305
+.. _`ensurepip`: https://docs.python.org/3/library/ensurepip.html#module-ensurepip
+.. _`dynamic languages`: http://pypyjs.org
diff --git a/pypy/doc/tool/makecontributor.py b/pypy/doc/tool/makecontributor.py
--- a/pypy/doc/tool/makecontributor.py
+++ b/pypy/doc/tool/makecontributor.py
@@ -73,6 +73,8 @@
'Richard Lancaster':['richardlancaster'],
'William Leslie':['William ML Leslie'],
'Spenser Bauman':['Spenser Andrew Bauman'],
+ 'Raffael Tfirst':['raffael.tfirst at gmail.com'],
+ 'timo':['timo at eistee.fritz.box'],
}
alias_map = {}
diff --git a/pypy/doc/whatsnew-head.rst b/pypy/doc/whatsnew-head.rst
--- a/pypy/doc/whatsnew-head.rst
+++ b/pypy/doc/whatsnew-head.rst
@@ -1,95 +1,33 @@
=========================
-What's new in PyPy 5.1+
+What's new in PyPy2.7 5.3+
=========================
-.. this is a revision shortly after release-5.1
-.. startrev: aa60332382a1
+.. this is a revision shortly after release-pypy2.7-v5.3
+.. startrev: 873218a739f1
-.. branch: techtonik/introductionrst-simplify-explanation-abo-1460879168046
+.. pull request #455
+Add sys.{get,set}dlopenflags, for cpyext extensions.
-.. branch: gcheader-decl
+.. branch: fix-gen-dfa
-Reduce the size of generated C sources.
+Resolves an issue with the generator script to build the dfa for Python syntax.
+.. branch: z196-support
-.. branch: remove-objspace-options
+Fixes a critical issue in the register allocator and extends support on s390x.
+PyPy runs and translates on the s390x revisions z10 (released February 2008, experimental)
+and z196 (released August 2010) in addition to zEC12 and z13.
+To target e.g. z196 on a zEC12 machine supply CFLAGS="-march=z196" to your shell environment.
-Remove a number of options from the build process that were never tested and
-never set. Fix a performance bug in the method cache.
+.. branch: s390x-5.3-catchup
-.. branch: bitstring
+Implement the backend related changes for s390x.
-JIT: use bitstrings to compress the lists of read or written descrs
-that we attach to EffectInfo. Fixes a problem we had in
-remove-objspace-options.
+.. branch: incminimark-ll_assert
+.. branch: vmprof-openbsd
-.. branch: cpyext-for-merge
+.. branch: testing-cleanup
-Update cpyext C-API support After this branch, we are almost able to support
-upstream numpy via cpyext, so we created (yet another) fork of numpy at
-github.com/pypy/numpy with the needed changes. Among the significant changes
-to cpyext:
- - allow c-snippet tests to be run with -A so we can verify we are compatible
- - fix many edge cases exposed by fixing tests to run with -A
- - issequence() logic matches cpython
- - make PyStringObject and PyUnicodeObject field names compatible with cpython
- - add prelminary support for PyDateTime_*
- - support PyComplexObject, PyFloatObject, PyDict_Merge, PyDictProxy,
- PyMemoryView_*, _Py_HashDouble, PyFile_AsFile, PyFile_FromFile,
- - PyAnySet_CheckExact, PyUnicode_Concat
- - improve support for PyGILState_Ensure, PyGILState_Release, and thread
- primitives, also find a case where CPython will allow thread creation
- before PyEval_InitThreads is run, dissallow on PyPy
- - create a PyObject-specific list strategy
- - rewrite slot assignment for typeobjects
- - improve tracking of PyObject to rpython object mapping
- - support tp_as_{number, sequence, mapping, buffer} slots
+Simplify handling of interp-level tests and make it more forward-
+compatible.
-(makes the pypy-c bigger; this was fixed subsequently by the
-share-cpyext-cpython-api branch)
-
-.. branch: share-mapdict-methods-2
-
-Reduce generated code for subclasses by using the same function objects in all
-generated subclasses.
-
-.. branch: share-cpyext-cpython-api
-
-.. branch: cpyext-auto-gil
-
-CPyExt tweak: instead of "GIL not held when a CPython C extension module
-calls PyXxx", we now silently acquire/release the GIL. Helps with
-CPython C extension modules that call some PyXxx() functions without
-holding the GIL (arguably, they are theorically buggy).
-
-.. branch: cpyext-test-A
-
-Get the cpyext tests to pass with "-A" (i.e. when tested directly with
-CPython).
-
-.. branch: oefmt
-
-.. branch: cpyext-werror
-
-Compile c snippets with -Werror in cpyext
-
-.. branch: gc-del-3
-
-Add rgc.FinalizerQueue, documented in pypy/doc/discussion/finalizer-order.rst.
-It is a more flexible way to make RPython finalizers.
-
-.. branch: unpacking-cpython-shortcut
-
-.. branch: cleanups
-
-.. branch: cpyext-more-slots
-
-.. branch: use-gc-del-3
-
-Use the new rgc.FinalizerQueue mechanism to clean up the handling of
-``__del__`` methods. Fixes notably issue #2287. (All RPython
-subclasses of W_Root need to use FinalizerQueue now.)
-
-.. branch: ufunc-outer
-
-Implement ufunc.outer on numpypy
diff --git a/pypy/doc/whatsnew-pypy2-5.3.0.rst b/pypy/doc/whatsnew-pypy2-5.3.0.rst
new file mode 100644
--- /dev/null
+++ b/pypy/doc/whatsnew-pypy2-5.3.0.rst
@@ -0,0 +1,145 @@
+=========================
+What's new in PyPy2.7 5.3
+=========================
+
+.. this is a revision shortly after release-5.1
+.. startrev: aa60332382a1
+
+.. branch: techtonik/introductionrst-simplify-explanation-abo-1460879168046
+
+.. branch: gcheader-decl
+
+Reduce the size of generated C sources.
+
+
+.. branch: remove-objspace-options
+
+Remove a number of options from the build process that were never tested and
+never set. Fix a performance bug in the method cache.
+
+.. branch: bitstring
+
+JIT: use bitstrings to compress the lists of read or written descrs
+that we attach to EffectInfo. Fixes a problem we had in
+remove-objspace-options.
+
+.. branch: cpyext-for-merge
+
+Update cpyext C-API support After this branch, we are almost able to support
+upstream numpy via cpyext, so we created (yet another) fork of numpy at
+github.com/pypy/numpy with the needed changes. Among the significant changes
+to cpyext:
+ - allow c-snippet tests to be run with -A so we can verify we are compatible
+ - fix many edge cases exposed by fixing tests to run with -A
+ - issequence() logic matches cpython
+ - make PyStringObject and PyUnicodeObject field names compatible with cpython
+ - add prelminary support for PyDateTime_*
+ - support PyComplexObject, PyFloatObject, PyDict_Merge, PyDictProxy,
+ PyMemoryView_*, _Py_HashDouble, PyFile_AsFile, PyFile_FromFile,
+ - PyAnySet_CheckExact, PyUnicode_Concat
+ - improve support for PyGILState_Ensure, PyGILState_Release, and thread
+ primitives, also find a case where CPython will allow thread creation
+ before PyEval_InitThreads is run, dissallow on PyPy
+ - create a PyObject-specific list strategy
+ - rewrite slot assignment for typeobjects
+ - improve tracking of PyObject to rpython object mapping
+ - support tp_as_{number, sequence, mapping, buffer} slots
+
+(makes the pypy-c bigger; this was fixed subsequently by the
+share-cpyext-cpython-api branch)
+
+.. branch: share-mapdict-methods-2
+
+Reduce generated code for subclasses by using the same function objects in all
+generated subclasses.
+
+.. branch: share-cpyext-cpython-api
+
+.. branch: cpyext-auto-gil
+
+CPyExt tweak: instead of "GIL not held when a CPython C extension module
+calls PyXxx", we now silently acquire/release the GIL. Helps with
+CPython C extension modules that call some PyXxx() functions without
+holding the GIL (arguably, they are theorically buggy).
+
+.. branch: cpyext-test-A
+
+Get the cpyext tests to pass with "-A" (i.e. when tested directly with
+CPython).
+
+.. branch: oefmt
+
+.. branch: cpyext-werror
+
+Compile c snippets with -Werror in cpyext
+
+.. branch: gc-del-3
+
+Add rgc.FinalizerQueue, documented in pypy/doc/discussion/finalizer-order.rst.
+It is a more flexible way to make RPython finalizers.
+
+.. branch: unpacking-cpython-shortcut
+
+.. branch: cleanups
+
+.. branch: cpyext-more-slots
+
+.. branch: use-gc-del-3
+
+Use the new rgc.FinalizerQueue mechanism to clean up the handling of
+``__del__`` methods. Fixes notably issue #2287. (All RPython
+subclasses of W_Root need to use FinalizerQueue now.)
+
+.. branch: ufunc-outer
+
+Implement ufunc.outer on numpypy
+
+.. branch: verbose-imports
+
+Support ``pypy -v``: verbose imports. It does not log as much as
+cpython, but it should be enough to help when debugging package layout
+problems.
+
+.. branch: cpyext-macros-cast
+
+Fix some warnings when compiling CPython C extension modules
+
+.. branch: syntax_fix
+
+.. branch: remove-raisingops
+
+Remove most of the _ovf, _zer and _val operations from RPython. Kills
+quite some code internally, and allows the JIT to do better
+optimizations: for example, app-level code like ``x / 2`` or ``x % 2``
+can now be turned into ``x >> 1`` or ``x & 1``, even if x is possibly
+negative.
+
+.. branch: cpyext-old-buffers
+
+Generalize cpyext old-style buffers to more than just str/buffer, add support for mmap
+
+.. branch: numpy-includes
+
+Move _numpypy headers into a directory so they are not picked up by upstream numpy, scipy
+This allows building upstream numpy and scipy in pypy via cpyext
+
+.. branch: traceviewer-common-merge-point-formats
+
+Teach RPython JIT's off-line traceviewer the most common ``debug_merge_point`` formats.
+
+.. branch: cpyext-pickle
+
+Enable pickling of W_PyCFunctionObject by monkeypatching pickle.Pickler.dispatch
+at cpyext import time
+
+.. branch: nonmovable-list
+
+Add a way to ask "give me a raw pointer to this list's
+items". Only for resizable lists of primitives. Turns the GcArray
+nonmovable, possibly making a copy of it first.
+
+.. branch: cpyext-ext
+
+Finish the work already partially merged in cpyext-for-merge. Adds support
+for ByteArrayObject using the nonmovable-list, which also enables
+buffer(bytearray(<some-list>))
diff --git a/pypy/doc/whatsnew-pypy3-5.1.1-alpha1.rst b/pypy/doc/whatsnew-pypy3-5.1.1-alpha1.rst
new file mode 100644
--- /dev/null
+++ b/pypy/doc/whatsnew-pypy3-5.1.1-alpha1.rst
@@ -0,0 +1,10 @@
+=================================
+What's new in PyPy3 5.1.1 alpha 1
+=================================
+
+.. A recent revision, ignoring all other branches for this release
+.. startrev: 29d14733e007
+
+.. branch: py3.3
+
+Python 3.3 compatibility
diff --git a/pypy/doc/windows.rst b/pypy/doc/windows.rst
--- a/pypy/doc/windows.rst
+++ b/pypy/doc/windows.rst
@@ -238,6 +238,15 @@
for use. The release packaging script will pick up the tcltk runtime in the lib
directory and put it in the archive.
+The lzma compression library
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Python 3.3 ship with CFFI wrappers for the lzma library, which can be
+downloaded from this site http://tukaani.org/xz. Python 3.3-3.5 use version
+5.0.5, a prebuilt version can be downloaded from
+http://tukaani.org/xz/xz-5.0.5-windows.zip, check the signature
+http://tukaani.org/xz/xz-5.0.5-windows.zip.sig
+
Using the mingw compiler
------------------------
diff --git a/pypy/goal/targetpypystandalone.py b/pypy/goal/targetpypystandalone.py
--- a/pypy/goal/targetpypystandalone.py
+++ b/pypy/goal/targetpypystandalone.py
@@ -9,7 +9,7 @@
from rpython.config.config import to_optparse, make_dict, SUPPRESS_USAGE
from rpython.config.config import ConflictConfigError
from pypy.tool.option import make_objspace
-from pypy.conftest import pypydir
+from pypy import pypydir
from rpython.rlib import rthread
from pypy.module.thread import os_thread
@@ -293,7 +293,7 @@
self.hack_for_cffi_modules(driver)
return self.get_entry_point(config)
-
+
def hack_for_cffi_modules(self, driver):
# HACKHACKHACK
# ugly hack to modify target goal from compile_* to build_cffi_imports
@@ -320,7 +320,7 @@
while not basedir.join('include').exists():
_basedir = basedir.dirpath()
if _basedir == basedir:
- raise ValueError('interpreter %s not inside pypy repo',
+ raise ValueError('interpreter %s not inside pypy repo',
str(exename))
basedir = _basedir
modules = self.config.objspace.usemodules.getpaths()
diff --git a/pypy/interpreter/app_main.py b/pypy/interpreter/app_main.py
--- a/pypy/interpreter/app_main.py
+++ b/pypy/interpreter/app_main.py
@@ -2,7 +2,7 @@
# This is pure Python code that handles the main entry point into "pypy".
# See test/test_app_main.
-# Missing vs CPython: -d, -t, -v, -x, -3
+# Missing vs CPython: -d, -t, -x, -3
USAGE1 = __doc__ = """\
Options and arguments (and corresponding environment variables):
-B : don't write .py[co] files on import; also PYTHONDONTWRITEBYTECODE=x
@@ -19,6 +19,8 @@
-s : don't add user site directory to sys.path; also PYTHONNOUSERSITE
-S : don't imply 'import site' on initialization
-u : unbuffered binary stdout and stderr; also PYTHONUNBUFFERED=x
+-v : verbose (trace import statements); also PYTHONVERBOSE=x
+ can be supplied multiple times to increase verbosity
-V : print the Python version number and exit (also --version)
-W arg : warning control; arg is action:message:category:module:lineno
also PYTHONWARNINGS=arg
@@ -529,6 +531,7 @@
warnoptions,
unbuffered,
ignore_environment,
+ verbose,
**ignored):
# with PyPy in top of CPython we can only have around 100
# but we need more in the translated PyPy for the compiler package
@@ -580,6 +583,12 @@
if hasattr(signal, 'SIGXFSZ'):
signal.signal(signal.SIGXFSZ, signal.SIG_IGN)
+ # Pre-load the default encoder (controlled by PYTHONIOENCODING) now.
+ # This is needed before someone mucks up with sys.path (or even adds
+ # a unicode string to it, leading to infinite recursion when we try
+ # to encode it during importing). Note: very obscure. Issue #2314.
+ str(u'')
+
def inspect_requested():
# We get an interactive prompt in one of the following three cases:
#
@@ -600,6 +609,11 @@
((inspect or (readenv and real_getenv('PYTHONINSPECT')))
and sys.stdin.isatty()))
+ try:
+ from _ast import PyCF_ACCEPT_NULL_BYTES
+ except ImportError:
+ PyCF_ACCEPT_NULL_BYTES = 0
+ future_flags = [0]
success = True
try:
@@ -610,7 +624,9 @@
@hidden_applevel
def run_it():
- exec run_command in mainmodule.__dict__
+ co_cmd = compile(run_command, '<module>', 'exec')
+ exec co_cmd in mainmodule.__dict__
+ future_flags[0] = co_cmd.co_flags
success = run_toplevel(run_it)
elif run_module:
# handle the "-m" command
@@ -622,11 +638,6 @@
# handle the case where no command/filename/module is specified
# on the command-line.
- try:
- from _ast import PyCF_ACCEPT_NULL_BYTES
- except ImportError:
- PyCF_ACCEPT_NULL_BYTES = 0
-
# update sys.path *after* loading site.py, in case there is a
# "site.py" file in the script's directory. Only run this if we're
# executing the interactive prompt, if we're running a script we
@@ -653,6 +664,7 @@
'exec',
PyCF_ACCEPT_NULL_BYTES)
exec co_python_startup in mainmodule.__dict__
+ future_flags[0] = co_python_startup.co_flags
mainmodule.__file__ = python_startup
run_toplevel(run_it)
try:
@@ -663,11 +675,14 @@
inspect = True
else:
# If not interactive, just read and execute stdin normally.
+ if verbose:
+ print_banner(not no_site)
@hidden_applevel
def run_it():
co_stdin = compile(sys.stdin.read(), '<stdin>', 'exec',
PyCF_ACCEPT_NULL_BYTES)
exec co_stdin in mainmodule.__dict__
+ future_flags[0] = co_stdin.co_flags
mainmodule.__file__ = '<stdin>'
success = run_toplevel(run_it)
else:
@@ -697,7 +712,20 @@
args = (runpy._run_module_as_main, '__main__', False)
else:
# no. That's the normal path, "pypy stuff.py".
- args = (execfile, filename, mainmodule.__dict__)
+ # This includes the logic from execfile(), tweaked
+ # to grab the future_flags at the end.
+ @hidden_applevel
+ def run_it():
+ f = file(filename, 'rU')
+ try:
+ source = f.read()
+ finally:
+ f.close()
+ co_main = compile(source.rstrip()+"\n", filename,
+ 'exec', PyCF_ACCEPT_NULL_BYTES)
+ exec co_main in mainmodule.__dict__
+ future_flags[0] = co_main.co_flags
+ args = (run_it,)
success = run_toplevel(*args)
except SystemExit as e:
@@ -710,12 +738,21 @@
# start a prompt if requested
if inspect_requested():
try:
+ import __future__
from _pypy_interact import interactive_console
pypy_version_info = getattr(sys, 'pypy_version_info', sys.version_info)
irc_topic = pypy_version_info[3] != 'final' or (
readenv and os.getenv('PYPY_IRC_TOPIC'))
+ flags = 0
+ for fname in __future__.all_feature_names:
+ feature = getattr(__future__, fname)
+ if future_flags[0] & feature.compiler_flag:
+ flags |= feature.compiler_flag
+ kwds = {}
+ if flags:
+ kwds['future_flags'] = flags
success = run_toplevel(interactive_console, mainmodule,
- quiet=not irc_topic)
+ quiet=not irc_topic, **kwds)
except SystemExit as e:
status = e.code
else:
@@ -724,10 +761,10 @@
return status
def print_banner(copyright):
- print 'Python %s on %s' % (sys.version, sys.platform)
+ print >> sys.stderr, 'Python %s on %s' % (sys.version, sys.platform)
if copyright:
- print ('Type "help", "copyright", "credits" or '
- '"license" for more information.')
+ print >> sys.stderr, ('Type "help", "copyright", "credits" or '
+ '"license" for more information.')
STDLIB_WARNING = """\
debug: WARNING: Library path not found, using compiled-in sys.path.
diff --git a/pypy/interpreter/astcompiler/codegen.py b/pypy/interpreter/astcompiler/codegen.py
--- a/pypy/interpreter/astcompiler/codegen.py
+++ b/pypy/interpreter/astcompiler/codegen.py
@@ -564,7 +564,6 @@
self.emit_jump(ops.JUMP_FORWARD, end)
self.use_next_block(next_except)
self.emit_op(ops.END_FINALLY) # this END_FINALLY will always re-raise
- self.is_dead_code()
self.use_next_block(otherwise)
self.visit_sequence(te.orelse)
self.use_next_block(end)
diff --git a/pypy/interpreter/astcompiler/test/test_ast.py b/pypy/interpreter/astcompiler/test/test_ast.py
--- a/pypy/interpreter/astcompiler/test/test_ast.py
+++ b/pypy/interpreter/astcompiler/test/test_ast.py
@@ -1,8 +1,8 @@
from pypy.interpreter.astcompiler import ast
class TestAstToObject:
def test_types(self, space):
- assert space.is_true(space.issubtype(
- ast.get(space).w_Module, ast.get(space).w_mod))
+ assert space.issubtype_w(
+ ast.get(space).w_Module, ast.get(space).w_mod)
def test_num(self, space):
value = space.wrap(42)
diff --git a/pypy/interpreter/astcompiler/test/test_compiler.py b/pypy/interpreter/astcompiler/test/test_compiler.py
--- a/pypy/interpreter/astcompiler/test/test_compiler.py
+++ b/pypy/interpreter/astcompiler/test/test_compiler.py
@@ -458,14 +458,17 @@
decl = str(decl) + "\n"
yield self.st, decl, 'x', (1, 2, 3, 4)
+ def test_closure_error(self):
source = """if 1:
def f(a):
del a
def x():
a
"""
- exc = py.test.raises(SyntaxError, self.run, source).value
- assert exc.msg == "Can't delete variable used in nested scopes: 'a'"
+ with py.test.raises(SyntaxError) as excinfo:
+ self.run(source)
+ msg = excinfo.value.msg
+ assert msg == "Can't delete variable used in nested scopes: 'a'"
def test_try_except_finally(self):
yield self.simple_test, """
@@ -879,7 +882,20 @@
"""
self.simple_test(source, 'ok', 1)
- def test_remove_docstring(self):
+ @py.test.mark.parametrize('expr, result', [
+ ("f1.__doc__", None),
+ ("f2.__doc__", 'docstring'),
+ ("f2()", 'docstring'),
+ ("f3.__doc__", None),
+ ("f3()", 'bar'),
+ ("C1.__doc__", None),
+ ("C2.__doc__", 'docstring'),
+ ("C3.field", 'not docstring'),
+ ("C4.field", 'docstring'),
+ ("C4.__doc__", 'docstring'),
+ ("C4.__doc__", 'docstring'),
+ ("__doc__", None),])
+ def test_remove_docstring(self, expr, result):
source = '"module_docstring"\n' + """if 1:
def f1():
'docstring'
@@ -903,19 +919,7 @@
code_w.remove_docstrings(self.space)
dict_w = self.space.newdict();
code_w.exec_code(self.space, dict_w, dict_w)
-
- yield self.check, dict_w, "f1.__doc__", None
- yield self.check, dict_w, "f2.__doc__", 'docstring'
- yield self.check, dict_w, "f2()", 'docstring'
- yield self.check, dict_w, "f3.__doc__", None
- yield self.check, dict_w, "f3()", 'bar'
- yield self.check, dict_w, "C1.__doc__", None
- yield self.check, dict_w, "C2.__doc__", 'docstring'
- yield self.check, dict_w, "C3.field", 'not docstring'
- yield self.check, dict_w, "C4.field", 'docstring'
- yield self.check, dict_w, "C4.__doc__", 'docstring'
- yield self.check, dict_w, "C4.__doc__", 'docstring'
- yield self.check, dict_w, "__doc__", None
+ self.check(dict_w, expr, result)
def test_assert_skipping(self):
space = self.space
@@ -1111,7 +1115,7 @@
return d['f'](5)
""")
assert 'generator' in space.str_w(space.repr(w_generator))
-
+
def test_list_comprehension(self):
source = "def f(): [i for i in l]"
source2 = "def f(): [i for i in l for j in l]"
diff --git a/pypy/interpreter/baseobjspace.py b/pypy/interpreter/baseobjspace.py
--- a/pypy/interpreter/baseobjspace.py
+++ b/pypy/interpreter/baseobjspace.py
@@ -245,6 +245,9 @@
def unicode_w(self, space):
self._typed_unwrap_error(space, "unicode")
+ def bytearray_list_of_chars_w(self, space):
+ self._typed_unwrap_error(space, "bytearray")
+
def int_w(self, space, allow_conversion=True):
# note that W_IntObject.int_w has a fast path and W_FloatObject.int_w
# raises w_TypeError
@@ -1217,7 +1220,7 @@
def abstract_issubclass_w(self, w_cls1, w_cls2):
# Equivalent to 'issubclass(cls1, cls2)'.
- return self.is_true(self.issubtype(w_cls1, w_cls2))
+ return self.issubtype_w(w_cls1, w_cls2)
def abstract_isinstance_w(self, w_obj, w_cls):
# Equivalent to 'isinstance(obj, cls)'.
@@ -1239,16 +1242,16 @@
def exception_is_valid_obj_as_class_w(self, w_obj):
if not self.isinstance_w(w_obj, self.w_type):
return False
- return self.is_true(self.issubtype(w_obj, self.w_BaseException))
+ return self.issubtype_w(w_obj, self.w_BaseException)
def exception_is_valid_class_w(self, w_cls):
- return self.is_true(self.issubtype(w_cls, self.w_BaseException))
+ return self.issubtype_w(w_cls, self.w_BaseException)
def exception_getclass(self, w_obj):
return self.type(w_obj)
def exception_issubclass_w(self, w_cls1, w_cls2):
- return self.is_true(self.issubtype(w_cls1, w_cls2))
+ return self.issubtype_w(w_cls1, w_cls2)
def new_exception_class(self, *args, **kwargs):
"NOT_RPYTHON; convenience method to create excceptions in modules"
diff --git a/pypy/interpreter/pyparser/genpytokenize.py b/pypy/interpreter/pyparser/genpytokenize.py
--- a/pypy/interpreter/pyparser/genpytokenize.py
+++ b/pypy/interpreter/pyparser/genpytokenize.py
@@ -191,7 +191,7 @@
newArcPair(states, EMPTY),
pseudoExtras, number, funny, contStr, name))
dfaStates, dfaAccepts = nfaToDfa(states, *pseudoToken)
- return DFA(dfaStates, dfaAccepts)
+ return DFA(dfaStates, dfaAccepts), dfaStates
# ______________________________________________________________________
@@ -205,7 +205,9 @@
newArcPair(states, DEFAULT),
any(states, notGroupStr(states, "'\\")))),
newArcPair(states, "'"))
- singleDFA = DFA(*nfaToDfa(states, *single))
+ states, accepts = nfaToDfa(states, *single)
+ singleDFA = DFA(states, accepts)
+ states_singleDFA = states
states = []
double = chain(states,
any(states, notGroupStr(states, '"\\')),
@@ -215,7 +217,9 @@
newArcPair(states, DEFAULT),
any(states, notGroupStr(states, '"\\')))),
newArcPair(states, '"'))
- doubleDFA = DFA(*nfaToDfa(states, *double))
+ states, accepts = nfaToDfa(states, *double)
+ doubleDFA = DFA(states, accepts)
+ states_doubleDFA = states
states = []
single3 = chain(states,
any(states, notGroupStr(states, "'\\")),
@@ -230,7 +234,9 @@
notChainStr(states, "''"))),
any(states, notGroupStr(states, "'\\")))),
chainStr(states, "'''"))
- single3DFA = NonGreedyDFA(*nfaToDfa(states, *single3))
+ states, accepts = nfaToDfa(states, *single3)
+ single3DFA = NonGreedyDFA(states, accepts)
+ states_single3DFA = states
states = []
double3 = chain(states,
any(states, notGroupStr(states, '"\\')),
@@ -245,9 +251,11 @@
notChainStr(states, '""'))),
any(states, notGroupStr(states, '"\\')))),
chainStr(states, '"""'))
- double3DFA = NonGreedyDFA(*nfaToDfa(states, *double3))
- map = {"'" : singleDFA,
- '"' : doubleDFA,
+ states, accepts = nfaToDfa(states, *double3)
+ double3DFA = NonGreedyDFA(states, accepts)
+ states_double3DFA = states
+ map = {"'" : (singleDFA, states_singleDFA),
+ '"' : (doubleDFA, states_doubleDFA),
"r" : None,
"R" : None,
"u" : None,
@@ -257,25 +265,30 @@
for uniPrefix in ("", "u", "U", "b", "B", ):
for rawPrefix in ("", "r", "R"):
prefix = uniPrefix + rawPrefix
- map[prefix + "'''"] = single3DFA
- map[prefix + '"""'] = double3DFA
+ map[prefix + "'''"] = (single3DFA, states_single3DFA)
+ map[prefix + '"""'] = (double3DFA, states_double3DFA)
return map
# ______________________________________________________________________
-def output(name, dfa_class, dfa):
+def output(name, dfa_class, dfa, states):
import textwrap
+ lines = []
i = 0
for line in textwrap.wrap(repr(dfa.accepts), width = 50):
if i == 0:
- print "accepts =", line
+ lines.append("accepts = ")
else:
- print " ", line
+ lines.append(" ")
+ lines.append(line)
+ lines.append("\n")
i += 1
import StringIO
- print "states = ["
- for numstate, state in enumerate(dfa.states):
- print " #", numstate
+ lines.append("states = [\n")
+ for numstate, state in enumerate(states):
+ lines.append(" # ")
+ lines.append(str(numstate))
+ lines.append('\n')
s = StringIO.StringIO()
i = 0
for k, v in sorted(state.items()):
@@ -298,22 +311,28 @@
for line in text:
line = line.replace('::', ': ')
if i == 0:
- print ' {' + line
+ lines.append(' {')
else:
- print ' ' + line
+ lines.append(' ')
+ lines.append(line)
+ lines.append('\n')
i += 1
- print " ]"
- print "%s = automata.%s(states, accepts)" % (name, dfa_class)
- print
+ lines.append(" ]\n")
+ lines.append("%s = automata.%s(states, accepts)\n" % (name, dfa_class))
+ return ''.join(lines)
def main ():
- pseudoDFA = makePyPseudoDFA()
- output("pseudoDFA", "DFA", pseudoDFA)
+ pseudoDFA, states_pseudoDFA = makePyPseudoDFA()
+ print output("pseudoDFA", "DFA", pseudoDFA, states_pseudoDFA)
endDFAMap = makePyEndDFAMap()
- output("double3DFA", "NonGreedyDFA", endDFAMap['"""'])
- output("single3DFA", "NonGreedyDFA", endDFAMap["'''"])
- output("singleDFA", "DFA", endDFAMap["'"])
- output("doubleDFA", "DFA", endDFAMap['"'])
+ dfa, states = endDFAMap['"""']
+ print output("double3DFA", "NonGreedyDFA", dfa, states)
+ dfa, states = endDFAMap["'''"]
+ print output("single3DFA", "NonGreedyDFA", dfa, states)
+ dfa, states = endDFAMap["'"]
+ print output("singleDFA", "DFA", dfa, states)
+ dfa, states = endDFAMap["\""]
+ print output("doubleDFA", "DFA", dfa, states)
# ______________________________________________________________________
diff --git a/pypy/interpreter/pyparser/test/test_gendfa.py b/pypy/interpreter/pyparser/test/test_gendfa.py
new file mode 100644
--- /dev/null
+++ b/pypy/interpreter/pyparser/test/test_gendfa.py
@@ -0,0 +1,16 @@
+from pypy.interpreter.pyparser.automata import DFA, DEFAULT
+from pypy.interpreter.pyparser.genpytokenize import output
+
+def test_states():
+ states = [{"\x00": 1}, {"\x01": 0}]
+ d = DFA(states[:], [False, True])
+ assert output('test', DFA, d, states) == """\
+accepts = [False, True]
+states = [
+ # 0
+ {'\\x00': 1},
+ # 1
+ {'\\x01': 0},
+ ]
+test = automata.pypy.interpreter.pyparser.automata.DFA(states, accepts)
+"""
diff --git a/pypy/interpreter/test/test_app_main.py b/pypy/interpreter/test/test_app_main.py
--- a/pypy/interpreter/test/test_app_main.py
+++ b/pypy/interpreter/test/test_app_main.py
@@ -6,7 +6,7 @@
import sys, os, re, runpy, subprocess
from rpython.tool.udir import udir
from contextlib import contextmanager
-from pypy.conftest import pypydir
+from pypy import pypydir
from lib_pypy._pypy_interact import irc_header
try:
@@ -76,6 +76,11 @@
print 'Goodbye2' # should not be reached
""")
+script_with_future = getscript("""
+ from __future__ import division
+ from __future__ import print_function
+ """)
+
class TestParseCommandLine:
def check_options(self, options, sys_argv, **expected):
@@ -286,7 +291,7 @@
child.expect('>>>') # banner
if irc_topic:
assert irc_header in child.before
- else:
+ else:
assert irc_header not in child.before
def test_help(self):
@@ -445,6 +450,31 @@
finally:
os.environ['PYTHONSTARTUP'] = old
+ def test_future_in_executed_script(self):
+ child = self.spawn(['-i', script_with_future])
+ child.expect('>>> ')
+ child.sendline('x=1; print(x/2, 3/4)')
+ child.expect('0.5 0.75')
+
+ def test_future_in_python_startup(self, monkeypatch):
+ monkeypatch.setenv('PYTHONSTARTUP', script_with_future)
+ child = self.spawn([])
+ child.expect('>>> ')
+ child.sendline('x=1; print(x/2, 3/4)')
+ child.expect('0.5 0.75')
+
+ def test_future_in_cmd(self):
+ child = self.spawn(['-i', '-c', 'from __future__ import division'])
+ child.expect('>>> ')
+ child.sendline('x=1; x/2; 3/4')
+ child.expect('0.5')
+ child.expect('0.75')
+
+ def test_cmd_co_name(self):
More information about the pypy-commit
mailing list