import table_computation
import compiling_base
-import icode_generator
+private import icode_generator
private import compiling_global
private import compiling_icode
+private import analysis
redef class Program
# The type of code generation to use
var v = new CompilerVisitor(self, cprogram)
v.add_decl("#include <nit_common.h>")
- var native_name = location.file.filename.strip_extension(".nit")
- var native_header = native_name + "_nit.h"
- if native_header.file_exists then
- v.add_decl("#include <{native_header.basename("")}>")
- cprogram.include_dirs.add("-I {native_name.dirname}")
+ if is_extern_hybrid then
+ # adds reference to frontier files
+ # if module uses the native interface
+ var nitni_header_name = "{name}._nitni.h"
+ v.add_decl("#include \"{nitni_header_name}\"")
+ var nitni_body_name = "{name}._nitni.c"
+ cprogram.files.add( "{cprogram.compdir}/{nitni_body_name}" )
+
+ # add reference to extern implementation
+ var native_name = location.file.filename.strip_extension(".nit")
+ var native_body = native_name + ".nit.c"
+ if native_body.file_exists then
+ cprogram.files.add(native_body)
+ else # try old style filename
+ native_body = native_name + "_nit.c"
+ if native_body.file_exists then cprogram.files.add(native_body)
+ end
+ if uses_ffi then
+ var ffi_header_name = "{cname}._ffi.h"
+ v.add_decl("#include \"{ffi_header_name}\"")
+ var ffi_body_name = "{cname}._ffi.c"
+ cprogram.files.add( "{cprogram.compdir}/{ffi_body_name}" )
+ end
end
- var native_body = native_name + "_nit.c"
- if native_body.file_exists then cprogram.files.add(native_body)
declare_class_tables_to_c(v)
compile_mod_to_c(v)