diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2016-03-19 09:14:25 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2016-03-19 11:49:34 -0700 |
commit | fda4f09181db880dc5199d191161d75d8b9ad2b4 (patch) | |
tree | 458ddbe5b80205b17f0c53c937e274c85d4e24a8 | |
parent | b105b9799f5604027e82ff225c25bcf67b8523c7 (diff) | |
download | mu-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.cc | 50 | ||||
-rw-r--r-- | 074list.mu | 24 | ||||
-rw-r--r-- | 091run_interactive.cc | 4 |
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() = '.'; |