From eaeb955212eb3b133fd98d98457f17bfea8891d1 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Thu, 6 Aug 2015 19:15:57 -0700 Subject: 1949 --- html/044space.cc.html | 87 ++++++++++++++++++++++++++------------------------- 1 file changed, 44 insertions(+), 43 deletions(-) (limited to 'html/044space.cc.html') diff --git a/html/044space.cc.html b/html/044space.cc.html index 3f5b1b8c..b538647a 100644 --- a/html/044space.cc.html +++ b/html/044space.cc.html @@ -14,14 +14,15 @@ pre { white-space: pre-wrap; font-family: monospace; color: #eeeeee; background- body { font-family: monospace; color: #eeeeee; background-color: #080808; } * { font-size: 1.05em; } .traceContains { color: #008000; } +.SalientComment { color: #00ffff; } .Constant { color: #00a0a0; } +.CommentedCode { color: #6c6c6c; } .cSpecial { color: #008000; } -.SalientComment { color: #00ffff; } +.Normal { color: #eeeeee; background-color: #080808; padding-bottom: 1px; } .Comment { color: #9090ff; } .Delimiter { color: #a04060; } .Special { color: #ff6060; } .traceAbsent { color: #c00000; } -.CommentedCode { color: #6c6c6c; } .Identifier { color: #804000; } --> @@ -43,7 +44,7 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } # then location 0 is really location 11, location 1 is really location 12, and so on. recipe main [ 10:number <- copy 5 # pretend array; in practice we'll use new - default-space:address:array:location <- copy 10 + default-space:address:array:location <- copy 10 1:number <- copy 23 ] +mem: storing 23 in location 12 @@ -55,7 +56,7 @@ recipe main [ # pretend array 1000:number <- copy 5 # actual start of this recipe - default-space:address:array:location <- copy 1000 + default-space:address:array:location <- copy 1000 1:address:number <- copy 3 8:number/raw <- copy *1:address:number ] @@ -64,20 +65,20 @@ recipe main [ //:: first disable name conversion for 'default-space' :(scenario convert_names_passes_default_space) recipe main [ - default-space:number, x:number <- copy 0, 1 + default-space:number, x:number <- copy 0, 1 ] +name: assign x 1 -name: assign default-space 1 :(before "End Disqualified Reagents") -if (x.name == "default-space") +if (x.name == "default-space") x.initialized = true; :(before "End is_special_name Cases") -if (s == "default-space") return true; +if (s == "default-space") return true; //:: now implement space support :(before "End call Fields") -long long int default_space; +long long int default_space; :(before "End call Constructor") default_space = 0; @@ -86,8 +87,8 @@ reagent r = absolutize(x) :(code) reagent absolutize(reagent x) { //? cout << "absolutize " << x.to_string() << '\n'; //? 4 - if (is_raw(x) || is_dummy(x)) return x; - if (!x.initialized) { + if (is_raw(x) || is_dummy(x)) return x; + if (!x.initialized) { raise << current_instruction().to_string() << ": reagent not initialized: " << x.original_string << end(); return x; } @@ -110,7 +111,7 @@ recipe main [ # pretend array 1000:number <- copy 5 # actual start of this recipe - default-space:address:array:location <- copy 1000 + default-space:address:array:location <- copy 1000 1:address:point <- copy 12 9:number/raw <- get *1:address:point, 1:offset ] @@ -130,7 +131,7 @@ recipe main [ # pretend array 1000:number <- copy 5 # actual start of this recipe - default-space:address:array:location <- copy 1000 + default-space:address:array:location <- copy 1000 1:address:array:number <- copy 12 9:number/raw <- index *1:address:array:number, 1 ] @@ -144,36 +145,36 @@ tmp.properties.pus :(scenario new_default_space) recipe main [ - new-default-space - x:number <- copy 0 - y:number <- copy 3 + new-default-space + x:number <- copy 0 + y:number <- copy 3 ] # allocate space for x and y, as well as the chaining slot at 0 +mem: array size is 3 :(before "End Disqualified Reagents") -if (x.name == "number-of-locals") +if (x.name == "number-of-locals") x.initialized = true; :(before "End is_special_name Cases") -if (s == "number-of-locals") return true; +if (s == "number-of-locals") return true; :(before "End Rewrite Instruction(curr)") // rewrite `new-default-space` to // `default-space:address:array:location <- new location:type, number-of-locals:literal` // where N is Name[recipe][""] -if (curr.name == "new-default-space") { +if (curr.name == "new-default-space") { rewrite_default_space_instruction(curr); } :(after "vector<double> read_memory(reagent x)") - if (x.name == "number-of-locals") { - vector<double> result; + if (x.name == "number-of-locals") { + vector<double> result; result.push_back(Name[Recipe_ordinal[current_recipe_name()]][""]); - if (result.back() == 0) + if (result.back() == 0) raise << "no space allocated for default-space in recipe " << current_recipe_name() << "; are you using names\n" << end(); return result; } :(after "void write_memory(reagent x, vector<double> data)") - if (x.name == "number-of-locals") { + if (x.name == "number-of-locals") { raise << current_recipe_name() << ": can't write to special name 'number-of-locals'\n" << end(); return; } @@ -189,8 +190,8 @@ recipe main [ ] recipe foo [ local-scope - x:number <- copy 34 - reply default-space:address:array:location + x:number <- copy 34 + reply default-space:address:array:location ] # both calls to foo should have received the same default-space +mem: storing 1 in location 3 @@ -203,28 +204,28 @@ try_reclaim_locals(); //: now 'local-scope' is identical to 'new-default-space' except that we'll //: reclaim the default-space when the routine exits :(before "End Rewrite Instruction(curr)") -if (curr.name == "local-scope") { +if (curr.name == "local-scope") { rewrite_default_space_instruction(curr); } :(code) -void try_reclaim_locals() { +void try_reclaim_locals() { // only reclaim routines starting with 'local-scope' - const recipe_ordinal r = Recipe_ordinal[current_recipe_name()]; - if (Recipe[r].steps.empty()) return; - const instruction& inst = Recipe[r].steps.at(0); - if (inst.name != "local-scope") return; + const recipe_ordinal r = Recipe_ordinal[current_recipe_name()]; + if (Recipe[r].steps.empty()) return; + const instruction& inst = Recipe[r].steps.at(0); + if (inst.name != "local-scope") return; abandon(Current_routine->calls.front().default_space, /*array length*/1+/*number-of-locals*/Name[r][""]); } -void rewrite_default_space_instruction(instruction& curr) { +void rewrite_default_space_instruction(instruction& curr) { curr.operation = Recipe_ordinal["new"]; - if (!curr.ingredients.empty()) + if (!curr.ingredients.empty()) raise << "new-default-space can't take any ingredients\n" << end(); curr.ingredients.push_back(reagent("location:type")); curr.ingredients.push_back(reagent("number-of-locals:literal")); - if (!curr.products.empty()) + if (!curr.products.empty()) raise << "new-default-space can't take any results\n" << end(); curr.products.push_back(reagent("default-space:address:array:location")); } @@ -232,14 +233,14 @@ void rewrite_default_space_instruction(instructio //:: helpers :(code) -long long int space_base(const reagent& x) { +long long int space_base(const reagent& x) { return Current_routine->calls.front().default_space; } -long long int address(long long int offset, long long int base) { - if (base == 0) return offset; // raw +long long int address(long long int offset, long long int base) { + if (base == 0) return offset; // raw //? cout << base << '\n'; //? 2 - if (offset >= static_cast<long long int>(Memory[base])) { + if (offset >= static_cast<long long int>(Memory[base])) { // todo: test raise << "location " << offset << " is out of bounds " << Memory[base] << " at " << base << '\n' << end(); } @@ -247,8 +248,8 @@ long long int address(long long int offset} :(after "void write_memory(reagent x, vector<double> data)") - if (x.name == "default-space") { - if (!scalar(data)) + if (x.name == "default-space") { + if (!scalar(data)) raise << current_recipe_name() << ": 'default-space' should be of type address:array:location, but tried to write " << to_string(data) << '\n' << end(); Current_routine->calls.front().default_space = data.at(0); return; @@ -256,14 +257,14 @@ long long int address(long long int offset:(scenario get_default_space) recipe main [ - default-space:address:array:location <- copy 10 - 1:number/raw <- copy default-space:address:array:location + default-space:address:array:location <- copy 10 + 1:number/raw <- copy default-space:address:array:location ] +mem: storing 10 in location 1 :(after "vector<double> read_memory(reagent x)") - if (x.name == "default-space") { - vector<double> result; + if (x.name == "default-space") { + vector<double> result; result.push_back(Current_routine->calls.front().default_space); return result; } -- cgit 1.4.1-2-gfad0