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