[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