[pypy-svn] r38599 - pypy/dist/pypy/rpython/ootypesystem

fijal at codespeak.net fijal at codespeak.net
Mon Feb 12 18:01:48 CET 2007


Author: fijal
Date: Mon Feb 12 18:01:46 2007
New Revision: 38599

Modified:
   pypy/dist/pypy/rpython/ootypesystem/bltregistry.py
Log:
Minor API-wise improvement


Modified: pypy/dist/pypy/rpython/ootypesystem/bltregistry.py
==============================================================================
--- pypy/dist/pypy/rpython/ootypesystem/bltregistry.py	(original)
+++ pypy/dist/pypy/rpython/ootypesystem/bltregistry.py	Mon Feb 12 18:01:46 2007
@@ -50,22 +50,17 @@
         return tuple([typeof(i) for i in val])
     return type(val)
 
-def load_dict_args(func, args):
-    code = func.func_code
-    if not func.func_defaults:
-        defs = []
-    else:
-        defs = func.func_defaults
-    num_args = code.co_argcount
-    assert(num_args < len(defs) + len(args), "Not enough information for describing method")
+def load_dict_args(varnames, defs, args):
+    argcount = len(varnames)
+    assert(argcount < len(defs) + len(args), "Not enough information for describing method")
            
-    for arg in xrange(1, code.co_argcount - len(defs)):
-        assert code.co_varnames[arg] in args, "Don't have type for arg %s" % code.co_varnames[arg]
-        
+    for arg in xrange(1, argcount - len(defs)):
+        assert varnames[arg] in args, "Don't have type for arg %s" % varnames[arg]
+
     arg_pass = []
-    start_pos = code.co_argcount - len(defs)
-    for arg in xrange(1, code.co_argcount):
-        varname = code.co_varnames[arg]
+    start_pos = argcount - len(defs)
+    for arg in xrange(1, argcount):
+        varname = varnames[arg]
         if varname in args:
             arg_pass.append((varname, args[varname]))
         else:
@@ -82,7 +77,11 @@
     def described(retval=None, args={}):
         def decorator(func):
             if isinstance(args, dict):
-                arg_pass = load_dict_args(func, args)
+                defs = func.func_defaults
+                if defs is None:
+                    defs = ()
+                vars = func.func_code.co_varnames[:func.func_code.co_argcount]
+                arg_pass = load_dict_args(vars, defs, args)
             else:
                 assert isinstance(args, list)
                 arg_pass = args



More information about the Pypy-commit mailing list