[pypy-commit] pypy reflex-support: refactoring of capi and CINT backend fix
wlav
noreply at buildbot.pypy.org
Tue Aug 30 22:55:37 CEST 2011
Author: Wim Lavrijsen <WLavrijsen at lbl.gov>
Branch: reflex-support
Changeset: r46931:0208f34619e7
Date: 2011-08-30 11:28 -0700
http://bitbucket.org/pypy/pypy/changeset/0208f34619e7/
Log: refactoring of capi and CINT backend fix
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
@@ -1,2 +1,212 @@
-from reflex_capi import *
-#from cint_capi import *
+from pypy.rpython.lltypesystem import rffi, lltype
+from pypy.rlib import jit
+
+import reflex_capi as backend
+#import cint_capi as backend
+
+
+C_TYPEHANDLE = rffi.VOIDP
+C_OBJECT = rffi.VOIDP
+
+C_METHPTRGETTER = lltype.FuncType([C_OBJECT], rffi.VOIDP)
+C_METHPTRGETTER_PTR = lltype.Ptr(C_METHPTRGETTER)
+
+c_load_dictionary = backend.c_load_dictionary
+
+c_get_typehandle = rffi.llexternal(
+ "cppyy_get_typehandle",
+ [rffi.CCHARP], C_TYPEHANDLE,
+ compilation_info=backend.eci)
+c_get_templatehandle = rffi.llexternal(
+ "cppyy_get_templatehandle",
+ [rffi.CCHARP], C_TYPEHANDLE,
+ compilation_info=backend.eci)
+
+c_allocate = rffi.llexternal(
+ "cppyy_allocate",
+ [C_TYPEHANDLE], rffi.VOIDP,
+ compilation_info=backend.eci)
+c_deallocate = rffi.llexternal(
+ "cppyy_deallocate",
+ [C_TYPEHANDLE, C_OBJECT], lltype.Void,
+ compilation_info=backend.eci)
+c_destruct = rffi.llexternal(
+ "cppyy_destruct",
+ [C_TYPEHANDLE, C_OBJECT], lltype.Void,
+ compilation_info=backend.eci)
+
+c_is_namespace = rffi.llexternal(
+ "cppyy_is_namespace",
+ [C_TYPEHANDLE], rffi.INT,
+ compilation_info=backend.eci)
+c_final_name = rffi.llexternal(
+ "cppyy_final_name",
+ [C_TYPEHANDLE], rffi.CCHARP,
+ compilation_info=backend.eci)
+
+c_num_bases = rffi.llexternal(
+ "cppyy_num_bases",
+ [C_TYPEHANDLE], rffi.INT,
+ compilation_info=backend.eci)
+c_base_name = rffi.llexternal(
+ "cppyy_base_name",
+ [C_TYPEHANDLE, rffi.INT], rffi.CCHARP,
+ compilation_info=backend.eci)
+
+_c_is_subtype = rffi.llexternal(
+ "cppyy_is_subtype",
+ [C_TYPEHANDLE, C_TYPEHANDLE], rffi.INT,
+ compilation_info=backend.eci,
+ elidable_function=True)
+
+ at jit.elidable_promote()
+def c_is_subtype(td, tb):
+ if td == tb:
+ return 1
+ return _c_is_subtype(td, tb)
+
+_c_base_offset = rffi.llexternal(
+ "cppyy_base_offset",
+ [C_TYPEHANDLE, C_TYPEHANDLE, C_OBJECT], rffi.SIZE_T,
+ compilation_info=backend.eci,
+ elidable_function=True)
+
+ at jit.elidable_promote()
+def c_base_offset(td, tb, address):
+ if td == tb:
+ return 0
+ return _c_base_offset(td, tb, address)
+
+c_call_v = rffi.llexternal(
+ "cppyy_call_v",
+ [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], lltype.Void,
+ compilation_info=backend.eci)
+c_call_o = rffi.llexternal(
+ "cppyy_call_o",
+ [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP, C_TYPEHANDLE], rffi.LONG,
+ compilation_info=backend.eci)
+c_call_b = rffi.llexternal(
+ "cppyy_call_b",
+ [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], rffi.INT,
+ compilation_info=backend.eci)
+c_call_c = rffi.llexternal(
+ "cppyy_call_c",
+ [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], rffi.CHAR,
+ compilation_info=backend.eci)
+c_call_h = rffi.llexternal(
+ "cppyy_call_h",
+ [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], rffi.SHORT,
+ compilation_info=backend.eci)
+c_call_i = rffi.llexternal(
+ "cppyy_call_i",
+ [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], rffi.INT,
+ compilation_info=backend.eci)
+
+c_call_l = rffi.llexternal(
+ "cppyy_call_l",
+ [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], rffi.LONG,
+ compilation_info=backend.eci)
+c_call_f = rffi.llexternal(
+ "cppyy_call_f",
+ [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], rffi.DOUBLE,
+ compilation_info=backend.eci)
+c_call_d = rffi.llexternal(
+ "cppyy_call_d",
+ [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], rffi.DOUBLE,
+ compilation_info=backend.eci)
+
+c_get_methptr_getter = rffi.llexternal(
+ "cppyy_get_methptr_getter",
+ [C_TYPEHANDLE, rffi.INT], C_METHPTRGETTER_PTR,
+ compilation_info=backend.eci,
+ elidable_function=True)
+
+c_allocate_function_args = rffi.llexternal(
+ "cppyy_allocate_function_args",
+ [rffi.SIZE_T], rffi.VOIDP,
+ compilation_info=backend.eci)
+c_deallocate_function_args = rffi.llexternal(
+ "cppyy_deallocate_function_args",
+ [rffi.VOIDP], lltype.Void,
+ compilation_info=backend.eci)
+c_function_arg_sizeof = rffi.llexternal(
+ "cppyy_function_arg_sizeof",
+ [], rffi.SIZE_T,
+ compilation_info=backend.eci,
+ elidable_function=True)
+c_function_arg_typeoffset = rffi.llexternal(
+ "cppyy_function_arg_typeoffset",
+ [], rffi.SIZE_T,
+ compilation_info=backend.eci,
+ elidable_function=True)
+
+c_num_methods = rffi.llexternal(
+ "cppyy_num_methods",
+ [C_TYPEHANDLE], rffi.INT,
+ compilation_info=backend.eci)
+c_method_name = rffi.llexternal(
+ "cppyy_method_name",
+ [C_TYPEHANDLE, rffi.INT], rffi.CCHARP,
+ compilation_info=backend.eci)
+c_method_result_type = rffi.llexternal(
+ "cppyy_method_result_type",
+ [C_TYPEHANDLE, rffi.INT], rffi.CCHARP,
+ compilation_info=backend.eci)
+c_method_num_args = rffi.llexternal(
+ "cppyy_method_num_args",
+ [C_TYPEHANDLE, rffi.INT], rffi.INT,
+ compilation_info=backend.eci)
+c_method_req_args = rffi.llexternal(
+ "cppyy_method_req_args",
+ [C_TYPEHANDLE, rffi.INT], rffi.INT,
+ compilation_info=backend.eci)
+c_method_arg_type = rffi.llexternal(
+ "cppyy_method_arg_type",
+ [C_TYPEHANDLE, rffi.INT, rffi.INT], rffi.CCHARP,
+ compilation_info=backend.eci)
+
+c_is_constructor = rffi.llexternal(
+ "cppyy_is_constructor",
+ [C_TYPEHANDLE, rffi.INT], rffi.INT,
+ compilation_info=backend.eci)
+c_is_staticmethod = rffi.llexternal(
+ "cppyy_is_staticmethod",
+ [C_TYPEHANDLE, rffi.INT], rffi.INT,
+ compilation_info=backend.eci)
+
+c_num_data_members = rffi.llexternal(
+ "cppyy_num_data_members",
+ [C_TYPEHANDLE], rffi.INT,
+ compilation_info=backend.eci)
+c_data_member_name = rffi.llexternal(
+ "cppyy_data_member_name",
+ [C_TYPEHANDLE, rffi.INT], rffi.CCHARP,
+ compilation_info=backend.eci)
+c_data_member_type = rffi.llexternal(
+ "cppyy_data_member_type",
+ [C_TYPEHANDLE, rffi.INT], rffi.CCHARP,
+ compilation_info=backend.eci)
+c_data_member_offset = rffi.llexternal(
+ "cppyy_data_member_offset",
+ [C_TYPEHANDLE, rffi.INT], rffi.SIZE_T,
+ compilation_info=backend.eci)
+
+c_is_publicdata = rffi.llexternal(
+ "cppyy_is_publicdata",
+ [C_TYPEHANDLE, rffi.INT], rffi.INT,
+ compilation_info=backend.eci)
+c_is_staticdata = rffi.llexternal(
+ "cppyy_is_staticdata",
+ [C_TYPEHANDLE, rffi.INT], rffi.INT,
+ compilation_info=backend.eci)
+
+c_free = rffi.llexternal(
+ "cppyy_free",
+ [rffi.VOIDP], lltype.Void,
+ compilation_info=backend.eci)
+
+def charp2str_free(charp):
+ string = rffi.charp2str(charp)
+ voidp = rffi.cast(rffi.VOIDP, charp)
+ c_free(voidp)
+ return string
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
@@ -1,9 +1,11 @@
import py, os
from pypy.translator.tool.cbuild import ExternalCompilationInfo
-from pypy.rpython.lltypesystem import rffi, lltype, ll2ctypes
+from pypy.rpython.lltypesystem import rffi
from pypy.rlib import rdynload
+__all__ = ['eci', 'c_load_dictionary']
+
pkgpath = py.path.local(__file__).dirpath().join(os.pardir)
srcpath = pkgpath.join("src")
incpath = pkgpath.join("include")
@@ -32,205 +34,7 @@
use_cpp_linker=True,
)
-C_TYPEHANDLE = rffi.VOIDP
-C_OBJECT = rffi.VOIDP
-
-C_METHPTRGETTER = lltype.FuncType([C_OBJECT], rffi.VOIDP)
-C_METHPTRGETTER_PTR = lltype.Ptr(C_METHPTRGETTER)
-
c_load_dictionary = rffi.llexternal(
"cppyy_load_dictionary",
[rffi.CCHARP], rdynload.DLLHANDLE,
compilation_info=eci)
-
-c_get_typehandle = rffi.llexternal(
- "cppyy_get_typehandle",
- [rffi.CCHARP], C_TYPEHANDLE,
- compilation_info=eci)
-
-c_get_templatehandle = rffi.llexternal(
- "cppyy_get_templatehandle",
- [rffi.CCHARP], C_TYPEHANDLE,
- compilation_info=eci)
-
-c_allocate = rffi.llexternal(
- "cppyy_allocate",
- [C_TYPEHANDLE], rffi.VOIDP,
- compilation_info=eci)
-c_deallocate = rffi.llexternal(
- "cppyy_deallocate",
- [C_TYPEHANDLE, C_OBJECT], lltype.Void,
- compilation_info=eci)
-
-c_destruct = rffi.llexternal(
- "cppyy_destruct",
- [C_TYPEHANDLE, C_OBJECT], lltype.Void,
- compilation_info=eci)
-
-
-c_is_namespace = rffi.llexternal(
- "cppyy_is_namespace",
- [C_TYPEHANDLE], rffi.INT,
- compilation_info=eci)
-
-
-c_final_name = rffi.llexternal(
- "cppyy_final_name",
- [C_TYPEHANDLE], rffi.CCHARP,
- compilation_info=eci)
-
-c_num_bases = rffi.llexternal(
- "cppyy_num_bases",
- [C_TYPEHANDLE], rffi.INT,
- compilation_info=eci)
-
-c_base_name = rffi.llexternal(
- "cppyy_base_name",
- [C_TYPEHANDLE, rffi.INT], rffi.CCHARP,
- compilation_info=eci)
-
-c_is_subtype = rffi.llexternal(
- "cppyy_is_subtype",
- [C_TYPEHANDLE, C_TYPEHANDLE], rffi.INT,
- compilation_info=eci,
- elidable_function=True)
-c_base_offset = rffi.llexternal(
- "cppyy_base_offset",
- [C_TYPEHANDLE, C_TYPEHANDLE, C_OBJECT], rffi.SIZE_T,
- compilation_info=eci,
- elidable_function=True)
-
-
-c_call_v = rffi.llexternal(
- "cppyy_call_v",
- [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], lltype.Void,
- compilation_info=eci)
-c_call_o = rffi.llexternal(
- "cppyy_call_o",
- [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP, C_TYPEHANDLE], rffi.LONG,
- compilation_info=eci)
-c_call_b = rffi.llexternal(
- "cppyy_call_b",
- [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], rffi.INT,
- compilation_info=eci)
-c_call_c = rffi.llexternal(
- "cppyy_call_c",
- [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], rffi.CHAR,
- compilation_info=eci)
-c_call_h = rffi.llexternal(
- "cppyy_call_h",
- [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], rffi.SHORT,
- compilation_info=eci)
-c_call_i = rffi.llexternal(
- "cppyy_call_i",
- [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], rffi.INT,
- compilation_info=eci)
-c_call_l = rffi.llexternal(
- "cppyy_call_l",
- [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], rffi.LONG,
- compilation_info=eci)
-c_call_f = rffi.llexternal(
- "cppyy_call_f",
- [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], rffi.DOUBLE,
- compilation_info=eci)
-c_call_d = rffi.llexternal(
- "cppyy_call_d",
- [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], rffi.DOUBLE,
- compilation_info=eci)
-
-
-c_get_methptr_getter = rffi.llexternal(
- "cppyy_get_methptr_getter",
- [C_TYPEHANDLE, rffi.INT], C_METHPTRGETTER_PTR,
- compilation_info=eci)
-
-
-c_allocate_function_args = rffi.llexternal(
- "cppyy_allocate_function_args",
- [rffi.SIZE_T], rffi.VOIDP,
- compilation_info=eci)
-
-c_deallocate_function_args = rffi.llexternal(
- "cppyy_deallocate_function_args",
- [rffi.VOIDP], lltype.Void,
- compilation_info=eci)
-
-c_function_arg_sizeof = rffi.llexternal(
- "cppyy_function_arg_sizeof",
- [], rffi.SIZE_T,
- compilation_info=eci,
- elidable_function=True)
-
-c_function_arg_typeoffset = rffi.llexternal(
- "cppyy_function_arg_typeoffset",
- [], rffi.SIZE_T,
- compilation_info=eci,
- elidable_function=True)
-
-
-c_num_methods = rffi.llexternal(
- "cppyy_num_methods",
- [C_TYPEHANDLE], rffi.INT,
- compilation_info=eci)
-c_method_name = rffi.llexternal(
- "cppyy_method_name",
- [C_TYPEHANDLE, rffi.INT], rffi.CCHARP,
- compilation_info=eci)
-c_method_result_type = rffi.llexternal(
- "cppyy_method_result_type",
- [C_TYPEHANDLE, rffi.INT], rffi.CCHARP,
- compilation_info=eci)
-c_method_num_args = rffi.llexternal(
- "cppyy_method_num_args",
- [C_TYPEHANDLE, rffi.INT], rffi.INT,
- compilation_info=eci)
-c_method_req_args = rffi.llexternal(
- "cppyy_method_req_args",
- [C_TYPEHANDLE, rffi.INT], rffi.INT,
- compilation_info=eci)
-c_method_arg_type = rffi.llexternal(
- "cppyy_method_arg_type",
- [C_TYPEHANDLE, rffi.INT, rffi.INT], rffi.CCHARP,
- compilation_info=eci)
-
-c_is_constructor = rffi.llexternal(
- "cppyy_is_constructor",
- [C_TYPEHANDLE, rffi.INT], rffi.INT,
- compilation_info=eci)
-c_is_staticmethod = rffi.llexternal(
- "cppyy_is_staticmethod",
- [C_TYPEHANDLE, rffi.INT], rffi.INT,
- compilation_info=eci)
-
-c_num_data_members = rffi.llexternal(
- "cppyy_num_data_members",
- [C_TYPEHANDLE], rffi.INT,
- compilation_info=eci)
-c_data_member_name = rffi.llexternal(
- "cppyy_data_member_name",
- [C_TYPEHANDLE, rffi.INT], rffi.CCHARP,
- compilation_info=eci)
-c_data_member_type = rffi.llexternal(
- "cppyy_data_member_type",
- [C_TYPEHANDLE, rffi.INT], rffi.CCHARP,
- compilation_info=eci)
-c_data_member_offset = rffi.llexternal(
- "cppyy_data_member_offset",
- [C_TYPEHANDLE, rffi.INT], rffi.SIZE_T,
- compilation_info=eci)
-
-c_is_staticdata = rffi.llexternal(
- "cppyy_is_staticdata",
- [C_TYPEHANDLE, rffi.INT], rffi.INT,
- compilation_info=eci)
-
-c_free = rffi.llexternal(
- "cppyy_free",
- [rffi.VOIDP], lltype.Void,
- compilation_info=eci)
-
-def charp2str_free(charp):
- string = rffi.charp2str(charp)
- voidp = rffi.cast(rffi.VOIDP, charp)
- c_free(voidp)
- return string
diff --git a/pypy/module/cppyy/capi/reflex_capi.py b/pypy/module/cppyy/capi/reflex_capi.py
--- a/pypy/module/cppyy/capi/reflex_capi.py
+++ b/pypy/module/cppyy/capi/reflex_capi.py
@@ -1,8 +1,9 @@
import py, os
+from pypy.rlib import libffi
from pypy.translator.tool.cbuild import ExternalCompilationInfo
-from pypy.rpython.lltypesystem import rffi, lltype
-from pypy.rlib import libffi, jit
+
+__all__ = ['eci', 'c_load_dictionary']
pkgpath = py.path.local(__file__).dirpath().join(os.pardir)
srcpath = pkgpath.join("src")
@@ -24,221 +25,5 @@
use_cpp_linker=True,
)
-C_TYPEHANDLE = rffi.VOIDP
-C_OBJECT = rffi.VOIDP
-
-C_METHPTRGETTER = lltype.FuncType([C_OBJECT], rffi.VOIDP)
-C_METHPTRGETTER_PTR = lltype.Ptr(C_METHPTRGETTER)
-
-c_get_typehandle = rffi.llexternal(
- "cppyy_get_typehandle",
- [rffi.CCHARP], C_TYPEHANDLE,
- compilation_info=eci)
-
-c_get_templatehandle = rffi.llexternal(
- "cppyy_get_templatehandle",
- [rffi.CCHARP], C_TYPEHANDLE,
- compilation_info=eci)
-
-c_allocate = rffi.llexternal(
- "cppyy_allocate",
- [C_TYPEHANDLE], rffi.VOIDP,
- compilation_info=eci)
-c_deallocate = rffi.llexternal(
- "cppyy_deallocate",
- [C_TYPEHANDLE, C_OBJECT], lltype.Void,
- compilation_info=eci)
-
-c_destruct = rffi.llexternal(
- "cppyy_destruct",
- [C_TYPEHANDLE, C_OBJECT], lltype.Void,
- compilation_info=eci)
-
-
-c_is_namespace = rffi.llexternal(
- "cppyy_is_namespace",
- [C_TYPEHANDLE], rffi.INT,
- compilation_info=eci)
-
-
-c_final_name = rffi.llexternal(
- "cppyy_final_name",
- [C_TYPEHANDLE], rffi.CCHARP,
- compilation_info=eci)
-
-c_num_bases = rffi.llexternal(
- "cppyy_num_bases",
- [C_TYPEHANDLE], rffi.INT,
- compilation_info=eci)
-
-c_base_name = rffi.llexternal(
- "cppyy_base_name",
- [C_TYPEHANDLE, rffi.INT], rffi.CCHARP,
- compilation_info=eci)
-
-_c_is_subtype = rffi.llexternal(
- "cppyy_is_subtype",
- [C_TYPEHANDLE, C_TYPEHANDLE], rffi.INT,
- compilation_info=eci,
- elidable_function=True)
-
- at jit.elidable_promote()
-def c_is_subtype(td, tb):
- if td == tb:
- return 1
- return _c_is_subtype(td, tb)
-
-_c_base_offset = rffi.llexternal(
- "cppyy_base_offset",
- [C_TYPEHANDLE, C_TYPEHANDLE, C_OBJECT], rffi.SIZE_T,
- compilation_info=eci,
- elidable_function=True)
-
- at jit.elidable_promote()
-def c_base_offset(td, tb, address):
- if td == tb:
- return 0
- return _c_base_offset(td, tb, address)
-
-
-c_call_v = rffi.llexternal(
- "cppyy_call_v",
- [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], lltype.Void,
- compilation_info=eci)
-c_call_o = rffi.llexternal(
- "cppyy_call_o",
- [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP, C_TYPEHANDLE], rffi.LONG,
- compilation_info=eci)
-c_call_b = rffi.llexternal(
- "cppyy_call_b",
- [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], rffi.INT,
- compilation_info=eci)
-c_call_c = rffi.llexternal(
- "cppyy_call_c",
- [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], rffi.CHAR,
- compilation_info=eci)
-c_call_h = rffi.llexternal(
- "cppyy_call_h",
- [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], rffi.SHORT,
- compilation_info=eci)
-c_call_i = rffi.llexternal(
- "cppyy_call_i",
- [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], rffi.INT,
- compilation_info=eci)
-c_call_l = rffi.llexternal(
- "cppyy_call_l",
- [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], rffi.LONG,
- compilation_info=eci)
-c_call_f = rffi.llexternal(
- "cppyy_call_f",
- [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], rffi.DOUBLE,
- compilation_info=eci)
-c_call_d = rffi.llexternal(
- "cppyy_call_d",
- [C_TYPEHANDLE, rffi.INT, C_OBJECT, rffi.INT, rffi.VOIDP], rffi.DOUBLE,
- compilation_info=eci)
-
-
-c_get_methptr_getter = rffi.llexternal(
- "cppyy_get_methptr_getter",
- [C_TYPEHANDLE, rffi.INT], C_METHPTRGETTER_PTR,
- compilation_info=eci)
-
-
-c_allocate_function_args = rffi.llexternal(
- "cppyy_allocate_function_args",
- [rffi.SIZE_T], rffi.VOIDP,
- compilation_info=eci)
-
-c_deallocate_function_args = rffi.llexternal(
- "cppyy_deallocate_function_args",
- [rffi.VOIDP], lltype.Void,
- compilation_info=eci)
-
-c_function_arg_sizeof = rffi.llexternal(
- "cppyy_function_arg_sizeof",
- [], rffi.SIZE_T,
- compilation_info=eci,
- elidable_function=True)
-
-c_function_arg_typeoffset = rffi.llexternal(
- "cppyy_function_arg_typeoffset",
- [], rffi.SIZE_T,
- compilation_info=eci,
- elidable_function=True)
-
-
-c_num_methods = rffi.llexternal(
- "cppyy_num_methods",
- [C_TYPEHANDLE], rffi.INT,
- compilation_info=eci)
-c_method_name = rffi.llexternal(
- "cppyy_method_name",
- [C_TYPEHANDLE, rffi.INT], rffi.CCHARP,
- compilation_info=eci)
-c_method_result_type = rffi.llexternal(
- "cppyy_method_result_type",
- [C_TYPEHANDLE, rffi.INT], rffi.CCHARP,
- compilation_info=eci)
-c_method_num_args = rffi.llexternal(
- "cppyy_method_num_args",
- [C_TYPEHANDLE, rffi.INT], rffi.INT,
- compilation_info=eci)
-c_method_req_args = rffi.llexternal(
- "cppyy_method_req_args",
- [C_TYPEHANDLE, rffi.INT], rffi.INT,
- compilation_info=eci)
-c_method_arg_type = rffi.llexternal(
- "cppyy_method_arg_type",
- [C_TYPEHANDLE, rffi.INT, rffi.INT], rffi.CCHARP,
- compilation_info=eci)
-
-c_is_constructor = rffi.llexternal(
- "cppyy_is_constructor",
- [C_TYPEHANDLE, rffi.INT], rffi.INT,
- compilation_info=eci)
-c_is_staticmethod = rffi.llexternal(
- "cppyy_is_staticmethod",
- [C_TYPEHANDLE, rffi.INT], rffi.INT,
- compilation_info=eci)
-
-c_num_data_members = rffi.llexternal(
- "cppyy_num_data_members",
- [C_TYPEHANDLE], rffi.INT,
- compilation_info=eci)
-c_data_member_name = rffi.llexternal(
- "cppyy_data_member_name",
- [C_TYPEHANDLE, rffi.INT], rffi.CCHARP,
- compilation_info=eci)
-c_data_member_type = rffi.llexternal(
- "cppyy_data_member_type",
- [C_TYPEHANDLE, rffi.INT], rffi.CCHARP,
- compilation_info=eci)
-c_data_member_offset = rffi.llexternal(
- "cppyy_data_member_offset",
- [C_TYPEHANDLE, rffi.INT], rffi.SIZE_T,
- compilation_info=eci)
-
-c_is_publicdata = rffi.llexternal(
- "cppyy_is_publicdata",
- [C_TYPEHANDLE, rffi.INT], rffi.INT,
- compilation_info=eci)
-
-c_is_staticdata = rffi.llexternal(
- "cppyy_is_staticdata",
- [C_TYPEHANDLE, rffi.INT], rffi.INT,
- compilation_info=eci)
-
-c_free = rffi.llexternal(
- "cppyy_free",
- [rffi.VOIDP], lltype.Void,
- compilation_info=eci)
-
-def charp2str_free(charp):
- string = rffi.charp2str(charp)
- voidp = rffi.cast(rffi.VOIDP, charp)
- c_free(voidp)
- return string
-
def c_load_dictionary(name):
return libffi.CDLL(name)
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
@@ -407,6 +407,12 @@
}
+int cppyy_is_publicdata(cppyy_typehandle_t handle, int data_member_index) {
+ TClassRef cr = type_from_handle(handle);
+ TDataMember* m = (TDataMember*)cr->GetListOfDataMembers()->At(data_member_index);
+ return m->Property() & G__BIT_ISPUBLIC;
+}
+
int cppyy_is_staticdata(cppyy_typehandle_t handle, int data_member_index) {
TClassRef cr = type_from_handle(handle);
TDataMember* m = (TDataMember*)cr->GetListOfDataMembers()->At(data_member_index);
More information about the pypy-commit
mailing list