[pypy-commit] pypy reflex-support: factor out the need of passing wrapped types into function calls (note that this also means that test_cppyy.py can no longer use the generic CPPInstance as return type, but will automatically work with the actual type as appropriate; same goes for test_zjit.py)

wlav noreply at buildbot.pypy.org
Thu Mar 15 17:15:49 CET 2012


Author: Wim Lavrijsen <WLavrijsen at lbl.gov>
Branch: reflex-support
Changeset: r53676:c90727271485
Date: 2012-03-15 07:14 -0700
http://bitbucket.org/pypy/pypy/changeset/c90727271485/

Log:	factor out the need of passing wrapped types into function calls
	(note that this also means that test_cppyy.py can no longer use the
	generic CPPInstance as return type, but will automatically work with
	the actual type as appropriate; same goes for test_zjit.py)

diff --git a/pypy/module/cppyy/capi/__init__.py b/pypy/module/cppyy/capi/__init__.py
--- a/pypy/module/cppyy/capi/__init__.py
+++ b/pypy/module/cppyy/capi/__init__.py
@@ -157,6 +157,12 @@
     compilation_info=backend.eci)
 def c_final_name(cpptype):
     return charp2str_free(_c_final_name(cpptype))
+_c_scoped_final_name = rffi.llexternal(
+    "cppyy_scoped_final_name",
+    [C_TYPE], rffi.CCHARP,
+    compilation_info=backend.eci)
+def c_scoped_final_name(cpptype):
+    return charp2str_free(_c_scoped_final_name(cpptype))
 c_has_complex_hierarchy = rffi.llexternal(
     "cppyy_has_complex_hierarchy",
     [C_TYPE], rffi.INT,
diff --git a/pypy/module/cppyy/executor.py b/pypy/module/cppyy/executor.py
--- a/pypy/module/cppyy/executor.py
+++ b/pypy/module/cppyy/executor.py
@@ -18,10 +18,10 @@
     def __init__(self, space, name, cpptype):
         self.name = name
 
-    def execute(self, space, w_returntype, cppmethod, cppthis, num_args, args):
+    def execute(self, space, cppmethod, cppthis, num_args, args):
         raise TypeError('return type not available or supported ("%s")' % self.name)
 
-    def execute_libffi(self, space, w_returntype, libffifunc, argchain):
+    def execute_libffi(self, space, libffifunc, argchain):
         from pypy.module.cppyy.interp_cppyy import FastCallNotPossible
         raise FastCallNotPossible
 
@@ -30,7 +30,7 @@
     _immutable_ = True
     typecode = 'P'
 
-    def execute(self, space, w_returntype, cppmethod, cppthis, num_args, args):
+    def execute(self, space, cppmethod, cppthis, num_args, args):
         if hasattr(space, "fake"):
             raise NotImplementedError
         lresult = capi.c_call_l(cppmethod, cppthis, num_args, args)
@@ -43,11 +43,11 @@
     _immutable_ = True
     libffitype = libffi.types.void
 
-    def execute(self, space, w_returntype, cppmethod, cppthis, num_args, args):
+    def execute(self, space, cppmethod, cppthis, num_args, args):
         capi.c_call_v(cppmethod, cppthis, num_args, args)
         return space.w_None
 
-    def execute_libffi(self, space, w_returntype, libffifunc, argchain):
+    def execute_libffi(self, space, libffifunc, argchain):
         libffifunc.call(argchain, lltype.Void)
         return space.w_None
 
@@ -56,11 +56,11 @@
     _immutable_ = True
     libffitype = libffi.types.schar
 
-    def execute(self, space, w_returntype, cppmethod, cppthis, num_args, args):
+    def execute(self, space, cppmethod, cppthis, num_args, args):
         result = capi.c_call_b(cppmethod, cppthis, num_args, args)
         return space.wrap(result)
 
-    def execute_libffi(self, space, w_returntype, libffifunc, argchain):
+    def execute_libffi(self, space, libffifunc, argchain):
         result = libffifunc.call(argchain, rffi.CHAR)
         return space.wrap(bool(ord(result)))
 
@@ -68,11 +68,11 @@
     _immutable_ = True
     libffitype = libffi.types.schar
 
-    def execute(self, space, w_returntype, cppmethod, cppthis, num_args, args):
+    def execute(self, space, cppmethod, cppthis, num_args, args):
         result = capi.c_call_c(cppmethod, cppthis, num_args, args)
         return space.wrap(result)
 
-    def execute_libffi(self, space, w_returntype, libffifunc, argchain):
+    def execute_libffi(self, space, libffifunc, argchain):
         result = libffifunc.call(argchain, rffi.CHAR)
         return space.wrap(result)
 
@@ -80,11 +80,11 @@
     _immutable_ = True
     libffitype = libffi.types.sshort
 
-    def execute(self, space, w_returntype, cppmethod, cppthis, num_args, args):
+    def execute(self, space, cppmethod, cppthis, num_args, args):
         result = capi.c_call_h(cppmethod, cppthis, num_args, args)
         return space.wrap(result)
 
-    def execute_libffi(self, space, w_returntype, libffifunc, argchain):
+    def execute_libffi(self, space, libffifunc, argchain):
         result = libffifunc.call(argchain, rffi.SHORT)
         return space.wrap(result)
 
@@ -95,11 +95,11 @@
     def _wrap_result(self, space, result):
         return space.wrap(result)
 
-    def execute(self, space, w_returntype, cppmethod, cppthis, num_args, args):
+    def execute(self, space, cppmethod, cppthis, num_args, args):
         result = capi.c_call_i(cppmethod, cppthis, num_args, args)
         return self._wrap_result(space, result)
 
-    def execute_libffi(self, space, w_returntype, libffifunc, argchain):
+    def execute_libffi(self, space, libffifunc, argchain):
         result = libffifunc.call(argchain, rffi.INT)
         return space.wrap(result)
 
@@ -110,11 +110,11 @@
     def _wrap_result(self, space, result):
         return space.wrap(rffi.cast(rffi.UINT, result))
 
-    def execute(self, space, w_returntype, cppmethod, cppthis, num_args, args):
+    def execute(self, space, cppmethod, cppthis, num_args, args):
         result = capi.c_call_l(cppmethod, cppthis, num_args, args)
         return self._wrap_result(space, result)
 
-    def execute_libffi(self, space, w_returntype, libffifunc, argchain):
+    def execute_libffi(self, space, libffifunc, argchain):
         result = libffifunc.call(argchain, rffi.UINT)
         return space.wrap(result)
 
@@ -125,11 +125,11 @@
     def _wrap_result(self, space, result):
         return space.wrap(result)
 
-    def execute(self, space, w_returntype, cppmethod, cppthis, num_args, args):
+    def execute(self, space, cppmethod, cppthis, num_args, args):
         result = capi.c_call_l(cppmethod, cppthis, num_args, args)
         return self._wrap_result(space, result)
 
-    def execute_libffi(self, space, w_returntype, libffifunc, argchain):
+    def execute_libffi(self, space, libffifunc, argchain):
         result = libffifunc.call(argchain, rffi.LONG)
         return space.wrap(result)
 
@@ -140,7 +140,7 @@
     def _wrap_result(self, space, result):
         return space.wrap(rffi.cast(rffi.ULONG, result))
 
-    def execute_libffi(self, space, w_returntype, libffifunc, argchain):
+    def execute_libffi(self, space, libffifunc, argchain):
         result = libffifunc.call(argchain, rffi.ULONG)
         return space.wrap(result)
 
@@ -152,11 +152,11 @@
         intptr = rffi.cast(rffi.INTP, result)
         return space.wrap(intptr[0])
 
-    def execute(self, space, w_returntype, cppmethod, cppthis, num_args, args):
+    def execute(self, space, cppmethod, cppthis, num_args, args):
         result = capi.c_call_r(cppmethod, cppthis, num_args, args)
         return self._wrap_result(space, result)
 
-    def execute_libffi(self, space, w_returntype, libffifunc, argchain):
+    def execute_libffi(self, space, libffifunc, argchain):
         result = libffifunc.call(argchain, rffi.INTP)
         return space.wrap(result[0])
 
@@ -168,7 +168,7 @@
         longptr = rffi.cast(rffi.LONGP, result)
         return space.wrap(longptr[0])
 
-    def execute_libffi(self, space, w_returntype, libffifunc, argchain):
+    def execute_libffi(self, space, libffifunc, argchain):
         result = libffifunc.call(argchain, rffi.LONGP)
         return space.wrap(result[0])
 
@@ -176,11 +176,11 @@
     _immutable_ = True
     libffitype = libffi.types.float
 
-    def execute(self, space, w_returntype, cppmethod, cppthis, num_args, args):
+    def execute(self, space, cppmethod, cppthis, num_args, args):
         result = capi.c_call_f(cppmethod, cppthis, num_args, args)
         return space.wrap(float(result))
 
-    def execute_libffi(self, space, w_returntype, libffifunc, argchain):
+    def execute_libffi(self, space, libffifunc, argchain):
         result = libffifunc.call(argchain, rffi.FLOAT)
         return space.wrap(float(result))
 
@@ -188,11 +188,11 @@
     _immutable_ = True
     libffitype = libffi.types.double
 
-    def execute(self, space, w_returntype, cppmethod, cppthis, num_args, args):
+    def execute(self, space, cppmethod, cppthis, num_args, args):
         result = capi.c_call_d(cppmethod, cppthis, num_args, args)
         return space.wrap(result)
 
-    def execute_libffi(self, space, w_returntype, libffifunc, argchain):
+    def execute_libffi(self, space, libffifunc, argchain):
         result = libffifunc.call(argchain, rffi.DOUBLE)
         return space.wrap(result)
 
@@ -200,7 +200,7 @@
 class CStringExecutor(FunctionExecutor):
     _immutable_ = True
 
-    def execute(self, space, w_returntype, cppmethod, cppthis, num_args, args):
+    def execute(self, space, cppmethod, cppthis, num_args, args):
         lresult = capi.c_call_l(cppmethod, cppthis, num_args, args)
         ccpresult = rffi.cast(rffi.CCHARP, lresult)
         result = rffi.charp2str(ccpresult)  # TODO: make it a choice to free
@@ -244,41 +244,41 @@
         FunctionExecutor.__init__(self, space, name, cpptype)
         self.cpptype = cpptype
 
-    def execute(self, space, w_returntype, cppmethod, cppthis, num_args, args):
+    def execute(self, space, cppmethod, cppthis, num_args, args):
         from pypy.module.cppyy import interp_cppyy
         long_result = capi.c_call_l(cppmethod, cppthis, num_args, args)
         ptr_result = rffi.cast(capi.C_OBJECT, long_result)
-        return interp_cppyy.wrap_cppobject(space, w_returntype, self.cpptype, ptr_result, False, False)
+        return interp_cppyy.wrap_cppobject(space, None, self.cpptype, ptr_result, False, False)
 
-    def execute_libffi(self, space, w_returntype, libffifunc, argchain):
+    def execute_libffi(self, space, libffifunc, argchain):
         from pypy.module.cppyy import interp_cppyy
         ptr_result = rffi.cast(capi.C_OBJECT, libffifunc.call(argchain, rffi.VOIDP))
-        return interp_cppyy.wrap_cppobject(space, w_returntype, self.cpptype, ptr_result, False, False)
+        return interp_cppyy.wrap_cppobject(space, None, self.cpptype, ptr_result, False, False)
 
 class InstancePtrPtrExecutor(InstancePtrExecutor):
     _immutable_ = True
 
-    def execute(self, space, w_returntype, cppmethod, cppthis, num_args, args):
+    def execute(self, space, cppmethod, cppthis, num_args, args):
         from pypy.module.cppyy import interp_cppyy
         voidp_result = capi.c_call_r(cppmethod, cppthis, num_args, args)
         ref_address = rffi.cast(rffi.VOIDPP, voidp_result)
         ptr_result = rffi.cast(capi.C_OBJECT, ref_address[0])
-        return interp_cppyy.wrap_cppobject(space, w_returntype, self.cpptype, ptr_result, False, False)
+        return interp_cppyy.wrap_cppobject(space, None, self.cpptype, ptr_result, False, False)
 
-    def execute_libffi(self, space, w_returntype, libffifunc, argchain):
+    def execute_libffi(self, space, libffifunc, argchain):
         from pypy.module.cppyy.interp_cppyy import FastCallNotPossible
         raise FastCallNotPossible
 
 class InstanceExecutor(InstancePtrExecutor):
     _immutable_ = True
 
-    def execute(self, space, w_returntype, cppmethod, cppthis, num_args, args):
+    def execute(self, space, cppmethod, cppthis, num_args, args):
         from pypy.module.cppyy import interp_cppyy
         long_result = capi.c_call_o(cppmethod, cppthis, num_args, args, self.cpptype.handle)
         ptr_result = rffi.cast(capi.C_OBJECT, long_result)
-        return interp_cppyy.wrap_cppobject(space, w_returntype, self.cpptype, ptr_result, False, True)
+        return interp_cppyy.wrap_cppobject(space, None, self.cpptype, ptr_result, False, True)
 
-    def execute_libffi(self, space, w_returntype, libffifunc, argchain):
+    def execute_libffi(self, space, libffifunc, argchain):
         from pypy.module.cppyy.interp_cppyy import FastCallNotPossible
         raise FastCallNotPossible
 
@@ -286,11 +286,11 @@
 class StdStringExecutor(InstancePtrExecutor):
     _immutable_ = True
 
-    def execute(self, space, w_returntype, cppmethod, cppthis, num_args, args):
+    def execute(self, space, cppmethod, cppthis, num_args, args):
         charp_result = capi.c_call_s(cppmethod, cppthis, num_args, args)
         return space.wrap(capi.charp2str_free(charp_result))
 
-    def execute_libffi(self, space, w_returntype, libffifunc, argchain):
+    def execute_libffi(self, space, libffifunc, argchain):
         from pypy.module.cppyy.interp_cppyy import FastCallNotPossible
         raise FastCallNotPossible
 
diff --git a/pypy/module/cppyy/include/capi.h b/pypy/module/cppyy/include/capi.h
--- a/pypy/module/cppyy/include/capi.h
+++ b/pypy/module/cppyy/include/capi.h
@@ -53,6 +53,7 @@
 
     /* class reflection information ------------------------------------------- */
     char* cppyy_final_name(cppyy_type_t type);
+    char* cppyy_scoped_final_name(cppyy_type_t type);
     int cppyy_has_complex_hierarchy(cppyy_type_t type);
     int cppyy_num_bases(cppyy_type_t type);
     char* cppyy_base_name(cppyy_type_t type, int base_index);
diff --git a/pypy/module/cppyy/interp_cppyy.py b/pypy/module/cppyy/interp_cppyy.py
--- a/pypy/module/cppyy/interp_cppyy.py
+++ b/pypy/module/cppyy/interp_cppyy.py
@@ -127,9 +127,8 @@
         self._libffifunc = None
 
     @jit.unroll_safe
-    def call(self, cppthis, w_type, args_w):
+    def call(self, cppthis, args_w):
         jit.promote(self)
-        jit.promote(w_type)
         assert lltype.typeOf(cppthis) == capi.C_OBJECT
         args_expected = len(self.arg_defs)
         args_given = len(args_w)
@@ -141,18 +140,18 @@
 
         if self._libffifunc:
             try:
-                return self.do_fast_call(cppthis, w_type, args_w)
+                return self.do_fast_call(cppthis, args_w)
             except FastCallNotPossible:
                 pass          # can happen if converters or executor does not implement ffi
 
         args = self.prepare_arguments(args_w)
         try:
-            return self.executor.execute(self.space, w_type, self.cppmethod, cppthis, len(args_w), args)
+            return self.executor.execute(self.space, self.cppmethod, cppthis, len(args_w), args)
         finally:
             self.free_arguments(args, len(args_w))
 
     @jit.unroll_safe
-    def do_fast_call(self, cppthis, w_type, args_w):
+    def do_fast_call(self, cppthis, args_w):
         jit.promote(self)
         argchain = libffi.ArgChain()
         argchain.arg(cppthis)
@@ -164,7 +163,7 @@
         for j in range(i+1, len(self.arg_defs)):
             conv = self.arg_converters[j]
             conv.default_argument_libffi(self.space, argchain)
-        return self.executor.execute_libffi(self.space, w_type, self._libffifunc, argchain)
+        return self.executor.execute_libffi(self.space, self._libffifunc, argchain)
 
     def _setup(self, cppthis):
         self.arg_converters = [converter.get_converter(self.space, arg_type, arg_dflt)
@@ -231,15 +230,15 @@
 class CPPConstructor(CPPMethod):
     _immutable_ = True
 
-    def call(self, cppthis, w_type, args_w):
+    def call(self, cppthis, args_w):
         newthis = capi.c_allocate(self.cpptype.handle)
         assert lltype.typeOf(newthis) == capi.C_OBJECT
         try:
-            CPPMethod.call(self, newthis, None, args_w)
+            CPPMethod.call(self, newthis, args_w)
         except Exception:
             capi.c_deallocate(self.cpptype.handle, newthis)
             raise
-        return wrap_new_cppobject_nocast(self.space, w_type, self.cpptype, newthis, False, True)
+        return wrap_new_cppobject_nocast(self.space, None, self.cpptype, newthis, False, True)
 
 
 class W_CPPOverload(Wrappable):
@@ -259,7 +258,7 @@
         return self.space.wrap(self.functions[0].executor.name)
 
     @jit.unroll_safe
-    def call(self, w_cppinstance, w_type, args_w):
+    def call(self, w_cppinstance, args_w):
         cppinstance = self.space.interp_w(W_CPPInstance, w_cppinstance, can_be_None=True)
         if cppinstance is not None:
             cppinstance._nullcheck()
@@ -275,7 +274,7 @@
         for i in range(len(self.functions)):
             cppyyfunc = self.functions[i]
             try:
-                return cppyyfunc.call(cppthis, w_type, args_w)
+                return cppyyfunc.call(cppthis, args_w)
             except Exception, e:
                 errmsg += '\n\t'+str(e)
 
@@ -288,7 +287,7 @@
     'CPPOverload',
     is_static = interp2app(W_CPPOverload.is_static, unwrap_spec=['self']),
     get_returntype = interp2app(W_CPPOverload.get_returntype, unwrap_spec=['self']),
-    call = interp2app(W_CPPOverload.call, unwrap_spec=['self', W_Root, W_Root, 'args_w']),
+    call = interp2app(W_CPPOverload.call, unwrap_spec=['self', W_Root, 'args_w']),
 )
 
 
@@ -412,7 +411,6 @@
             self.space.wrap("%s '%s' has no attribute %s" % (self.kind, self.name, name)))
 
 
