[pypy-commit] pypy less-stringly-ops: kill RPythonCallsSpace

rlamy noreply at buildbot.pypy.org
Mon Oct 28 18:56:44 CET 2013


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: less-stringly-ops
Changeset: r67652:40ebd6d2656d
Date: 2013-10-28 17:47 +0000
http://bitbucket.org/pypy/pypy/changeset/40ebd6d2656d/

Log:	kill RPythonCallsSpace

diff --git a/rpython/annotator/argument.py b/rpython/annotator/argument.py
--- a/rpython/annotator/argument.py
+++ b/rpython/annotator/argument.py
@@ -3,27 +3,12 @@
 """
 from rpython.annotator.model import SomeTuple
 
-# for parsing call arguments
-class RPythonCallsSpace(object):
-    """Pseudo Object Space providing almost no real operation.
-    For the Arguments class: if it really needs other operations, it means
-    that the call pattern is too complex for R-Python.
-    """
-    def newtuple(self, items_s):
-        return SomeTuple(items_s)
-
-    def unpackiterable(self, s_obj):
-        assert isinstance(s_obj, SomeTuple)
-        return list(s_obj.items)
-
-
 class ArgumentsForTranslation(object):
     w_starstararg = None
-    def __init__(self, space, args_w, keywords=None, keywords_w=None,
+    def __init__(self, args_w, keywords=None, keywords_w=None,
                  w_stararg=None, w_starstararg=None):
         self.w_stararg = w_stararg
         assert w_starstararg is None
-        self.space = space
         assert isinstance(args_w, list)
         self.arguments_w = args_w
         self.keywords = keywords
@@ -42,11 +27,18 @@
     @property
     def positional_args(self):
         if self.w_stararg is not None:
-            args_w = self.space.unpackiterable(self.w_stararg)
+            args_w = self.unpackiterable(self.w_stararg)
             return self.arguments_w + args_w
         else:
             return self.arguments_w
 
+    def newtuple(self, items_s):
+        return SomeTuple(items_s)
+
+    def unpackiterable(self, s_obj):
+        assert isinstance(s_obj, SomeTuple)
+        return list(s_obj.items)
+
     def fixedunpack(self, argcount):
         """The simplest argument parsing: get the 'argcount' arguments,
         or raise a real ValueError if the length is wrong."""
@@ -60,14 +52,13 @@
 
     def prepend(self, w_firstarg): # used often
         "Return a new Arguments with a new argument inserted first."
-        return ArgumentsForTranslation(self.space, [w_firstarg] + self.arguments_w,
+        return ArgumentsForTranslation([w_firstarg] + self.arguments_w,
                                        self.keywords, self.keywords_w, self.w_stararg,
                                        self.w_starstararg)
 
     def copy(self):
-        return ArgumentsForTranslation(self.space, self.arguments_w,
-                                       self.keywords, self.keywords_w, self.w_stararg,
-                                       self.w_starstararg)
+        return ArgumentsForTranslation(self.arguments_w, self.keywords,
+                self.keywords_w, self.w_stararg, self.w_starstararg)
 
     def _match_signature(self, scope_w, signature, defaults_w=None):
         """Parse args and kwargs according to the signature of a code object,
@@ -94,7 +85,7 @@
                 starargs_w = args_w[co_argcount:]
             else:
                 starargs_w = []
-            scope_w[co_argcount] = self.space.newtuple(starargs_w)
+            scope_w[co_argcount] = self.newtuple(starargs_w)
         elif num_args > co_argcount:
             raise ArgErrCount(num_args, num_kwds, signature, defaults_w, 0)
 
@@ -178,12 +169,12 @@
         need_cnt = len(self.positional_args)
         if varargname:
             assert len(data_w) == cnt + 1
-            stararg_w = self.space.unpackiterable(data_w[cnt])
+            stararg_w = self.unpackiterable(data_w[cnt])
             if stararg_w:
                 args_w = data_w[:cnt] + stararg_w
                 assert len(args_w) == need_cnt
                 assert not self.keywords
-                return ArgumentsForTranslation(self.space, args_w, [], [])
+                return ArgumentsForTranslation(args_w, [], [])
             else:
                 data_w = data_w[:-1]
         assert len(data_w) == cnt
@@ -192,10 +183,10 @@
         _kwds_w = dict(zip(argnames[need_cnt:], data_w[need_cnt:]))
         keywords = self.keywords or []
         keywords_w = [_kwds_w[key] for key in keywords]
-        return ArgumentsForTranslation(self.space, args_w, keywords, keywords_w)
+        return ArgumentsForTranslation(args_w, keywords, keywords_w)
 
-    @staticmethod
-    def fromshape(space, (shape_cnt, shape_keys, shape_star, shape_stst), data_w):
+    @classmethod
+    def fromshape(cls, (shape_cnt, shape_keys, shape_star, shape_stst), data_w):
         args_w = data_w[:shape_cnt]
         p = end_keys = shape_cnt + len(shape_keys)
         if shape_star:
@@ -208,9 +199,8 @@
             p += 1
         else:
             w_starstar = None
-        return ArgumentsForTranslation(space, args_w, list(shape_keys),
-                                       data_w[shape_cnt:end_keys], w_star,
-                                       w_starstar)
+        return cls(args_w, list(shape_keys), data_w[shape_cnt:end_keys],
+                w_star, w_starstar)
 
     def flatten(self):
         """ Argument <-> list of w_objects together with "shape" information """
diff --git a/rpython/annotator/bookkeeper.py b/rpython/annotator/bookkeeper.py
--- a/rpython/annotator/bookkeeper.py
+++ b/rpython/annotator/bookkeeper.py
@@ -18,7 +18,7 @@
 from rpython.annotator.dictdef import DictDef
 from rpython.annotator import description
 from rpython.annotator.signature import annotationoftype
-from rpython.annotator.argument import ArgumentsForTranslation, RPythonCallsSpace
+from rpython.annotator.argument import ArgumentsForTranslation
 from rpython.rlib.objectmodel import r_dict, Symbolic
 from rpython.tool.algo.unionfind import UnionFind
 from rpython.rtyper.lltypesystem import lltype, llmemory
@@ -692,12 +692,11 @@
         return op
 
     def build_args(self, op, args_s):
-        space = RPythonCallsSpace()
         if op == "simple_call":
-            return ArgumentsForTranslation(space, list(args_s))
+            return ArgumentsForTranslation(list(args_s))
         elif op == "call_args":
             return ArgumentsForTranslation.fromshape(
-                    space, args_s[0].const, # shape
+                    args_s[0].const, # shape
                     list(args_s[1:]))
 
     def ondegenerated(self, what, s_value, where=None, called_from_graph=None):
diff --git a/rpython/annotator/test/test_argument.py b/rpython/annotator/test/test_argument.py
--- a/rpython/annotator/test/test_argument.py
+++ b/rpython/annotator/test/test_argument.py
@@ -3,28 +3,23 @@
 from rpython.annotator.argument import ArgumentsForTranslation, rawshape
 from rpython.flowspace.argument import Signature
 
-class DummySpace(object):
+class MockArgs(ArgumentsForTranslation):
     def newtuple(self, items):
         return tuple(items)
 
-    def bool(self, obj):
-        return bool(obj)
-
     def unpackiterable(self, it):
         return list(it)
 
 
-def make_arguments_for_translation(space, args_w, keywords_w={},
-                                   w_stararg=None, w_starstararg=None):
-    return ArgumentsForTranslation(space, args_w, keywords_w.keys(),
-                                   keywords_w.values(), w_stararg,
-                                   w_starstararg)
+def make_arguments_for_translation(args_w, keywords_w={}, w_stararg=None,
+                                   w_starstararg=None):
+    return MockArgs(args_w, keywords_w.keys(), keywords_w.values(),
+                    w_stararg, w_starstararg)
 
 class TestArgumentsForTranslation(object):
 
     def test_prepend(self):
