[pypy-svn] r69432 - in pypy/branch/unpackiterable-improvements/pypy: annotation interpreter interpreter/astcompiler interpreter/astcompiler/tools interpreter/test module/__builtin__ module/__builtin__/test module/_codecs module/_rawffi module/_stackless/test module/micronumpy objspace/flow objspace/std objspace/std/test rpython

fijal at codespeak.net fijal at codespeak.net
Thu Nov 19 12:10:39 CET 2009


Author: fijal
Date: Thu Nov 19 12:10:37 2009
New Revision: 69432

Modified:
   pypy/branch/unpackiterable-improvements/pypy/annotation/bookkeeper.py
   pypy/branch/unpackiterable-improvements/pypy/interpreter/argument.py
   pypy/branch/unpackiterable-improvements/pypy/interpreter/astcompiler/ast.py
   pypy/branch/unpackiterable-improvements/pypy/interpreter/astcompiler/tools/asdl_py.py
   pypy/branch/unpackiterable-improvements/pypy/interpreter/baseobjspace.py
   pypy/branch/unpackiterable-improvements/pypy/interpreter/function.py
   pypy/branch/unpackiterable-improvements/pypy/interpreter/gateway.py
   pypy/branch/unpackiterable-improvements/pypy/interpreter/interactive.py
   pypy/branch/unpackiterable-improvements/pypy/interpreter/nestedscope.py
   pypy/branch/unpackiterable-improvements/pypy/interpreter/pycode.py
   pypy/branch/unpackiterable-improvements/pypy/interpreter/pyopcode.py
   pypy/branch/unpackiterable-improvements/pypy/interpreter/test/test_argument.py
   pypy/branch/unpackiterable-improvements/pypy/interpreter/test/test_objspace.py
   pypy/branch/unpackiterable-improvements/pypy/module/__builtin__/abstractinst.py
   pypy/branch/unpackiterable-improvements/pypy/module/__builtin__/interp_classobj.py
   pypy/branch/unpackiterable-improvements/pypy/module/__builtin__/test/test_abstractinst.py
   pypy/branch/unpackiterable-improvements/pypy/module/_codecs/interp_codecs.py
   pypy/branch/unpackiterable-improvements/pypy/module/_rawffi/interp_rawffi.py
   pypy/branch/unpackiterable-improvements/pypy/module/_rawffi/structure.py
   pypy/branch/unpackiterable-improvements/pypy/module/_stackless/test/test_pickle_infrastructure.py
   pypy/branch/unpackiterable-improvements/pypy/module/micronumpy/numarray.py
   pypy/branch/unpackiterable-improvements/pypy/objspace/flow/objspace.py
   pypy/branch/unpackiterable-improvements/pypy/objspace/std/dictmultiobject.py
   pypy/branch/unpackiterable-improvements/pypy/objspace/std/formatting.py
   pypy/branch/unpackiterable-improvements/pypy/objspace/std/inlinedict.py
   pypy/branch/unpackiterable-improvements/pypy/objspace/std/marshal_impl.py
   pypy/branch/unpackiterable-improvements/pypy/objspace/std/objspace.py
   pypy/branch/unpackiterable-improvements/pypy/objspace/std/ropeobject.py
   pypy/branch/unpackiterable-improvements/pypy/objspace/std/ropeunicodeobject.py
   pypy/branch/unpackiterable-improvements/pypy/objspace/std/setobject.py
   pypy/branch/unpackiterable-improvements/pypy/objspace/std/stringobject.py
   pypy/branch/unpackiterable-improvements/pypy/objspace/std/strsliceobject.py
   pypy/branch/unpackiterable-improvements/pypy/objspace/std/test/test_dictmultiobject.py
   pypy/branch/unpackiterable-improvements/pypy/objspace/std/tupletype.py
   pypy/branch/unpackiterable-improvements/pypy/objspace/std/typeobject.py
   pypy/branch/unpackiterable-improvements/pypy/objspace/std/typetype.py
   pypy/branch/unpackiterable-improvements/pypy/objspace/std/unicodeobject.py
   pypy/branch/unpackiterable-improvements/pypy/rpython/callparse.py
Log:
A largish checkin:
Break viewiterable into two:
* fixedview - returns fixed-size list. In case of W_TupleObject, no copy
* listview - returns resizable list. In case of W_ListObject, no copy


Modified: pypy/branch/unpackiterable-improvements/pypy/annotation/bookkeeper.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/annotation/bookkeeper.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/annotation/bookkeeper.py	Thu Nov 19 12:10:37 2009
@@ -757,7 +757,8 @@
             getattr(s_obj, 'from_ellipsis', False)):    # see newtuple()
             return [Ellipsis]
         raise CallPatternTooComplex, "'*' argument must be SomeTuple"
-    viewiterable = unpackiterable
+    fixedview = unpackiterable
+    listview  = unpackiterable
 
     def is_w(self, one, other):
         return one is other

Modified: pypy/branch/unpackiterable-improvements/pypy/interpreter/argument.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/interpreter/argument.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/interpreter/argument.py	Thu Nov 19 12:10:37 2009
@@ -135,7 +135,7 @@
         # unpack the * arguments 
         if w_stararg is not None:
             self.arguments_w = (self.arguments_w +
-                                self.space.viewiterable(w_stararg))
+                                self.space.fixedview(w_stararg))
         # unpack the ** arguments
         if w_starstararg is not None:
             space = self.space

Modified: pypy/branch/unpackiterable-improvements/pypy/interpreter/astcompiler/ast.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/interpreter/astcompiler/ast.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/interpreter/astcompiler/ast.py	Thu Nov 19 12:10:37 2009
@@ -97,7 +97,7 @@
             pass
         w_list = self.w_body
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.body = [space.interp_w(stmt, w_obj) for w_obj in list_w]
             else:
@@ -132,7 +132,7 @@
             pass
         w_list = self.w_body
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.body = [space.interp_w(stmt, w_obj) for w_obj in list_w]
             else:
@@ -191,7 +191,7 @@
             pass
         w_list = self.w_body
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.body = [space.interp_w(stmt, w_obj) for w_obj in list_w]
             else:
