From c4699bc3222df16b2afec1ea3bd3629f7e18ffa1 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Wed, 6 May 2015 09:20:05 -0700 Subject: 1291 --- html/000organization.cc.html | 2 +- html/001help.cc.html | 2 +- html/002test.cc.html | 2 +- html/003trace.cc.html | 2 +- html/003trace.test.cc.html | 2 +- html/010vm.cc.html | 2 +- html/011load.cc.html | 2 +- html/012transform.cc.html | 2 +- html/013literal_string.cc.html | 2 +- html/014types.cc.html | 2 +- html/020run.cc.html | 2 +- html/021arithmetic.cc.html | 2 +- html/022boolean.cc.html | 2 +- html/023jump.cc.html | 2 +- html/024compare.cc.html | 2 +- html/025trace.cc.html | 2 +- html/026assert.cc.html | 2 +- html/027debug.cc.html | 2 +- html/030container.cc.html | 2 +- html/031address.cc.html | 2 +- html/032array.cc.html | 2 +- html/033length.cc.html | 2 +- html/034exclusive_container.cc.html | 2 +- html/035call.cc.html | 2 +- html/036call_ingredient.cc.html | 2 +- html/037call_reply.cc.html | 2 +- html/038scheduler.cc.html | 11 +- html/039wait.cc.html | 2 +- html/040brace.cc.html | 2 +- html/041name.cc.html | 2 +- html/042new.cc.html | 2 +- html/043space.cc.html | 2 +- html/044space_surround.cc.html | 2 +- html/045closure_name.cc.html | 2 +- html/046tangle.cc.html | 235 +++++++++++++++++++++++++++++++++ html/050scenario.cc.html | 2 +- html/051scenario_test.mu.html | 2 +- html/060string.mu.html | 2 +- html/061channel.mu.html | 2 +- html/062array.mu.html | 2 +- html/070display.cc.html | 2 +- html/071print.mu.html | 2 +- html/072scenario_screen.cc.html | 2 +- html/073scenario_screen_test.mu.html | 2 +- html/074keyboard.mu.html | 2 +- html/075scenario_keyboard.cc.html | 2 +- html/076scenario_keyboard_test.mu.html | 2 +- html/077tangle.cc.html | 235 --------------------------------- html/999spaces.cc.html | 2 +- 49 files changed, 286 insertions(+), 287 deletions(-) create mode 100644 html/046tangle.cc.html delete mode 100644 html/077tangle.cc.html diff --git a/html/000organization.cc.html b/html/000organization.cc.html index b4eab9e7..5984921c 100644 --- a/html/000organization.cc.html +++ b/html/000organization.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/000organization.cc.html +Mu - 000organization.cc diff --git a/html/001help.cc.html b/html/001help.cc.html index 80dc9e44..8f4c8227 100644 --- a/html/001help.cc.html +++ b/html/001help.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/001help.cc.html +Mu - 001help.cc diff --git a/html/002test.cc.html b/html/002test.cc.html index 073aad8d..ef38f047 100644 --- a/html/002test.cc.html +++ b/html/002test.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/002test.cc.html +Mu - 002test.cc diff --git a/html/003trace.cc.html b/html/003trace.cc.html index 1798bf07..cf44c85e 100644 --- a/html/003trace.cc.html +++ b/html/003trace.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/003trace.cc.html +Mu - 003trace.cc diff --git a/html/003trace.test.cc.html b/html/003trace.test.cc.html index d2154cfd..ecd40368 100644 --- a/html/003trace.test.cc.html +++ b/html/003trace.test.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/003trace.test.cc.html +Mu - 003trace.test.cc diff --git a/html/010vm.cc.html b/html/010vm.cc.html index 6622bb86..08e5ec83 100644 --- a/html/010vm.cc.html +++ b/html/010vm.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/010vm.cc.html +Mu - 010vm.cc diff --git a/html/011load.cc.html b/html/011load.cc.html index 1928668e..e73c7198 100644 --- a/html/011load.cc.html +++ b/html/011load.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/011load.cc.html +Mu - 011load.cc diff --git a/html/012transform.cc.html b/html/012transform.cc.html index 87650650..b974b8ab 100644 --- a/html/012transform.cc.html +++ b/html/012transform.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/012transform.cc.html +Mu - 012transform.cc diff --git a/html/013literal_string.cc.html b/html/013literal_string.cc.html index 61f6105b..d2a62afd 100644 --- a/html/013literal_string.cc.html +++ b/html/013literal_string.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/013literal_string.cc.html +Mu - 013literal_string.cc diff --git a/html/014types.cc.html b/html/014types.cc.html index a76c616c..3eac20ad 100644 --- a/html/014types.cc.html +++ b/html/014types.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/014types.cc.html +Mu - 014types.cc diff --git a/html/020run.cc.html b/html/020run.cc.html index 9f16cdce..6b38e2d2 100644 --- a/html/020run.cc.html +++ b/html/020run.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/020run.cc.html +Mu - 020run.cc diff --git a/html/021arithmetic.cc.html b/html/021arithmetic.cc.html index ecdbd98b..98d62402 100644 --- a/html/021arithmetic.cc.html +++ b/html/021arithmetic.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/021arithmetic.cc.html +Mu - 021arithmetic.cc diff --git a/html/022boolean.cc.html b/html/022boolean.cc.html index 3ee1cad8..25955e5a 100644 --- a/html/022boolean.cc.html +++ b/html/022boolean.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/022boolean.cc.html +Mu - 022boolean.cc diff --git a/html/023jump.cc.html b/html/023jump.cc.html index c20ce9b6..199eab5b 100644 --- a/html/023jump.cc.html +++ b/html/023jump.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/023jump.cc.html +Mu - 023jump.cc diff --git a/html/024compare.cc.html b/html/024compare.cc.html index 8a5274e6..bb633384 100644 --- a/html/024compare.cc.html +++ b/html/024compare.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/024compare.cc.html +Mu - 024compare.cc diff --git a/html/025trace.cc.html b/html/025trace.cc.html index d58d0b83..7a4c5cd5 100644 --- a/html/025trace.cc.html +++ b/html/025trace.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/025trace.cc.html +Mu - 025trace.cc diff --git a/html/026assert.cc.html b/html/026assert.cc.html index 14a471bc..767382ac 100644 --- a/html/026assert.cc.html +++ b/html/026assert.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/026assert.cc.html +Mu - 026assert.cc diff --git a/html/027debug.cc.html b/html/027debug.cc.html index a9125522..b676e8dc 100644 --- a/html/027debug.cc.html +++ b/html/027debug.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/027debug.cc.html +Mu - 027debug.cc diff --git a/html/030container.cc.html b/html/030container.cc.html index 8efeb1bb..72397676 100644 --- a/html/030container.cc.html +++ b/html/030container.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/030container.cc.html +Mu - 030container.cc diff --git a/html/031address.cc.html b/html/031address.cc.html index 5b213874..e67afc4c 100644 --- a/html/031address.cc.html +++ b/html/031address.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/031address.cc.html +Mu - 031address.cc diff --git a/html/032array.cc.html b/html/032array.cc.html index 0686fb16..2b95ab90 100644 --- a/html/032array.cc.html +++ b/html/032array.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/032array.cc.html +Mu - 032array.cc diff --git a/html/033length.cc.html b/html/033length.cc.html index bb7fef38..17d1f65f 100644 --- a/html/033length.cc.html +++ b/html/033length.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/033length.cc.html +Mu - 033length.cc diff --git a/html/034exclusive_container.cc.html b/html/034exclusive_container.cc.html index 20c0af47..f8387563 100644 --- a/html/034exclusive_container.cc.html +++ b/html/034exclusive_container.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/034exclusive_container.cc.html +Mu - 034exclusive_container.cc diff --git a/html/035call.cc.html b/html/035call.cc.html index 43c4a42b..69c23b45 100644 --- a/html/035call.cc.html +++ b/html/035call.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/035call.cc.html +Mu - 035call.cc diff --git a/html/036call_ingredient.cc.html b/html/036call_ingredient.cc.html index 3fc4df85..9e90079f 100644 --- a/html/036call_ingredient.cc.html +++ b/html/036call_ingredient.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/036call_ingredient.cc.html +Mu - 036call_ingredient.cc diff --git a/html/037call_reply.cc.html b/html/037call_reply.cc.html index 0359d9fe..af7a3359 100644 --- a/html/037call_reply.cc.html +++ b/html/037call_reply.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/037call_reply.cc.html +Mu - 037call_reply.cc diff --git a/html/038scheduler.cc.html b/html/038scheduler.cc.html index 37cd96b4..2eb59d6d 100644 --- a/html/038scheduler.cc.html +++ b/html/038scheduler.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/038scheduler.cc.html +Mu - 038scheduler.cc @@ -33,8 +33,8 @@ body { font-family: monospace; color: #d0d0d0; background-color: #000000; }
-//: Run a second routine concurrently using fork, without any guarantees on
-//: how the operations in each are interleaved with each other.
+//: Run a second routine concurrently using 'start-running', without any
+//: guarantees on how the operations in each are interleaved with each other.
 
 :(scenario scheduler)
 recipe f1 [
@@ -125,10 +125,9 @@ for (index_t i = 0<
   delete Routines[i];
 Routines.clear();
 
-//:: To schedule new routines to run, call 'start-scheduling'.
+//:: To schedule new routines to run, call 'start-running'.
 
-//: 'start-scheduling' will return a unique id for the routine that was
-//: created.
+//: 'start-running' will return a unique id for the routine that was created.
 :(before "End routine Fields")
 index_t id;
 :(before "End Globals")
diff --git a/html/039wait.cc.html b/html/039wait.cc.html
index 2009d50f..feb7e536 100644
--- a/html/039wait.cc.html
+++ b/html/039wait.cc.html
@@ -2,7 +2,7 @@
 
 
 
-~/Desktop/s/mu/039wait.cc.html
+Mu - 039wait.cc
 
 
 
diff --git a/html/040brace.cc.html b/html/040brace.cc.html
index c7180da3..33bb5fed 100644
--- a/html/040brace.cc.html
+++ b/html/040brace.cc.html
@@ -2,7 +2,7 @@
 
 
 
-~/Desktop/s/mu/040brace.cc.html
+Mu - 040brace.cc
 
 
 
diff --git a/html/041name.cc.html b/html/041name.cc.html
index a6553f50..6734c604 100644
--- a/html/041name.cc.html
+++ b/html/041name.cc.html
@@ -2,7 +2,7 @@
 
 
 
-~/Desktop/s/mu/041name.cc.html
+Mu - 041name.cc
 
 
 
diff --git a/html/042new.cc.html b/html/042new.cc.html
index d6bca4bf..0b320546 100644
--- a/html/042new.cc.html
+++ b/html/042new.cc.html
@@ -2,7 +2,7 @@
 
 
 
-~/Desktop/s/mu/042new.cc.html
+Mu - 042new.cc
 
 
 
diff --git a/html/043space.cc.html b/html/043space.cc.html
index c52c5d42..3844e879 100644
--- a/html/043space.cc.html
+++ b/html/043space.cc.html
@@ -2,7 +2,7 @@
 
 
 
-~/Desktop/s/mu/043space.cc.html
+Mu - 043space.cc
 
 
 
diff --git a/html/044space_surround.cc.html b/html/044space_surround.cc.html
index 2cfb49f0..fbabca77 100644
--- a/html/044space_surround.cc.html
+++ b/html/044space_surround.cc.html
@@ -2,7 +2,7 @@
 
 
 
-~/Desktop/s/mu/044space_surround.cc.html
+Mu - 044space_surround.cc
 
 
 
diff --git a/html/045closure_name.cc.html b/html/045closure_name.cc.html
index e97e71ae..28781bd8 100644
--- a/html/045closure_name.cc.html
+++ b/html/045closure_name.cc.html
@@ -2,7 +2,7 @@
 
 
 
-~/Desktop/s/mu/045closure_name.cc.html
+Mu - 045closure_name.cc
 
 
 
diff --git a/html/046tangle.cc.html b/html/046tangle.cc.html
new file mode 100644
index 00000000..cd6e296d
--- /dev/null
+++ b/html/046tangle.cc.html
@@ -0,0 +1,235 @@
+
+
+
+
+Mu - 046tangle.cc
+
+
+
+
+
+
+
+
+
+
+
+//: Allow code for recipes to be pulled in from multiple places.
+//:
+//: TODO: switch recipe.steps to a more efficient data structure.
+
+:(scenario tangle_before)
+recipe main [
+  1:integer <- copy 0:literal
+  +label1
+  3:integer <- copy 0:literal
+]
+
+before +label1 [
+  2:integer <- copy 0:literal
+]
++mem: storing 0 in location 1
++mem: storing 0 in location 2
++mem: storing 0 in location 3
+# nothing else
+$mem: 3
+
+//: while loading recipes, load before/after fragments
+
+:(before "End Globals")
+map<string /*label*/, recipe> Before_fragments, After_fragments;
+:(before "End Setup")
+Before_fragments.clear();
+After_fragments.clear();
+
+:(before "End Command Handlers")
+else if (command == "before") {
+  string label = next_word(in);
+  recipe tmp = slurp_recipe(in);
+  Before_fragments[label].steps.insert(Before_fragments[label].steps.end(), tmp.steps.begin(), tmp.steps.end());
+}
+else if (command == "after") {
+  string label = next_word(in);
+  recipe tmp = slurp_recipe(in);
+  After_fragments[label].steps.insert(After_fragments[label].steps.begin(), tmp.steps.begin(), tmp.steps.end());
+}
+
+//: after all recipes are loaded, insert fragments at appropriate labels
+
+:(after "int main")
+  Transform.push_back(insert_fragments);
+
+:(code)
+void insert_fragments(const recipe_number r) {
+  // Copy into a new vector because insertions invalidate iterators.
+  // But this way we can't insert into labels created inside before/after.
+  vector<instruction> result;
+  for (index_t i = 0; i < Recipe[r].steps.size(); ++i) {
+    const instruction inst = Recipe[r].steps[i];
+    if (!inst.is_label) {
+      result.push_back(inst);
+      continue;
+    }
+    if (Before_fragments.find(inst.label) != Before_fragments.end()) {
+      result.insert(result.end(), Before_fragments[inst.label].steps.begin(), Before_fragments[inst.label].steps.end());
+    }
+    result.push_back(inst);
+    if (After_fragments.find(inst.label) != After_fragments.end()) {
+      result.insert(result.end(), After_fragments[inst.label].steps.begin(), After_fragments[inst.label].steps.end());
+    }
+  }
+//?   for (index_t i = 0; i < result.size(); ++i) { //? 1
+//?     cout << result[i].to_string() << '\n'; //? 1
+//?   } //? 1
+  Recipe[r].steps.swap(result);
+}
+
+:(scenario tangle_before_and_after)
+recipe main [
+  1:integer <- copy 0:literal
+  +label1
+  4:integer <- copy 0:literal
+]
+before +label1 [
+  2:integer <- copy 0:literal
+]
+after +label1 [
+  3:integer <- copy 0:literal
+]
++mem: storing 0 in location 1
++mem: storing 0 in location 2
+# label1
++mem: storing 0 in location 3
++mem: storing 0 in location 4
+# nothing else
+$mem: 4
+
+:(scenario tangle_keeps_labels_separate)
+recipe main [
+  1:integer <- copy 0:literal
+  +label1
+  +label2
+  6:integer <- copy 0:literal
+]
+before +label1 [
+  2:integer <- copy 0:literal
+]
+after +label1 [
+  3:integer <- copy 0:literal
+]
+before +label2 [
+  4:integer <- copy 0:literal
+]
+after +label2 [
+  5:integer <- copy 0:literal
+]
++mem: storing 0 in location 1
++mem: storing 0 in location 2
+# label1
++mem: storing 0 in location 3
+# 'after' fragments for earlier label always go before 'before' fragments for later label
++mem: storing 0 in location 4
+# label2
++mem: storing 0 in location 5
++mem: storing 0 in location 6
+# nothing else
+$mem: 6
+
+:(scenario tangle_stacks_multiple_fragments)
+recipe main [
+  1:integer <- copy 0:literal
+  +label1
+  6:integer <- copy 0:literal
+]
+before +label1 [
+  2:integer <- copy 0:literal
+]
+after +label1 [
+  3:integer <- copy 0:literal
+]
+before +label1 [
+  4:integer <- copy 0:literal
+]
+after +label1 [
+  5:integer <- copy 0:literal
+]
++mem: storing 0 in location 1
+# 'before' fragments stack in order
++mem: storing 0 in location 2
++mem: storing 0 in location 4
+# label1
+# 'after' fragments stack in reverse order
++mem: storing 0 in location 5
++mem: storing 0 in location 3
++mem: storing 0 in location 6
+# nothing else
+$mem: 6
+
+:(scenario tangle_supports_fragments_with_multiple_instructions)
+recipe main [
+  1:integer <- copy 0:literal
+  +label1
+  6:integer <- copy 0:literal
+]
+before +label1 [
+  2:integer <- copy 0:literal
+  3:integer <- copy 0:literal
+]
+after +label1 [
+  4:integer <- copy 0:literal
+  5:integer <- copy 0:literal
+]
++mem: storing 0 in location 1
++mem: storing 0 in location 2
++mem: storing 0 in location 3
+# label1
++mem: storing 0 in location 4
++mem: storing 0 in location 5
++mem: storing 0 in location 6
+# nothing else
+$mem: 6
+
+:(scenario tangle_tangles_into_all_labels_with_same_name)
+recipe main [
+  1:integer <- copy 0:literal
+  +label1
+  +label1
+  4:integer <- copy 0:literal
+]
+before +label1 [
+  2:integer <- copy 0:literal
+]
+after +label1 [
+  3:integer <- copy 0:literal
+]
++mem: storing 0 in location 1
++mem: storing 0 in location 2
+# label1
++mem: storing 0 in location 3
++mem: storing 0 in location 2
+# label1
++mem: storing 0 in location 3
++mem: storing 0 in location 4
+# nothing else
+$mem: 6
+
+ + + diff --git a/html/050scenario.cc.html b/html/050scenario.cc.html index 89766a6e..9037d68c 100644 --- a/html/050scenario.cc.html +++ b/html/050scenario.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/050scenario.cc.html +Mu - 050scenario.cc diff --git a/html/051scenario_test.mu.html b/html/051scenario_test.mu.html index f5724398..a0828a86 100644 --- a/html/051scenario_test.mu.html +++ b/html/051scenario_test.mu.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/051scenario_test.mu.html +Mu - 051scenario_test.mu diff --git a/html/060string.mu.html b/html/060string.mu.html index 3323c51b..7a494890 100644 --- a/html/060string.mu.html +++ b/html/060string.mu.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/060string.mu.html +Mu - 060string.mu diff --git a/html/061channel.mu.html b/html/061channel.mu.html index 2c6f19d3..286aaf22 100644 --- a/html/061channel.mu.html +++ b/html/061channel.mu.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/061channel.mu.html +Mu - 061channel.mu diff --git a/html/062array.mu.html b/html/062array.mu.html index e765ca2a..fe5f9e8d 100644 --- a/html/062array.mu.html +++ b/html/062array.mu.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/062array.mu.html +Mu - 062array.mu diff --git a/html/070display.cc.html b/html/070display.cc.html index 2f9504da..c0a5deb9 100644 --- a/html/070display.cc.html +++ b/html/070display.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/070display.cc.html +Mu - 070display.cc diff --git a/html/071print.mu.html b/html/071print.mu.html index 04f05a77..4f69abd9 100644 --- a/html/071print.mu.html +++ b/html/071print.mu.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/071print.mu.html +Mu - 071print.mu diff --git a/html/072scenario_screen.cc.html b/html/072scenario_screen.cc.html index ddb4b901..d5426460 100644 --- a/html/072scenario_screen.cc.html +++ b/html/072scenario_screen.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/072scenario_screen.cc.html +Mu - 072scenario_screen.cc diff --git a/html/073scenario_screen_test.mu.html b/html/073scenario_screen_test.mu.html index 01ee413c..0da61050 100644 --- a/html/073scenario_screen_test.mu.html +++ b/html/073scenario_screen_test.mu.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/073scenario_screen_test.mu.html +Mu - 073scenario_screen_test.mu diff --git a/html/074keyboard.mu.html b/html/074keyboard.mu.html index 0f06c13b..13460315 100644 --- a/html/074keyboard.mu.html +++ b/html/074keyboard.mu.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/074keyboard.mu.html +Mu - 074keyboard.mu diff --git a/html/075scenario_keyboard.cc.html b/html/075scenario_keyboard.cc.html index a83e3dd4..3add7460 100644 --- a/html/075scenario_keyboard.cc.html +++ b/html/075scenario_keyboard.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/075scenario_keyboard.cc.html +Mu - 075scenario_keyboard.cc diff --git a/html/076scenario_keyboard_test.mu.html b/html/076scenario_keyboard_test.mu.html index 3e3880ba..233ae5eb 100644 --- a/html/076scenario_keyboard_test.mu.html +++ b/html/076scenario_keyboard_test.mu.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/076scenario_keyboard_test.mu.html +Mu - 076scenario_keyboard_test.mu diff --git a/html/077tangle.cc.html b/html/077tangle.cc.html deleted file mode 100644 index 9411e575..00000000 --- a/html/077tangle.cc.html +++ /dev/null @@ -1,235 +0,0 @@ - - - - -~/Desktop/s/mu/077tangle.cc.html - - - - - - - - - - -
-//: Allow code for recipes to be pulled in from multiple places.
-//:
-//: TODO: switch recipe.steps to a more efficient data structure.
-
-:(scenario tangle_before)
-recipe main [
-  1:integer <- copy 0:literal
-  +label1
-  3:integer <- copy 0:literal
-]
-
-before +label1 [
-  2:integer <- copy 0:literal
-]
-+mem: storing 0 in location 1
-+mem: storing 0 in location 2
-+mem: storing 0 in location 3
-# nothing else
-$mem: 3
-
-//: while loading recipes, load before/after fragments
-
-:(before "End Globals")
-map<string /*label*/, recipe> Before_fragments, After_fragments;
-:(before "End Setup")
-Before_fragments.clear();
-After_fragments.clear();
-
-:(before "End Command Handlers")
-else if (command == "before") {
-  string label = next_word(in);
-  recipe tmp = slurp_recipe(in);
-  Before_fragments[label].steps.insert(Before_fragments[label].steps.end(), tmp.steps.begin(), tmp.steps.end());
-}
-else if (command == "after") {
-  string label = next_word(in);
-  recipe tmp = slurp_recipe(in);
-  After_fragments[label].steps.insert(After_fragments[label].steps.begin(), tmp.steps.begin(), tmp.steps.end());
-}
-
-//: after all recipes are loaded, insert fragments at appropriate labels
-
-:(after "int main")
-  Transform.push_back(insert_fragments);
-
-:(code)
-void insert_fragments(const recipe_number r) {
-  // Copy into a new vector because insertions invalidate iterators.
-  // But this way we can't insert into labels created inside before/after.
-  vector<instruction> result;
-  for (index_t i = 0; i < Recipe[r].steps.size(); ++i) {
-    const instruction inst = Recipe[r].steps[i];
-    if (!inst.is_label) {
-      result.push_back(inst);
-      continue;
-    }
-    if (Before_fragments.find(inst.label) != Before_fragments.end()) {
-      result.insert(result.end(), Before_fragments[inst.label].steps.begin(), Before_fragments[inst.label].steps.end());
-    }
-    result.push_back(inst);
-    if (After_fragments.find(inst.label) != After_fragments.end()) {
-      result.insert(result.end(), After_fragments[inst.label].steps.begin(), After_fragments[inst.label].steps.end());
-    }
-  }
-//?   for (index_t i = 0; i < result.size(); ++i) { //? 1
-//?     cout << result[i].to_string() << '\n'; //? 1
-//?   } //? 1
-  Recipe[r].steps.swap(result);
-}
-
-:(scenario tangle_before_and_after)
-recipe main [
-  1:integer <- copy 0:literal
-  +label1
-  4:integer <- copy 0:literal
-]
-before +label1 [
-  2:integer <- copy 0:literal
-]
-after +label1 [
-  3:integer <- copy 0:literal
-]
-+mem: storing 0 in location 1
-+mem: storing 0 in location 2
-# label1
-+mem: storing 0 in location 3
-+mem: storing 0 in location 4
-# nothing else
-$mem: 4
-
-:(scenario tangle_keeps_labels_separate)
-recipe main [
-  1:integer <- copy 0:literal
-  +label1
-  +label2
-  6:integer <- copy 0:literal
-]
-before +label1 [
-  2:integer <- copy 0:literal
-]
-after +label1 [
-  3:integer <- copy 0:literal
-]
-before +label2 [
-  4:integer <- copy 0:literal
-]
-after +label2 [
-  5:integer <- copy 0:literal
-]
-+mem: storing 0 in location 1
-+mem: storing 0 in location 2
-# label1
-+mem: storing 0 in location 3
-# 'after' fragments for earlier label always go before 'before' fragments for later label
-+mem: storing 0 in location 4
-# label2
-+mem: storing 0 in location 5
-+mem: storing 0 in location 6
-# nothing else
-$mem: 6
-
-:(scenario tangle_stacks_multiple_fragments)
-recipe main [
-  1:integer <- copy 0:literal
-  +label1
-  6:integer <- copy 0:literal
-]
-before +label1 [
-  2:integer <- copy 0:literal
-]
-after +label1 [
-  3:integer <- copy 0:literal
-]
-before +label1 [
-  4:integer <- copy 0:literal
-]
-after +label1 [
-  5:integer <- copy 0:literal
-]
-+mem: storing 0 in location 1
-# 'before' fragments stack in order
-+mem: storing 0 in location 2
-+mem: storing 0 in location 4
-# label1
-# 'after' fragments stack in reverse order
-+mem: storing 0 in location 5
-+mem: storing 0 in location 3
-+mem: storing 0 in location 6
-# nothing else
-$mem: 6
-
-:(scenario tangle_supports_fragments_with_multiple_instructions)
-recipe main [
-  1:integer <- copy 0:literal
-  +label1
-  6:integer <- copy 0:literal
-]
-before +label1 [
-  2:integer <- copy 0:literal
-  3:integer <- copy 0:literal
-]
-after +label1 [
-  4:integer <- copy 0:literal
-  5:integer <- copy 0:literal
-]
-+mem: storing 0 in location 1
-+mem: storing 0 in location 2
-+mem: storing 0 in location 3
-# label1
-+mem: storing 0 in location 4
-+mem: storing 0 in location 5
-+mem: storing 0 in location 6
-# nothing else
-$mem: 6
-
-:(scenario tangle_tangles_into_all_labels_with_same_name)
-recipe main [
-  1:integer <- copy 0:literal
-  +label1
-  +label1
-  4:integer <- copy 0:literal
-]
-before +label1 [
-  2:integer <- copy 0:literal
-]
-after +label1 [
-  3:integer <- copy 0:literal
-]
-+mem: storing 0 in location 1
-+mem: storing 0 in location 2
-# label1
-+mem: storing 0 in location 3
-+mem: storing 0 in location 2
-# label1
-+mem: storing 0 in location 3
-+mem: storing 0 in location 4
-# nothing else
-$mem: 6
-
- - - diff --git a/html/999spaces.cc.html b/html/999spaces.cc.html index 0bda8ae1..c4ac40bc 100644 --- a/html/999spaces.cc.html +++ b/html/999spaces.cc.html @@ -2,7 +2,7 @@ -~/Desktop/s/mu/999spaces.cc.html +Mu - 999spaces.cc -- cgit 1.4.1-2-gfad0