do
if _base_type_cache == null and is_generic then
_base_type_cache = get_instantiate_type(formals_types)
- return _base_type_cache
+ return _base_type_cache.as(not null)
else
return super
end
special MMTypeClass
# Formal arguments
readable attr _params: Array[MMType]
- attr _props: Map[MMGlobalProperty, MMLocalProperty] = new HashMap[MMGlobalProperty, MMLocalProperty]
redef meth is_generic do return true
var b = _local_class.for_module(mod)
t = b.get_instantiate_type(parms)
end
- assert t != null
return t
end
return false
end
for i in [0..t.length[ do
- assert _params[i] != null
- assert t[i] != null
if _params[i] != t[i] then
return false
end
return true
end
- redef meth select_property(g)
- do
- if g == null then
- return null
- end
- if not _props.has_key(g) then
- assert _local_class != null
- var p = _local_class[g]
- if p != null then
- #var p2 = p.adapt_property(self)
- #_props[g] = p2
- #return p2
- return p
- else
- assert false
- end
- end
- return _props[g]
- end
-
redef meth to_s
do
return "{super}[{_params.join(", ")}]"
if module != mod then
t = mod[_def_class.global].get_formal(position)
end
- assert t != null
return t
end
- redef meth upcast_for(c) do return self
+ redef meth upcast_for(c) do return _bound.upcast_for(c)
meth bound=(t: MMType)
do
#end
assert old_r isa MMTypeGeneric
var reduct = old_r.params[position]
- assert reduct != null
return reduct
end
init(n: Symbol, p: Int, intro: MMLocalClass)
do
- assert n != null
- _name = n
+ super(n, null)
_position = p
_def_class = intro
end