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 /071rewrite_stash.cc | |
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.
Diffstat (limited to '071rewrite_stash.cc')
-rw-r--r-- | 071rewrite_stash.cc | 50 |
1 files changed, 0 insertions, 50 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); -} |