Author: Wim Lavrijsen <[email protected]>
Branch: reflex-support
Changeset: r59756:56c486ea1203
Date: 2012-12-21 16:18 -0800
http://bitbucket.org/pypy/pypy/changeset/56c486ea1203/

Log:    simplifications

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
@@ -88,7 +88,6 @@
     state = space.fromcache(State)
     state.w_clgen_callback = w_callback
 
-@unwrap_spec(w_pycppclass=W_Root)
 def register_class(space, w_pycppclass):
     w_cppclass = space.findattr(w_pycppclass, space.wrap("_cpp_proxy"))
     cppclass = space.interp_w(W_CPPClass, w_cppclass, can_be_None=False)
@@ -1026,17 +1025,17 @@
         final_name = capi.c_scoped_final_name(handle)
         # the callback will cache the class by calling register_class
         w_pycppclass = space.call_function(state.w_clgen_callback, 
space.wrap(final_name))
+        assert w_pycppclass is state.cppclass_registry[handle]
     return w_pycppclass
 
 def wrap_new_cppobject_nocast(space, w_pycppclass, cppclass, rawobject, isref, 
python_owns):
     rawobject = rffi.cast(capi.C_OBJECT, rawobject)
     if space.is_w(w_pycppclass, space.w_None):
         w_pycppclass = get_pythonized_cppclass(space, cppclass.handle)
-    w_cppinstance = space.allocate_instance(W_CPPInstance, w_pycppclass)
-    cppinstance = space.interp_w(W_CPPInstance, w_cppinstance, 
can_be_None=False)
+    cppinstance = space.allocate_instance(W_CPPInstance, w_pycppclass)
     W_CPPInstance.__init__(cppinstance, space, cppclass, rawobject, isref, 
python_owns)
     memory_regulator.register(cppinstance)
-    return w_cppinstance
+    return space.wrap(cppinstance)
 
 def wrap_cppobject_nocast(space, w_pycppclass, cppclass, rawobject, isref, 
python_owns):
     rawobject = rffi.cast(capi.C_OBJECT, rawobject)
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
@@ -18,11 +18,14 @@
     def __dir__(cls):
         return cls._cpp_proxy.__dir__()
 
-class CppyyClass(CppyyScopeMeta):
+class CppyyClassMeta(CppyyScopeMeta):
     pass
 
-class CPPObject(cppyy.CPPInstance):
-    __metaclass__ = CppyyClass
+class CppyyClass(cppyy.CPPInstance):
+    __metaclass__ = CppyyClassMeta
+
+    def __init__(self, *args, **kwds):
+        pass   # ignored, for the C++ backend, ctor == __new__ + __init__
 
 
 class CppyyTemplateType(object):
@@ -155,7 +158,7 @@
     # get a list of base classes for class creation
     bases = [get_pycppclass(base) for base in cppclass.get_base_names()]
     if not bases:
-        bases = [CPPObject,]
+        bases = [CppyyClass,]
     else:
         # it's technically possible that the required class now has been built
         # if one of the base classes uses it in e.g. a function interface
@@ -166,7 +169,7 @@
 
     # create a meta class to allow properties (for static data write access)
     metabases = [type(base) for base in bases]
-    metacpp = type(CppyyClass)(class_name+'_meta', _drop_cycles(metabases), {})
+    metacpp = type(CppyyClassMeta)(class_name+'_meta', 
_drop_cycles(metabases), {})
 
     # create the python-side C++ class representation
     def dispatch(self, name, signature):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to