[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