diff options
-rw-r--r-- | 013update_operation.cc | 7 | ||||
-rw-r--r-- | 071recipe.cc | 9 |
2 files changed, 14 insertions, 2 deletions
diff --git a/013update_operation.cc b/013update_operation.cc index 418b3563..10b29714 100644 --- a/013update_operation.cc +++ b/013update_operation.cc @@ -25,3 +25,10 @@ void update_instruction_operations(const recipe_ordinal r) { string maybe(string s) { return s + ": "; } + +:(scenario missing_arrow) +% Hide_errors = true; +def main [ + 1:number , copy 0 # typo: ',' instead of '<-' +] ++error: main: instruction '1:number' has no recipe diff --git a/071recipe.cc b/071recipe.cc index e08f75db..345057d5 100644 --- a/071recipe.cc +++ b/071recipe.cc @@ -160,9 +160,10 @@ void check_indirect_calls_against_header(const recipe_ordinal r) { const recipe& caller = get(Recipe, r); for (int i = 0; i < SIZE(caller.steps); ++i) { const instruction& inst = caller.steps.at(i); - if (inst.ingredients.empty()) continue; // if indirect call, error raised above + if (!is_indirect_call(inst.operation)) continue; + if (inst.ingredients.empty()) continue; // error raised above const reagent& callee = inst.ingredients.at(0); - if (!is_mu_recipe(callee)) continue; // if indirect call, error raised above + if (!is_mu_recipe(callee)) continue; // error raised above const recipe callee_header = is_literal(callee) ? get(Recipe, callee.value) : from_reagent(inst.ingredients.at(0)); if (!callee_header.has_header) continue; if (is_indirect_call_with_ingredients(inst.operation)) { @@ -181,6 +182,10 @@ void check_indirect_calls_against_header(const recipe_ordinal r) { } } +bool is_indirect_call(const recipe_ordinal r) { + return is_indirect_call_with_ingredients(r) || is_indirect_call_with_products(r); +} + bool is_indirect_call_with_ingredients(const recipe_ordinal r) { if (r == CALL) return true; // End is_indirect_call_with_ingredients Special-cases |