-        space = DummySpace()
-        args = ArgumentsForTranslation(space, ["0"])
+        args = MockArgs(["0"])
         args1 = args.prepend("thingy")
         assert args1 is not args
         assert args1.arguments_w == ["thingy", "0"]
@@ -32,12 +27,10 @@
         assert args1.keywords_w is args.keywords_w
 
     def test_fixedunpacked(self):
-        space = DummySpace()
-
-        args = ArgumentsForTranslation(space, [], ["k"], [1])
+        args = MockArgs([], ["k"], [1])
         py.test.raises(ValueError, args.fixedunpack, 1)
 
-        args = ArgumentsForTranslation(space, ["a", "b"])
+        args = MockArgs(["a", "b"])
         py.test.raises(ValueError, args.fixedunpack, 0)
         py.test.raises(ValueError, args.fixedunpack, 1)
         py.test.raises(ValueError, args.fixedunpack, 3)
@@ -46,122 +39,115 @@
         assert args.fixedunpack(2) == ['a', 'b']
 
     def test_unmatch_signature(self):
-        space = DummySpace()
-        args = make_arguments_for_translation(space, [1,2,3])
+        args = make_arguments_for_translation([1, 2, 3])
         sig = Signature(['a', 'b', 'c'], None, None)
         data = args.match_signature(sig, [])
         new_args = args.unmatch_signature(sig, data)
         assert args.unpack() == new_args.unpack()
 
-        args = make_arguments_for_translation(space, [1])
+        args = make_arguments_for_translation([1])
         sig = Signature(['a', 'b', 'c'], None, None)
         data = args.match_signature(sig, [2, 3])
         new_args = args.unmatch_signature(sig, data)
         assert args.unpack() == new_args.unpack()
 
-        args = make_arguments_for_translation(space, [1,2,3,4,5])
+        args = make_arguments_for_translation([1, 2, 3, 4, 5])
         sig = Signature(['a', 'b', 'c'], 'r', None)
         data = args.match_signature(sig, [])
         new_args = args.unmatch_signature(sig, data)
         assert args.unpack() == new_args.unpack()
 
-        args = make_arguments_for_translation(space, [1], {'c': 3, 'b': 2})
+        args = make_arguments_for_translation([1], {'c': 3, 'b': 2})
         sig = Signature(['a', 'b', 'c'], None, None)
         data = args.match_signature(sig, [])
         new_args = args.unmatch_signature(sig, data)
         assert args.unpack() == new_args.unpack()
 
-        args = make_arguments_for_translation(space, [1], {'c': 5})
+        args = make_arguments_for_translation([1], {'c': 5})
         sig = Signature(['a', 'b', 'c'], None, None)
         data = args.match_signature(sig, [2, 3])
         new_args = args.unmatch_signature(sig, data)
         assert args.unpack() == new_args.unpack()
 
     def test_rawshape(self):
-        space = DummySpace()
-        args = make_arguments_for_translation(space, [1,2,3])
+        args = make_arguments_for_translation([1, 2, 3])
         assert rawshape(args) == (3, (), False, False)
 
-        args = make_arguments_for_translation(space, [1])
+        args = make_arguments_for_translation([1])
         assert rawshape(args, 2) == (3, (), False, False)
 
-        args = make_arguments_for_translation(space, [1,2,3,4,5])
+        args = make_arguments_for_translation([1, 2, 3, 4, 5])
         assert rawshape(args) == (5, (), False, False)
 
-        args = make_arguments_for_translation(space, [1], {'c': 3, 'b': 2})
+        args = make_arguments_for_translation([1], {'c': 3, 'b': 2})
         assert rawshape(args) == (1, ('b', 'c'), False, False)
 
-        args = make_arguments_for_translation(space, [1], {'c': 5})
+        args = make_arguments_for_translation([1], {'c': 5})
         assert rawshape(args) == (1, ('c', ), False, False)
 
-        args = make_arguments_for_translation(space, [1], {'c': 5, 'd': 7})
+        args = make_arguments_for_translation([1], {'c': 5, 'd': 7})
         assert rawshape(args) == (1, ('c', 'd'), False, False)
 
-        args = make_arguments_for_translation(space, [1,2,3,4,5], {'e': 5, 'd': 7})
+        args = make_arguments_for_translation([1, 2, 3, 4, 5], {'e': 5, 'd': 7})
         assert rawshape(args) == (5, ('d', 'e'), False, False)
 
-
     def test_flatten(self):
-        space = DummySpace()
-        args = make_arguments_for_translation(space, [1,2,3])
+        args = make_arguments_for_translation([1, 2, 3])
         assert args.flatten() == ((3, (), False, False), [1, 2, 3])
 
-        args = make_arguments_for_translation(space, [1])
+        args = make_arguments_for_translation([1])
         assert args.flatten() == ((1, (), False, False), [1])
 
-        args = make_arguments_for_translation(space, [1,2,3,4,5])
-        assert args.flatten() == ((5, (), False, False), [1,2,3,4,5])
+        args = make_arguments_for_translation([1, 2, 3, 4, 5])
+        assert args.flatten() == ((5, (), False, False), [1, 2, 3, 4, 5])
 
-        args = make_arguments_for_translation(space, [1], {'c': 3, 'b': 2})
+        args = make_arguments_for_translation([1], {'c': 3, 'b': 2})
         assert args.flatten() == ((1, ('b', 'c'), False, False), [1, 2, 3])
 
-        args = make_arguments_for_translation(space, [1], {'c': 5})
+        args = make_arguments_for_translation([1], {'c': 5})
         assert args.flatten() == ((1, ('c', ), False, False), [1, 5])
 
-        args = make_arguments_for_translation(space, [1], {'c': 5, 'd': 7})
+        args = make_arguments_for_translation([1], {'c': 5, 'd': 7})
         assert args.flatten() == ((1, ('c', 'd'), False, False), [1, 5, 7])
 
-        args = make_arguments_for_translation(space, [1,2,3,4,5], {'e': 5, 'd': 7})
+        args = make_arguments_for_translation([1, 2, 3, 4, 5], {'e': 5, 'd': 7})
         assert args.flatten() == ((5, ('d', 'e'), False, False), [1, 2, 3, 4, 5, 7, 5])
 
     def test_stararg_flowspace_variable(self):
-        space = DummySpace()
         var = object()
         shape = ((2, ('g', ), True, False), [1, 2, 9, var])
