[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