def test_exportstruct(): from pypy.rlib.exports import export_struct def f(): return 42 FOO = Struct("FOO", ("field1", Signed)) foo = malloc(FOO, flavor="raw") foo.field1 = 43 export_struct("BarStruct", foo._obj) t = Translation(f, [], backend="c") t.annotate() compiled_fn = t.compile_c() if py.test.config.option.view: t.view() assert ' BarStruct ' in t.driver.cbuilder.c_source_filename.read() free(foo, flavor="raw")
def setup_library(space): "NOT_RPYTHON" from pypy.module.cpyext.pyobject import make_ref export_symbols = list(FUNCTIONS) + SYMBOLS_C + list(GLOBALS) from pypy.translator.c.database import LowLevelDatabase db = LowLevelDatabase() generate_macros(export_symbols, rename=False, do_deref=False) functions = generate_decls_and_callbacks(db, [], api_struct=False) code = "#include <Python.h>\n" + "\n".join(functions) eci = build_eci(False, export_symbols, code) space.fromcache(State).install_dll(eci) run_bootstrap_functions(space) setup_va_functions(eci) # populate static data for name, (typ, expr) in GLOBALS.iteritems(): name = name.replace("#", "") if name.startswith("PyExc_"): name = "_" + name from pypy.module import cpyext w_obj = eval(expr) if typ in ("PyObject*", "PyTypeObject*"): struct_ptr = make_ref(space, w_obj) elif typ == "PyDateTime_CAPI*": continue else: assert False, "Unknown static data: %s %s" % (typ, name) struct = rffi.cast(get_structtype_for_ctype(typ), struct_ptr)._obj struct._compilation_info = eci export_struct(name, struct) for name, func in FUNCTIONS.iteritems(): deco = entrypoint("cpyext", func.argtypes, name, relax=True) deco(func.get_wrapper(space)) setup_init_functions(eci) trunk_include = pypydir.dirpath() / "include" copy_header_files(trunk_include)
def setup_library(space): "NOT_RPYTHON" from pypy.module.cpyext.pyobject import make_ref export_symbols = list(FUNCTIONS) + SYMBOLS_C + list(GLOBALS) from pypy.translator.c.database import LowLevelDatabase db = LowLevelDatabase() generate_macros(export_symbols, rename=False, do_deref=False) functions = generate_decls_and_callbacks(db, [], api_struct=False) code = "#include <Python.h>\n" + "\n".join(functions) eci = build_eci(False, export_symbols, code) space.fromcache(State).install_dll(eci) run_bootstrap_functions(space) setup_va_functions(eci) # populate static data for name, (typ, expr) in GLOBALS.iteritems(): name = name.replace("#", "") if name.startswith('PyExc_'): name = '_' + name from pypy.module import cpyext w_obj = eval(expr) if typ in ('PyObject*', 'PyTypeObject*'): struct_ptr = make_ref(space, w_obj) elif typ == 'PyDateTime_CAPI*': continue else: assert False, "Unknown static data: %s %s" % (typ, name) struct = rffi.cast(get_structtype_for_ctype(typ), struct_ptr)._obj struct._compilation_info = eci export_struct(name, struct) for name, func in FUNCTIONS.iteritems(): deco = entrypoint("cpyext", func.argtypes, name, relax=True) deco(func.get_wrapper(space)) setup_init_functions(eci) trunk_include = pypydir.dirpath() / 'include' copy_header_files(trunk_include)