X-Git-Url: http://nitlanguage.org diff --git a/src/modelbuilder_base.nit b/src/modelbuilder_base.nit index b940049..9995338 100644 --- a/src/modelbuilder_base.nit +++ b/src/modelbuilder_base.nit @@ -311,7 +311,7 @@ class ModelBuilder if mt == null then return null # forward error var anchor if mclassdef != null then anchor = mclassdef.bound_mtype else anchor = null - if not mt.is_subtype(mmodule, anchor, bound) then + if not check_subtype(nt, mmodule, anchor, mt, bound) then error(nt, "Type error: expected {bound}, got {mt}") return null end @@ -320,6 +320,26 @@ class ModelBuilder ntype.checked_mtype = true return mtype end + + # Check that `sub` is a subtype of `sup`. + # Do not display an error message. + # + # This method is used a an entry point for the modelize phase to test static subtypes. + # Some refinements could redefine it to collect statictics. + fun check_subtype(node: ANode, mmodule: MModule, anchor: nullable MClassType, sub, sup: MType): Bool + do + return sub.is_subtype(mmodule, anchor, sup) + end + + # Check that `sub` and `sup` are equvalent types. + # Do not display an error message. + # + # This method is used a an entry point for the modelize phase to test static equivalent types. + # Some refinements could redefine it to collect statictics. + fun check_sametype(node: ANode, mmodule: MModule, anchor: nullable MClassType, sub, sup: MType): Bool + do + return sub.is_subtype(mmodule, anchor, sup) and sup.is_subtype(mmodule, anchor, sub) + end end redef class AType @@ -355,7 +375,7 @@ redef class ADoc do var res = mdoc_cache if res != null then return res - res = new MDoc + res = new MDoc(location) for c in n_comment do var text = c.text if text.length < 2 then