[pypy-commit] pypy py3.5: Kill space.identifier_w(), which is almost not used any more. We might

arigo pypy.commits at gmail.com
Wed Feb 22 10:50:27 EST 2017


Author: Armin Rigo <arigo at tunes.org>
Branch: py3.5
Changeset: r90306:eaf70fb58a3e
Date: 2017-02-22 16:46 +0100
http://bitbucket.org/pypy/pypy/changeset/eaf70fb58a3e/

Log:	Kill space.identifier_w(), which is almost not used any more. We
	might need to think about surrogate-forbidding conversions, but
	later.

diff --git a/pypy/interpreter/argument.py b/pypy/interpreter/argument.py
--- a/pypy/interpreter/argument.py
+++ b/pypy/interpreter/argument.py
@@ -595,7 +595,7 @@
                         except IndexError:
                             name = '?'
                         else:
-                            name = space.identifier_w(w_name)
+                            name = space.text_w(w_name)
                     break
         self.kwd_name = name
 
diff --git a/pypy/interpreter/astcompiler/ast.py b/pypy/interpreter/astcompiler/ast.py
--- a/pypy/interpreter/astcompiler/ast.py
+++ b/pypy/interpreter/astcompiler/ast.py
@@ -433,7 +433,7 @@
         w_returns = get_field(space, w_node, 'returns', True)
         w_lineno = get_field(space, w_node, 'lineno', False)
         w_col_offset = get_field(space, w_node, 'col_offset', False)
-        _name = space.identifier_w(w_name)
+        _name = space.text_w(w_name)
         if _name is None:
             raise_required_value(space, w_node, 'name')
         _args = arguments.from_object(space, w_args)
@@ -513,7 +513,7 @@
         w_returns = get_field(space, w_node, 'returns', True)
         w_lineno = get_field(space, w_node, 'lineno', False)
         w_col_offset = get_field(space, w_node, 'col_offset', False)
-        _name = space.identifier_w(w_name)
+        _name = space.text_w(w_name)
         if _name is None:
             raise_required_value(space, w_node, 'name')
         _args = arguments.from_object(space, w_args)
@@ -606,7 +606,7 @@
         w_decorator_list = get_field(space, w_node, 'decorator_list', False)
         w_lineno = get_field(space, w_node, 'lineno', False)
         w_col_offset = get_field(space, w_node, 'col_offset', False)
-        _name = space.identifier_w(w_name)
+        _name = space.text_w(w_name)
         if _name is None:
             raise_required_value(space, w_node, 'name')
         bases_w = space.unpackiterable(w_bases)
@@ -1511,7 +1511,7 @@
         w_lineno = get_field(space, w_node, 'lineno', False)
         w_col_offset = get_field(space, w_node, 'col_offset', False)
         names_w = space.unpackiterable(w_names)
-        _names = [space.identifier_w(w_item) for w_item in names_w]
+        _names = [space.text_w(w_item) for w_item in names_w]
         _lineno = space.int_w(w_lineno)
         _col_offset = space.int_w(w_col_offset)
         return Global(_names, _lineno, _col_offset)
@@ -1551,7 +1551,7 @@
         w_lineno = get_field(space, w_node, 'lineno', False)
         w_col_offset = get_field(space, w_node, 'col_offset', False)
         names_w = space.unpackiterable(w_names)
-        _names = [space.identifier_w(w_item) for w_item in names_w]
+        _names = [space.text_w(w_item) for w_item in names_w]
         _lineno = space.int_w(w_lineno)
         _col_offset = space.int_w(w_col_offset)
         return Nonlocal(_names, _lineno, _col_offset)
@@ -2880,7 +2880,7 @@
         _value = expr.from_object(space, w_value)
         if _value is None:
             raise_required_value(space, w_node, 'value')
-        _attr = space.identifier_w(w_attr)
+        _attr = space.text_w(w_attr)
         if _attr is None:
             raise_required_value(space, w_node, 'attr')
         _ctx = expr_context.from_object(space, w_ctx)
@@ -3022,7 +3022,7 @@
         w_ctx = get_field(space, w_node, 'ctx', False)
         w_lineno = get_field(space, w_node, 'lineno', False)
         w_col_offset = get_field(space, w_node, 'col_offset', False)
-        _id = space.identifier_w(w_id)
+        _id = space.text_w(w_id)
         if _id is None:
             raise_required_value(space, w_node, 'id')
         _ctx = expr_context.from_object(space, w_ctx)
@@ -3911,7 +3911,7 @@
         w_annotation = get_field(space, w_node, 'annotation', True)
         w_lineno = get_field(space, w_node, 'lineno', False)
         w_col_offset = get_field(space, w_node, 'col_offset', False)
-        _arg = space.identifier_w(w_arg)
+        _arg = space.text_w(w_arg)
         if _arg is None:
             raise_required_value(space, w_node, 'arg')
         _annotation = expr.from_object(space, w_annotation)
