Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r87826:b607ae6d8133 Date: 2016-10-16 10:15 +0200 http://bitbucket.org/pypy/pypy/changeset/b607ae6d8133/
Log: Push back all changes to RPython from the py3.5 branch diff --git a/rpython/rlib/objectmodel.py b/rpython/rlib/objectmodel.py --- a/rpython/rlib/objectmodel.py +++ b/rpython/rlib/objectmodel.py @@ -505,6 +505,8 @@ # ---------- +HASH_ALGORITHM = "rpython" # XXX Is there a better name? + def _hash_string(s): """The algorithm behind compute_hash() for a string or a unicode.""" from rpython.rlib.rarithmetic import intmask diff --git a/rpython/tool/runsubprocess.py b/rpython/tool/runsubprocess.py --- a/rpython/tool/runsubprocess.py +++ b/rpython/tool/runsubprocess.py @@ -8,9 +8,15 @@ import os from subprocess import PIPE, Popen +PY2 = (sys.version_info.major == 2) +if PY2: + text = unicode +else: + text = str + def run_subprocess(executable, args, env=None, cwd=None): if isinstance(args, list): - args = [a.encode('latin1') if isinstance(a, unicode) else a + args = [a.encode('latin1') if isinstance(a, text) else a for a in args] return _run(executable, args, env, cwd) @@ -71,24 +77,38 @@ _source = os.path.join(_source, 'runsubprocess.py') # and not e.g. '.pyc' def spawn_subprocess(): - global _child + global _child, child_stdin, child_stdout _child = Popen([sys.executable, _source], bufsize=0, stdin=PIPE, stdout=PIPE, close_fds=True) + if PY2: + child_stdin = _child.stdin + child_stdout = _child.stdout + else: + # create TextIOWrappers which (hopefully) have the same newline + # behavior as the child's stdin / stdout + from io import TextIOWrapper + child_stdin = TextIOWrapper(_child.stdin, + newline=sys.stdin.newlines, + write_through=True) + child_stdout = TextIOWrapper(_child.stdout, + newline=sys.stdout.newlines) spawn_subprocess() def cleanup_subprocess(): - global _child + global _child, child_stdin, child_stdout _child = None + child_stdin = None + child_stdout = None import atexit; atexit.register(cleanup_subprocess) def _run(*args): try: - _child.stdin.write('%r\n' % (args,)) + child_stdin.write('%r\n' % (args,)) except (OSError, IOError): # lost the child. Try again... spawn_subprocess() - _child.stdin.write('%r\n' % (args,)) - results = _child.stdout.readline() + child_stdin.write('%r\n' % (args,)) + results = child_stdout.readline() assert results.startswith('(') results = eval(results) if results[0] is None: _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit