[pypy-commit] pypy reflex-support: fix rtyper errors
wlav
noreply at buildbot.pypy.org
Sat Aug 31 01:21:57 CEST 2013
Author: Wim Lavrijsen <WLavrijsen at lbl.gov>
Branch: reflex-support
Changeset: r66704:d0ce2419ea7e
Date: 2013-08-30 16:19 -0700
http://bitbucket.org/pypy/pypy/changeset/d0ce2419ea7e/
Log: fix rtyper errors
diff --git a/pypy/module/cppyy/capi/builtin_capi.py b/pypy/module/cppyy/capi/builtin_capi.py
--- a/pypy/module/cppyy/capi/builtin_capi.py
+++ b/pypy/module/cppyy/capi/builtin_capi.py
@@ -543,4 +543,3 @@
compilation_info=backend.eci)
def c_stdstring2stdstring(space, cppobject):
return _c_stdstring2stdstring(cppobject)
-
diff --git a/pypy/module/cppyy/capi/cint_capi.py b/pypy/module/cppyy/capi/cint_capi.py
--- a/pypy/module/cppyy/capi/cint_capi.py
+++ b/pypy/module/cppyy/capi/cint_capi.py
@@ -324,33 +324,6 @@
_method_alias(space, w_pycppclass, "__cmp__", "CompareTo")
_method_alias(space, w_pycppclass, "_cppyy_as_builtin", "Data")
- # ROOT-specific converters (TODO: this is a general problem and would serve
- # with its own API; problem is that constructing temporaries leads to recursive
- # calls, as the copy-constructor takes a type of the same class, so uses the
- # same converter)
- from pypy.module.cppyy import converter
- class TStringConverter(converter.InstanceConverter):
- def __init__(self, space, extra):
- from pypy.module.cppyy import interp_cppyy
- cppclass = interp_cppyy.scope_byname(space, "TString")
- converter.InstanceConverter.__init__(self, space, cppclass)
-
- def _unwrap_object(self, space, w_obj):
- from pypy.module.cppyy import interp_cppyy
- if isinstance(w_obj, interp_cppyy.W_CPPInstance):
- arg = converter.InstanceConverter._unwrap_object(self, space, w_obj)
- return c_TString2TString(space, arg)
- else:
- return c_charp2TString(space, space.str_w(w_obj))
-
- def free_argument(self, space, arg, call_local):
- from pypy.module.cppyy import interp_cppyy, capi
- capi.c_destruct(space, self.cppclass, rffi.cast(capi.C_OBJECT, rffi.cast(rffi.VOIDPP, arg)[0]))
-
- # TODO: make an API for this
- converter._converters["TString"] = TStringConverter
- converter._converters["const TString&"] = TStringConverter
-
elif name == "TTree":
_method_alias(space, w_pycppclass, "_unpythonized_Branch", "Branch")
@@ -361,7 +334,6 @@
elif name[0:8] == "TVectorT": # TVectorT<> template
_method_alias(space, w_pycppclass, "__len__", "GetNoElements")
-
# destruction callback (needs better solution, but this is for CINT
# only and should not appear outside of ROOT-specific uses)
from pypy.module.cpyext.api import cpython_api, CANNOT_FAIL
diff --git a/pypy/module/cppyy/converter.py b/pypy/module/cppyy/converter.py
--- a/pypy/module/cppyy/converter.py
+++ b/pypy/module/cppyy/converter.py
@@ -777,3 +777,27 @@
for c_type, alias in aliases:
_converters[alias] = _converters[c_type]
_add_aliased_converters()
+
+# ROOT-specific converters (TODO: this is a general use case and should grow
+# an API; putting it here is done only to circumvent circular imports)
+if capi.identify() == "CINT":
+
+ class TStringConverter(InstanceConverter):
+ def __init__(self, space, extra):
+ from pypy.module.cppyy import interp_cppyy
+ cppclass = interp_cppyy.scope_byname(space, "TString")
+ InstanceConverter.__init__(self, space, cppclass)
+
+ def _unwrap_object(self, space, w_obj):
+ from pypy.module.cppyy import interp_cppyy
+ if isinstance(w_obj, interp_cppyy.W_CPPInstance):
+ arg = InstanceConverter._unwrap_object(self, space, w_obj)
+ return capi.backend.c_TString2TString(space, arg)
+ else:
+ return capi.backend.c_charp2TString(space, space.str_w(w_obj))
+
+ def free_argument(self, space, arg, call_local):
+ capi.c_destruct(space, self.cppclass, rffi.cast(capi.C_OBJECT, rffi.cast(rffi.VOIDPP, arg)[0]))
+
+ _converters["TString"] = TStringConverter
+ _converters["const TString&"] = TStringConverter
More information about the pypy-commit
mailing list