@@ -3978,7 +3978,7 @@
     def from_object(space, w_node):
         w_name = get_field(space, w_node, 'name', False)
         w_asname = get_field(space, w_node, 'asname', True)
-        _name = space.identifier_w(w_name)
+        _name = space.text_w(w_name)
         if _name is None:
             raise_required_value(space, w_node, 'name')
         _asname = space.text_or_none_w(w_asname)
diff --git a/pypy/interpreter/astcompiler/tools/asdl_py.py b/pypy/interpreter/astcompiler/tools/asdl_py.py
--- a/pypy/interpreter/astcompiler/tools/asdl_py.py
+++ b/pypy/interpreter/astcompiler/tools/asdl_py.py
@@ -162,7 +162,7 @@
         elif field.type in ("identifier",):
             if field.opt:
                 return "space.text_or_none_w(%s)" % (value,)
-            return "space.identifier_w(%s)" % (value,)
+            return "space.text_w(%s)" % (value,)
         elif field.type in ("int",):
             return "space.int_w(%s)" % (value,)
         elif field.type in ("bool",):
diff --git a/pypy/interpreter/baseobjspace.py b/pypy/interpreter/baseobjspace.py
--- a/pypy/interpreter/baseobjspace.py
+++ b/pypy/interpreter/baseobjspace.py
@@ -236,9 +236,6 @@
     def unicode_w(self, space):
         self._typed_unwrap_error(space, "string")
 
-    def identifier_w(self, space):
-        self._typed_unwrap_error(space, "string")
-
     def text_w(self, space):
         self._typed_unwrap_error(space, "string")
 
@@ -1522,8 +1519,8 @@
             # most API in CPython 3.x no longer do.
             if self.isinstance_w(w_obj, self.w_bytes):
                 return StringBuffer(w_obj.bytes_w(self))
-            if self.isinstance_w(w_obj, self.w_unicode):
-                return StringBuffer(w_obj.identifier_w(self))  # no surrogates
+            if self.isinstance_w(w_obj, self.w_unicode):  # NB. CPython forbids
+                return StringBuffer(w_obj.text_w(self))   # surrogates here
             try:
                 return w_obj.buffer_w(self, self.BUF_SIMPLE)
             except BufferInterfaceNotFound:
@@ -1534,8 +1531,8 @@
             # most API in CPython 3.x no longer do.
             if self.isinstance_w(w_obj, self.w_bytes):
                 return w_obj.bytes_w(self)
-            if self.isinstance_w(w_obj, self.w_unicode):
-                return w_obj.identifier_w(self)    # no surrogates (forbidden)
+            if self.isinstance_w(w_obj, self.w_unicode):  # NB. CPython forbids
+                return w_obj.text_w(self)                 # surrogates here
             try:
                 return w_obj.buffer_w(self, self.BUF_SIMPLE).as_str()
             except BufferInterfaceNotFound:
@@ -1590,8 +1587,7 @@
         encoded string). Else, call bytes_w().
 
         We should kill str_w completely and manually substitute it with
-        text_w/identifier_w/bytes_w at all call sites.  It remains for
-        now for tests only.
+        text_w/bytes_w at all call sites.  It remains for now for tests only.
         """
         if self.isinstance_w(w_obj, self.w_unicode):
             return w_obj.text_w(self)
@@ -1680,18 +1676,6 @@
     realtext_w = text_w         # Python 2 compatibility
     realunicode_w = unicode_w
 
-    def identifier_w(self, w_obj):
-        """
-        Unwrap an object which is used as an identifier (i.e. names of
-        variables, methdods, functions, classes etc.). In py3k, identifiers
-        are unicode strings and are unwrapped as UTF-8 encoded byte strings.
-        This differs from space.text_w() because it raises an app-level
-        UnicodeEncodeError if the unicode string contains surrogates.
-        This corresponds exactly to 'str.encode(obj, "utf-8")' at app-level.
-        (XXX check what occurs on narrow builds or kill narrow builds!)
-        """
-        return w_obj.identifier_w(self)
-
     def fsencode(space, w_obj):
         from pypy.interpreter.unicodehelper import fsencode
         return fsencode(space, w_obj)
diff --git a/pypy/interpreter/test/test_argument.py b/pypy/interpreter/test/test_argument.py
--- a/pypy/interpreter/test/test_argument.py
+++ b/pypy/interpreter/test/test_argument.py
@@ -97,17 +97,12 @@
     newtext = wrap
     newunicode = wrap
 
-    def str_w(self, s):
-        return str(s)
     def text_w(self, s):
-        return self.str_w(s)
+        return self.unicode_w(s).encode('utf-8')
 
     def unicode_w(self, s):
         return unicode(s)
 
-    def identifier_w(self, s):
-        return self.unicode_w(s).encode('utf-8')
-
     def len(self, x):
         return len(x)
 
diff --git a/pypy/interpreter/test/test_objspace.py b/pypy/interpreter/test/test_objspace.py
--- a/pypy/interpreter/test/test_objspace.py
+++ b/pypy/interpreter/test/test_objspace.py
@@ -214,11 +214,11 @@
         assert space.unicode0_w(w(u"123")) == u"123"
         exc = space.raises_w(space.w_ValueError, space.unicode0_w, w(u"123\x004"))
 
-    def test_identifier_w(self):
+    def test_text_w(self):
         space = self.space
         x = u'àèì'
         w_name = space.wrap(x)
-        assert space.identifier_w(w_name) == x.encode('utf-8')
+        assert space.text_w(w_name) == x.encode('utf-8')
 
     def test_getindex_w(self):
         w_instance1 = self.space.appexec([], """():
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
@@ -45,7 +45,7 @@
 
     def text_w(self, space):
         return NonConstant("foobar")