@@ -244,7 +244,7 @@
         self.args.sync_app_attrs(space)
         w_list = self.w_body
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.body = [space.interp_w(stmt, w_obj) for w_obj in list_w]
             else:
@@ -254,7 +254,7 @@
                 node.sync_app_attrs(space)
         w_list = self.w_decorators
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.decorators = [space.interp_w(expr, w_obj) for w_obj in list_w]
             else:
@@ -297,7 +297,7 @@
             pass
         w_list = self.w_bases
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.bases = [space.interp_w(expr, w_obj) for w_obj in list_w]
             else:
@@ -307,7 +307,7 @@
                 node.sync_app_attrs(space)
         w_list = self.w_body
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.body = [space.interp_w(stmt, w_obj) for w_obj in list_w]
             else:
@@ -375,7 +375,7 @@
             pass
         w_list = self.w_targets
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.targets = [space.interp_w(expr, w_obj) for w_obj in list_w]
             else:
@@ -415,7 +415,7 @@
             pass
         w_list = self.w_targets
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.targets = [space.interp_w(expr, w_obj) for w_obj in list_w]
             else:
@@ -492,7 +492,7 @@
             self.dest.sync_app_attrs(space)
         w_list = self.w_values
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.values = [space.interp_w(expr, w_obj) for w_obj in list_w]
             else:
@@ -540,7 +540,7 @@
         self.iter.sync_app_attrs(space)
         w_list = self.w_body
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.body = [space.interp_w(stmt, w_obj) for w_obj in list_w]
             else:
@@ -550,7 +550,7 @@
                 node.sync_app_attrs(space)
         w_list = self.w_orelse
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.orelse = [space.interp_w(stmt, w_obj) for w_obj in list_w]
             else:
@@ -595,7 +595,7 @@
         self.test.sync_app_attrs(space)
         w_list = self.w_body
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.body = [space.interp_w(stmt, w_obj) for w_obj in list_w]
             else:
@@ -605,7 +605,7 @@
                 node.sync_app_attrs(space)
         w_list = self.w_orelse
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.orelse = [space.interp_w(stmt, w_obj) for w_obj in list_w]
             else:
@@ -650,7 +650,7 @@
         self.test.sync_app_attrs(space)
         w_list = self.w_body
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.body = [space.interp_w(stmt, w_obj) for w_obj in list_w]
             else:
@@ -660,7 +660,7 @@
                 node.sync_app_attrs(space)
         w_list = self.w_orelse
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.orelse = [space.interp_w(stmt, w_obj) for w_obj in list_w]
             else:
@@ -707,7 +707,7 @@
             self.optional_vars.sync_app_attrs(space)
         w_list = self.w_body
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.body = [space.interp_w(stmt, w_obj) for w_obj in list_w]
             else:
@@ -795,7 +795,7 @@
             pass
         w_list = self.w_body
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.body = [space.interp_w(stmt, w_obj) for w_obj in list_w]
             else:
@@ -805,7 +805,7 @@
                 node.sync_app_attrs(space)
         w_list = self.w_handlers
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.handlers = [space.interp_w(excepthandler, w_obj) for w_obj in list_w]
             else:
@@ -815,7 +815,7 @@
                 node.sync_app_attrs(space)
         w_list = self.w_orelse
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.orelse = [space.interp_w(stmt, w_obj) for w_obj in list_w]
             else:
@@ -857,7 +857,7 @@
             pass
         w_list = self.w_body
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.body = [space.interp_w(stmt, w_obj) for w_obj in list_w]
             else:
@@ -867,7 +867,7 @@
                 node.sync_app_attrs(space)
         w_list = self.w_finalbody
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.finalbody = [space.interp_w(stmt, w_obj) for w_obj in list_w]
             else:
@@ -936,7 +936,7 @@
             pass
         w_list = self.w_names
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.names = [space.interp_w(alias, w_obj) for w_obj in list_w]
             else:
@@ -977,7 +977,7 @@
                 self.level = 0
         w_list = self.w_names
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.names = [space.interp_w(alias, w_obj) for w_obj in list_w]
             else:
@@ -1053,7 +1053,7 @@
             pass
         w_list = self.w_names
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.names = [space.str_w(w_obj) for w_obj in list_w]
             else:
@@ -1196,7 +1196,7 @@
             pass
         w_list = self.w_values
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.values = [space.interp_w(expr, w_obj) for w_obj in list_w]
             else:
@@ -1359,7 +1359,7 @@
             pass
         w_list = self.w_keys
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.keys = [space.interp_w(expr, w_obj) for w_obj in list_w]
             else:
@@ -1369,7 +1369,7 @@
                 node.sync_app_attrs(space)
         w_list = self.w_values
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.values = [space.interp_w(expr, w_obj) for w_obj in list_w]
             else:
@@ -1408,7 +1408,7 @@
         self.elt.sync_app_attrs(space)
         w_list = self.w_generators
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.generators = [space.interp_w(comprehension, w_obj) for w_obj in list_w]
             else:
@@ -1447,7 +1447,7 @@
         self.elt.sync_app_attrs(space)
         w_list = self.w_generators
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.generators = [space.interp_w(comprehension, w_obj) for w_obj in list_w]
             else:
@@ -1520,14 +1520,14 @@
         self.left.sync_app_attrs(space)
         w_list = self.w_ops
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.ops = [space.interp_w(cmpop, w_obj).to_simple_int(space) for w_obj in list_w]
             else:
                 self.ops = None
         w_list = self.w_comparators
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.comparators = [space.interp_w(expr, w_obj) for w_obj in list_w]
             else:
@@ -1579,7 +1579,7 @@
         self.func.sync_app_attrs(space)
         w_list = self.w_args
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.args = [space.interp_w(expr, w_obj) for w_obj in list_w]
             else:
@@ -1589,7 +1589,7 @@
                 node.sync_app_attrs(space)
         w_list = self.w_keywords
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.keywords = [space.interp_w(keyword, w_obj) for w_obj in list_w]
             else:
@@ -1795,7 +1795,7 @@
             pass
         w_list = self.w_elts
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.elts = [space.interp_w(expr, w_obj) for w_obj in list_w]
             else:
@@ -1834,7 +1834,7 @@
             pass
         w_list = self.w_elts
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.elts = [space.interp_w(expr, w_obj) for w_obj in list_w]
             else:
