void TypeErasurePass::erase_model(const ModelSpec& spec, Scope& scope, PassManager& mgr, DexStoresVector& stores, ConfigFiles& cfg) { TRACE(TERA, 2, "[TERA] erasing %s model\n", spec.name.c_str()); Timer t("erase_model"); for (const auto root : spec.roots) { always_assert(!is_interface(type_class(root))); } auto model = Model::build_model(scope, stores, spec, cfg); model.update_redex_stats(mgr); auto mm = get_model_merger(); auto merger_classes = mm->merge_model(scope, stores, model, m_max_num_dispatch_target); mm->update_redex_stats(spec.class_name_prefix, mgr); delete mm; }
void merger::merge_models() { for (const auto& pair : models_) merge_model(pair.second); }