[pypy-commit] pypy py3.5: hg merge default

arigo pypy.commits at gmail.com
Tue Feb 21 09:21:50 EST 2017


Author: Armin Rigo <arigo at tunes.org>
Branch: py3.5
Changeset: r90268:6cb34cc6c598
Date: 2017-02-21 15:20 +0100
http://bitbucket.org/pypy/pypy/changeset/6cb34cc6c598/

Log:	hg merge default

diff --git a/pypy/interpreter/baseobjspace.py b/pypy/interpreter/baseobjspace.py
--- a/pypy/interpreter/baseobjspace.py
+++ b/pypy/interpreter/baseobjspace.py
@@ -1602,6 +1602,7 @@
     def bytes_w(self, w_obj):
         return w_obj.bytes_w(self)
 
+    #@not_rpython    BACKCOMPAT
     def str0_w(self, w_obj):
         "Like str_w, but rejects strings with NUL bytes."
         from rpython.rlib import rstring
@@ -1620,6 +1621,15 @@
                         "argument must be a string without NUL characters")
         return rstring.assert_str0(result)
 
+    def text0_w(self, w_obj):
+        "Like text_w, but rejects strings with NUL bytes."
+        from rpython.rlib import rstring
+        result = self.text_w(w_obj)
+        if '\x00' in result:
+            raise oefmt(self.w_ValueError,
+                        "argument must be a string without NUL characters")
+        return rstring.assert_str0(result)
+
     def int_w(self, w_obj, allow_conversion=True):
         """
         Unwrap an app-level int object into an interpret-level int.
@@ -1717,8 +1727,9 @@
             w_obj = self.fsdecode(w_obj)
         return self.unicode0_w(w_obj)
 
+    # BACKCOMPAT  -- replace me with newfilename()
     def wrap_fsdecoded(self, x):
-        return self.fsdecode(self.newbytes(x))
+        return self.newfilename(x)
 
     def bool_w(self, w_obj):
         # Unwraps a bool, also accepting an int for compatibility.
diff --git a/pypy/interpreter/gateway.py b/pypy/interpreter/gateway.py
--- a/pypy/interpreter/gateway.py
+++ b/pypy/interpreter/gateway.py
@@ -168,9 +168,15 @@
     def visit_bytes(self, el, app_sig):
         self.checked_space_method(el, app_sig)
 
+    def visit_bytes0(self, el, app_sig):
+        self.checked_space_method(el, app_sig)
+
     def visit_text(self, el, app_sig):
         self.checked_space_method(el, app_sig)
 
+    def visit_text0(self, el, app_sig):
+        self.checked_space_method(el, app_sig)
+
     def visit_fsencode(self, el, app_sig):
         self.checked_space_method(el, app_sig)
 
@@ -314,9 +320,15 @@
     def visit_bytes(self, typ):
         self.run_args.append("space.bytes_w(%s)" % (self.scopenext(),))
 
+    def visit_bytes0(self, typ):
+        self.run_args.append("space.bytes0_w(%s)" % (self.scopenext(),))
+
     def visit_text(self, typ):
         self.run_args.append("space.text_w(%s)" % (self.scopenext(),))
 
+    def visit_text0(self, typ):
+        self.run_args.append("space.text0_w(%s)" % (self.scopenext(),))
+
     def visit_fsencode(self, typ):
         self.run_args.append("space.fsencode_w(%s)" % (self.scopenext(),))
 
@@ -479,9 +491,15 @@
     def visit_bytes(self, typ):
         self.unwrap.append("space.bytes_w(%s)" % (self.nextarg(),))
 
+    def visit_bytes0(self, typ):
+        self.unwrap.append("space.bytes0_w(%s)" % (self.nextarg(),))
+
     def visit_text(self, typ):
         self.unwrap.append("space.text_w(%s)" % (self.nextarg(),))
 
+    def visit_text0(self, typ):
+        self.unwrap.append("space.text0_w(%s)" % (self.nextarg(),))
+
     def visit_fsencode(self, typ):
         self.unwrap.append("space.fsencode_w(%s)" % (self.nextarg(),))
 
diff --git a/pypy/interpreter/miscutils.py b/pypy/interpreter/miscutils.py
--- a/pypy/interpreter/miscutils.py
+++ b/pypy/interpreter/miscutils.py
@@ -33,6 +33,11 @@
     def getallvalues(self):
         return {0: self._value}
 
+    def _cleanup_(self):
+        # should still be unfilled at this point during translation.
+        # but in some corner cases it is not...  unsure why
+        self._value = None
+
 
 def make_weak_value_dictionary(space, keytype, valuetype):
     "NOT_RPYTHON"
diff --git a/pypy/module/cpyext/pystate.py b/pypy/module/cpyext/pystate.py
--- a/pypy/module/cpyext/pystate.py
+++ b/pypy/module/cpyext/pystate.py
@@ -286,6 +286,8 @@
     else:
         assert ec.cpyext_gilstate_counter_noleave == 0
         assert oldstate == PyGILState_UNLOCKED
+        assert space.config.translation.thread
+        #      ^^^ otherwise, we should not reach this case
         ec.cpyext_threadstate_is_current = False
         space.threadlocals.leave_thread(space)
 
diff --git a/pypy/module/imp/importing.py b/pypy/module/imp/importing.py
--- a/pypy/module/imp/importing.py
+++ b/pypy/module/imp/importing.py
@@ -67,7 +67,7 @@
 lib_pypy = os.path.join(os.path.dirname(__file__),
                         '..', '..', '..', 'lib_pypy')
 
- at unwrap_spec(modulename='str0', level=int)
+ at unwrap_spec(modulename='text0', level=int)
 def importhook(space, modulename, w_globals=None, w_locals=None, w_fromlist=None, level=0):
     # A minimal version, that can only import builtin and lib_pypy modules!
     assert w_locals is w_globals
diff --git a/pypy/module/imp/interp_imp.py b/pypy/module/imp/interp_imp.py
--- a/pypy/module/imp/interp_imp.py
+++ b/pypy/module/imp/interp_imp.py
@@ -72,7 +72,7 @@
     return None
 
 def is_builtin(space, w_name):
-    name = space.str0_w(w_name)
+    name = space.text0_w(w_name)
     if name not in space.builtin_modules:
         return space.newint(0)
     if space.finditem(space.sys.get('modules'), w_name) is not None:
diff --git a/pypy/module/posix/interp_posix.py b/pypy/module/posix/interp_posix.py
--- a/pypy/module/posix/interp_posix.py
+++ b/pypy/module/posix/interp_posix.py
@@ -66,7 +66,7 @@
         self.w_obj = w_obj
 
     def as_bytes(self):
-        return self.space.fsencode_w(self.w_obj)
+        return self.space.bytes0_w(self.w_obj)
 
     def as_unicode(self):
         return self.space.fsdecode_w(self.w_obj)
@@ -85,7 +85,7 @@
             fname = FileEncoder(space, w_fname)
             return func(fname, *args)
         else:
-            fname = space.fsencode_w(w_fname)
+            fname = space.bytes0_w(w_fname)
             return func(fname, *args)
     return dispatch
 
@@ -697,7 +697,7 @@
             fullpath = rposix.getfullpathname(path)
             w_fullpath = space.newunicode(fullpath)
         else:
-            path = space.str0_w(w_path)
+            path = space.bytes0_w(w_path)
             fullpath = rposix.getfullpathname(path)
             w_fullpath = space.newbytes(fullpath)
     except OSError as e:
@@ -793,7 +793,7 @@
         cur = os.getlogin()
     except OSError as e:
         raise wrap_oserror(space, e, eintr_retry=False)
-    return space.wrap_fsdecoded(cur)
+    return space.newfilename(cur)
 
 # ____________________________________________________________
 
@@ -884,7 +884,7 @@
     if space.is_none(w_path):
         w_path = space.newunicode(u".")
     if space.isinstance_w(w_path, space.w_bytes):
-        dirname = space.str0_w(w_path)
+        dirname = space.bytes0_w(w_path)
         try:
             result = rposix.listdir(dirname)
         except OSError as e:
@@ -915,7 +915,7 @@
         if _WIN32:
             result_w[i] = space.newunicode(result[i])
         else:
-            result_w[i] = space.wrap_fsdecoded(result[i])
+            result_w[i] = space.newfilename(result[i])
     return space.newlist(result_w)
 
 @unwrap_spec(fd=c_int)
@@ -1607,7 +1607,7 @@
         r = os.uname()
     except OSError as e:
         raise wrap_oserror(space, e, eintr_retry=False)
-    l_w = [space.wrap_fsdecoded(i)
+    l_w = [space.newfilename(i)
            for i in [r[0], r[1], r[2], r[3], r[4]]]
     w_tuple = space.newtuple(l_w)
     w_uname_result = space.getattr(space.getbuiltinmodule(os.name),
@@ -1945,7 +1945,7 @@
 @unwrap_spec(fd=c_int)
 def ttyname(space, fd):
     try:
-        return space.wrap_fsdecoded(os.ttyname(fd))
+        return space.newfilename(os.ttyname(fd))
     except OSError as e:
         raise wrap_oserror(space, e, eintr_retry=False)
 
@@ -2156,7 +2156,7 @@
 
     Return the name of the controlling terminal for this process.
     """
-    return space.wrap_fsdecoded(os.ctermid())
+    return space.newfilename(os.ctermid())
 
 @unwrap_spec(fd=c_int)
 def device_encoding(space, fd):
diff --git a/pypy/objspace/fake/objspace.py b/pypy/objspace/fake/objspace.py
--- a/pypy/objspace/fake/objspace.py
+++ b/pypy/objspace/fake/objspace.py
@@ -217,11 +217,10 @@
     def newunicode(self, x):
         return w_some_obj()
 
-    def newutf8(self, x):
+    def newtext(self, x):
         return w_some_obj()
-
-    newtext = newutf8
-    newtext_or_none = newutf8
+    newtext_or_none = newtext
+    newfilename = newtext
 
     @not_rpython
     def wrap(self, x):
diff --git a/pypy/objspace/std/objspace.py b/pypy/objspace/std/objspace.py
--- a/pypy/objspace/std/objspace.py
+++ b/pypy/objspace/std/objspace.py
@@ -378,6 +378,9 @@
             return self.w_None
         return self.newtext(s)
 
+    def newfilename(self, s):
+        return self.fsdecode(self.newbytes(s))
+
     def newunicode(self, uni):
         assert uni is not None
         assert isinstance(uni, unicode)


More information about the pypy-commit mailing list