Author: Carl Friedrich Bolz <cfb...@gmx.de>
Branch: virtual-arguments
Changeset: r54398:59aaff22bf66
Date: 2012-04-14 11:48 +0200
http://bitbucket.org/pypy/pypy/changeset/59aaff22bf66/

Log:    clean up local variables a bit

diff --git a/pypy/interpreter/argument.py b/pypy/interpreter/argument.py
--- a/pypy/interpreter/argument.py
+++ b/pypy/interpreter/argument.py
@@ -233,7 +233,6 @@
                          blindargs=0):
         """Parse args and kwargs according to the signature of a code object,
         or raise an ArgErr in case of failure.
-        Return the number of arguments filled in.
         """
         #
         #   args_w = list of the normal actual parameters, wrapped
@@ -246,9 +245,6 @@
         # so all values coming from there can be assumed constant. It assumes
         # that the length of the defaults_w does not vary too much.
         co_argcount = signature.num_argnames() # expected formal arguments, 
without */**
-        has_vararg = signature.has_vararg()
-        has_kwarg = signature.has_kwarg()
-        extravarargs = None
         input_argcount =  0
 
         if w_firstarg is not None:
@@ -256,28 +252,22 @@
             if co_argcount > 0:
                 scope_w[0] = w_firstarg
                 input_argcount = 1
-            else:
-                extravarargs = [w_firstarg]
         else:
             upfront = 0
 
         args_w = self.arguments_w
         num_args = len(args_w)
+        avail = num_args + upfront
 
         keywords = self.keywords
-        keywords_w = self.keywords_w
         num_kwds = 0
         if keywords is not None:
             num_kwds = len(keywords)
 
-        avail = num_args + upfront
 
         if input_argcount < co_argcount:
             # put as many positional input arguments into place as available
-            if avail > co_argcount:
-                take = co_argcount - input_argcount
-            else:
-                take = num_args
+            take = min(num_args, co_argcount - upfront)
 
             # letting the JIT unroll this loop is safe, because take is always
             # smaller than co_argcount
@@ -286,11 +276,10 @@
             input_argcount += take
 
         # collect extra positional arguments into the *vararg
-        if has_vararg:
+        if signature.has_vararg():
             args_left = co_argcount - upfront
             if args_left < 0:  # check required by rpython
-                assert extravarargs is not None
-                starargs_w = extravarargs
+                starargs_w = [w_firstarg]
                 if num_args:
                     starargs_w = starargs_w + args_w
             elif num_args > args_left:
@@ -303,15 +292,16 @@
 
         # the code assumes that keywords can potentially be large, but that
         # argnames is typically not too large
-        num_remainingkwds = num_kwds
+        num_remainingkwds = 0
         used_keywords = None
+        keywords_w = self.keywords_w
         if num_kwds:
             used_keywords = [False] * num_kwds
             num_remainingkwds = _match_keywords(
                     signature, blindargs, input_argcount, keywords,
                     keywords_w, scope_w, used_keywords,
                     self._jit_few_keywords)
-        if has_kwarg:
+        if signature.has_kwarg():
             w_kwds = self.space.newdict(kwargs=True)
             # collect extra keyword arguments into the **kwarg
             if num_remainingkwds:
@@ -319,7 +309,7 @@
                         self.space, keywords, keywords_w, w_kwds,
                         used_keywords, self.keyword_names_w, 
self._jit_few_keywords)
                 #
-            scope_w[co_argcount + has_vararg] = w_kwds
+            scope_w[co_argcount + signature.has_vararg()] = w_kwds
         elif num_remainingkwds:
             if co_argcount == 0:
                 raise ArgErrCount(avail, num_kwds, signature, defaults_w, 0)
@@ -343,8 +333,6 @@
             if missing:
                 raise ArgErrCount(avail, num_kwds, signature, defaults_w, 
missing)
 
-        return co_argcount + has_vararg + has_kwarg
-
 
 
     def parse_into_scope(self, w_firstarg,
@@ -355,11 +343,12 @@
         scope_w must be big enough for signature.
         """
         try:
-            return self._match_signature(w_firstarg,
-                                         scope_w, signature, defaults_w, 0)
+            self._match_signature(w_firstarg,
+                                  scope_w, signature, defaults_w, 0)
         except ArgErr, e:
             raise operationerrfmt(self.space.w_TypeError,
                                   "%s() %s", fnname, e.getmsg())
+        return signature.scope_length()
 
     def _parse(self, w_firstarg, signature, defaults_w, blindargs=0):
         """Parse args and kwargs according to the signature of a code object,
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to