-        args = make_arguments_for_translation(space, [1,2], {'g': 9},
+        args = make_arguments_for_translation([1, 2], {'g': 9},
                                        w_stararg=var)
         assert args.flatten() == shape
 
-        args = ArgumentsForTranslation.fromshape(space, *shape)
+        args = MockArgs.fromshape(*shape)
         assert args.flatten() == shape
 
-
     def test_fromshape(self):
-        space = DummySpace()
         shape = ((3, (), False, False), [1, 2, 3])
-        args = ArgumentsForTranslation.fromshape(space, *shape)
+        args = MockArgs.fromshape(*shape)
         assert args.flatten() == shape
 
         shape = ((1, (), False, False), [1])
-        args = ArgumentsForTranslation.fromshape(space, *shape)
+        args = MockArgs.fromshape(*shape)
         assert args.flatten() == shape
 
-        shape = ((5, (), False, False), [1,2,3,4,5])
-        args = ArgumentsForTranslation.fromshape(space, *shape)
+        shape = ((5, (), False, False), [1, 2, 3, 4, 5])
+        args = MockArgs.fromshape(*shape)
         assert args.flatten() == shape
 
         shape = ((1, ('b', 'c'), False, False), [1, 2, 3])
-        args = ArgumentsForTranslation.fromshape(space, *shape)
+        args = MockArgs.fromshape(*shape)
         assert args.flatten() == shape
 
         shape = ((1, ('c', ), False, False), [1, 5])
-        args = ArgumentsForTranslation.fromshape(space, *shape)
+        args = MockArgs.fromshape(*shape)
         assert args.flatten() == shape
 
         shape = ((1, ('c', 'd'), False, False), [1, 5, 7])
-        args = ArgumentsForTranslation.fromshape(space, *shape)
+        args = MockArgs.fromshape(*shape)
         assert args.flatten() == shape
 
         shape = ((5, ('d', 'e'), False, False), [1, 2, 3, 4, 5, 7, 5])
-        args = ArgumentsForTranslation.fromshape(space, *shape)
+        args = MockArgs.fromshape(*shape)
         assert args.flatten() == shape
diff --git a/rpython/rtyper/callparse.py b/rpython/rtyper/callparse.py
--- a/rpython/rtyper/callparse.py
+++ b/rpython/rtyper/callparse.py
@@ -4,6 +4,14 @@
 from rpython.rtyper.error import TyperError
 from rpython.rtyper.lltypesystem import lltype
 
+class ArgumentsForRtype(ArgumentsForTranslation):
+    def newtuple(self, items):
+        return NewTupleHolder(items)
+
+    def unpackiterable(self, it):
+        assert it.is_tuple()
+        items = it.items()
+        return list(items)
 
 def getrinputs(rtyper, graph):
     """Return the list of reprs of the input arguments to the 'graph'."""
@@ -27,7 +35,6 @@
     """Parse the arguments of 'hop' when calling the given 'graph'.
     """
     rinputs = getrinputs(rtyper, graph)
-    space = RPythonCallsSpace()
     def args_h(start):
         return [VarHolder(i, hop.args_s[i])
                         for i in range(start, hop.nb_args)]
@@ -37,9 +44,9 @@
         start = 0
         rinputs[0] = r_self
     if opname == "simple_call":
-        arguments =  ArgumentsForTranslation(space, args_h(start))
+        arguments =  ArgumentsForRtype(args_h(start))
     elif opname == "call_args":
-        arguments = ArgumentsForTranslation.fromshape(space,
+        arguments = ArgumentsForRtype.fromshape(
                 hop.args_s[start].const, # shape
                 args_h(start+1))
     # parse the arguments according to the function we are calling
@@ -153,17 +160,3 @@
         r_tup, v_tuple = self.holder.access(hop)
         v = r_tup.getitem_internal(hop, v_tuple, index)
         return hop.llops.convertvar(v, r_tup.items_r[index], repr)
-
-# for parsing call arguments
-class RPythonCallsSpace:
-    """Pseudo Object Space providing almost no real operation.
-    For the Arguments class: if it really needs other operations, it means
-    that the call pattern is too complex for R-Python.
-    """
-    def newtuple(self, items):
-        return NewTupleHolder(items)
-
-    def unpackiterable(self, it):
-        assert it.is_tuple()
-        items = it.items()
-        return list(items)
diff --git a/rpython/rtyper/rbuiltin.py b/rpython/rtyper/rbuiltin.py
--- a/rpython/rtyper/rbuiltin.py
+++ b/rpython/rtyper/rbuiltin.py
@@ -47,7 +47,7 @@
     hop = hop.copy()
     from rpython.annotator.argument import ArgumentsForTranslation
     arguments = ArgumentsForTranslation.fromshape(
-            None, hop.args_s[1].const, # shape
+            hop.args_s[1].const, # shape
             range(hop.nb_args-2))
     if arguments.w_starstararg is not None:
         raise TyperError("**kwds call not implemented")


More information about the pypy-commit mailing list