about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--020run.cc2
-rw-r--r--060recipe.cc25
2 files changed, 25 insertions, 2 deletions
diff --git a/020run.cc b/020run.cc
index 03efcd79..df42abc0 100644
--- a/020run.cc
+++ b/020run.cc
@@ -158,6 +158,8 @@ if (argc > 1) {
   if (Run_tests) Recipe.erase(get(Recipe_ordinal, "main"));
 }
 transform_all();
+//? DUMP("");
+//? exit(0);
 save_snapshots();
 
 //: Step 3: if we aren't running tests, locate a recipe called 'main' and
diff --git a/060recipe.cc b/060recipe.cc
index c1904eb8..d60badb6 100644
--- a/060recipe.cc
+++ b/060recipe.cc
@@ -136,13 +136,21 @@ recipe from_reagent(const reagent& r) {
       curr = curr->right;  // skip delimiter
       break;
     }
-    result_header.ingredients.push_back("recipe:"+curr->name);
+    result_header.ingredients.push_back(next_recipe_reagent(curr));
   }
   for (; curr; curr=curr->right)
-    result_header.products.push_back("recipe:"+curr->name);
+    result_header.products.push_back(next_recipe_reagent(curr));
   return result_header;
 }
 
+reagent next_recipe_reagent(const type_tree* curr) {
+  if (!curr->left) return reagent("recipe:"+curr->name);
+  reagent result;
+  result.name = "recipe";
+  result.type = new type_tree(*curr->left);
+  return result;
+}
+
 bool is_mu_recipe(const reagent& r) {
   if (!r.type) return false;
   if (r.type->name == "recipe") return true;
@@ -196,6 +204,19 @@ if (is_mu_recipe(to)) {
   return true;
 }
 
+:(scenario call_variable_compound_ingredient)
+def main [
+  {1: (recipe (address number) -> number)} <- copy f
+  2:address:number <- copy 0
+  3:number <- call {1: (recipe (address number) -> number)}, 2:address:number
+]
+def f x:address:number -> y:number [
+  local-scope
+  load-ingredients
+  y <- copy x
+]
+$error: 0
+
 //: make sure we don't accidentally break on a function literal
 :(scenario jump_forbidden_on_recipe_literals)
 % Hide_errors = true;