Merge branch 'master' into polymorphic_extern_classes
[nit.git] / src / compiler / compiler_ffi.nit
similarity index 98%
rename from src/compiler_ffi.nit
rename to src/compiler/compiler_ffi.nit
index 4c55f65..331955e 100644 (file)
@@ -110,8 +110,6 @@ redef class AMethPropdef
                amodule.ensure_compile_ffi_wrapper
                compile_ffi_method(mmodule)
 
-               assert self isa AExternPropdef
-
                # nitni - Compile missing callbacks
                mmodule.ensure_compile_nitni_base(v)
                var ccu = mmodule.nitni_ccu.as(not null)
@@ -144,15 +142,10 @@ redef class AMethPropdef
 
        redef fun compile_externmeth_to_c(v, mpropdef, arguments)
        do
-               var mmodule = mpropdef.mclassdef.mmodule
-
                # if using the old native interface fallback on previous implementation
-               var nextern = self.n_extern
-               if nextern != null then
-                       super
-                       return
-               end
+               if n_extern_code_block == null then return super
 
+               var mmodule = mpropdef.mclassdef.mmodule
                mmodule.uses_ffi = true
 
                var mclass_type = mpropdef.mclassdef.bound_mtype
@@ -205,19 +198,15 @@ redef class AMethPropdef
                end
 
                compile_ffi_support_to_c(v)
+               return true
        end
 
        redef fun compile_externinit_to_c(v, mpropdef, arguments)
        do
-               var mmodule = mpropdef.mclassdef.mmodule
-
                # if using the old native interface fallback on previous implementation
-               var nextern = self.n_extern
-               if nextern != null then
-                       super
-                       return
-               end
+               if n_extern_code_block == null then return super
 
+               var mmodule = mpropdef.mclassdef.mmodule
                mmodule.uses_ffi = true
 
                var mclass_type = mpropdef.mclassdef.bound_mtype
@@ -259,6 +248,7 @@ redef class AMethPropdef
                v.ret(recv_var)
 
                compile_ffi_support_to_c(v)
+               return true
        end
 end
 
@@ -346,7 +336,7 @@ redef class MNullableType
                var base_cname = "null_{mtype.mangled_cname}"
                var full_cname = "NIT_NULL___{base_cname}"
 
-               # In nitni files, declare internal function as extern 
+               # In nitni files, declare internal function as extern
                var full_friendly_csignature = "{cname_blind} {full_cname}()"
                ccu.header_decl.add("extern {full_friendly_csignature};\n")
 
@@ -378,7 +368,7 @@ redef class MExplicitCall
                var mproperty = mproperty
                assert mproperty isa MMethod
 
-               # In nitni files, declare internal function as extern 
+               # In nitni files, declare internal function as extern
                var full_friendly_csignature = mproperty.build_csignature(recv_mtype, v.compiler.mainmodule, null, long_signature, internal_call_context)
                ccu.header_decl.add("extern {full_friendly_csignature};\n")
 
@@ -496,7 +486,7 @@ redef class MExplicitCast
                ## check type
                #
 
-               # In nitni files, declare internal function as extern 
+               # In nitni files, declare internal function as extern
                var full_friendly_csignature = "int {v.compiler.mainmodule.name }___{from.mangled_cname}_is_a_{to.mangled_cname}({from.cname_blind})"
                ccu.header_decl.add("extern {full_friendly_csignature};\n")