Read about our upcoming Code of Conduct on this issue

Commit 18f9da1b authored by Matti Picus's avatar Matti Picus
Browse files

merge py3.6 into release

--HG--
branch : release-pypy3.6-v7.x
......@@ -61,3 +61,8 @@ e6471221abc16f4584a07fbfeece7ebcaeb7fc38 release-pypy2.7-v7.3.0rc1
533398cfd64e5146a07c4824e90a1b629c8b6523 release-pypy3.6-v7.3.0rc1
285307a0f5a77ffa46781b5c54c52eb1c385081d release-pypy2.7-v7.3.0rc2
008914050baeedb6d3ca30fe26ef43b78bb63841 release-pypy3.6-v7.3.0rc2
c124c11a5921bf12797b08a696753a12ae82595a release-pypy3.6-v7.2.0rc3
e7e02dccbd8c14fa2d4880f6bd4c47362a8952f5 release-pypy3.6-v7.3.0rc3
c124c11a5921bf12797b08a696753a12ae82595a release-pypy2.7-v7.3.0rc3
c124c11a5921bf12797b08a696753a12ae82595a release-pypy3.6-v7.2.0rc3
0000000000000000000000000000000000000000 release-pypy3.6-v7.2.0rc3
......@@ -890,11 +890,11 @@ class CoroutineTest(unittest.TestCase):
def test_corotype_1(self):
ct = types.CoroutineType
self.assert_('into coroutine' in ct.send.__doc__ or
self.assertTrue('into coroutine' in ct.send.__doc__ or
'into generator/coroutine' in ct.send.__doc__)
self.assert_('inside coroutine' in ct.close.__doc__ or
self.assertTrue('inside coroutine' in ct.close.__doc__ or
'inside generator/coroutine' in ct.close.__doc__)
self.assert_('in coroutine' in ct.throw.__doc__ or
self.assertTrue('in coroutine' in ct.throw.__doc__ or
'in generator/coroutine' in ct.throw.__doc__)
self.assertIn('of the coroutine', ct.__dict__['__name__'].__doc__)
self.assertIn('of the coroutine', ct.__dict__['__qualname__'].__doc__)
......@@ -1238,8 +1238,8 @@ class CoroutineTest(unittest.TestCase):
with self.assertRaisesRegex(
TypeError,
"'async with' received an object from __aenter__ "
"that does not implement __await__: int"):
# XXX: PyPy change
"object int can't be used in 'await' expression"):
# it's important that __aexit__ wasn't called
run_async(foo())
......@@ -1261,8 +1261,8 @@ class CoroutineTest(unittest.TestCase):
except TypeError as exc:
self.assertRegex(
exc.args[0],
"'async with' received an object from __aexit__ "
"that does not implement __await__: int")
# XXX: PyPy change
"object int can't be used in 'await' expression")
self.assertTrue(exc.__context__ is not None)
self.assertTrue(isinstance(exc.__context__, ZeroDivisionError))
else:
......@@ -1286,8 +1286,8 @@ class CoroutineTest(unittest.TestCase):
CNT += 1
with self.assertRaisesRegex(
TypeError,
"'async with' received an object from __aexit__ "
"that does not implement __await__: int"):
# XXX: PyPy change
"object int can't be used in 'await' expression"):
run_async(foo())
self.assertEqual(CNT, 1)
......@@ -1300,8 +1300,8 @@ class CoroutineTest(unittest.TestCase):
break
with self.assertRaisesRegex(
TypeError,
"'async with' received an object from __aexit__ "
"that does not implement __await__: int"):
# XXX: PyPy change
"object int can't be used in 'await' expression"):
run_async(foo())
self.assertEqual(CNT, 2)
......@@ -1314,8 +1314,8 @@ class CoroutineTest(unittest.TestCase):
continue
with self.assertRaisesRegex(
TypeError,
"'async with' received an object from __aexit__ "
"that does not implement __await__: int"):
# XXX: PyPy change
"object int can't be used in 'await' expression"):
run_async(foo())
self.assertEqual(CNT, 3)
......@@ -1327,8 +1327,8 @@ class CoroutineTest(unittest.TestCase):
return
with self.assertRaisesRegex(
TypeError,
"'async with' received an object from __aexit__ "
"that does not implement __await__: int"):
# XXX: PyPy change
"object int can't be used in 'await' expression"):
run_async(foo())
self.assertEqual(CNT, 4)
......
......@@ -35,6 +35,16 @@ def varname_converter(input):
def Tcl_AppInit(app):
# For portable builds, try to load a local version of the libraries
from os.path import join, dirname, exists
lib_path = join(dirname(dirname(dirname(__file__))), 'lib')
tcl_path = join(lib_path, 'tcl')
tk_path = join(lib_path, 'tk')
if exists(tcl_path):
tklib.Tcl_Eval(app.interp, 'set tcl_library "{0}"'.format(tcl_path).encode('utf-8'))
if exists(tk_path):
tklib.Tcl_Eval(app.interp, 'set tk_library "{0}"'.format(tk_path).encode('utf-8'))
if tklib.Tcl_Init(app.interp) == tklib.TCL_ERROR:
app.raiseTclError()
skip_tk_init = tklib.Tcl_GetVar(
......
......@@ -565,7 +565,7 @@ class PyFrame(W_Root):
# Copy values from the fastlocals to self.w_locals
d = self.getorcreatedebug()
if d.w_locals is None:
d.w_locals = self.space.newdict()
d.w_locals = self.space.newdict(module=True)
varnames = self.getcode().getvarnames()
for i in range(min(len(varnames), self.getcode().co_nlocals)):
name = varnames[i]
......
......@@ -232,3 +232,14 @@ def PyModule_GetName(space, w_mod):
raise oefmt(space.w_SystemError, "PyModule_GetName(): not a module")
from pypy.module.cpyext.unicodeobject import PyUnicode_AsUTF8
return PyUnicode_AsUTF8(space, as_pyobj(space, w_mod.w_name))
@cpython_api([PyObject, lltype.Ptr(PyMethodDef)], rffi.INT_real, error=-1)
def PyModule_AddFunctions(space, w_mod, methods):
if not isinstance(w_mod, Module):
raise oefmt(space.w_SystemError, "PyModule_AddFuntions(): not a module")
name = space.utf8_w(w_mod.w_name)
dict_w = {}
convert_method_defs(space, dict_w, methods, None, w_mod, name=name)
for key, w_value in dict_w.items():
space.setattr(w_mod, space.newtext(key), w_value)
return 0
......@@ -36,11 +36,7 @@ static struct PyModuleDef _testcapimodule = {
"_widechar",
NULL,
-1,
TestMethods,
NULL,
NULL,
NULL,
NULL
};
PyMODINIT_FUNC
......@@ -50,5 +46,6 @@ PyInit__widechar(void)
m = PyModule_Create(&_testcapimodule);
if (m == NULL)
return NULL;
PyModule_AddFunctions(m, TestMethods);
return m;
}
......@@ -82,7 +82,6 @@ class TestCall(BaseTestPyPyC):
assert entry_bridge.match_by_id('call', """
dummy_get_utf8?
p38 = call_r(ConstClass(_ll_1_threadlocalref_get__Ptr_GcStruct_objectLlT_Signed), #, descr=<Callr . i EF=1 OS=5>)
p99 = getfield_gc_r(p38, descr=<FieldP pypy.interpreter.executioncontext.ExecutionContext.inst_sys_exc_operror .*>)
p39 = getfield_gc_r(p38, descr=<FieldP pypy.interpreter.executioncontext.ExecutionContext.inst_topframeref .*>)
i40 = force_token()
p41 = getfield_gc_r(p38, descr=<FieldP pypy.interpreter.executioncontext.ExecutionContext.inst_w_tracefunc .*>)
......@@ -444,7 +443,6 @@ class TestCall(BaseTestPyPyC):
dummy_get_utf8?
guard_not_invalidated(descr=...)
p29 = call_r(ConstClass(_ll_1_threadlocalref_get__Ptr_GcStruct_objectLlT_Signed), #, descr=<Callr . i EF=1 OS=5>)
p99 = getfield_gc_r(p29, descr=<FieldP pypy.interpreter.executioncontext.ExecutionContext.inst_sys_exc_operror .*>)
p30 = getfield_gc_r(p29, descr=<FieldP pypy.interpreter.executioncontext.ExecutionContext.inst_topframeref .*>)
p31 = force_token()
p32 = getfield_gc_r(p29, descr=<FieldP pypy.interpreter.executioncontext.ExecutionContext.inst_w_tracefunc .*>)
......
from pypy.module.pypyjit.test_pypy_c.test_00_model import BaseTestPyPyC
class TestCaptureLocals(BaseTestPyPyC):
def test_capture_locals(self):
def main(n):
num = 42
i = 0
acc = 0
src = '''
while i < n:
acc += num
i += 1
'''
exec(src)
return acc
log = self.run(main, [500])
print (log.result)
assert log.result == 0
loop, = log.loops_by_filename("<string>")
print (loop)
assert loop.match("""
i41 = instance_ptr_eq(ConstPtr(ptr18), p16)
guard_false(i41, descr=...)
guard_not_invalidated(descr=...)
i43 = int_lt(i35, 500)
guard_true(i43, descr=...)
i45 = getfield_gc_i(ConstPtr(ptr44), descr=...)
i47 = int_add_ovf(i45, 42)
guard_no_overflow(descr=...)
setfield_gc(ConstPtr(ptr48), i47, descr=...)
i50 = getfield_gc_i(ConstPtr(ptr49), descr=...)
i52 = int_add_ovf(i50, 1)
guard_no_overflow(descr=...)
i54 = getfield_raw_i(..., descr=...)
setfield_gc(ConstPtr(ptr55), i52, descr=...)
i57 = int_lt(i54, 0)
guard_false(i57, descr=...)
jump(..., descr=...)
""")
......@@ -428,7 +428,6 @@ class Test__ffi(BaseTestPyPyC):
p156 = getfield_gc_r(p48, descr=...)
i158 = getfield_raw_i(..., descr=...)
setfield_gc(p48, p49, descr=...)
setfield_gc(p48, p50, descr=...)
setfield_gc(p134, ConstPtr(null), descr=...)
i159 = int_lt(i158, 0)
guard_false(i159, descr=...)
......
# -*- coding: utf-8 -*-
import sys
import pytest
from pypy.module.pypyjit.test_pypy_c.test_00_model import BaseTestPyPyC
# XXX review the <Call> descrs to replace some EF=5 with EF=4 (elidable)
......@@ -66,26 +67,20 @@ class TestString(BaseTestPyPyC):
i97 = int_ge(i94, i53)
guard_false(i97, descr=...)
i98 = strgetitem(p52, i94)
p1 = force_token()
p103 = newstr(1)
strsetitem(p103, 0, i98)
setfield_gc(p0, p1, descr=<FieldP pypy.interpreter.pyframe.PyFrame.vable_token .>)
p296 = call_may_force_r(ConstClass(str_decode_utf8), p103, ConstPtr(null), 1, _, 0, descr=<Callr . rriii EF=7>)
guard_not_forced(descr=...)
i95 = call_i(ConstClass(_check_utf8), p103, 0, 0, -1, descr=<Calli 8 riii EF=4>)
guard_no_exception(descr=...)
p116 = getfield_gc_r(p296, descr=<FieldP tuple3.item0 .+ pure>)
i107 = getfield_gc_i(p296, descr=<FieldS tuple3.item1 .+ pure>)
i109 = int_lt(i107, 0)
guard_false(i109, descr=...)
guard_not_invalidated(descr=...)
i98 = int_ge(i95, 0)
guard_true(i98, descr=...)
i99 = int_ge(i94, i46)
guard_false(i99, descr=...)
i115 = int_add(i94, 1)
i116 = int_gt(i115, i71)
guard_false(i116, descr=...)
i120 = strgetitem(p45, i94)
i122 = call_i(ConstClass(_ll_2_str_eq_checknull_char__rpy_stringPtr_Char), p116, i120, descr=<Calli . ri EF=0 OS=30>)
guard_true(i122, descr=...)
i104 = call_i(ConstClass(_ll_4_str_eq_slice_char__rpy_stringPtr_Signed_Signed_Char), p65, i94, 1, i98, descr=<Calli 8 riii EF=0 OS=27>)
guard_true(i104, descr=...)
i124 = int_add(i83, 1)
--TICK--
jump(..., descr=...)
......@@ -207,6 +202,7 @@ class TestString(BaseTestPyPyC):
''')
assert loop.match_by_id('calltwo', '') # nothing
@pytest.mark.xfail
def test_move_method_call_out_of_loop(self):
# XXX this does not work: _lower_unicode() is found to be elidable,
# but it can raise (because of 'raise StopIteration' in
......@@ -273,7 +269,6 @@ class TestString(BaseTestPyPyC):
--TICK--
jump(..., descr=...)
""")
# XXX remove the guard_nonnull above?
def test_unicode_indexing_makes_no_bridges(self):
log = self.run(r"""
......
#!/usr/bin/env python
bundle = ['sqlite3', 'ssl', 'crypto', 'ffi', 'expat', 'tcl', 'tk', 'gdbm',
bundle = ['sqlite3', 'ssl', 'crypto', 'ffi', 'expat', 'tcl8', 'tk8', 'gdbm',
'lzma', 'tinfo', 'tinfow', 'ncursesw', 'panelw', 'ncurses', 'panel', 'panelw']
import os
from os.path import dirname, relpath, join, exists, basename, realpath
from shutil import copy2
from shutil import copy2, copytree
import sys
from glob import glob
from subprocess import check_output, check_call
......@@ -62,6 +62,7 @@ def rpath_binaries(binaries):
rpaths = {}
for binary in binaries:
check_call(['chmod', 'a+w', binary])
rpath = join('$ORIGIN', relpath('lib', dirname(binary)))
check_call(['patchelf', '--set-rpath', rpath, binary])
......@@ -85,6 +86,9 @@ def make_portable():
for path, item in copied.items():
print('Copied {0} to {1}'.format(path, item))
copytree('/usr/share/tcl8.5', 'lib/tcl')
copytree('/usr/share/tk8.5', 'lib/tk')
binaries.extend(copied.values())
rpaths = rpath_binaries(binaries)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment