[pypy-commit] pypy reflex-support: get the casts right to allow switching C_OBJECT type

wlav noreply at buildbot.pypy.org
Fri Feb 24 18:24:27 CET 2012


Author: Wim Lavrijsen <WLavrijsen at lbl.gov>
Branch: reflex-support
Changeset: r52865:1f15486624b1
Date: 2012-02-23 16:17 -0800
http://bitbucket.org/pypy/pypy/changeset/1f15486624b1/

Log:	get the casts right to allow switching C_OBJECT type

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
@@ -254,15 +254,15 @@
 
 c_charp2stdstring = rffi.llexternal(
     "cppyy_charp2stdstring",
-    [rffi.CCHARP], rffi.VOIDP,
+    [rffi.CCHARP], C_OBJECT,
     compilation_info=backend.eci)
 
 c_stdstring2stdstring = rffi.llexternal(
     "cppyy_stdstring2stdstring",
-    [rffi.VOIDP], rffi.VOIDP,
+    [C_OBJECT], C_OBJECT,
     compilation_info=backend.eci)
 
 c_free_stdstring = rffi.llexternal(
     "cppyy_free_stdstring",
-    [rffi.VOIDP], lltype.Void,
+    [C_OBJECT], lltype.Void,
     compilation_info=backend.eci)
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
@@ -552,7 +552,7 @@
            return capi.c_stdstring2stdstring(arg)
 
     def free_argument(self, arg):
-        capi.c_free_stdstring(rffi.cast(rffi.VOIDPP, arg)[0])
+        capi.c_free_stdstring(rffi.cast(capi.C_OBJECT, rffi.cast(rffi.VOIDPP, arg)[0]))
 
 class StdStringRefConverter(InstancePtrConverter):
     _immutable_ = True
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
@@ -6,6 +6,7 @@
 #ifdef __cplusplus
 extern "C" {
 #endif // ifdef __cplusplus
+
     typedef void* cppyy_typehandle_t;
     typedef void* cppyy_object_t;
     typedef void* (*cppyy_methptrgetter_t)(cppyy_object_t);
@@ -80,9 +81,9 @@
     long long cppyy_strtoll(const char* str);
     unsigned long long cppyy_strtuoll(const char* str);
 
-    void* cppyy_charp2stdstring(const char* str);
-    void* cppyy_stdstring2stdstring(void* ptr);
-    void cppyy_free_stdstring(void* ptr);
+    cppyy_object_t cppyy_charp2stdstring(const char* str);
+    cppyy_object_t cppyy_stdstring2stdstring(cppyy_object_t ptr);
+    void cppyy_free_stdstring(cppyy_object_t ptr);
 
 #ifdef __cplusplus
 }
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
@@ -506,15 +506,15 @@
     free(ptr);
 }
 
-void* cppyy_charp2stdstring(const char* str) {
-    return new std::string(str);
+cppyy_object_t cppyy_charp2stdstring(const char* str) {
+   return (cppyy_object_t)new std::string(str);
 }
 
-void* cppyy_stdstring2stdstring(void* ptr) {
-    return new std::string(*(std::string*)ptr);
+cppyy_object_t cppyy_stdstring2stdstring(cppyy_object_t ptr) {
+   return (cppyy_object_t)new std::string(*(std::string*)ptr);
 }
 
-void cppyy_free_stdstring(void* ptr) {
+void cppyy_free_stdstring(cppyy_object_t ptr) {
     delete (std::string*)ptr;
 }
 
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
@@ -65,7 +65,7 @@
 
 void cppyy_deallocate(cppyy_typehandle_t handle, cppyy_object_t instance) {
     Reflex::Type t = type_from_handle(handle);
-    t.Deallocate(instance);
+    t.Deallocate((void*)instance);
 }
 
 void cppyy_destruct(cppyy_typehandle_t handle, cppyy_object_t self) {
@@ -81,7 +81,7 @@
     Reflex::Scope s = scope_from_handle(handle);
     Reflex::Member m = s.FunctionMemberAt(method_index);
     if (self) {
-        Reflex::Object o((Reflex::Type)s, self);
+        Reflex::Object o((Reflex::Type)s, (void*)self);
         m.Invoke(o, 0, arguments);
     } else {
         m.Invoke(0, arguments);
@@ -96,10 +96,10 @@
     Reflex::Scope s = scope_from_handle(handle);
     Reflex::Member m = s.FunctionMemberAt(method_index);
     if (self) {
-        Reflex::Object o((Reflex::Type)s, self);
+        Reflex::Object o((Reflex::Type)s, (void*)self);
         m.Invoke(o, *((long*)result), arguments);
     } else {
-       m.Invoke(*((long*)result), arguments);
+        m.Invoke(*((long*)result), arguments);
     }
     return (long)result;
 }
@@ -112,7 +112,7 @@
     Reflex::Scope s = scope_from_handle(handle);
     Reflex::Member m = s.FunctionMemberAt(method_index);
     if (self) {
-        Reflex::Object o((Reflex::Type)s, self);
+        Reflex::Object o((Reflex::Type)s, (void*)self);
         m.Invoke(o, result, arguments);
     } else {
         m.Invoke(result, arguments);
@@ -167,10 +167,10 @@
     Reflex::Scope s = scope_from_handle(handle);
     Reflex::Member m = s.FunctionMemberAt(method_index);
     if (self) {
-        Reflex::Object o((Reflex::Type)s, self);
+        Reflex::Object o((Reflex::Type)s, (void*)self);
         m.Invoke(o, result, arguments);
     } else {
-       m.Invoke(result, arguments);
+        m.Invoke(result, arguments);
     }
     return cppstring_to_cstring(result);
 }
@@ -284,7 +284,7 @@
 
         for (Bases_t::iterator ibase = bases->begin(); ibase != bases->end(); ++ibase) {
             if (ibase->first.ToType() == tb)
-                return (size_t)ibase->first.Offset(address);
+                return (size_t)ibase->first.Offset((void*)address);
         }
 
         // contrary to typical invoke()s, the result of the internal getbases function
@@ -306,9 +306,9 @@
     Reflex::Member m = s.FunctionMemberAt(method_index);
     std::string name;
     if (m.IsConstructor())
-       name = s.Name(Reflex::FINAL);    // to get proper name for templates
+        name = s.Name(Reflex::FINAL);   // to get proper name for templates
     else
-       name = m.Name();
+        name = m.Name();
     return cppstring_to_cstring(name);
 }
 
@@ -414,14 +414,14 @@
     free(ptr);
 }
 
-void* cppyy_charp2stdstring(const char* str) {
-    return new std::string(str);
+cppyy_object_t cppyy_charp2stdstring(const char* str) {
+   return (cppyy_object_t)new std::string(str);
 }
 
-void* cppyy_stdstring2stdstring(void* ptr) {
-    return new std::string(*(std::string*)ptr);
+cppyy_object_t cppyy_stdstring2stdstring(cppyy_object_t ptr) {
+   return (cppyy_object_t)new std::string(*(std::string*)ptr);
 }
 
-void cppyy_free_stdstring(void* ptr) {
+void cppyy_free_stdstring(cppyy_object_t ptr) {
     delete (std::string*)ptr;
 }


More information about the pypy-commit mailing list