@@ -2012,7 +2012,7 @@
             pass
         w_list = self.w_dims
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.dims = [space.interp_w(slice, w_obj) for w_obj in list_w]
             else:
@@ -2305,7 +2305,7 @@
         self.iter.sync_app_attrs(space)
         w_list = self.w_ifs
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.ifs = [space.interp_w(expr, w_obj) for w_obj in list_w]
             else:
@@ -2344,7 +2344,7 @@
             self.name.sync_app_attrs(space)
         w_list = self.w_body
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.body = [space.interp_w(stmt, w_obj) for w_obj in list_w]
             else:
@@ -2379,7 +2379,7 @@
                 self.kwarg = None
         w_list = self.w_args
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.args = [space.interp_w(expr, w_obj) for w_obj in list_w]
             else:
@@ -2389,7 +2389,7 @@
                 node.sync_app_attrs(space)
         w_list = self.w_defaults
         if w_list is not None:
-            list_w = space.viewiterable(w_list)
+            list_w = space.listview(w_list)
             if list_w:
                 self.defaults = [space.interp_w(expr, w_obj) for w_obj in list_w]
             else:

Modified: pypy/branch/unpackiterable-improvements/pypy/interpreter/astcompiler/tools/asdl_py.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/interpreter/astcompiler/tools/asdl_py.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/interpreter/astcompiler/tools/asdl_py.py	Thu Nov 19 12:10:37 2009
@@ -144,7 +144,7 @@
             if attr.seq:
                 self.emit("w_list = self.w_%s" % (attr.name,), 2)
                 self.emit("if w_list is not None:", 2)
-                self.emit("list_w = space.viewiterable(w_list)", 3)
+                self.emit("list_w = space.listview(w_list)", 3)
                 self.emit("if list_w:", 3)
                 unwrapper = get_unwrapper(attr.type.value, "w_obj",
                                           self.data.simple_types)

Modified: pypy/branch/unpackiterable-improvements/pypy/interpreter/baseobjspace.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/interpreter/baseobjspace.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/interpreter/baseobjspace.py	Thu Nov 19 12:10:37 2009
@@ -668,13 +668,17 @@
                                    (i, plural))
         return items
 
