[pypy-svn] r32177 - pypy/dist/pypy/rpython/ootypesystem
fijal at codespeak.net
fijal at codespeak.net
Mon Sep 11 18:48:20 CEST 2006
Author: fijal
Date: Mon Sep 11 18:48:18 2006
New Revision: 32177
Modified:
pypy/dist/pypy/rpython/ootypesystem/bltregistry.py
Log:
Missing commit, which fixes decorators.
Modified: pypy/dist/pypy/rpython/ootypesystem/bltregistry.py
==============================================================================
--- pypy/dist/pypy/rpython/ootypesystem/bltregistry.py (original)
+++ pypy/dist/pypy/rpython/ootypesystem/bltregistry.py Mon Sep 11 18:48:18 2006
@@ -16,6 +16,9 @@
def __init__(self, name, ex_value):
self.name = name
self.example = ex_value
+
+ def __repr__(self):
+ return "<ArgDesc %s: %s>" % (self.name, self.example)
class MethodDesc(object):
def __init__(self, args, retval = None):
@@ -32,6 +35,9 @@
else:
self.num += 1
return ArgDesc('v%d' % (self.num-1), val)
+
+ def __repr__(self):
+ return "<MethodDesc (%r)>" % (self.args,)
class CallableEntry(ExtRegistryEntry):
_type_ = MethodDesc
@@ -50,6 +56,16 @@
class BasicMetaExternal(type):
def _is_compatible(type2):
return type(type2) is BasicMetaExternal
+
+ def __new__(self, _name, _type, _vars):
+ retval = type.__new__(self, _name, _type, _vars)
+ if not retval._methods:
+ retval._methods = {}
+ for name, var in _vars.iteritems():
+ if hasattr(var, '_method'):
+ meth_name, desc = var._method
+ retval._methods[meth_name] = desc
+ return retval
_is_compatible = staticmethod(_is_compatible)
@@ -60,7 +76,7 @@
_fields = {}
_methods = {}
- def described(cls, retval=None, args={}):
+ def described(retval=None, args={}):
def decorator(func):
code = func.func_code
if not func.func_defaults:
@@ -68,7 +84,6 @@
else:
defs = func.func_defaults
-
assert(code.co_argcount < len(defs) + len(args), "Not enough information for describing method")
for arg in xrange(1, code.co_argcount - len(defs)):
@@ -82,11 +97,11 @@
arg_pass.append((varname, args[varname]))
else:
arg_pass.append((varname, defs[arg - start_pos]))
- cls._methods[func.__name__] = MethodDesc(arg_pass, retval)
+ func._method = (func.__name__, MethodDesc(arg_pass, retval))
return func
return decorator
- described = classmethod(described)
+ described = staticmethod(described)
described = BasicExternal.described
More information about the Pypy-commit
mailing list