ffi: use `AMethPropdef` instead of `AExternPropdef`
authorJean Privat <jean@pryen.org>
Tue, 9 Sep 2014 19:42:21 +0000 (15:42 -0400)
committerJean Privat <jean@pryen.org>
Tue, 9 Sep 2014 19:42:21 +0000 (15:42 -0400)
Signed-off-by: Jean Privat <jean@pryen.org>

src/common_ffi/common_ffi.nit
src/common_ffi/java.nit
src/compiler/compiler_ffi.nit
src/nitni/nitni_callbacks.nit

index cb9c244..814c882 100644 (file)
@@ -135,7 +135,7 @@ redef class VerifyNitniCallbacksPhase
        do
                super
 
-               if not npropdef isa AExternPropdef then return
+               if not npropdef isa AMethPropdef then return
 
                var code_block = npropdef.n_extern_code_block
                if code_block == null then return
index 571c319..d3a7b68 100644 (file)
@@ -251,7 +251,7 @@ redef class MModule
        private fun impl_java_class_name: String do return "Nit_{name}"
 end
 
-redef class AExternPropdef
+redef class AMethPropdef
        redef fun verify_nitni_callbacks(toolcontext)
        do
                super
index e489bdf..76e1044 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)
index cb75bc8..8af9779 100644 (file)
@@ -33,7 +33,10 @@ class VerifyNitniCallbacksPhase
 
        redef fun process_npropdef(npropdef)
        do
-               if not npropdef isa AExternPropdef then return
+               if not npropdef isa AMethPropdef then return
+               var mpropdef = npropdef.mpropdef
+               if mpropdef == null then return
+               if not mpropdef.is_extern then return
 
                npropdef.verify_nitni_callbacks(toolcontext)
        end
@@ -80,7 +83,7 @@ class ForeignCallbackSet
        end
 end
 
-redef class AExternPropdef
+redef class AMethPropdef
        private var foreign_callbacks_cache: nullable ForeignCallbackSet = null
 
        # All foreign callbacks from this method
@@ -139,6 +142,8 @@ redef class AExternPropdef
 
        redef fun accept_rapid_type_visitor(v)
        do
+               if foreign_callbacks_cache == null then return
+
                for cb in foreign_callbacks.callbacks do v.add_send(cb.recv_mtype, cb.mproperty.as(MMethod))
                for cast in foreign_callbacks.casts do v.add_cast_type(cast.to)
                for sup in foreign_callbacks.supers do