- if modelbuilder.toolcontext.opt_bm_typing.value then
- var unanchored_type_coloring = new NaiveUnanchoredTypeColoring
- self.unanchored_types_colors = unanchored_type_coloring.colorize(mtype2unanchored)
- self.unanchored_types_tables = unanchored_type_coloring.build_tables(mtype2unanchored)
- else if modelbuilder.toolcontext.opt_phmod_typing.value then
- var unanchored_type_coloring = new UnanchoredTypeModPerfectHashing
- self.unanchored_types_colors = unanchored_type_coloring.colorize(mtype2unanchored)
- self.unanchored_types_masks = unanchored_type_coloring.compute_masks(mtype2unanchored)
- self.unanchored_types_tables = unanchored_type_coloring.build_tables(mtype2unanchored)
- else if modelbuilder.toolcontext.opt_phand_typing.value then
- var unanchored_type_coloring = new UnanchoredTypeAndPerfectHashing
- self.unanchored_types_colors = unanchored_type_coloring.colorize(mtype2unanchored)
- self.unanchored_types_masks = unanchored_type_coloring.compute_masks(mtype2unanchored)
- self.unanchored_types_tables = unanchored_type_coloring.build_tables(mtype2unanchored)
- else
- var unanchored_type_coloring = new UnanchoredTypeColoring
- self.unanchored_types_colors = unanchored_type_coloring.colorize(mtype2unanchored)
- self.unanchored_types_tables = unanchored_type_coloring.build_tables(mtype2unanchored)
- end
-
- # Compile a C constant for each collected unanchored type.
- # Either to a color, or to -1 if the unanchored type is dead (no live receiver can require it)
- var all_unanchored = new HashSet[MType]
- for t in self.live_unanchored_types.values do
- all_unanchored.add_all(t)
- end
- var all_unanchored_types_colors = new HashMap[MType, Int]
- for t in all_unanchored do
- if unanchored_types_colors.has_key(t) then
- all_unanchored_types_colors[t] = unanchored_types_colors[t]
+ var colorer = new BucketsColorer[MType, MType]
+ opentype_colors = colorer.colorize(mtype2unresolved)
+ resolution_tables = self.build_resolution_tables(mtype2unresolved)
+
+ # Compile a C constant for each collected unresolved type.
+ # Either to a color, or to -1 if the unresolved type is dead (no live receiver can require it)
+ var all_unresolved = new HashSet[MType]
+ for t in self.live_unresolved_types.values do
+ all_unresolved.add_all(t)
+ end
+ var all_unresolved_types_colors = new HashMap[MType, Int]
+ for t in all_unresolved do
+ if opentype_colors.has_key(t) then
+ all_unresolved_types_colors[t] = opentype_colors[t]