redef class MMType
# The type a indirect type refers to
- meth direct_type: MMType do return self
+ fun direct_type: MMType do return self
end
# Formal types are named indirect types
-class MMTypeFormal
-special MMType
+abstract class MMTypeFormal
+ super MMType
+ redef fun is_valid do return _bound != null and _bound.is_valid
+
# The name of the type
- readable attr _name: Symbol
+ readable var _name: Symbol
# The type refered
- readable attr _bound: MMType
+ fun bound: MMType do return _bound.as(not null)
+ var _bound: nullable MMType
- redef meth <(t) do return t != null and (t == self or t.is_supertype(_bound))
- redef meth is_supertype(t) do return _bound.is_supertype(t)
- redef meth direct_type do return _bound.direct_type
- redef meth local_class
- do
- if _bound == null then return null
- return _bound.local_class
- end
+ redef fun <(t) do return t == self or t.is_supertype(bound)
+ redef fun is_supertype(t) do return _bound.is_supertype(t)
+ redef fun is_nullable do return _bound.is_nullable
+ redef fun direct_type do return _bound.direct_type
+ redef fun local_class do return _bound.local_class
- redef meth to_s do return _name.to_s
+ redef fun to_s do return _name.to_s
- protected init(name: Symbol, bound: MMType)
+ protected init(name: Symbol, bound: nullable MMType)
do
_name = name
_bound = bound