[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