[pypy-svn] r38608 - in pypy/dist/pypy/translator/js/lib: . test
fijal at codespeak.net
fijal at codespeak.net
Mon Feb 12 18:26:20 CET 2007
Author: fijal
Date: Mon Feb 12 18:26:19 2007
New Revision: 38608
Added:
pypy/dist/pypy/translator/js/lib/support.py
pypy/dist/pypy/translator/js/lib/test/test_support.py
Log:
Add small support script
Added: pypy/dist/pypy/translator/js/lib/support.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/translator/js/lib/support.py Mon Feb 12 18:26:19 2007
@@ -0,0 +1,25 @@
+
+""" Various simple support functions
+"""
+
+from pypy.rpython.ootypesystem.bltregistry import described, load_dict_args,\
+ MethodDesc
+
+from pypy.rpython.extfunc import _callable
+
+def callback(retval=None, args={}):
+ """ Variant of described decorator, which flows
+ an additional argument with return value of decorated
+ function, used specifically for callbacks
+ """
+ def decorator(func):
+ defs = func.func_defaults
+ if defs is None:
+ defs = ()
+ vars = func.func_code.co_varnames[:func.func_code.co_argcount]
+ arg_list = load_dict_args(vars, defs, args)
+ arg_list.append(("callback", _callable(args=[retval])))
+ func._method = (func.__name__, MethodDesc(arg_list, retval))
+ return func
+
+ return decorator
Added: pypy/dist/pypy/translator/js/lib/test/test_support.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/translator/js/lib/test/test_support.py Mon Feb 12 18:26:19 2007
@@ -0,0 +1,15 @@
+
+""" Tests for support module
+"""
+
+from pypy.translator.js.lib import support
+
+def test_callback():
+ @support.callback(retval=int)
+ def f(self, a=8, b=3.2):
+ pass
+
+ methdesc = f._method[1]
+ assert len(methdesc.args) == 3
+ assert methdesc.args[2].name == 'callback'
+
More information about the Pypy-commit
mailing list