return m2n.get_or_null(self)
end
- redef fun finalize_ffi(v: AbstractCompilerVisitor, modelbuilder: ModelBuilder)
+ redef fun finalize_ffi(compiler: AbstractCompiler)
do
+ if not uses_ffi then return
+
+ var v = compiler.new_visitor
var n = nmodule(v)
if n == null then return
n.finalize_ffi_wrapper(v.compiler.modelbuilder.compile_dir, v.compiler.mainmodule)
for file in n.ffi_files do v.compiler.extern_bodies.add(file)
- end
-
- fun ensure_compile_nitni_base(v: AbstractCompilerVisitor)
- do
- if nitni_ccu != null then return
-
- nitni_ccu = new CCompilationUnit
- end
-
- redef fun finalize_nitni(v: AbstractCompilerVisitor)
- do
- var n = nmodule(v)
- if n == null then return
ensure_compile_nitni_base(v)
end
end
+ fun ensure_compile_nitni_base(v: AbstractCompilerVisitor)
+ do
+ if nitni_ccu != null then return
+
+ nitni_ccu = new CCompilationUnit
+ end
+
redef fun collect_linker_libs
do
var s = c_linker_options
end
end
-redef class AExternPropdef
+redef class AMethPropdef
fun compile_ffi_support_to_c(v: AbstractCompilerVisitor)
do
var mmodule = mpropdef.mclassdef.mmodule
# FFI part
compile_ffi_method(amodule)
+ assert self isa AExternPropdef
+
# nitni - Compile missing callbacks
mmodule.ensure_compile_nitni_base(v)
var ccu = mmodule.nitni_ccu.as(not null)
# manage nitni callback set
mmodule.foreign_callbacks.join(foreign_callbacks)
end
-end
-redef class AExternMethPropdef
- redef fun compile_to_c(v, mpropdef, arguments)
+ redef fun compile_externmeth_to_c(v, mpropdef, arguments)
do
var mmodule = mpropdef.mclassdef.mmodule
var amodule = v.compiler.modelbuilder.mmodule2nmodule[mmodule]
compile_ffi_support_to_c(v)
end
-end
-redef class AExternInitPropdef
- redef fun compile_to_c(v, mpropdef, arguments)
+ redef fun compile_externinit_to_c(v, mpropdef, arguments)
do
var mmodule = mpropdef.mclassdef.mmodule
var amodule = v.compiler.modelbuilder.mmodule2nmodule[mmodule]
end
amodule.mmodule.uses_ffi = true
-
var mclass_type = mpropdef.mclassdef.bound_mtype
var externname = mpropdef.mproperty.build_cname(mpropdef.mclassdef.bound_mtype, mmodule, "___impl", long_signature)