about summary refs log tree commit diff stats
Commit message (Expand)AuthorAgeFilesLines
* .Kartik K. Agaram2021-04-281-3/+1
* shell: bugfix for stream literalsKartik K. Agaram2021-04-281-2/+33
* start rendering definitions with indentationKartik K. Agaram2021-04-281-12/+6
* start stashing and clearing sandbox after definitionsKartik K. Agaram2021-04-283-9/+80
* .Kartik K. Agaram2021-04-281-1/+1
* .Kartik K. Agaram2021-04-282-36/+20
* shell: stream literalsKartik K. Agaram2021-04-274-3/+47
* .Kartik K. Agaram2021-04-271-17/+17
* .Kartik K. Agaram2021-04-271-73/+18
* shell: tokenizing stream (string) literalsKartik K. Agaram2021-04-271-1/+78
* .Kartik K. Agaram2021-04-271-8/+1
* .Kartik Agaram2021-04-261-5/+5
* bresenham circlesKartik K. Agaram2021-04-251-1/+22
* bug in bresenham linesKartik K. Agaram2021-04-251-2/+2
* shell: primitives 'and' and 'or'Kartik K. Agaram2021-04-252-11/+87
* shell: primitive 'not'Kartik K. Agaram2021-04-251-4/+45
* failing tests not printing since show-stack-stateKartik K. Agaram2021-04-251-1/+10
* .Kartik K. Agaram2021-04-252-4/+4
* .Kartik K. Agaram2021-04-251-56/+56
* .Kartik K. Agaram2021-04-252-1/+1
* .Kartik K. Agaram2021-04-251-94/+0
* expand stack to 16MBKartik K. Agaram2021-04-253-6/+6
* shell: tab inserts two spacesKartik K. Agaram2021-04-251-0/+8
* shell: use ctrl-m rather than tab to bounce to traceKartik K. Agaram2021-04-252-10/+10
* .Kartik K. Agaram2021-04-251-1/+2
* devote 2/3rds of screen to definitionsKartik K. Agaram2021-04-252-3/+3
* add some padding to the sandboxKartik K. Agaram2021-04-252-2/+2
* a troubleshooting noteKartik K. Agaram2021-04-251-0/+11
* .Kartik K. Agaram2021-04-251-2/+0
* expand memory to 2GBKartik K. Agaram2021-04-253-7/+11
* expand heap to Qemu defaultKartik Agaram2021-04-252-3/+3
* .Kartik Agaram2021-04-242-257/+0
* bugfix; thanks Max BernsteinKartik Agaram2021-04-241-1/+1
* .Kartik Agaram2021-04-231-2/+16
* shell: some example definitionsKartik Agaram2021-04-233-0/+180
* .Kartik Agaram2021-04-2212-40737/+41324
* better error message on trace overflowKartik K. Agaram2021-04-221-1/+8
* faster emulationKartik K. Agaram2021-04-221-2/+2
* clean up with the final bugfixKartik K. Agaram2021-04-222-62/+9
* snapshotKartik K. Agaram2021-04-222-2/+62
* .Kartik K. Agaram2021-04-222-0/+39
* .Kartik K. Agaram2021-04-221-0/+13
* .Kartik K. Agaram2021-04-221-2/+9
* shell: non-recursive 'while'Kartik K. Agaram2021-04-211-14/+58
* shell: refuse to 'def' duplicate namesKartik K. Agaram2021-04-212-2/+46
* shell: separate 'def' from 'set'Kartik K. Agaram2021-04-214-7/+272
* slightly more responsive animationKartik K. Agaram2021-04-211-1/+1
* clear old output when new run is in progressKartik K. Agaram2021-04-212-69/+94
* .Kartik K. Agaram2021-04-212-14/+14
* .Kartik K. Agaram2021-04-211-1/+1
">:(scenario passing_literals_to_recipes) def main [ 1:number/raw <- foo [abc] ] def foo x:address:array:character -> n:number [ local-scope load-ingredients n <- length *x ] +mem: storing 3 in location 1 :(before "End Instruction Inserting/Deleting Transforms") initialize_transform_rewrite_literal_string_to_text(); Transform.push_back(rewrite_literal_string_to_text); :(before "End Globals") set<string> recipes_taking_literal_strings; :(code) void initialize_transform_rewrite_literal_string_to_text() { recipes_taking_literal_strings.insert("$print"); recipes_taking_literal_strings.insert("$system"); recipes_taking_literal_strings.insert("trace"); recipes_taking_literal_strings.insert("stash"); recipes_taking_literal_strings.insert("assert"); recipes_taking_literal_strings.insert("new"); recipes_taking_literal_strings.insert("run"); recipes_taking_literal_strings.insert("assume-console"); recipes_taking_literal_strings.insert("memory-should-contain"); recipes_taking_literal_strings.insert("trace-should-contain"); recipes_taking_literal_strings.insert("trace-should-not-contain"); recipes_taking_literal_strings.insert("check-trace-count-for-label"); recipes_taking_literal_strings.insert("screen-should-contain"); recipes_taking_literal_strings.insert("screen-should-contain-in-color"); } void rewrite_literal_string_to_text(recipe_ordinal r) { recipe& caller = get(Recipe, r); trace(9991, "transform") << "--- rewrite literal strings in recipe " << caller.name << end(); if (contains_numeric_locations(caller)) return; vector<instruction> new_instructions; for (int i = 0; i < SIZE(caller.steps); ++i) { instruction& inst = caller.steps.at(i); if (recipes_taking_literal_strings.find(inst.name) == recipes_taking_literal_strings.end()) { for (int j = 0; j < SIZE(inst.ingredients); ++j) { if (!is_literal_string(inst.ingredients.at(j))) continue; instruction def; ostringstream ingredient_name; ingredient_name << inst.name << '_' << i << '_' << j << ":address:array:character"; def.name = "new"; def.ingredients.push_back(inst.ingredients.at(j)); def.products.push_back(reagent(ingredient_name.str())); new_instructions.push_back(def); inst.ingredients.at(j).clear(); // reclaim old memory inst.ingredients.at(j) = reagent(ingredient_name.str()); } } new_instructions.push_back(inst); } caller.steps.swap(new_instructions); } bool contains_numeric_locations(const recipe& caller) { for (int i = 0; i < SIZE(caller.steps); ++i) { const instruction& inst = caller.steps.at(i); for (int in = 0; in < SIZE(inst.ingredients); ++in) if (is_numeric_location(inst.ingredients.at(in))) return true; for (int out = 0; out < SIZE(inst.products); ++out) if (is_numeric_location(inst.products.at(out))) return true; } return false; }