nitg*: extern classes a polymorph in Nit, and unboxed only for extern methods
[nit.git] / src / modelize_class.nit
index 06e04b5..ff0295f 100644 (file)
@@ -99,6 +99,9 @@ redef class ModelBuilder
                nclassdef.mclass = mclass
                if not nmodule.mclass2nclassdef.has_key(mclass) then
                        nmodule.mclass2nclassdef[mclass] = nclassdef
+                       nclassdef.all_defs = [nclassdef]
+               else
+                       nmodule.mclass2nclassdef[mclass].all_defs.add(nclassdef)
                end
        end
 
@@ -151,6 +154,9 @@ redef class ModelBuilder
                                                bounds.add(bound)
                                                nfd.bound = bound
                                        end
+                                       if bound isa MClassType and bound.mclass.kind == enum_kind then
+                                               warning(nfdt, "Warning: Useless formal parameter type since `{bound}` cannnot have subclasses.")
+                                       end
                                else if mclass.mclassdefs.is_empty then
                                        # No bound, then implicitely bound by nullable Object
                                        var bound = objectclass.mclass_type.as_nullable
@@ -377,7 +383,10 @@ redef class ModelBuilder
                                assert mtype isa MClassType
                                var sc = mtype.mclass
                                if not parents.has(sc) or sc == objectclass then
-                                       warning(ntype, "Warning: superfluous super-class {mtype} in class {mclassdef.mclass}.")
+                                       # Skip the warning on generated code
+                                       if ntype.location.file != null and not ntype.location.file.filename.is_empty then
+                                               warning(ntype, "Warning: superfluous super-class {mtype} in class {mclassdef.mclass}.")
+                                       end
                                else if not seen_parents.has_key(sc) then
                                        seen_parents[sc] = ntype
                                else
@@ -513,6 +522,8 @@ redef class AClassdef
        var mclass: nullable MClass
        # The associated MClassDef once build by a `ModelBuilder`
        var mclassdef: nullable MClassDef
+       # All (self and other) definitions for the same mclassdef
+       var all_defs: nullable Array[AClassdef]
 end
 
 redef class AClasskind