nitc :: MType :: can_resolve_for
In order to resolve open types, the formal types must make sence.
class A[E]
end
class B[F]
end
E.can_resolve_for(A[Int]) #-> true, E make sense in A
E.can_resolve_for(B[Int]) #-> false, E does not make sense in B
B[E].can_resolve_for(A[F], B[Object]) #-> true,
# B[E] is a red hearing only the E is important,
# E make sense in A
REQUIRE: anchor != null implies not anchor.need_anchor
REQUIRE: mtype.need_anchor implies anchor != null and mtype.can_resolve_for(anchor, null, mmodule)
ENSURE: not self.need_anchor implies result == true
# Can the type be resolved?
#
# In order to resolve open types, the formal types must make sence.
#
# ## Example
#
# class A[E]
# end
# class B[F]
# end
#
# ~~~nitish
# E.can_resolve_for(A[Int]) #-> true, E make sense in A
#
# E.can_resolve_for(B[Int]) #-> false, E does not make sense in B
#
# B[E].can_resolve_for(A[F], B[Object]) #-> true,
# # B[E] is a red hearing only the E is important,
# # E make sense in A
# ~~~
#
# REQUIRE: `anchor != null implies not anchor.need_anchor`
# REQUIRE: `mtype.need_anchor implies anchor != null and mtype.can_resolve_for(anchor, null, mmodule)`
# ENSURE: `not self.need_anchor implies result == true`
fun can_resolve_for(mtype: MType, anchor: nullable MClassType, mmodule: MModule): Bool is abstract
src/model/model.nit:1165,2--1189,99
redef fun can_resolve_for(mtype, anchor, mmodule) do return true
src/model/model.nit:1320,2--65
redef fun can_resolve_for(mtype, anchor, mmodule)
do
return self.mtype.can_resolve_for(mtype, anchor, mmodule)
end
src/model/model.nit:1792,2--1795,4
redef fun can_resolve_for(mtype, anchor, mmodule) do return true
src/model/model.nit:1904,2--65
redef fun can_resolve_for(mtype, anchor, mmodule) do return true
src/model/model.nit:1930,2--65
redef fun can_resolve_for(mtype, anchor, mmodule) do return true
src/model/model.nit:1954,2--65
redef fun can_resolve_for(mtype, anchor, mmodule) do return true
src/vm/virtual_machine.nit:901,2--65
redef fun can_resolve_for(mtype, anchor, mmodule) do
not_available
return true
end
src/doc/model_ext.nit:44,2--47,4
redef fun can_resolve_for(mtype, anchor, mmodule)
do
if not need_anchor then return true
for t in arguments do
if not t.can_resolve_for(mtype, anchor, mmodule) then return false
end
return true
end
src/model/model.nit:1457,2--1464,4
redef fun can_resolve_for(mtype, anchor, mmodule)
do
if mtype.need_anchor then
assert anchor != null
mtype = mtype.anchor_to(mmodule, anchor)
end
return mtype.has_mproperty(mmodule, mproperty)
end
src/model/model.nit:1607,2--1614,4
redef fun can_resolve_for(mtype, anchor, mmodule)
do
if mtype.need_anchor then
assert anchor != null
mtype = mtype.anchor_to(mmodule, anchor)
end
return mtype.collect_mclassdefs(mmodule).has(mclass.intro)
end
src/model/model.nit:1760,2--1767,4