Author: Carl Friedrich Bolz <cfb...@gmx.de> Branch: virtual-arguments Changeset: r54397:9539374db6d9 Date: 2012-04-14 11:30 +0200 http://bitbucket.org/pypy/pypy/changeset/9539374db6d9/
Log: make ArgErrCount take a signature diff --git a/pypy/interpreter/argument.py b/pypy/interpreter/argument.py --- a/pypy/interpreter/argument.py +++ b/pypy/interpreter/argument.py @@ -299,9 +299,7 @@ starargs_w = [] scope_w[co_argcount] = self.space.newtuple(starargs_w) elif avail > co_argcount: - raise ArgErrCount(avail, num_kwds, - co_argcount, has_vararg, has_kwarg, - defaults_w, 0) + raise ArgErrCount(avail, num_kwds, signature, defaults_w, 0) # the code assumes that keywords can potentially be large, but that # argnames is typically not too large @@ -324,9 +322,7 @@ scope_w[co_argcount + has_vararg] = w_kwds elif num_remainingkwds: if co_argcount == 0: - raise ArgErrCount(avail, num_kwds, - co_argcount, has_vararg, has_kwarg, - defaults_w, 0) + raise ArgErrCount(avail, num_kwds, signature, defaults_w, 0) raise ArgErrUnknownKwds(self.space, num_remainingkwds, keywords, used_keywords, self.keyword_names_w) @@ -345,9 +341,7 @@ # keyword arguments, which will be checked for below. missing += 1 if missing: - raise ArgErrCount(avail, num_kwds, - co_argcount, has_vararg, has_kwarg, - defaults_w, missing) + raise ArgErrCount(avail, num_kwds, signature, defaults_w, missing) return co_argcount + has_vararg + has_kwarg @@ -660,11 +654,9 @@ class ArgErrCount(ArgErr): - def __init__(self, got_nargs, nkwds, expected_nargs, has_vararg, has_kwarg, + def __init__(self, got_nargs, nkwds, signature, defaults_w, missing_args): - self.expected_nargs = expected_nargs - self.has_vararg = has_vararg - self.has_kwarg = has_kwarg + self.signature = signature self.num_defaults = 0 if defaults_w is None else len(defaults_w) self.missing_args = missing_args @@ -672,16 +664,16 @@ self.num_kwds = nkwds def getmsg(self): - n = self.expected_nargs + n = self.signature.num_argnames() if n == 0: msg = "takes no arguments (%d given)" % ( self.num_args + self.num_kwds) else: defcount = self.num_defaults - has_kwarg = self.has_kwarg + has_kwarg = self.signature.has_kwarg() num_args = self.num_args num_kwds = self.num_kwds - if defcount == 0 and not self.has_vararg: + if defcount == 0 and not self.signature.has_vararg(): msg1 = "exactly" if not has_kwarg: num_args += num_kwds diff --git a/pypy/interpreter/test/test_argument.py b/pypy/interpreter/test/test_argument.py --- a/pypy/interpreter/test/test_argument.py +++ b/pypy/interpreter/test/test_argument.py @@ -569,34 +569,47 @@ def test_missing_args(self): # got_nargs, nkwds, expected_nargs, has_vararg, has_kwarg, # defaults_w, missing_args - err = ArgErrCount(1, 0, 0, False, False, None, 0) + sig = Signature([], None, None) + err = ArgErrCount(1, 0, sig, None, 0) s = err.getmsg() assert s == "takes no arguments (1 given)" - err = ArgErrCount(0, 0, 1, False, False, [], 1) + + sig = Signature(['a'], None, None) + err = ArgErrCount(0, 0, sig, [], 1) s = err.getmsg() assert s == "takes exactly 1 argument (0 given)" - err = ArgErrCount(3, 0, 2, False, False, [], 0) + + sig = Signature(['a', 'b'], None, None) + err = ArgErrCount(3, 0, sig, [], 0) s = err.getmsg() assert s == "takes exactly 2 arguments (3 given)" - err = ArgErrCount(3, 0, 2, False, False, ['a'], 0) + err = ArgErrCount(3, 0, sig, ['a'], 0) s = err.getmsg() assert s == "takes at most 2 arguments (3 given)" - err = ArgErrCount(1, 0, 2, True, False, [], 1) + + sig = Signature(['a', 'b'], '*', None) + err = ArgErrCount(1, 0, sig, [], 1) s = err.getmsg() assert s == "takes at least 2 arguments (1 given)" - err = ArgErrCount(0, 1, 2, True, False, ['a'], 1) + err = ArgErrCount(0, 1, sig, ['a'], 1) s = err.getmsg() assert s == "takes at least 1 non-keyword argument (0 given)" - err = ArgErrCount(2, 1, 1, False, True, [], 0) + + sig = Signature(['a'], None, '**') + err = ArgErrCount(2, 1, sig, [], 0) s = err.getmsg() assert s == "takes exactly 1 non-keyword argument (2 given)" - err = ArgErrCount(0, 1, 1, False, True, [], 1) + err = ArgErrCount(0, 1, sig, [], 1) s = err.getmsg() assert s == "takes exactly 1 non-keyword argument (0 given)" - err = ArgErrCount(0, 1, 1, True, True, [], 1) + + sig = Signature(['a'], '*', '**') + err = ArgErrCount(0, 1, sig, [], 1) s = err.getmsg() assert s == "takes at least 1 non-keyword argument (0 given)" - err = ArgErrCount(2, 1, 1, False, True, ['a'], 0) + + sig = Signature(['a'], None, '**') + err = ArgErrCount(2, 1, sig, ['a'], 0) s = err.getmsg() assert s == "takes at most 1 non-keyword argument (2 given)" _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit