diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2017-03-12 12:42:33 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2017-03-12 12:42:33 -0700 |
commit | 280eaa56ec45f87f02b5bd2938dd6e00a55743be (patch) | |
tree | d7606b4696ecc79e7cdc0dfcb296e2c4b3ac1338 /054static_dispatch.cc | |
parent | b7717659a14748502a469490f572915c5ebd9c98 (diff) | |
download | mu-280eaa56ec45f87f02b5bd2938dd6e00a55743be.tar.gz |
3791
Simpler way to do commit 2929.
Diffstat (limited to '054static_dispatch.cc')
-rw-r--r-- | 054static_dispatch.cc | 49 |
1 files changed, 7 insertions, 42 deletions
diff --git a/054static_dispatch.cc b/054static_dispatch.cc index 93b3f437..0eb66443 100644 --- a/054static_dispatch.cc +++ b/054static_dispatch.cc @@ -181,7 +181,7 @@ string best_variant(instruction& inst, const recipe& caller_recipe) { if (!candidates.empty()) return best_variant(inst, candidates).name; // Static Dispatch Phase 2 - candidates = strictly_matching_variants_except_literal_zero_against_address(inst, variants); + candidates = strictly_matching_variants_except_literal_against_address_or_boolean(inst, variants); if (!candidates.empty()) return best_variant(inst, candidates).name; // Static Dispatch Phase 3 @@ -189,10 +189,6 @@ string best_variant(instruction& inst, const recipe& caller_recipe) { // End Static Dispatch Phase 3 // Static Dispatch Phase 4 - candidates = strictly_matching_variants_except_literal_against_address_or_boolean(inst, variants); - if (!candidates.empty()) return best_variant(inst, candidates).name; - - // Static Dispatch Phase 5 candidates = matching_variants(inst, variants); if (!candidates.empty()) return best_variant(inst, candidates).name; @@ -251,41 +247,6 @@ bool all_header_reagents_strictly_match(const instruction& inst, const recipe& v } // phase 2 -vector<recipe_ordinal> strictly_matching_variants_except_literal_zero_against_address(const instruction& inst, vector<recipe_ordinal>& variants) { - vector<recipe_ordinal> result; - for (int i = 0; i < SIZE(variants); ++i) { - if (variants.at(i) == -1) continue; - trace(9992, "transform") << "checking variant (strict except literal-zero-against-address) " << i << ": " << header_label(variants.at(i)) << end(); - if (all_header_reagents_strictly_match_except_literal_zero_against_address(inst, get(Recipe, variants.at(i)))) - result.push_back(variants.at(i)); - } - return result; -} - -bool all_header_reagents_strictly_match_except_literal_zero_against_address(const instruction& inst, const recipe& variant) { - for (int i = 0; i < min(SIZE(inst.ingredients), SIZE(variant.ingredients)); ++i) { - if (!types_strictly_match_except_literal_zero_against_address(variant.ingredients.at(i), inst.ingredients.at(i))) { - trace(9993, "transform") << "match failed: ingredient " << i << end(); - return false; - } - } - for (int i = 0; i < min(SIZE(inst.products), SIZE(variant.products)); ++i) { - if (is_dummy(inst.products.at(i))) continue; - if (!types_strictly_match(variant.products.at(i), inst.products.at(i))) { - trace(9993, "transform") << "match failed: product " << i << end(); - return false; - } - } - return true; -} - -bool types_strictly_match_except_literal_zero_against_address(const reagent& to, const reagent& from) { - if (is_literal(from) && is_mu_address(to)) - return from.name == "0"; - return types_strictly_match(to, from); -} - -// phase 4 vector<recipe_ordinal> strictly_matching_variants_except_literal_against_address_or_boolean(const instruction& inst, vector<recipe_ordinal>& variants) { vector<recipe_ordinal> result; for (int i = 0; i < SIZE(variants); ++i) { @@ -317,10 +278,14 @@ bool all_header_reagents_strictly_match_except_literal_against_address_or_boolea bool types_strictly_match_except_literal_against_address_or_boolean(const reagent& to, const reagent& from) { if (is_literal(from) && is_mu_boolean(to)) return from.name == "0" || from.name == "1"; - return types_strictly_match_except_literal_zero_against_address(to, from); + // Match Literal Zero Against Address { + if (is_literal(from) && is_mu_address(to)) + return from.name == "0"; + // } + return types_strictly_match(to, from); } -// phase 5 +// phase 4 vector<recipe_ordinal> matching_variants(const instruction& inst, vector<recipe_ordinal>& variants) { vector<recipe_ordinal> result; for (int i = 0; i < SIZE(variants); ++i) { |