about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--013update_operation.cc7
-rw-r--r--071recipe.cc9
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