[pypy-svn] r26177 - in pypy/dist/pypy: objspace/cpy objspace/cpy/test translator/c/test translator/goal

arigo at codespeak.net arigo at codespeak.net
Sun Apr 23 12:18:34 CEST 2006


Author: arigo
Date: Sun Apr 23 12:18:32 2006
New Revision: 26177

Added:
   pypy/dist/pypy/objspace/cpy/test/test_compile.py   (contents, props changed)
Modified:
   pypy/dist/pypy/objspace/cpy/capi.py
   pypy/dist/pypy/objspace/cpy/objspace.py
   pypy/dist/pypy/objspace/cpy/test/test_objspace.py
   pypy/dist/pypy/translator/c/test/test_genc.py
   pypy/dist/pypy/translator/goal/targetdemomodule.py
Log:
Copied the current targetdemomodule as tests.
A more efficient version of CPyObjSpace.call_function().


Modified: pypy/dist/pypy/objspace/cpy/capi.py
==============================================================================
--- pypy/dist/pypy/objspace/cpy/capi.py	(original)
+++ pypy/dist/pypy/objspace/cpy/capi.py	Sun Apr 23 12:18:32 2006
@@ -62,6 +62,10 @@
 PyObject_Call.argtypes = [W_Object, W_Object, W_Object]
 PyObject_Call.restype = W_Object
 
+PyObject_CallFunctionObjArgs = pythonapi.PyObject_CallFunctionObjArgs
+PyObject_CallFunctionObjArgs.restype = W_Object
+#PyObject_CallFunctionObjArgs.argtypes = [W_Object, ..., final NULL]
+
 PyObject_RichCompare = pythonapi.PyObject_RichCompare
 PyObject_RichCompare.argtypes = [W_Object, W_Object, c_int]
 PyObject_RichCompare.restype = W_Object

Modified: pypy/dist/pypy/objspace/cpy/objspace.py
==============================================================================
--- pypy/dist/pypy/objspace/cpy/objspace.py	(original)
+++ pypy/dist/pypy/objspace/cpy/objspace.py	Sun Apr 23 12:18:32 2006
@@ -53,8 +53,8 @@
     int_w   = staticmethod(PyInt_AsLong)
 
     def call_function(self, w_callable, *args_w):
-        w_args = self.newtuple(list(args_w))   # XXX not very efficient
-        return PyObject_Call(w_callable, w_args, PyDict_New())
+        args_w += (None,)
+        return PyObject_CallFunctionObjArgs(w_callable, *args_w)
 
     def _freeze_(self):
         return True

Added: pypy/dist/pypy/objspace/cpy/test/test_compile.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/objspace/cpy/test/test_compile.py	Sun Apr 23 12:18:32 2006
@@ -0,0 +1,18 @@
+from pypy.translator.c.test.test_genc import compile
+from pypy.translator.goal.ann_override import PyPyAnnotatorPolicy
+from pypy.objspace.cpy.objspace import CPyObjSpace
+import pypy.rpython.rctypes.implementation
+
+
+def test_demo():
+    from pypy.module._demo import demo
+    space = CPyObjSpace()
+
+    def entry_point(n, w_callable):
+        return demo.measuretime(space, n, w_callable)
+
+    fn = compile(entry_point, [int, CPyObjSpace.W_Object],
+                 annotatorpolicy = PyPyAnnotatorPolicy())
+
+    res = fn(10, long)
+    assert isinstance(res, int)

Modified: pypy/dist/pypy/objspace/cpy/test/test_objspace.py
==============================================================================
--- pypy/dist/pypy/objspace/cpy/test/test_objspace.py	(original)
+++ pypy/dist/pypy/objspace/cpy/test/test_objspace.py	Sun Apr 23 12:18:32 2006
@@ -8,3 +8,10 @@
     space.setitem(d,wk1,wone)
     wback = space.getitem(d,wk1)
     assert space.eq_w(wback,wone)
+
+def test_demo():
+    from pypy.module._demo import demo
+    space = CPyObjSpace()
+    w_time = demo.measuretime(space, 10, CPyObjSpace.W_Object(int))
+    assert isinstance(w_time, CPyObjSpace.W_Object)
+    assert isinstance(w_time.value, int)

Modified: pypy/dist/pypy/translator/c/test/test_genc.py
==============================================================================
--- pypy/dist/pypy/translator/c/test/test_genc.py	(original)
+++ pypy/dist/pypy/translator/c/test/test_genc.py	Sun Apr 23 12:18:32 2006
@@ -30,9 +30,10 @@
                            libraries = db.gcpolicy.gc_libraries())
     return m
 
-def compile(fn, argtypes, view=False, gcpolicy=None, backendopt=True):
+def compile(fn, argtypes, view=False, gcpolicy=None, backendopt=True,
+            annotatorpolicy=None):
     t = TranslationContext()
-    a = t.buildannotator()
+    a = t.buildannotator(policy=annotatorpolicy)
     a.build_types(fn, argtypes)
     t.buildrtyper().specialize()
     if backendopt:

Modified: pypy/dist/pypy/translator/goal/targetdemomodule.py
==============================================================================
--- pypy/dist/pypy/translator/goal/targetdemomodule.py	(original)
+++ pypy/dist/pypy/translator/goal/targetdemomodule.py	Sun Apr 23 12:18:32 2006
@@ -22,4 +22,4 @@
     else:
         N = int(sys.argv[1])
     print 'Timing for %d iterations...' % N
-    print entry_point(N, int), 'seconds'
+    print entry_point(N, space.W_Object(int)), 'seconds'



More information about the Pypy-commit mailing list