nitc :: MModule :: finalize_ffi
# Write FFI and nitni results to file
fun finalize_ffi(c: AbstractCompiler) do end
src/compiler/abstract_compiler.nit:4652,2--4653,45
redef fun finalize_ffi(compiler)
do
if not uses_ffi then return
var v = compiler.new_visitor
var n = nmodule(v)
if n == null then return
n.ensure_compile_ffi_wrapper
finalize_ffi_wrapper(v.compiler.toolchain.compile_dir, v.compiler.mainmodule)
for file in ffi_files do v.compiler.extern_bodies.add(file)
ensure_compile_nitni_base(v)
nitni_ccu.header_c_types.add("#include \"{c_name}._ffi.h\"\n")
nitni_ccu.header_c_types.add("#include <stdint.h>\n")
nitni_ccu.header_c_types.add """
extern void nitni_global_ref_incr(void*);
extern void nitni_global_ref_decr(void*);
"""
var cflags = self.cflags[""].join(" ")
nitni_ccu.write_as_nitni(self, v.compiler.toolchain.compile_dir)
for file in nitni_ccu.files do
var f = new ExternCFile(file.basename, cflags)
f.pkgconfigs.add_all pkgconfigs
v.compiler.extern_bodies.add(f)
end
# reset FFI things so the next compilation job, if any, starts with a clean context
# FIXME clean and rationalize this
nitni_ccu = null
compiled_ffi_methods.clear
ffi_ccu = null
ffi_files.clear
end
src/compiler/compiler_ffi/light.nit:32,2--67,4
redef fun finalize_ffi(compiler: AbstractCompiler)
do
if not uses_ffi then return
super
compiled_callbacks.clear
#Do not reset `foreign_callbacks` and `ffi_callbacks` because they are computed in previous phases
end
src/compiler/compiler_ffi/compiler_ffi.nit:26,2--34,4