Exemple #1
0
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;
}
Exemple #2
0
void merger::merge_models() {
    for (const auto& pair : models_)
        merge_model(pair.second);
}