about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2016-03-19 09:14:25 -0700
committerKartik K. Agaram <vc@akkartik.com>2016-03-19 11:49:34 -0700
commitfda4f09181db880dc5199d191161d75d8b9ad2b4 (patch)
tree458ddbe5b80205b17f0c53c937e274c85d4e24a8
parentb105b9799f5604027e82ff225c25bcf67b8523c7 (diff)
downloadmu-fda4f09181db880dc5199d191161d75d8b9ad2b4.tar.gz
2795 - quick hacks for Caleb
It turns out that my extensible stash doesn't yet work well in all
situations. If you try to stash an array, you end up trying to create an
array local that's not statically sized -- a no-no.

Bah, just throw it all out.
-rw-r--r--071rewrite_stash.cc50
-rw-r--r--074list.mu24
-rw-r--r--091run_interactive.cc4
3 files changed, 2 insertions, 76 deletions
diff --git a/071rewrite_stash.cc b/071rewrite_stash.cc
deleted file mode 100644
index ea7c140f..00000000
--- a/071rewrite_stash.cc
+++ /dev/null
@@ -1,50 +0,0 @@
-//: when encountering other types, try to convert them to strings using
-//: 'to-text'
-
-:(scenarios transform)
-:(scenario rewrite_stashes_to_text)
-recipe main [
-  local-scope
-  n:number <- copy 34
-  stash n
-]
-+transform: stash_2_0:address:shared:array:character <- to-text-line n
-+transform: stash stash_2_0:address:shared:array:character
-
-:(before "End Instruction Inserting/Deleting Transforms")
-Transform.push_back(rewrite_stashes_to_text);
-
-:(code)
-void rewrite_stashes_to_text(recipe_ordinal r) {
-  recipe& caller = get(Recipe, r);
-  trace(9991, "transform") << "--- rewrite 'stash' instructions in recipe " << caller.name << end();
-  // in recipes without named locations, 'stash' is still not extensible
-  if (contains_numeric_locations(caller)) return;
-  rewrite_stashes_to_text(caller);
-}
-
-void rewrite_stashes_to_text(recipe& caller) {
-  vector<instruction> new_instructions;
-  for (int i = 0; i < SIZE(caller.steps); ++i) {
-    instruction& inst = caller.steps.at(i);
-    if (inst.name == "stash") {
-      for (int j = 0; j < SIZE(inst.ingredients); ++j) {
-        if (is_literal(inst.ingredients.at(j))) continue;
-        if (is_mu_string(inst.ingredients.at(j))) continue;
-        instruction def;
-        def.name = "to-text-line";
-        def.ingredients.push_back(inst.ingredients.at(j));
-        ostringstream ingredient_name;
-        ingredient_name << "stash_" << i << '_' << j << ":address:shared:array:character";
-        def.products.push_back(reagent(ingredient_name.str()));
-        trace(9993, "transform") << to_string(def) << end();
-        new_instructions.push_back(def);
-        inst.ingredients.at(j).clear();  // reclaim old memory
-        inst.ingredients.at(j) = reagent(ingredient_name.str());
-      }
-    }
-    trace(9993, "transform") << to_string(inst) << end();
-    new_instructions.push_back(inst);
-  }
-  caller.steps.swap(new_instructions);
-}
diff --git a/074list.mu b/074list.mu
index 6cb7a9a1..d6f43a2c 100644
--- a/074list.mu
+++ b/074list.mu
@@ -102,27 +102,3 @@ def to-buffer in:address:shared:list:_elem, buf:address:shared:buffer -> buf:add
   # past recursion depth; insert ellipses and stop
   append buf, [...]
 ]
-
-scenario stash-on-list-converts-to-text [
-  run [
-    x:address:shared:list:number <- push 4, 0
-    x <- push 5, x
-    x <- push 6, x
-    stash [foo foo], x
-  ]
-  trace-should-contain [
-    app: foo foo 6 -> 5 -> 4
-  ]
-]
-
-scenario stash-handles-list-with-cycle [
-  run [
-    x:address:shared:list:number <- push 4, 0
-    y:address:address:shared:list:number <- get-address *x, next:offset
-    *y <- copy x
-    stash [foo foo], x
-  ]
-  trace-should-contain [
-    app: foo foo 4 -> 4 -> 4 -> 4 -> 4 -> 4 -> 4 -> ...
-  ]
-]
diff --git a/091run_interactive.cc b/091run_interactive.cc
index 70929a91..1e6bf9c2 100644
--- a/091run_interactive.cc
+++ b/091run_interactive.cc
@@ -427,8 +427,8 @@ int trace_app_contents() {
 }
 
 void truncate(string& x) {
-  if (SIZE(x) > 512) {
-    x.erase(512);
+  if (SIZE(x) > 1024) {
+    x.erase(1024);
     *x.rbegin() = '\n';
     *++x.rbegin() = '.';
     *++++x.rbegin() = '.';