-    def viewiterable(self, w_iterable, expected_length=-1):
-        """ More or less the same as unpackiterable, but does not return
-        a copy. Please don't modify the result
+    def fixedview(self, w_iterable, expected_length=-1):
+        """ A fixed list view of w_iterable. Don't modify the result
         """
         return make_sure_not_resized(self.unpackiterable(w_iterable,
                                                          expected_length)[:])
 
+    def listview(self, w_iterable, expected_length=-1):
+        """ A non-fixed view of w_iterable. Don't modify the result
+        """
+        return self.unpackiterable(w_iterable, expected_length)
+
     def exception_match(self, w_exc_type, w_check_class):
         """Checks if the given exception type matches 'w_check_class'."""
         if self.is_w(w_exc_type, w_check_class):
@@ -771,7 +775,7 @@
     def lookup(self, w_obj, name):
         w_type = self.type(w_obj)
         w_mro = self.getattr(w_type, self.wrap("__mro__"))
-        for w_supertype in self.viewiterable(w_mro):
+        for w_supertype in self.fixedview(w_mro):
             w_value = w_supertype.getdictvalue(self, name)
             if w_value is not None:
                 return w_value
@@ -880,7 +884,7 @@
         if self.is_true(self.isinstance(w_index_or_slice, self.w_slice)):
             w_indices = self.call_method(w_index_or_slice, "indices",
                                          self.wrap(seqlength))
-            w_start, w_stop, w_step = self.viewiterable(w_indices, 3)
+            w_start, w_stop, w_step = self.fixedview(w_indices, 3)
             start = self.int_w(w_start)
             stop  = self.int_w(w_stop)
             step  = self.int_w(w_step)

Modified: pypy/branch/unpackiterable-improvements/pypy/interpreter/function.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/interpreter/function.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/interpreter/function.py	Thu Nov 19 12:10:37 2009
@@ -198,7 +198,7 @@
         else:
             name = None
         if not space.is_w(w_argdefs, space.w_None):
-            defs_w = space.viewiterable(w_argdefs)
+            defs_w = space.fixedview(w_argdefs)
         else:
             defs_w = []
         nfreevars = 0
@@ -316,7 +316,7 @@
         if space.is_w(w_func_dict, space.w_None):
             w_func_dict = None
         self.w_func_dict = w_func_dict
-        self.defs_w    = space.viewiterable(w_defs_w)
+        self.defs_w    = space.fixedview(w_defs_w)
         self.w_module = w_module
 
     def fget_func_defaults(space, self):
@@ -331,7 +331,7 @@
             return
         if not space.is_true(space.isinstance(w_defaults, space.w_tuple)):
             raise OperationError( space.w_TypeError, space.wrap("func_defaults must be set to a tuple object or None") )
-        self.defs_w = space.viewiterable(w_defaults)
+        self.defs_w = space.fixedview(w_defaults)
 
     def fdel_func_defaults(space, self):
         self.defs_w = []

Modified: pypy/branch/unpackiterable-improvements/pypy/interpreter/gateway.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/interpreter/gateway.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/interpreter/gateway.py	Thu Nov 19 12:10:37 2009
@@ -210,7 +210,7 @@
                              % (self.scopenext(), self.scopenext()))
 
     def visit_args_w(self, el):
-        self.run_args.append("space.viewiterable(%s)" % self.scopenext())
+        self.run_args.append("space.fixedview(%s)" % self.scopenext())
 
     def visit_w_args(self, el):
         self.run_args.append(self.scopenext())
@@ -416,7 +416,7 @@
         #  baseobjspace.W_Root is for wrapped arguments to keep wrapped
         #  baseobjspace.Wrappable subclasses imply interp_w and a typecheck
         #  argument.Arguments is for a final rest arguments Arguments object
-        # 'args_w' for viewiterable applied to rest arguments
+        # 'args_w' for fixedview applied to rest arguments
         # 'w_args' for rest arguments passed as wrapped tuple
         # str,int,float: unwrap argument as such type
         # (function, cls) use function to check/unwrap argument of type cls

Modified: pypy/branch/unpackiterable-improvements/pypy/interpreter/interactive.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/interpreter/interactive.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/interpreter/interactive.py	Thu Nov 19 12:10:37 2009
@@ -73,7 +73,7 @@
         words = self.get_words(w_clz)
         try:                
             w_bases = s.getattr(w_clz, s.wrap("__bases__"))             
-            bases_w = s.viewiterable(w_bases)
+            bases_w = s.fixedview(w_bases)
 
         except error.OperationError:
             return words

Modified: pypy/branch/unpackiterable-improvements/pypy/interpreter/nestedscope.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/interpreter/nestedscope.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/interpreter/nestedscope.py	Thu Nov 19 12:10:37 2009
@@ -208,7 +208,7 @@
         if codeobj.magic >= 0xa0df281:    # CPython 2.5 AST branch merge
             w_freevarstuple = f.popvalue()
             freevars = [f.space.interp_w(Cell, cell)
-                        for cell in f.space.viewiterable(w_freevarstuple)]
+                        for cell in f.space.fixedview(w_freevarstuple)]
         else:
             nfreevars = len(codeobj.co_freevars)
             freevars = [f.space.interp_w(Cell, f.popvalue())

Modified: pypy/branch/unpackiterable-improvements/pypy/interpreter/pycode.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/interpreter/pycode.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/interpreter/pycode.py	Thu Nov 19 12:10:37 2009
@@ -349,7 +349,7 @@
         if not space.is_true(space.isinstance(w_constants, space.w_tuple)):
             raise OperationError(space.w_TypeError,
                                  space.wrap("Expected tuple for constants"))
-        consts_w   = space.viewiterable(w_constants)
+        consts_w   = space.fixedview(w_constants)
         names      = unpack_str_tuple(space, w_names)
         varnames   = unpack_str_tuple(space, w_varnames)
         if w_freevars is not None:

Modified: pypy/branch/unpackiterable-improvements/pypy/interpreter/pyopcode.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/interpreter/pyopcode.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/interpreter/pyopcode.py	Thu Nov 19 12:10:37 2009
@@ -581,7 +581,7 @@
                                      w_compile_flags,
                                      f.space.wrap(f.get_builtin()),
                                      f.space.gettypeobject(PyCode.typedef))
-        w_prog, w_globals, w_locals = f.space.viewiterable(w_resulttuple, 3)
+        w_prog, w_globals, w_locals = f.space.fixedview(w_resulttuple, 3)
 
         plain = f.w_locals is not None and f.space.is_w(w_locals, f.w_locals)
         if plain:
@@ -637,7 +637,7 @@
     def UNPACK_SEQUENCE(f, itemcount, *ignored):
         w_iterable = f.popvalue()
         try:
-            items = f.space.viewiterable(w_iterable, itemcount)
+            items = f.space.fixedview(w_iterable, itemcount)
         except UnpackValueError, e:
             raise OperationError(f.space.w_ValueError, f.space.wrap(e.msg))
         f.pushrevvalues(itemcount, items)

Modified: pypy/branch/unpackiterable-improvements/pypy/interpreter/test/test_argument.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/interpreter/test/test_argument.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/interpreter/test/test_argument.py	Thu Nov 19 12:10:37 2009
@@ -60,9 +60,12 @@
     def is_true(self, obj):
         return bool(obj)
 
-    def viewiterable(self, it):
+    def fixedview(self, it):
         return list(it)
 
+    def listview(self, it):
+        return list(it)        
+
     def unpackiterable(self, it):
         return list(it)
 

Modified: pypy/branch/unpackiterable-improvements/pypy/interpreter/test/test_objspace.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/interpreter/test/test_objspace.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/interpreter/test/test_objspace.py	Thu Nov 19 12:10:37 2009
@@ -58,14 +58,23 @@
         raises(ValueError, self.space.unpackiterable, w_l, 3)
         raises(ValueError, self.space.unpackiterable, w_l, 5)
 
-    def test_viewiterable(self):
+    def test_fixedview(self):
         w = self.space.wrap
         l = [w(1), w(2), w(3), w(4)]
         w_l = self.space.newtuple(l)
-        assert self.space.viewiterable(w_l) == l
-        assert self.space.viewiterable(w_l, 4) == l
-        raises(ValueError, self.space.viewiterable, w_l, 3)
-        raises(ValueError, self.space.viewiterable, w_l, 5)
+        assert self.space.fixedview(w_l) == l
+        assert self.space.fixedview(w_l, 4) == l
+        raises(ValueError, self.space.fixedview, w_l, 3)
+        raises(ValueError, self.space.fixedview, w_l, 5)
+
+    def test_listview(self):
+        w = self.space.wrap
+        l = [w(1), w(2), w(3), w(4)]
+        w_l = self.space.newtuple(l)
+        assert self.space.listview(w_l) == l
+        assert self.space.listview(w_l, 4) == l
+        raises(ValueError, self.space.listview, w_l, 3)
+        raises(ValueError, self.space.listview, w_l, 5)
 
     def test_exception_match(self):
         assert self.space.exception_match(self.space.w_ValueError,
@@ -207,7 +216,7 @@
 
         w_res = space.call_obj_args(w_f, w_9, Arguments(space, [w_1]))
 
-        w_x, w_y = space.viewiterable(w_res, 2)
+        w_x, w_y = space.fixedview(w_res, 2)
         assert w_x is w_9
         assert w_y is w_1
 

Modified: pypy/branch/unpackiterable-improvements/pypy/module/__builtin__/abstractinst.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/module/__builtin__/abstractinst.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/module/__builtin__/abstractinst.py	Thu Nov 19 12:10:37 2009
@@ -83,7 +83,7 @@
 def _abstract_isinstance_w_helper(space, w_obj, w_klass_or_tuple):
     # -- case (anything, tuple)
     if space.is_true(space.isinstance(w_klass_or_tuple, space.w_tuple)):
-        for w_klass in space.viewiterable(w_klass_or_tuple):
+        for w_klass in space.fixedview(w_klass_or_tuple):
             if abstract_isinstance_w(space, w_obj, w_klass):
                 return True
         return False
@@ -109,7 +109,7 @@
         return True
     w_bases = _get_bases(space, w_derived)
     if w_bases is not None:
-        for w_base in space.viewiterable(w_bases):
+        for w_base in space.fixedview(w_bases):
             if _issubclass_recurse(space, w_base, w_top):
                 return True
     return False
@@ -141,7 +141,7 @@
     # -- case (class-like-object, tuple-of-classes)
     # XXX it might be risky that the JIT sees this
     if space.is_true(space.isinstance(w_klass_or_tuple, space.w_tuple)):
-        for w_klass in space.viewiterable(w_klass_or_tuple):
+        for w_klass in space.fixedview(w_klass_or_tuple):
             if abstract_issubclass_w(space, w_derived, w_klass):
                 return True
         return False

Modified: pypy/branch/unpackiterable-improvements/pypy/module/__builtin__/interp_classobj.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/module/__builtin__/interp_classobj.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/module/__builtin__/interp_classobj.py	Thu Nov 19 12:10:37 2009
@@ -36,7 +36,7 @@
 
     # XXX missing: lengthy and obscure logic about "__module__"
         
-    bases_w = space.viewiterable(w_bases)
+    bases_w = space.fixedview(w_bases)
     for w_base in bases_w:
         if not isinstance(w_base, W_ClassObject):
             w_metaclass = space.type(w_base)
@@ -79,7 +79,7 @@
             raise OperationError(
                     space.w_TypeError,
                     space.wrap("__bases__ must be a tuple object"))
-        bases_w = space.viewiterable(w_bases)
+        bases_w = space.fixedview(w_bases)
         for w_base in bases_w:
             if not isinstance(w_base, W_ClassObject):
                 raise OperationError(space.w_TypeError,
@@ -285,7 +285,7 @@
         if not e.match(space, space.w_TypeError):
             raise
         return [None, None]
-    return space.viewiterable(w_tup, 2)
+    return space.fixedview(w_tup, 2)
 
 def descr_instance_new(space, w_type, w_class, w_dict=None):
     # w_type is not used at all

Modified: pypy/branch/unpackiterable-improvements/pypy/module/__builtin__/test/test_abstractinst.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/module/__builtin__/test/test_abstractinst.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/module/__builtin__/test/test_abstractinst.py	Thu Nov 19 12:10:37 2009
@@ -5,7 +5,7 @@
 
     def test_abstract_isclass(self):
         space = self.space
-        w_B1, w_B2, w_B3, w_X, w_Y = space.viewiterable(space.appexec([], """():
+        w_B1, w_B2, w_B3, w_X, w_Y = space.fixedview(space.appexec([], """():
             class X(object): pass
             class Y: pass
             B1, B2, B3 = X(), X(), X()
@@ -22,7 +22,7 @@
 
     def test_abstract_getclass(self):
         space = self.space
-        w_x, w_y, w_A, w_MyInst = space.viewiterable(space.appexec([], """():
+        w_x, w_y, w_A, w_MyInst = space.fixedview(space.appexec([], """():
             class MyInst(object):
                 def __init__(self, myclass):
                     self.myclass = myclass

Modified: pypy/branch/unpackiterable-improvements/pypy/module/_codecs/interp_codecs.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/module/_codecs/interp_codecs.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/module/_codecs/interp_codecs.py	Thu Nov 19 12:10:37 2009
@@ -35,7 +35,7 @@
                     space.wrap("encoding error handler must return "
                                "(unicode, int) tuple, not %s" % (
                                    space.str_w(space.repr(w_res)))))
-            w_replace, w_newpos = space.viewiterable(w_res, 2)
+            w_replace, w_newpos = space.fixedview(w_res, 2)
             newpos = space.int_w(w_newpos)
             if (newpos < 0):
                 newpos = len(input) + newpos

Modified: pypy/branch/unpackiterable-improvements/pypy/module/_rawffi/interp_rawffi.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/module/_rawffi/interp_rawffi.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/module/_rawffi/interp_rawffi.py	Thu Nov 19 12:10:37 2009
@@ -106,7 +106,7 @@
             resshape = cache.get_array_type(letter2tp(space, letter))
     else:
         letter = 'V'
-        w_shapetype, w_length = space.viewiterable(w_shape, expected_length=2)
+        w_shapetype, w_length = space.fixedview(w_shape, expected_length=2)
         from pypy.module._rawffi.structure import W_Structure
         resshape = space.interp_w(W_Structure, w_shapetype)
         ffi_type = resshape.get_ffi_type()
@@ -117,7 +117,7 @@
         letter = space.str_w(w_shape)
         return letter2tp(space, letter)
     else:
-        w_shapetype, w_length = space.viewiterable(w_shape, expected_length=2)
+        w_shapetype, w_length = space.fixedview(w_shape, expected_length=2)
         resshape = space.interp_w(W_DataShape, w_shapetype)
         length = space.int_w(w_length)
         size, alignment = resshape._size_alignment()
@@ -155,7 +155,7 @@
         """
         ffi_restype, resshape = unpack_resshape(space, w_restype)
         w = space.wrap
-        argtypes_w = space.viewiterable(w_argtypes)
+        argtypes_w = space.fixedview(w_argtypes)
         w_argtypes = space.newtuple(argtypes_w)
         w_key = space.newtuple([w_name, w_argtypes, w(resshape)])
         try:

Modified: pypy/branch/unpackiterable-improvements/pypy/module/_rawffi/structure.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/module/_rawffi/structure.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/module/_rawffi/structure.py	Thu Nov 19 12:10:37 2009
@@ -119,7 +119,7 @@
 
 def descr_new_structure(space, w_type, w_shapeinfo):
     if space.is_true(space.isinstance(w_shapeinfo, space.w_tuple)):
-        w_size, w_alignment = space.viewiterable(w_shapeinfo, expected_length=2)
+        w_size, w_alignment = space.fixedview(w_shapeinfo, expected_length=2)
         S = W_Structure(space, None, space.int_w(w_size),
                                      space.int_w(w_alignment))
     else:

Modified: pypy/branch/unpackiterable-improvements/pypy/module/_stackless/test/test_pickle_infrastructure.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/module/_stackless/test/test_pickle_infrastructure.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/module/_stackless/test/test_pickle_infrastructure.py	Thu Nov 19 12:10:37 2009
@@ -129,7 +129,7 @@
         return co, f, g
         """)
 
-        w_co, w_f, w_g = space.viewiterable(w_res)
+        w_co, w_f, w_g = space.fixedview(w_res)
 
         ec = space.getexecutioncontext()
         fcode = w_f.code.co_code
@@ -188,7 +188,7 @@
         return co, f, g
         """)
 
-        w_co, w_f, w_g = space.viewiterable(w_res)
+        w_co, w_f, w_g = space.fixedview(w_res)
 
         ec = space.getexecutioncontext()
         fcode = w_f.code.co_code
@@ -260,7 +260,7 @@
         return co, f, g
         """)
 
-        w_co, w_f, w_g = space.viewiterable(w_res)
+        w_co, w_f, w_g = space.fixedview(w_res)
 
         ec = space.getexecutioncontext()
         fcode = w_f.code.co_code

Modified: pypy/branch/unpackiterable-improvements/pypy/module/micronumpy/numarray.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/module/micronumpy/numarray.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/module/micronumpy/numarray.py	Thu Nov 19 12:10:37 2009
@@ -73,7 +73,7 @@
         make_sure_not_resized(self.storage)
 
     def _unpack_indexes(self, space, w_index):
-        indexes = [space.int_w(w_i) for w_i in space.viewiterable(w_index)]
+        indexes = [space.int_w(w_i) for w_i in space.fixedview(w_index)]
         if len(indexes) != len(self.dim):
             raise OperationError(space.w_IndexError, space.wrap(
                 'Wrong index'))
@@ -108,7 +108,7 @@
 def unpack_dim(space, w_dim):
     if space.is_true(space.isinstance(w_dim, space.w_int)):
         return [space.int_w(w_dim)]
-    dim_w = space.viewiterable(w_dim)
+    dim_w = space.fixedview(w_dim)
     return [space.int_w(w_i) for w_i in dim_w]
 
 def unpack_dtype(space, w_dtype):

Modified: pypy/branch/unpackiterable-improvements/pypy/objspace/flow/objspace.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/objspace/flow/objspace.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/objspace/flow/objspace.py	Thu Nov 19 12:10:37 2009
@@ -202,7 +202,7 @@
             # the simple case
             return ObjSpace.exception_match(self, w_exc_type, w_check_class)
         # checking a tuple of classes
-        for w_klass in self.viewiterable(w_check_class):
+        for w_klass in self.fixedview(w_check_class):
             if ObjSpace.exception_match(self, w_exc_type, w_klass):
                 return True
         return False
@@ -263,8 +263,9 @@
         checkgraph(graph)
         return graph
 
-    def viewiterable(self, w_tuple, expected_length=None):
+    def fixedview(self, w_tuple, expected_length=None):
         return self.unpackiterable(w_tuple, expected_length)
+    listview = fixedview
 
     def unpackiterable(self, w_iterable, expected_length=None):
         if not isinstance(w_iterable, Variable):

Modified: pypy/branch/unpackiterable-improvements/pypy/objspace/std/dictmultiobject.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/objspace/std/dictmultiobject.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/objspace/std/dictmultiobject.py	Thu Nov 19 12:10:37 2009
@@ -652,7 +652,7 @@
     elif space.findattr(w_src, space.wrap("keys")) is None:
         list_of_w_pairs = space.unpackiterable(w_src)
         for w_pair in list_of_w_pairs:
-            pair = space.unpackiterable(w_pair)
+            pair = space.fixedview(w_pair)
             if len(pair)!=2:
                 raise OperationError(space.w_ValueError,
                              space.wrap("dict() takes a sequence of pairs"))

Modified: pypy/branch/unpackiterable-improvements/pypy/objspace/std/formatting.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/objspace/std/formatting.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/objspace/std/formatting.py	Thu Nov 19 12:10:37 2009
@@ -495,7 +495,7 @@
 
 def mod_format(space, w_format, w_values, do_unicode=False):
     if space.is_true(space.isinstance(w_values, space.w_tuple)):
-        values_w = space.unpackiterable(w_values)
+        values_w = space.fixedview(w_values)
         return format(space, w_format, values_w, None, do_unicode)
     else:
         # we check directly for dict to avoid obscure checking

Modified: pypy/branch/unpackiterable-improvements/pypy/objspace/std/inlinedict.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/objspace/std/inlinedict.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/objspace/std/inlinedict.py	Thu Nov 19 12:10:37 2009
@@ -45,7 +45,7 @@
             # XXX sucky
             items = []
             for w_item in self.impl_items():
-                w_key, w_value = self.space.viewiterable(w_item)
+                w_key, w_value = self.space.fixedview(w_item)
                 items.append((w_key, w_value))
             return IndirectionIterImplementation(self.space, self, items)
 

Modified: pypy/branch/unpackiterable-improvements/pypy/objspace/std/marshal_impl.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/objspace/std/marshal_impl.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/objspace/std/marshal_impl.py	Thu Nov 19 12:10:37 2009
@@ -356,7 +356,7 @@
 def marshal_w__DictMulti(space, w_dict, m):
     m.start(TYPE_DICT)
     for w_tuple in w_dict.items():
-        w_key, w_value = space.viewiterable(w_tuple, 2)
+        w_key, w_value = space.fixedview(w_tuple, 2)
         m.put_w_obj(w_key)
         m.put_w_obj(w_value)
     m.atom(TYPE_NULL)
@@ -469,14 +469,14 @@
 def marshal_w_set(space, w_set, m):
     # cannot access this list directly, because it's
     # type is not exactly known through applevel.
-    lis_w = space.viewiterable(w_set)
+    lis_w = space.unpackiterable(w_set)
     m.put_tuple_w(TYPE_SET, lis_w)
 
 handled_by_any.append( ('set', marshal_w_set) )
 
 # not directly supported:
 def marshal_w_frozenset(space, w_frozenset, m):
-    lis_w = space.viewiterable(w_frozenset)
+    lis_w = space.unpackiterable(w_frozenset)
     m.put_tuple_w(TYPE_FROZENSET, lis_w)
 
 handled_by_any.append( ('frozenset', marshal_w_frozenset) )

Modified: pypy/branch/unpackiterable-improvements/pypy/objspace/std/objspace.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/objspace/std/objspace.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/objspace/std/objspace.py	Thu Nov 19 12:10:37 2009
@@ -383,7 +383,7 @@
             space = self
             # too early for unpackiterable as well :-(
             name  = space.unwrap(space.getitem(w_args, space.wrap(0)))
-            bases = space.viewiterable(space.getitem(w_args, space.wrap(1)))
+            bases = space.fixedview(space.getitem(w_args, space.wrap(1)))
             dic   = space.unwrap(space.getitem(w_args, space.wrap(2)))
             dic = dict([(key,space.wrap(value)) for (key, value) in dic.items()])
             bases = list(bases)
@@ -643,7 +643,7 @@
             raise UnpackValueError("Expected length %d, got %d" % (expected_length, len(t)))
         return t
 
-    def viewiterable(self, w_obj, expected_length=-1):
+    def fixedview(self, w_obj, expected_length=-1):
         """ Fast paths
         """
         if isinstance(w_obj, W_TupleObject):
@@ -651,7 +651,18 @@
         elif isinstance(w_obj, W_ListObject):
             t = w_obj.wrappeditems[:]
         else:
-            return ObjSpace.viewiterable(self, w_obj, expected_length)
+            return ObjSpace.fixedview(self, w_obj, expected_length)
+        if expected_length != -1 and len(t) != expected_length:
+            raise UnpackValueError("Expected length %d, got %d" % (expected_length, len(t)))
+        return t
+
+    def listview(self, w_obj, expected_length=-1):
+        if isinstance(w_obj, W_ListObject):
+            t = w_obj.wrappeditems
+        elif isinstance(w_obj, W_TupleObject):
+            t = w_obj.wrappeditems[:]
+        else:
+            return ObjSpace.listview(self, w_obj, expected_length)
         if expected_length != -1 and len(t) != expected_length:
             raise UnpackValueError("Expected length %d, got %d" % (expected_length, len(t)))
         return t

Modified: pypy/branch/unpackiterable-improvements/pypy/objspace/std/ropeobject.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/objspace/std/ropeobject.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/objspace/std/ropeobject.py	Thu Nov 19 12:10:37 2009
@@ -537,7 +537,7 @@
     (self, _, start, end) = _convert_idx_params(space, w_self,
                                                 W_RopeObject.EMPTY, w_start,
                                                 w_end, True)
-    for w_suffix in space.viewiterable(w_suffixes):
+    for w_suffix in space.fixedview(w_suffixes):
         if space.is_true(space.isinstance(w_suffix, space.w_unicode)):
             w_u = space.call_function(space.w_unicode, w_self)
             return space.call_method(w_u, "endswith", w_suffixes, w_start,
@@ -557,7 +557,7 @@
 def str_startswith__Rope_Tuple_ANY_ANY(space, w_self, w_prefixes, w_start, w_end):
     (self, _, start, end) = _convert_idx_params(space, w_self, W_RopeObject.EMPTY,
                                                   w_start, w_end, True)
-    for w_prefix in space.viewiterable(w_prefixes):
+    for w_prefix in space.fixedview(w_prefixes):
         if space.is_true(space.isinstance(w_prefix, space.w_unicode)):
             w_u = space.call_function(space.w_unicode, w_self)
             return space.call_method(w_u, "startswith", w_prefixes, w_start,

Modified: pypy/branch/unpackiterable-improvements/pypy/objspace/std/ropeunicodeobject.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/objspace/std/ropeunicodeobject.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/objspace/std/ropeunicodeobject.py	Thu Nov 19 12:10:37 2009
@@ -504,7 +504,7 @@
 def unicode_startswith__RopeUnicode_Tuple_ANY_ANY(space, w_unistr, w_prefixes,
                                               w_start, w_end):
     unistr, start, end = _convert_idx_params(space, w_unistr, w_start, w_end)
-    for w_prefix in space.viewiterable(w_prefixes):
+    for w_prefix in space.fixedview(w_prefixes):
         prefix = ropeunicode_w(space, w_prefix)
         if rope.startswith(unistr, prefix, start, end):
             return space.w_True
@@ -513,7 +513,7 @@
 def unicode_endswith__RopeUnicode_Tuple_ANY_ANY(space, w_unistr, w_suffixes,
                                             w_start, w_end):
     unistr, start, end = _convert_idx_params(space, w_unistr, w_start, w_end)
-    for w_suffix in space.viewiterable(w_suffixes):
+    for w_suffix in space.fixedview(w_suffixes):
         suffix = ropeunicode_w(space, w_suffix)
         if rope.endswith(unistr, suffix, start, end):
             return space.w_True

Modified: pypy/branch/unpackiterable-improvements/pypy/objspace/std/setobject.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/objspace/std/setobject.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/objspace/std/setobject.py	Thu Nov 19 12:10:37 2009
@@ -111,7 +111,7 @@
 def make_setdata_from_w_iterable(space, w_iterable=None):
     data = r_dict(space.eq_w, space.hash_w)
     if w_iterable is not None:
-        for w_item in space.viewiterable(w_iterable):
+        for w_item in space.unpackiterable(w_iterable):
             data[w_item] = None
     return data
 

Modified: pypy/branch/unpackiterable-improvements/pypy/objspace/std/stringobject.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/objspace/std/stringobject.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/objspace/std/stringobject.py	Thu Nov 19 12:10:37 2009
@@ -628,7 +628,7 @@
     (u_self, _, start, end) = _convert_idx_params(space, w_self,
                                                   space.wrap(''), w_start,
                                                   w_end, True)
-    for w_suffix in space.viewiterable(w_suffixes):
+    for w_suffix in space.fixedview(w_suffixes):
         if space.is_true(space.isinstance(w_suffix, space.w_unicode)):
             w_u = space.call_function(space.w_unicode, w_self)
             return space.call_method(w_u, "endswith", w_suffixes, w_start,
@@ -647,7 +647,7 @@
 def str_startswith__String_Tuple_ANY_ANY(space, w_self, w_prefixes, w_start, w_end):
     (u_self, _, start, end) = _convert_idx_params(space, w_self, space.wrap(''),
                                                   w_start, w_end, True)
-    for w_prefix in space.viewiterable(w_prefixes):
+    for w_prefix in space.fixedview(w_prefixes):
         if space.is_true(space.isinstance(w_prefix, space.w_unicode)):
             w_u = space.call_function(space.w_unicode, w_self)
             return space.call_method(w_u, "startswith", w_prefixes, w_start,

Modified: pypy/branch/unpackiterable-improvements/pypy/objspace/std/strsliceobject.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/objspace/std/strsliceobject.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/objspace/std/strsliceobject.py	Thu Nov 19 12:10:37 2009
@@ -143,7 +143,7 @@
 def str_endswith__StringSlice_Tuple_ANY_ANY(space, w_self, w_suffixes, w_start, w_end):
     (u_self, _, start, end) = _convert_idx_params(space, w_self,
                                                   space.wrap(''), w_start, w_end)
-    for w_suffix in space.viewiterable(w_suffixes):
+    for w_suffix in space.fixedview(w_suffixes):
         suffix = space.str_w(w_suffix) 
         if stringendswith(u_self, suffix, start, end):
             return space.w_True
@@ -157,7 +157,7 @@
 def str_startswith__StringSlice_Tuple_ANY_ANY(space, w_self, w_prefixes, w_start, w_end):
     (u_self, _, start, end) = _convert_idx_params(space, w_self, space.wrap(''),
                                                   w_start, w_end)
-    for w_prefix in space.viewiterable(w_prefixes):
+    for w_prefix in space.fixedview(w_prefixes):
         prefix = space.str_w(w_prefix)
         if stringstartswith(u_self, prefix, start, end):
             return space.w_True

Modified: pypy/branch/unpackiterable-improvements/pypy/objspace/std/test/test_dictmultiobject.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/objspace/std/test/test_dictmultiobject.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/objspace/std/test/test_dictmultiobject.py	Thu Nov 19 12:10:37 2009
@@ -607,8 +607,8 @@
     StringObjectCls = FakeString
     w_dict = None
     iter = iter
-    viewiterable = list
-
+    fixedview = list
+    listview  = list
 
 class Config:
     class objspace:

Modified: pypy/branch/unpackiterable-improvements/pypy/objspace/std/tupletype.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/objspace/std/tupletype.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/objspace/std/tupletype.py	Thu Nov 19 12:10:37 2009
@@ -13,7 +13,7 @@
           space.is_w(space.type(w_sequence), space.w_tuple)):
         return w_sequence
     else:
-        tuple_w = space.viewiterable(w_sequence)
+        tuple_w = space.fixedview(w_sequence)
     w_obj = space.allocate_instance(space.TupleObjectCls, w_tupletype)
     space.TupleObjectCls.__init__(w_obj, tuple_w)
     return w_obj

Modified: pypy/branch/unpackiterable-improvements/pypy/objspace/std/typeobject.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/objspace/std/typeobject.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/objspace/std/typeobject.py	Thu Nov 19 12:10:37 2009
@@ -596,7 +596,7 @@
         if not space.is_w(w_where, space.w_type):
             w_mro_meth = space.get(w_mro_func, w_self)
             w_mro = space.call_function(w_mro_meth)
-            mro_w = space.viewiterable(w_mro)
+            mro_w = space.fixedview(w_mro)
             w_self.mro_w = validate_custom_mro(space, mro_w)
             return    # done
     w_self.mro_w = w_self.compute_default_mro()[:]

Modified: pypy/branch/unpackiterable-improvements/pypy/objspace/std/typetype.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/objspace/std/typetype.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/objspace/std/typetype.py	Thu Nov 19 12:10:37 2009
@@ -11,7 +11,7 @@
 
     w_typetype = _precheck_for_new(space, w_typetype)
     
-    bases_w = space.viewiterable(w_bases)
+    bases_w = space.fixedview(w_bases)
 
     w_winner = w_typetype
     for base in bases_w:
@@ -115,7 +115,7 @@
                                         " to %s.__bases__, not %s"%
                                     (w_type.name,
                                      space.type(w_value).getname(space, '?'))))
-    newbases_w = space.viewiterable(w_value)
+    newbases_w = space.fixedview(w_value)
     if len(newbases_w) == 0:
         raise OperationError(space.w_TypeError,
                              space.wrap("can only assign non-empty tuple"

Modified: pypy/branch/unpackiterable-improvements/pypy/objspace/std/unicodeobject.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/objspace/std/unicodeobject.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/objspace/std/unicodeobject.py	Thu Nov 19 12:10:37 2009
@@ -489,7 +489,7 @@
                                               w_start, w_end):
     unistr, _, start, end = _convert_idx_params(space, w_unistr, space.wrap(u''),
                                                 w_start, w_end, True)
-    for w_prefix in space.viewiterable(w_prefixes):
+    for w_prefix in space.fixedview(w_prefixes):
         prefix = space.unicode_w(w_prefix)
         if stringstartswith(unistr, prefix, start, end):
             return space.w_True
@@ -499,7 +499,7 @@
                                             w_start, w_end):
     unistr, _, start, end = _convert_idx_params(space, w_unistr, space.wrap(u''),
                                              w_start, w_end, True)
-    for w_suffix in space.viewiterable(w_suffixes):
+    for w_suffix in space.fixedview(w_suffixes):
         suffix = space.unicode_w(w_suffix)
         if stringendswith(unistr, suffix, start, end):
             return space.w_True

Modified: pypy/branch/unpackiterable-improvements/pypy/rpython/callparse.py
==============================================================================
--- pypy/branch/unpackiterable-improvements/pypy/rpython/callparse.py	(original)
+++ pypy/branch/unpackiterable-improvements/pypy/rpython/callparse.py	Thu Nov 19 12:10:37 2009
@@ -178,7 +178,8 @@
                 raise ValueError
             return list(items)
         raise CallPatternTooComplex, "'*' argument must be a tuple"
-    viewiterable = unpackiterable
+    fixedview = unpackiterable
+    listview = unpackiterable
 
     def is_w(self, one, other):
         return one is other



More information about the Pypy-commit mailing list