+
+ #print "MMethod {live_methods.length}: {live_methods.join(", ")}"
+ #print "MMethodDef {live_methoddefs.length}: {live_methoddefs.join(", ")}"
+
+ #print "open MType {live_open_types.length}: {live_open_types.join(", ")}"
+ var todo_types = new List[MClassType]
+ todo_types.add_all(live_types)
+ while not todo_types.is_empty do
+ var t = todo_types.shift
+ for ot in live_open_types do
+ #print "{ot}/{t} ?"
+ if not ot.can_resolve_for(t, t, mainmodule) then continue
+ var rt = ot.anchor_to(mainmodule, t)
+ if live_types.has(rt) then continue
+ #print "{ot}/{t} -> {rt}"
+ live_types.add(rt)
+ todo_types.add(rt)
+ check_depth(rt)
+ end
+ end
+ #print "MType {live_types.length}: {live_types.join(", ")}"
+
+ #print "open cast MType {live_open_cast_types.length}: {live_open_cast_types.join(", ")}"
+ for ot in live_open_cast_types do
+ #print "live_open_cast_type: {ot}"
+ for t in live_types do
+ if not ot.can_resolve_for(t, t, mainmodule) then continue
+ var rt = ot.anchor_to(mainmodule, t)
+ live_cast_types.add(rt)
+ #print " {ot}/{t} -> {rt}"
+ end
+ end
+ #print "cast MType {live_cast_types.length}: {live_cast_types.join(", ")}"