about summary refs log tree commit diff stats
path: root/040brace.cc
diff options
context:
space:
mode:
Diffstat (limited to '040brace.cc')
-rw-r--r--040brace.cc41
1 files changed, 24 insertions, 17 deletions
diff --git a/040brace.cc b/040brace.cc
index 0b3f6f1b..90826e2e 100644
--- a/040brace.cc
+++ b/040brace.cc
@@ -63,83 +63,89 @@ void transform_braces(const recipe_number r) {
       ;  // do nothing
     else if (inst.operation == Recipe_number["loop"]) {
       inst.operation = Recipe_number["jump"];
-      if (inst.ingredients.size() > 0 && isa_literal(inst.ingredients[0])) {
+      if (inst.ingredients.size() > 0 && isa_literal(inst.ingredients.at(0))) {
         // explicit target; a later phase will handle it
-        trace("after-brace") << "jump " << inst.ingredients[0].name << ":offset";
+        trace("after-brace") << "jump " << inst.ingredients.at(0).name << ":offset";
       }
       else {
         reagent ing;
         ing.set_value(open_braces.top()-index);
+        ing.types.push_back(Type_number["offset"]);
         inst.ingredients.push_back(ing);
         trace("after-brace") << "jump " << ing.value << ":offset";
         trace("after-brace") << index << ": " << ing.to_string();
-        trace("after-brace") << index << ": " << Recipe[r].steps[index].ingredients[0].to_string();
+        trace("after-brace") << index << ": " << Recipe[r].steps[index].ingredients.at(0).to_string();
       }
     }
     else if (inst.operation == Recipe_number["break"]) {
       inst.operation = Recipe_number["jump"];
-      if (inst.ingredients.size() > 0 && isa_literal(inst.ingredients[0])) {
+      if (inst.ingredients.size() > 0 && isa_literal(inst.ingredients.at(0))) {
         // explicit target; a later phase will handle it
-        trace("after-brace") << "jump " << inst.ingredients[0].name << ":offset";
+        trace("after-brace") << "jump " << inst.ingredients.at(0).name << ":offset";
       }
       else {
         reagent ing;
         ing.set_value(matching_brace(open_braces.top(), braces) - index - 1);
+        ing.types.push_back(Type_number["offset"]);
         inst.ingredients.push_back(ing);
         trace("after-brace") << "jump " << ing.value << ":offset";
       }
     }
     else if (inst.operation == Recipe_number["loop-if"]) {
       inst.operation = Recipe_number["jump-if"];
-      if (inst.ingredients.size() > 1 && isa_literal(inst.ingredients[1])) {
+      if (inst.ingredients.size() > 1 && isa_literal(inst.ingredients.at(1))) {
         // explicit target; a later phase will handle it
-        trace("after-brace") << "jump " << inst.ingredients[1].name << ":offset";
+        trace("after-brace") << "jump " << inst.ingredients.at(1).name << ":offset";
       }
       else {
         reagent ing;
         ing.set_value(open_braces.top()-index);
+        ing.types.push_back(Type_number["offset"]);
         inst.ingredients.push_back(ing);
-        trace("after-brace") << "jump-if " << inst.ingredients[0].name << ", " << ing.value << ":offset";
+        trace("after-brace") << "jump-if " << inst.ingredients.at(0).name << ", " << ing.value << ":offset";
       }
     }
     else if (inst.operation == Recipe_number["break-if"]) {
       inst.operation = Recipe_number["jump-if"];
-      if (inst.ingredients.size() > 1 && isa_literal(inst.ingredients[1])) {
+      if (inst.ingredients.size() > 1 && isa_literal(inst.ingredients.at(1))) {
         // explicit target; a later phase will handle it
-        trace("after-brace") << "jump " << inst.ingredients[1].name << ":offset";
+        trace("after-brace") << "jump " << inst.ingredients.at(1).name << ":offset";
       }
       else {
         reagent ing;
         ing.set_value(matching_brace(open_braces.top(), braces) - index - 1);
+        ing.types.push_back(Type_number["offset"]);
         inst.ingredients.push_back(ing);
-        trace("after-brace") << "jump-if " << inst.ingredients[0].name << ", " << ing.value << ":offset";
+        trace("after-brace") << "jump-if " << inst.ingredients.at(0).name << ", " << ing.value << ":offset";
       }
     }
     else if (inst.operation == Recipe_number["loop-unless"]) {
       inst.operation = Recipe_number["jump-unless"];
-      if (inst.ingredients.size() > 1 && isa_literal(inst.ingredients[1])) {
+      if (inst.ingredients.size() > 1 && isa_literal(inst.ingredients.at(1))) {
         // explicit target; a later phase will handle it
-        trace("after-brace") << "jump " << inst.ingredients[1].name << ":offset";
+        trace("after-brace") << "jump " << inst.ingredients.at(1).name << ":offset";
       }
       else {
         reagent ing;
         ing.set_value(open_braces.top()-index);
+        ing.types.push_back(Type_number["offset"]);
         inst.ingredients.push_back(ing);
-        trace("after-brace") << "jump-unless " << inst.ingredients[0].name << ", " << ing.value << ":offset";
+        trace("after-brace") << "jump-unless " << inst.ingredients.at(0).name << ", " << ing.value << ":offset";
       }
     }
     else if (inst.operation == Recipe_number["break-unless"]) {
 //?       cout << "AAA break-unless\n"; //? 1
       inst.operation = Recipe_number["jump-unless"];
-      if (inst.ingredients.size() > 1 && isa_literal(inst.ingredients[1])) {
+      if (inst.ingredients.size() > 1 && isa_literal(inst.ingredients.at(1))) {
         // explicit target; a later phase will handle it
-        trace("after-brace") << "jump " << inst.ingredients[1].name << ":offset";
+        trace("after-brace") << "jump " << inst.ingredients.at(1).name << ":offset";
       }
       else {
         reagent ing;
         ing.set_value(matching_brace(open_braces.top(), braces) - index - 1);
+        ing.types.push_back(Type_number["offset"]);
         inst.ingredients.push_back(ing);
-        trace("after-brace") << "jump-unless " << inst.ingredients[0].name << ", " << ing.value << ":offset";
+        trace("after-brace") << "jump-unless " << inst.ingredients.at(0).name << ", " << ing.value << ":offset";
       }
     }
     else {
@@ -368,6 +374,7 @@ recipe main [
 //: test how things actually run
 :(scenarios run)
 :(scenario brace_conversion_and_run)
+#? % Trace_stream->dump_layer = "run";
 recipe test-factorial [
   1:integer <- copy 5:literal
   2:integer <- copy 1:literal