X-Git-Url: http://nitlanguage.org diff --git a/src/compiler_ffi.nit b/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 --- a/src/compiler_ffi.nit +++ b/src/compiler/compiler_ffi.nit @@ -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")