From: Jean-Christophe Beaupré Date: Fri, 9 Jun 2017 15:06:44 +0000 (-0400) Subject: model: Add a class kind for class subsets X-Git-Url: http://nitlanguage.org model: Add a class kind for class subsets Signed-off-by: Jean-Christophe Beaupré --- diff --git a/src/model/model.nit b/src/model/model.nit index 28303d0..58fe944 100644 --- a/src/model/model.nit +++ b/src/model/model.nit @@ -2595,10 +2595,16 @@ class MClassKind # Can a class of kind `self` specializes a class of kind `other`? fun can_specialize(other: MClassKind): Bool do - if other == interface_kind then return true # everybody can specialize interfaces - if self == interface_kind or self == enum_kind then - # no other case for interfaces + if other == interface_kind then + # everybody can specialize interfaces + return true + else if self == interface_kind or self == enum_kind then + # no other case for interfaces and enums return false + else if self == subset_kind then + # A subset may specialize anything, except another subset. + # TODO: Allow sub-subsets once we can handle them. + return other != subset_kind else if self == extern_kind then # only compatible with themselves return self == other @@ -2619,6 +2625,8 @@ fun interface_kind: MClassKind do return once new MClassKind("interface", false, fun enum_kind: MClassKind do return once new MClassKind("enum", false, true, false) # The class kind `extern` fun extern_kind: MClassKind do return once new MClassKind("extern class", false, true, false) +# The class kind `subset` +fun subset_kind: MClassKind do return once new MClassKind("subset", true, false, false) # A standalone pre-constructed model used to test various model-related methods. #