engines: process named arguments
[nit.git] / src / compiler / compiler_ffi.nit
index b6cb920..42423f9 100644 (file)
@@ -27,8 +27,7 @@ redef class MModule
 
        private fun nmodule(v: AbstractCompilerVisitor): nullable AModule
        do
-               var m2n = v.compiler.modelbuilder.mmodule2nmodule
-               return m2n.get_or_null(self)
+               return v.compiler.modelbuilder.mmodule2node(self)
        end
 
        redef fun finalize_ffi(compiler: AbstractCompiler)
@@ -44,16 +43,17 @@ redef class MModule
 
                ensure_compile_nitni_base(v)
 
-               nitni_ccu.header_c_types.add("#include \"{name}._ffi.h\"\n")
+               nitni_ccu.header_c_types.add("#include \"{c_name}._ffi.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.modelbuilder.compile_dir)
 
                for file in nitni_ccu.files do
-                       var f = new ExternCFile(file, c_compiler_options)
+                       var f = new ExternCFile(file, cflags)
                        f.pkgconfigs.add_all pkgconfigs
                        v.compiler.extern_bodies.add(f)
                end
@@ -77,11 +77,8 @@ extern void nitni_global_ref_decr(void*);
 
        redef fun collect_linker_libs
        do
-               var s = c_linker_options
-               if s.is_empty then return null
-               var res = new ArraySet[String]
-               res.add s
-               return res
+               if not self.ldflags.keys.has("") then return null
+               return self.ldflags[""]
        end
 
        private var compiled_callbacks = new Array[NitniCallback]
@@ -100,7 +97,7 @@ redef class AMethPropdef
        do
                var mmodule = mpropdef.mclassdef.mmodule
                var mainmodule = v.compiler.mainmodule
-               var amodule = v.compiler.modelbuilder.mmodule2nmodule[mmodule]
+               var amodule = v.compiler.modelbuilder.mmodule2node(mmodule)
                var mclass_type = mpropdef.mclassdef.bound_mtype
 
                # Declare as extern
@@ -256,11 +253,11 @@ end
 redef class CCompilationUnit
        fun write_as_nitni(mmodule: MModule, compdir: String)
        do
-               var base_name = "{mmodule.name}._nitni"
+               var base_name = "{mmodule.c_name}._nitni"
 
                var h_file = "{base_name}.h"
                write_header_to_file( mmodule, "{compdir}/{h_file}", new Array[String],
-                       "{mmodule.cname.to_s.to_upper}_NITG_NITNI_H")
+                       "{mmodule.c_name.to_s.to_upper}_NITG_NITNI_H")
 
                var c_file = "{base_name}.c"
                write_body_to_file( mmodule, "{compdir}/{c_file}", ["\"{h_file}\""] )
@@ -391,7 +388,7 @@ redef class MExplicitCall
                var recv_var = null
                if mproperty.is_init then
                        var recv_mtype = recv_mtype
-                       recv_var = nitni_visitor.init_instance(recv_mtype)
+                       recv_var = nitni_visitor.init_instance_or_extern(recv_mtype)
                        nitni_visitor.add("{mtype.ctype} recv /* var self: {mtype} */;")
                        nitni_visitor.add("recv = {recv_var};")
                else