model: new class MErrorType as using MBottomType was abuse
[nit.git] / src / modelize / modelize_class.nit
index f5ed779..8164668 100644 (file)
@@ -104,11 +104,6 @@ redef class ModelBuilder
                end
 
                if mclass == null then
-                       if nclassdef isa AStdClassdef and nclassdef.n_kwredef != null then
-                               error(nclassdef, "Redef Error: no imported class `{name}` to refine.")
-                               return
-                       end
-
                        # Check for conflicting class full-names in the package
                        if mmodule.mgroup != null and mvisibility >= protected_visibility then
                                var mclasses = model.get_mclasses_by_name(name)
@@ -233,7 +228,7 @@ redef class ModelBuilder
                if mclassdef.is_intro then
                        self.toolcontext.info("{mclassdef} introduces new {mclass.kind} {mclass.full_name}", 3)
                else
-                       self.toolcontext.info("{mclassdef} refine {mclass.kind} {mclass.full_name}", 3)
+                       self.toolcontext.info("{mclassdef} refines {mclass.kind} {mclass.full_name}", 3)
                end
        end
 
@@ -279,10 +274,19 @@ redef class ModelBuilder
                if mclassdef.is_intro and objectclass != null then
                        if mclass.kind == extern_kind and mclass.name != "Pointer" then
                                # it is an extern class, but not a Pointer
+                               if pointerclass == null then
+                                       error(nclassdef, "Error: `Pointer` must be defined first.")
+                                       return
+                               end
                                if specpointer then supertypes.add pointerclass.mclass_type
-                       else if specobject and mclass.name != "Object" then
-                               # it is a standard class without super class (but is not Object)
-                               supertypes.add objectclass.mclass_type
+                       else if specobject then
+                               if mclass.name != "Object" then
+                                       # it is a standard class without super class (but is not Object)
+                                       supertypes.add objectclass.mclass_type
+                               else if mclass.kind != interface_kind then
+                                       error(nclassdef, "Error: `Object` must be an {interface_kind}.")
+                                       return
+                               end
                        end
                end
 
@@ -308,7 +312,6 @@ redef class ModelBuilder
        end
 
        # Build the classes of the module `nmodule`.
-       # REQUIRE: classes of imported modules are already build. (let `phase` do the job)
        private fun build_classes(nmodule: AModule)
        do
                # Force building recursively