X-Git-Url: http://nitlanguage.org diff --git a/src/modelize_class.nit b/src/modelize_class.nit index 483036b..34b5c28 100644 --- a/src/modelize_class.nit +++ b/src/modelize_class.nit @@ -76,6 +76,10 @@ redef class ModelBuilder var mclass = try_get_mclass_by_name(nclassdef, mmodule, name) 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 mclass = new MClass(mmodule, name, arity, mkind, mvisibility) #print "new class {mclass}" else if nclassdef isa AStdClassdef and nmodule.mclass2nclassdef.has_key(mclass) then @@ -116,6 +120,10 @@ redef class ModelBuilder error(nfd, "Error: A formal parameter type `{ptname}' already exists") return end + for c in ptname do if c >= 'a' and c<= 'z' then + warning(nfd, "Warning: lowercase in the formal parameter type {ptname}") + break + end names.add(ptname) nfd.mtype = mclass.mclass_type.arguments[i].as(MParameterType) end @@ -153,6 +161,11 @@ redef class ModelBuilder nclassdef.mclassdef = mclassdef self.mclassdef2nclassdef[mclassdef] = nclassdef + if nclassdef isa AStdClassdef then + var ndoc = nclassdef.n_doc + if ndoc != null then mclassdef.mdoc = ndoc.to_mdoc + end + if mclassdef.is_intro then self.toolcontext.info("{mclassdef} introduces new {mclass.kind} {mclass.full_name}", 3) else @@ -165,6 +178,7 @@ redef class ModelBuilder do var mmodule = nmodule.mmodule.as(not null) var objectclass = try_get_mclass_by_name(nmodule, mmodule, "Object") + var pointerclass = try_get_mclass_by_name(nmodule, mmodule, "Pointer") var mclass = nclassdef.mclass.as(not null) var mclassdef = nclassdef.mclassdef.as(not null) @@ -184,8 +198,16 @@ redef class ModelBuilder #print "new super : {mclass} < {mtype}" end end - if specobject and mclass.name != "Object" and objectclass != null and mclassdef.is_intro then - supertypes.add objectclass.mclass_type + if specobject and mclassdef.is_intro then + if mclass.kind == extern_kind then + if mclass.name == "Pointer" then + supertypes.add objectclass.mclass_type + else + supertypes.add pointerclass.mclass_type + end + else if mclass.name != "Object" and objectclass != null then + supertypes.add objectclass.mclass_type + end end mclassdef.set_supertypes(supertypes)