Author: Carl Friedrich Bolz <cfb...@gmx.de> Branch: virtual-arguments Changeset: r54388:fd475d40e0cc Date: 2012-04-14 10:32 +0200 http://bitbucket.org/pypy/pypy/changeset/fd475d40e0cc/
Log: move _check_not_duplicate_keywords to the global level diff --git a/pypy/interpreter/argument.py b/pypy/interpreter/argument.py --- a/pypy/interpreter/argument.py +++ b/pypy/interpreter/argument.py @@ -179,7 +179,8 @@ self.keywords = keywords[:] # copy to make non-resizable self.keywords_w = values_w[:] else: - self._check_not_duplicate_kwargs(keywords, values_w) + _check_not_duplicate_kwargs( + self.space, self.keywords, keywords, values_w) self.keywords = self.keywords + keywords self.keywords_w = self.keywords_w + values_w return not jit.isconstant(len(self.keywords)) @@ -236,19 +237,6 @@ self.keywords_w = self.keywords_w + keywords_w self.keyword_names_w = keys_w - @jit.look_inside_iff(lambda self, keywords, keywords_w: - jit.isconstant(len(keywords) and - jit.isconstant(self.keywords))) - def _check_not_duplicate_kwargs(self, keywords, keywords_w): - # looks quadratic, but the JIT should remove all of it nicely. - # Also, all the lists should be small - for key in keywords: - for otherkey in self.keywords: - if otherkey == key: - raise operationerrfmt(self.space.w_TypeError, - "got multiple values " - "for keyword argument " - "'%s'", key) def fixedunpack(self, argcount): """The simplest argument parsing: get the 'argcount' arguments, @@ -482,6 +470,26 @@ space.setitem(w_kwds, w_key, self.keywords_w[i]) return w_args, w_kwds +# JIT helper functions +# these functions contain functionality that the JIT is not always supposed to +# look at. They should not get a self arguments, which makes the amount of +# arguments annoying :-( + +@jit.look_inside_iff(lambda space, existingkeywords, keywords, keywords_w: + jit.isconstant(len(keywords) and + jit.isconstant(existingkeywords))) +def _check_not_duplicate_kwargs(space, existingkeywords, keywords_w): + # looks quadratic, but the JIT should remove all of it nicely. + # Also, all the lists should be small + for key in keywords: + for otherkey in existingkeywords: + if otherkey == key: + raise operationerrfmt(space.w_TypeError, + "got multiple values " + "for keyword argument " + "'%s'", key) + + class ArgumentsForTranslation(Arguments): def __init__(self, space, args_w, keywords=None, keywords_w=None, w_stararg=None, w_starstararg=None): _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit