# Load compile time known super-types of a type
# supertypes are all known super classes at compile time and unresolved generic classes
fun load_supertypes(child: MClassType): Array[T] do
# Load compile time known super-types of a type
# supertypes are all known super classes at compile time and unresolved generic classes
fun load_supertypes(child: MClassType): Array[T] do
else if p.mtype.mclass == sup.mtype.mclass then
# found the same class (ie. p.mclass = B[B#0] = sup.mclass)
# compare formal types arguments
else if p.mtype.mclass == sup.mtype.mclass then
# found the same class (ie. p.mclass = B[B#0] = sup.mclass)
# compare formal types arguments
if sarg isa MNullableType then sarg = sarg.mtype
var sft = typing.load_type(sarg.as(MClassType))
# erase nullable annotation of super arg
if sarg isa MNullableType then sarg = sarg.mtype
var sft = typing.load_type(sarg.as(MClassType))
# erase nullable annotation of super arg
if suparg isa MNullableType then suparg = suparg.mtype
var pft = typing.load_type(suparg.as(MClassType))
if not sft.is_subtype_fallback(pft) then
if suparg isa MNullableType then suparg = suparg.mtype
var pft = typing.load_type(suparg.as(MClassType))
if not sft.is_subtype_fallback(pft) then