nitc :: MClassKind :: can_specialize
self
specializes a class of kind other
?
# Can a class of kind `self` specializes a class of kind `other`?
fun can_specialize(other: MClassKind): Bool
do
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
else
# assert self == abstract_kind or self == concrete_kind
return other == abstract_kind or other == concrete_kind
end
end
src/model/model.nit:2744,2--2764,4