-
 # For now, keep namespaces and classes separate as namespaces are extensible
 # with info from multiple dictionaries and do not need to bother with meta
 # classes for inheritance. Both are python classes, though, and refactoring
@@ -657,7 +655,18 @@
 memory_regulator = MemoryRegulator()
 
 
+def get_wrapped_type(space, handle):
+    state = space.fromcache(State)
+    try:
+        w_type = state.type_registry[handle]
+    except KeyError:
+        final_name = capi.c_scoped_final_name(handle)
+        w_type = space.call_function(state.w_clgen_callback, space.wrap(final_name))
+    return w_type
+
 def wrap_new_cppobject_nocast(space, w_type, cpptype, rawobject, isref, python_owns):
+    if w_type is None:
+        w_type = get_wrapped_type(space, cpptype.handle)
     w_cppinstance = space.allocate_instance(W_CPPInstance, w_type)
     cppinstance = space.interp_w(W_CPPInstance, w_cppinstance, can_be_None=False)
     W_CPPInstance.__init__(cppinstance, space, cpptype, rawobject, isref, python_owns)
@@ -676,12 +685,7 @@
         if actual != cpptype.handle:
             offset = capi.c_base_offset(actual, cpptype.handle, rawobject)
             rawobject = capi.direct_ptradd(rawobject, offset)
-            state = space.fromcache(State)
-            try:
-                w_type = state.type_registry[actual]
-            except KeyError:
-                final_name = capi.c_final_name(actual)
-                w_type = space.call_function(state.w_clgen_callback, space.wrap(final_name))
+            w_type = get_wrapped_type(space, actual)
             w_cpptype = space.findattr(w_type, space.wrap("_cpp_proxy"))
             cpptype = space.interp_w(W_CPPType, w_cpptype, can_be_None=False)
     return wrap_cppobject_nocast(space, w_type, cpptype, rawobject, isref, python_owns)
diff --git a/pypy/module/cppyy/pythonify.py b/pypy/module/cppyy/pythonify.py
--- a/pypy/module/cppyy/pythonify.py
+++ b/pypy/module/cppyy/pythonify.py
@@ -48,24 +48,14 @@
 cppyy._set_class_generator(clgen_callback)
 
 def make_static_function(cpptype, func_name, cppol):
-    rettype = cppol.get_returntype()
-    if not rettype:                              # return builtin type
-        def function(*args):
-            return cppol.call(None, None, *args)
-    else:                                        # return instance
-        def function(*args):
-            return cppol.call(None, get_cppclass(rettype), *args)
+    def function(*args):
+        return cppol.call(None, *args)
     function.__name__ = func_name
     return staticmethod(function)
 
 def make_method(meth_name, cppol):
-    rettype = cppol.get_returntype()
-    if not rettype:                              # return builtin type
-        def method(self, *args):
-            return cppol.call(self, None, *args)
-    else:                                        # return instance
-        def method(self, *args):
-            return cppol.call(self, get_cppclass(rettype), *args)
+    def method(self, *args):
+        return cppol.call(self, *args)
     method.__name__ = meth_name
     return method
 
@@ -151,7 +141,7 @@
             raise TypeError(msg)
     else:
         def __new__(cls, *args):
-            return constructor_overload.call(None, cls, *args)
+            return constructor_overload.call(None, *args)
     return __new__
 
 def make_cppclass(scope, class_name, final_class_name, cpptype):
diff --git a/pypy/module/cppyy/src/cintcwrapper.cxx b/pypy/module/cppyy/src/cintcwrapper.cxx
--- a/pypy/module/cppyy/src/cintcwrapper.cxx
+++ b/pypy/module/cppyy/src/cintcwrapper.cxx
@@ -378,6 +378,15 @@
     return cppstring_to_cstring(cr.GetClassName());
 }
 
+char* cppyy_scoped_final_name(cppyy_type_t handle) {
+    TClassRef cr = type_from_handle(handle);
+    if (cr.GetClass() && cr->GetClassInfo()) {
+        std::string true_name = G__TypeInfo(cr->GetName()).TrueName();
+        return cppstring_to_cstring(true_name);
+    }
+    return cppstring_to_cstring(cr.GetClassName());
+}
+
 int cppyy_has_complex_hierarchy(cppyy_type_t handle) {
 // as long as no fast path is supported for CINT, calculating offsets (which
 // are cached by the JIT) is not going to hurt 
diff --git a/pypy/module/cppyy/src/reflexcwrapper.cxx b/pypy/module/cppyy/src/reflexcwrapper.cxx
--- a/pypy/module/cppyy/src/reflexcwrapper.cxx
+++ b/pypy/module/cppyy/src/reflexcwrapper.cxx
@@ -222,6 +222,14 @@
     return cppstring_to_cstring(name);
 }
 
+char* cppyy_scoped_final_name(cppyy_type_t handle) {
+    Reflex::Scope s = scope_from_handle(handle);
+    if (s.IsEnum())
+        return cppstring_to_cstring("unsigned int");
+    std::string name = s.Name(Reflex::SCOPED | Reflex::FINAL);
+    return cppstring_to_cstring(name);
+}   
+
 static int cppyy_has_complex_hierarchy(const Reflex::Type& t) {
     int is_complex = 1;
     
diff --git a/pypy/module/cppyy/test/test_cppyy.py b/pypy/module/cppyy/test/test_cppyy.py
--- a/pypy/module/cppyy/test/test_cppyy.py
+++ b/pypy/module/cppyy/test/test_cppyy.py
@@ -43,30 +43,30 @@
         import sys, math
         t = self.example01
 
-        res = t.get_overload("staticAddOneToInt").call(None, None, 1)
+        res = t.get_overload("staticAddOneToInt").call(None, 1)
         assert res == 2
-        res = t.get_overload("staticAddOneToInt").call(None, None, 1L)
+        res = t.get_overload("staticAddOneToInt").call(None, 1L)
         assert res == 2
-        res = t.get_overload("staticAddOneToInt").call(None, None, 1, 2)
+        res = t.get_overload("staticAddOneToInt").call(None, 1, 2)
         assert res == 4
-        res = t.get_overload("staticAddOneToInt").call(None, None, -1)
+        res = t.get_overload("staticAddOneToInt").call(None, -1)
         assert res == 0
         maxint32 = int(2 ** 31 - 1)
-        res = t.get_overload("staticAddOneToInt").call(None, None, maxint32-1)
+        res = t.get_overload("staticAddOneToInt").call(None, maxint32-1)
         assert res == maxint32
-        res = t.get_overload("staticAddOneToInt").call(None, None, maxint32)
+        res = t.get_overload("staticAddOneToInt").call(None, maxint32)
         assert res == -maxint32-1
 
-        raises(TypeError, 't.get_overload("staticAddOneToInt").call(None, None, 1, [])')
-        raises(TypeError, 't.get_overload("staticAddOneToInt").call(None, None, 1.)')
-        raises(TypeError, 't.get_overload("staticAddOneToInt").call(None, None, maxint32+1)')
+        raises(TypeError, 't.get_overload("staticAddOneToInt").call(None, 1, [])')
+        raises(TypeError, 't.get_overload("staticAddOneToInt").call(None, 1.)')
+        raises(TypeError, 't.get_overload("staticAddOneToInt").call(None, maxint32+1)')
 
     def test02_static_double(self):
         """Test passing of a double and returning of a double on a static function."""
 
         t = self.example01
 
-        res = t.get_overload("staticAddToDouble").call(None, None, 0.09)
+        res = t.get_overload("staticAddToDouble").call(None, 0.09)
         assert res == 0.09 + 0.01
 
     def test03_static_constcharp(self):
@@ -75,14 +75,14 @@
 
         t = self.example01
 
-        res = t.get_overload("staticAtoi").call(None, None, "1")
+        res = t.get_overload("staticAtoi").call(None, "1")
         assert res == 1
-        res = t.get_overload("staticStrcpy").call(None, None, "aap")   # TODO: this leaks
+        res = t.get_overload("staticStrcpy").call(None, "aap")       # TODO: this leaks
         assert res == "aap"
-        res = t.get_overload("staticStrcpy").call(None, None, u"aap")  # TODO: this leaks
+        res = t.get_overload("staticStrcpy").call(None, u"aap")      # TODO: this leaks
         assert res == "aap"
 
-        raises(TypeError, 't.get_overload("staticStrcpy").call(None, None, 1.)') # TODO: this leaks
+        raises(TypeError, 't.get_overload("staticStrcpy").call(None, 1.)')     # TODO: this leaks
 
     def test04_method_int(self):
         """Test passing of a int, returning of a int, and memory cleanup, on
@@ -91,30 +91,30 @@
 
         t = self.example01
 
-        assert t.get_overload("getCount").call(None, None) == 0
+        assert t.get_overload("getCount").call(None) == 0
 
-        e1 = t.get_overload(t.type_name).call(None, cppyy.CPPInstance, 7)
-        assert t.get_overload("getCount").call(None, None) == 1
-        res = t.get_overload("addDataToInt").call(e1, None, 4)
+        e1 = t.get_overload(t.type_name).call(None, 7)
+        assert t.get_overload("getCount").call(None) == 1
+        res = t.get_overload("addDataToInt").call(e1, 4)
         assert res == 11
-        res = t.get_overload("addDataToInt").call(e1, None, -4)
+        res = t.get_overload("addDataToInt").call(e1, -4)
         assert res == 3
         e1.destruct()
-        assert t.get_overload("getCount").call(None, None) == 0
-        raises(ReferenceError, 't.get_overload("addDataToInt").call(e1, None, 4)')
+        assert t.get_overload("getCount").call(None) == 0
+        raises(ReferenceError, 't.get_overload("addDataToInt").call(e1, 4)')
 
-        e1 = t.get_overload(t.type_name).call(None, cppyy.CPPInstance, 7)
-        e2 = t.get_overload(t.type_name).call(None, cppyy.CPPInstance, 8)
-        assert t.get_overload("getCount").call(None, None) == 2
+        e1 = t.get_overload(t.type_name).call(None, 7)
+        e2 = t.get_overload(t.type_name).call(None, 8)
+        assert t.get_overload("getCount").call(None) == 2
         e1.destruct()
-        assert t.get_overload("getCount").call(None, None) == 1
+        assert t.get_overload("getCount").call(None) == 1
         e2.destruct()
-        assert t.get_overload("getCount").call(None, None) == 0
+        assert t.get_overload("getCount").call(None) == 0
 
         e2.destruct()
-        assert t.get_overload("getCount").call(None, None) == 0
+        assert t.get_overload("getCount").call(None) == 0
 
-        raises(TypeError, t.get_overload("addDataToInt").call, 41, None, 4)
+        raises(TypeError, t.get_overload("addDataToInt").call, 41, 4)
 
     def test05_memory(self):
         """Test memory destruction and integrity."""
@@ -124,29 +124,29 @@
 
         t = self.example01
 
-        assert t.get_overload("getCount").call(None, None) == 0
+        assert t.get_overload("getCount").call(None) == 0
 
-        e1 = t.get_overload(t.type_name).call(None, cppyy.CPPInstance, 7)
-        assert t.get_overload("getCount").call(None, None) == 1
-        res = t.get_overload("addDataToInt").call(e1, None, 4)
+        e1 = t.get_overload(t.type_name).call(None, 7)
+        assert t.get_overload("getCount").call(None) == 1
+        res = t.get_overload("addDataToInt").call(e1, 4)
         assert res == 11
-        res = t.get_overload("addDataToInt").call(e1, None, -4)
+        res = t.get_overload("addDataToInt").call(e1, -4)
         assert res == 3
         e1 = None
         gc.collect()
-        assert t.get_overload("getCount").call(None, None) == 0
+        assert t.get_overload("getCount").call(None) == 0
 
-        e1 = t.get_overload(t.type_name).call(None, cppyy.CPPInstance, 7)
-        e2 = t.get_overload(t.type_name).call(None, cppyy.CPPInstance, 8)
-        assert t.get_overload("getCount").call(None, None) == 2
+        e1 = t.get_overload(t.type_name).call(None, 7)
+        e2 = t.get_overload(t.type_name).call(None, 8)
+        assert t.get_overload("getCount").call(None) == 2
         e1 = None
         gc.collect()
-        assert t.get_overload("getCount").call(None, None) == 1
+        assert t.get_overload("getCount").call(None) == 1
 	e2.destruct()
-        assert t.get_overload("getCount").call(None, None) == 0
+        assert t.get_overload("getCount").call(None) == 0
         e2 = None
         gc.collect()
-        assert t.get_overload("getCount").call(None, None) == 0
+        assert t.get_overload("getCount").call(None) == 0
 
     def test06_method_double(self):
         """Test passing of a double and returning of double on a method"""
@@ -154,16 +154,16 @@
 
         t = self.example01
 
-        e = t.get_overload(t.type_name).call(None, cppyy.CPPInstance, 13)
-        res = t.get_overload("addDataToDouble").call(e, None, 16)
+        e = t.get_overload(t.type_name).call(None, 13)
+        res = t.get_overload("addDataToDouble").call(e, 16)
         assert round(res-29, 8) == 0.
         e.destruct()
 
-        e = t.get_overload(t.type_name).call(None, cppyy.CPPInstance, -13)
-        res = t.get_overload("addDataToDouble").call(e, None, 16)
+        e = t.get_overload(t.type_name).call(None, -13)
+        res = t.get_overload("addDataToDouble").call(e, 16)
         assert round(res-3, 8) == 0.
         e.destruct()
-        assert t.get_overload("getCount").call(None, None) == 0
+        assert t.get_overload("getCount").call(None) == 0
 
     def test07_method_constcharp(self):
         """Test passing of a C string and returning of a C string on a
@@ -172,15 +172,15 @@
 
         t = self.example01
 
-        e = t.get_overload(t.type_name).call(None, cppyy.CPPInstance, 42)
-        res = t.get_overload("addDataToAtoi").call(e, None, "13")
+        e = t.get_overload(t.type_name).call(None, 42)
+        res = t.get_overload("addDataToAtoi").call(e, "13")
         assert res == 55
-        res = t.get_overload("addToStringValue").call(e, None, "12")     # TODO: this leaks
+        res = t.get_overload("addToStringValue").call(e, "12")       # TODO: this leaks
         assert res == "54"
-        res = t.get_overload("addToStringValue").call(e, None, "-12")    # TODO: this leaks
+        res = t.get_overload("addToStringValue").call(e, "-12")      # TODO: this leaks
         assert res == "30"
         e.destruct()
-        assert t.get_overload("getCount").call(None, None) == 0
+        assert t.get_overload("getCount").call(None) == 0
 
     def test08_pass_object_by_pointer(self):
         """Test passing of an instance as an argument."""
@@ -189,18 +189,18 @@
         t1 = self.example01
         t2 = self.payload
 
-        pl = t2.get_overload(t2.type_name).call(None, cppyy.CPPInstance, 3.14)
-        assert round(t2.get_overload("getData").call(pl, None)-3.14, 8) == 0
-        t1.get_overload("staticSetPayload").call(None, None, pl, 41.)  # now pl is a CPPInstance
-        assert t2.get_overload("getData").call(pl, None) == 41.
+        pl = t2.get_overload(t2.type_name).call(None, 3.14)
+        assert round(t2.get_overload("getData").call(pl)-3.14, 8) == 0
+        t1.get_overload("staticSetPayload").call(None, pl, 41.)      # now pl is a CPPInstance
+        assert t2.get_overload("getData").call(pl) == 41.
 
-        e = t1.get_overload(t1.type_name).call(None, cppyy.CPPInstance, 50)
-        t1.get_overload("setPayload").call(e, None, pl);
-        assert round(t2.get_overload("getData").call(pl, None)-50., 8) == 0
+        e = t1.get_overload(t1.type_name).call(None, 50)
+        t1.get_overload("setPayload").call(e, pl);
+        assert round(t2.get_overload("getData").call(pl)-50., 8) == 0
 
         e.destruct()
         pl.destruct() 
-        assert t1.get_overload("getCount").call(None, None) == 0
+        assert t1.get_overload("getCount").call(None) == 0
 
     def test09_return_object_by_pointer(self):
         """Test returning of an instance as an argument."""
@@ -209,15 +209,15 @@
         t1 = self.example01
         t2 = self.payload
 
-        pl1 = t2.get_overload(t2.type_name).call(None, cppyy.CPPInstance, 3.14)
-        assert round(t2.get_overload("getData").call(pl1, None)-3.14, 8) == 0
-        pl2 = t1.get_overload("staticCyclePayload").call(None, cppyy.CPPInstance, pl1, 38.)
-        assert t2.get_overload("getData").call(pl2, None) == 38.
+        pl1 = t2.get_overload(t2.type_name).call(None, 3.14)
+        assert round(t2.get_overload("getData").call(pl1)-3.14, 8) == 0
+        pl2 = t1.get_overload("staticCyclePayload").call(None, pl1, 38.)
+        assert t2.get_overload("getData").call(pl2) == 38.
 
-        e = t1.get_overload(t1.type_name).call(None, cppyy.CPPInstance, 50)
-        pl2 = t1.get_overload("cyclePayload").call(e, cppyy.CPPInstance, pl1);
-        assert round(t2.get_overload("getData").call(pl2, None)-50., 8) == 0
+        e = t1.get_overload(t1.type_name).call(None, 50)
+        pl2 = t1.get_overload("cyclePayload").call(e, pl1);
+        assert round(t2.get_overload("getData").call(pl2)-50., 8) == 0
 
         e.destruct()
         pl1.destruct() 
-        assert t1.get_overload("getCount").call(None, None) == 0
+        assert t1.get_overload("getCount").call(None) == 0
diff --git a/pypy/module/cppyy/test/test_zjit.py b/pypy/module/cppyy/test/test_zjit.py
--- a/pypy/module/cppyy/test/test_zjit.py
+++ b/pypy/module/cppyy/test/test_zjit.py
@@ -44,9 +44,6 @@
     def perform(self, executioncontext, frame):
         pass
 
-class FakeReturnType(object):
-    pass
-
 class FakeSpace(object):
     fake = True
 
@@ -128,7 +125,6 @@
         return None
 
     def allocate_instance(self, cls, w_type):
-        assert isinstance(w_type, FakeReturnType)
         return instantiate(cls)
 
     def call_function(self, w_func, *args_w):
@@ -149,13 +145,13 @@
         def f():
             lib = interp_cppyy.load_dictionary(space, "./example01Dict.so")
             cls  = interp_cppyy.type_byname(space, "example01")
-            inst = cls.get_overload("example01").call(None, FakeReturnType(), [FakeInt(0)])
+            inst = cls.get_overload("example01").call(None, [FakeInt(0)])
             addDataToInt = cls.get_overload("addDataToInt")
             assert isinstance(inst, interp_cppyy.W_CPPInstance)
             i = 10
             while i > 0:
                 drv.jit_merge_point(inst=inst, addDataToInt=addDataToInt, i=i)
-                addDataToInt.call(inst, None, [FakeInt(i)])
+                addDataToInt.call(inst, [FakeInt(i)])
                 i -= 1
             return 7
         f()
@@ -174,13 +170,13 @@
         def f():
             lib = interp_cppyy.load_dictionary(space, "./example01Dict.so")
             cls  = interp_cppyy.type_byname(space, "example01")
-            inst = cls.get_overload("example01").call(None, FakeReturnType(), [FakeInt(0)])
+            inst = cls.get_overload("example01").call(None, [FakeInt(0)])
             addDataToInt = cls.get_overload("overloadedAddDataToInt")
             assert isinstance(inst, interp_cppyy.W_CPPInstance)
             i = 10
             while i > 0:
                 drv.jit_merge_point(inst=inst, addDataToInt=addDataToInt, i=i)
-                addDataToInt.call(inst, None, [FakeInt(i)])
+                addDataToInt.call(inst, [FakeInt(i)])
                 i -= 1
             return 7
         f()


More information about the pypy-commit mailing list