-    identifier_w = bytes_w = text_w
+    bytes_w = text_w
 
     def unicode_w(self, space):
         return NonConstant(u"foobar")
diff --git a/pypy/objspace/std/test/test_unicodeobject.py b/pypy/objspace/std/test/test_unicodeobject.py
--- a/pypy/objspace/std/test/test_unicodeobject.py
+++ b/pypy/objspace/std/test/test_unicodeobject.py
@@ -30,13 +30,11 @@
                 space.w_unicode, "__new__", space.w_unicode, w_uni)
         assert w_new is w_uni
 
-    def test_identifier_or_text_w(self):
+    def test_text_w(self):
         space = self.space
         w_uni = space.wrap(u'abcd')
-        assert space.identifier_w(w_uni) == 'abcd'
         assert space.text_w(w_uni) == 'abcd'
         w_uni = space.wrap(unichr(0xd921) + unichr(0xdddd))
-        space.raises_w(space.w_UnicodeEncodeError, space.identifier_w, w_uni)
         assert space.text_w(w_uni) == '\xed\xa4\xa1\xed\xb7\x9d'
         #                             ^^^ and not the 4-bytes combined character
 
diff --git a/pypy/objspace/std/unicodeobject.py b/pypy/objspace/std/unicodeobject.py
--- a/pypy/objspace/std/unicodeobject.py
+++ b/pypy/objspace/std/unicodeobject.py
@@ -8,8 +8,7 @@
 from rpython.rlib.runicode import (
     make_unicode_escape_function, str_decode_ascii, str_decode_utf_8,
     unicode_encode_ascii, unicode_encode_utf_8, fast_str_decode_ascii,
-    unicode_encode_utf8sp, unicode_encode_utf8_forbid_surrogates,
-    SurrogateError)
+    unicode_encode_utf8sp)
 from rpython.rlib import jit
 
 from pypy.interpreter import unicodehelper
@@ -81,32 +80,13 @@
     def unicode_w(self, space):
         return self._value
 
-    def _identifier_or_text_w(self, space, ignore_sg):
-        try:
-            identifier = jit.conditional_call_elidable(
-                                self._utf8, g_encode_utf8, self._value)
-            if not jit.isconstant(self):
-                self._utf8 = identifier
-        except SurrogateError:
-            # If 'ignore_sg' is False, this logic is here only
-            # to get an official app-level UnicodeEncodeError.
-            # If 'ignore_sg' is True, we encode instead using
-            # unicode_encode_utf8sp().
-            u = self._value
-            if ignore_sg:
-                identifier = unicode_encode_utf8sp(u, len(u))
-            else:
-                eh = unicodehelper.encode_error_handler(space)
-                identifier = unicode_encode_utf_8(u, len(u), None,
-                                                  errorhandler=eh)
+    def text_w(self, space):
+        identifier = jit.conditional_call_elidable(
+                            self._utf8, g_encode_utf8, self._value)
+        if not jit.isconstant(self):
+            self._utf8 = identifier
         return identifier
 
-    def text_w(self, space):
-        return self._identifier_or_text_w(space, ignore_sg=True)
-
-    def identifier_w(self, space):
-        return self._identifier_or_text_w(space, ignore_sg=False)
-
     def listview_unicode(self):
         return _create_list_from_unicode(self._value)
 
@@ -1277,7 +1257,7 @@
 @jit.elidable
 def g_encode_utf8(value):
     """This is a global function because of jit.conditional_call_value"""
-    return unicode_encode_utf8_forbid_surrogates(value, len(value))
+    return unicode_encode_utf8sp(value, len(value))
 
 _repr_function, _ = make_unicode_escape_function(
     pass_printable=True, unicode_output=True, quotes=True, prefix='')


More information about the pypy-commit mailing list