From 201458e3bd2f1d79a0ea0b853552e9df267e92b1 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Mon, 26 Dec 2016 20:44:10 -0800 Subject: 3713 - cross-link calls with definitions in html --- html/020run.cc.html | 114 ++++++++++++++++++++++++++-------------------------- 1 file changed, 57 insertions(+), 57 deletions(-) (limited to 'html/020run.cc.html') diff --git a/html/020run.cc.html b/html/020run.cc.html index 4956eb0b..9c977ae8 100644 --- a/html/020run.cc.html +++ b/html/020run.cc.html @@ -76,14 +76,14 @@ if ('onhashchange' in window) { 13 //: another. Later layers will add more primitives. 14 15 :(scenario copy_literal) - 16 def main [ + 16 def main [ 17 1:num <- copy 23 18 ] 19 +run: {1: "number"} <- copy {23: "literal"} 20 +mem: storing 23 in location 1 21 22 :(scenario copy) - 23 def main [ + 23 def main [ 24 1:num <- copy 23 25 2:num <- copy 1:num 26 ] @@ -92,7 +92,7 @@ if ('onhashchange' in window) { 29 +mem: storing 23 in location 2 30 31 :(scenario copy_multiple) - 32 def main [ + 32 def main [ 33 1:num, 2:num <- copy 23, 24 34 ] 35 +mem: storing 23 in location 1 @@ -102,9 +102,9 @@ if ('onhashchange' in window) { 39 // Book-keeping while running a recipe. 40 //: Later layers will replace this to support running multiple routines at once. 41 struct routine { - 42 recipe_ordinal running_recipe; + 42 recipe_ordinal running_recipe; 43 int running_step_index; - 44 routine(recipe_ordinal r) :running_recipe(r), running_step_index(0) {} + 44 routine(recipe_ordinal r) :running_recipe(r), running_step_index(0) {} 45 bool completed() const; 46 const vector<instruction>& steps() const; 47 }; @@ -118,7 +118,7 @@ if ('onhashchange' in window) { 55 Current_routine = NULL; 56 57 :(code) - 58 void run(const recipe_ordinal r) { + 58 void run(const recipe_ordinal r) { 59 routine rr(r); 60 Current_routine = &rr; 61 run_current_routine(); @@ -126,26 +126,26 @@ if ('onhashchange' in window) { 63 } 64 65 void run_current_routine() { - 66 while (should_continue_running(Current_routine)) { // beware: may modify Current_routine + 66 while (should_continue_running(Current_routine)) { // beware: may modify Current_routine 67 // Running One Instruction 68 if (current_instruction().is_label) { ++current_step_index(); continue; } - 69 trace(Initial_callstack_depth + Trace_stream->callstack_depth, "run") << to_string(current_instruction()) << end(); - 70 if (get_or_insert(Memory, 0) != 0) { - 71 raise << "something wrote to location 0; this should never happen\n" << end(); - 72 put(Memory, 0, 0); + 69 trace(Initial_callstack_depth + Trace_stream->callstack_depth, "run") << to_string(current_instruction()) << end(); + 70 if (get_or_insert(Memory, 0) != 0) { + 71 raise << "something wrote to location 0; this should never happen\n" << end(); + 72 put(Memory, 0, 0); 73 } 74 // read all ingredients from memory, each potentially spanning multiple locations 75 vector<vector<double> > ingredients; 76 if (should_copy_ingredients()) { - 77 for (int i = 0; i < SIZE(current_instruction().ingredients); ++i) + 77 for (int i = 0; i < SIZE(current_instruction().ingredients); ++i) 78 ingredients.push_back(read_memory(current_instruction().ingredients.at(i))); 79 } 80 // instructions below will write to 'products' 81 vector<vector<double> > products; 82 switch (current_instruction().operation) { 83 // Primitive Recipe Implementations - 84 case COPY: { - 85 copy(ingredients.begin(), ingredients.end(), inserter(products, products.begin())); + 84 case COPY: { + 85 copy(ingredients.begin(), ingredients.end(), inserter(products, products.begin())); 86 break; 87 } 88 // End Primitive Recipe Implementations @@ -154,11 +154,11 @@ if ('onhashchange' in window) { 91 } 92 } 93 // Write Products of Instruction - 94 if (SIZE(products) < SIZE(current_instruction().products)) { - 95 raise << SIZE(products) << " vs " << SIZE(current_instruction().products) << ": failed to write to all products! " << to_original_string(current_instruction()) << '\n' << end(); + 94 if (SIZE(products) < SIZE(current_instruction().products)) { + 95 raise << SIZE(products) << " vs " << SIZE(current_instruction().products) << ": failed to write to all products! " << to_original_string(current_instruction()) << '\n' << end(); 96 } 97 else { - 98 for (int i = 0; i < SIZE(current_instruction().products); ++i) + 98 for (int i = 0; i < SIZE(current_instruction().products); ++i) 99 write_memory(current_instruction().products.at(i), products.at(i)); 100 } 101 // End Write Products of Instruction @@ -170,7 +170,7 @@ if ('onhashchange' in window) { 107 } 108 109 //: hook replaced in a later layer -110 bool should_continue_running(const routine* current_routine) { +110 bool should_continue_running(const routine* current_routine) { 111 assert(current_routine == Current_routine); // argument passed in just to make caller readable above 112 return !Current_routine->completed(); 113 } @@ -205,7 +205,7 @@ if ('onhashchange' in window) { 142 143 //: hook replaced in a later layer 144 bool routine::completed() const { -145 return running_step_index >= SIZE(get(Recipe, running_recipe).steps); +145 return running_step_index >= SIZE(get(Recipe, running_recipe).steps); 146 } 147 148 //: hook replaced in a later layer @@ -236,7 +236,7 @@ if ('onhashchange' in window) { 173 while (argc > 0) { 174 // ignore argv past '--'; that's commandline args for 'main' 175 if (string(*argv) == "--") break; -176 if (starts_with(*argv, "--")) +176 if (starts_with(*argv, "--")) 177 cerr << "treating " << *argv << " as a file rather than an option\n"; 178 load_file_or_directory(*argv); 179 --argc; @@ -244,10 +244,10 @@ if ('onhashchange' in window) { 181 } 182 if (Run_tests) Recipe.erase(get(Recipe_ordinal, "main")); 183 } -184 transform_all(); +184 transform_all(); 185 //? DUMP(""); 186 //? exit(0); -187 if (trace_contains_errors()) return 1; +187 if (trace_contains_errors()) return 1; 188 save_snapshots(); 189 190 //: Step 3: if we aren't running tests, locate a recipe called 'main' and @@ -255,19 +255,19 @@ if ('onhashchange' in window) { 192 :(before "End Main") 193 if (!Run_tests && contains_key(Recipe_ordinal, "main") && contains_key(Recipe, get(Recipe_ordinal, "main"))) { 194 // Running Main -195 setup(); +195 setup(); 196 if (Start_tracing) { 197 Trace_stream = new trace_stream; 198 Save_trace = true; 199 } -200 trace(2, "run") << "=== Starting to run" << end(); +200 trace(2, "run") << "=== Starting to run" << end(); 201 assert(Num_calls_to_transform_all == 1); -202 run_main(argc, argv); -203 teardown(); +202 run_main(argc, argv); +203 teardown(); 204 } 205 :(code) -206 void run_main(int argc, char* argv[]) { -207 recipe_ordinal r = get(Recipe_ordinal, "main"); +206 void run_main(int argc, char* argv[]) { +207 recipe_ordinal r = get(Recipe_ordinal, "main"); 208 if (r) run(r); 209 } 210 @@ -276,21 +276,21 @@ if ('onhashchange' in window) { 213 :(before "End Globals") 214 bool Start_tracing = false; 215 :(before "End Commandline Options(*arg)") -216 else if (is_equal(*arg, "--trace")) { +216 else if (is_equal(*arg, "--trace")) { 217 Start_tracing = true; 218 } 219 220 :(code) 221 void dump_profile() { -222 for (map<string, int>::iterator p = Instructions_running.begin(); p != Instructions_running.end(); ++p) { +222 for (map<string, int>::iterator p = Instructions_running.begin(); p != Instructions_running.end(); ++p) { 223 cerr << p->first << ": " << p->second << '\n'; 224 } 225 cerr << "== locations read\n"; -226 for (map<string, int>::iterator p = Locations_read.begin(); p != Locations_read.end(); ++p) { +226 for (map<string, int>::iterator p = Locations_read.begin(); p != Locations_read.end(); ++p) { 227 cerr << p->first << ": " << p->second << '\n'; 228 } -229 cerr << "== locations read by instruction\n"; -230 for (map<string, int>::iterator p = Locations_read_by_instruction.begin(); p != Locations_read_by_instruction.end(); ++p) { +229 cerr << "== locations read by instruction\n"; +230 for (map<string, int>::iterator p = Locations_read_by_instruction.begin(); p != Locations_read_by_instruction.end(); ++p) { 231 cerr << p->first << ": " << p->second << '\n'; 232 } 233 } @@ -301,7 +301,7 @@ if ('onhashchange' in window) { 238 void cleanup_main() { 239 if (Save_trace && Trace_stream) { 240 ofstream fout("interactive"); -241 fout << Trace_stream->readable_contents(""); +241 fout << Trace_stream->readable_contents(""); 242 fout.close(); 243 } 244 if (Trace_stream) delete Trace_stream, Trace_stream = NULL; @@ -317,10 +317,10 @@ if ('onhashchange' in window) { 254 } 255 ifstream fin(filename.c_str()); 256 if (!fin) { -257 cerr << "no such file '" << filename << "'\n" << end(); // don't raise, just warn. just in case it's just a name for a scenario to run. +257 cerr << "no such file '" << filename << "'\n" << end(); // don't raise, just warn. just in case it's just a name for a scenario to run. 258 return; 259 } -260 trace(9990, "load") << "=== " << filename << end(); +260 trace(9990, "load") << "=== " << filename << end(); 261 load(fin); 262 fin.close(); 263 } @@ -360,8 +360,8 @@ if ('onhashchange' in window) { 297 // End Preprocess read_memory(x) 298 int size = size_of(x); 299 for (int offset = 0; offset < size; ++offset) { -300 double val = get_or_insert(Memory, x.value+offset); -301 trace(9999, "mem") << "location " << x.value+offset << " is " << no_scientific(val) << end(); +300 double val = get_or_insert(Memory, x.value+offset); +301 trace(9999, "mem") << "location " << x.value+offset << " is " << no_scientific(val) << end(); 302 result.push_back(val); 303 } 304 return result; @@ -371,25 +371,25 @@ if ('onhashchange' in window) { 308 assert(Current_routine); // run-time only 309 // Begin Preprocess write_memory(x, data) 310 if (!x.type) { -311 raise << "can't write to '" << to_string(x) << "'; no type\n" << end(); +311 raise << "can't write to '" << to_string(x) << "'; no type\n" << end(); 312 return; 313 } 314 if (is_dummy(x)) return; 315 if (is_literal(x)) return; 316 // End Preprocess write_memory(x, data) 317 if (x.value == 0) { -318 raise << "can't write to location 0 in '" << to_original_string(current_instruction()) << "'\n" << end(); +318 raise << "can't write to location 0 in '" << to_original_string(current_instruction()) << "'\n" << end(); 319 return; 320 } 321 if (size_mismatch(x, data)) { -322 raise << maybe(current_recipe_name()) << "size mismatch in storing to '" << x.original_string << "' (" << size_of(x) << " vs " << SIZE(data) << ") at '" << to_original_string(current_instruction()) << "'\n" << end(); +322 raise << maybe(current_recipe_name()) << "size mismatch in storing to '" << x.original_string << "' (" << size_of(x) << " vs " << SIZE(data) << ") at '" << to_original_string(current_instruction()) << "'\n" << end(); 323 return; 324 } 325 // End write_memory(x) Special-cases -326 for (int offset = 0; offset < SIZE(data); ++offset) { +326 for (int offset = 0; offset < SIZE(data); ++offset) { 327 assert(x.value+offset > 0); -328 trace(9999, "mem") << "storing " << no_scientific(data.at(offset)) << " in location " << x.value+offset << end(); -329 put(Memory, x.value+offset, data.at(offset)); +328 trace(9999, "mem") << "storing " << no_scientific(data.at(offset)) << " in location " << x.value+offset << end(); +329 put(Memory, x.value+offset, data.at(offset)); 330 } 331 } 332 @@ -408,7 +408,7 @@ if ('onhashchange' in window) { 345 } 346 else { 347 if (!type->left->atom) { -348 raise << "invalid type " << to_string(type) << '\n' << end(); +348 raise << "invalid type " << to_string(type) << '\n' << end(); 349 return 0; 350 } 351 if (type->left->value == get(Type_ordinal, "address")) return 1; @@ -422,7 +422,7 @@ if ('onhashchange' in window) { 359 if (!x.type) return true; 360 // End size_mismatch(x) Special-cases 361 //? if (size_of(x) != SIZE(data)) cerr << size_of(x) << " vs " << SIZE(data) << '\n'; -362 return size_of(x) != SIZE(data); +362 return size_of(x) != SIZE(data); 363 } 364 365 bool is_literal(const reagent& r) { @@ -435,18 +435,18 @@ if ('onhashchange' in window) { 372 } 373 374 bool scalar(const vector<int>& x) { -375 return SIZE(x) == 1; +375 return SIZE(x) == 1; 376 } 377 bool scalar(const vector<double>& x) { -378 return SIZE(x) == 1; +378 return SIZE(x) == 1; 379 } 380 381 // helper for tests 382 void run(const string& form) { 383 vector<recipe_ordinal> tmp = load(form); -384 transform_all(); +384 transform_all(); 385 if (tmp.empty()) return; -386 if (trace_contains_errors()) return; +386 if (trace_contains_errors()) return; 387 // if a test defines main, it probably wants to start there regardless of 388 // definition order 389 if (contains_key(Recipe, get(Recipe_ordinal, "main"))) @@ -456,7 +456,7 @@ if ('onhashchange' in window) { 393 } 394 395 :(scenario run_label) -396 def main [ +396 def main [ 397 +foo 398 1:num <- copy 23 399 2:num <- copy 1:num @@ -466,14 +466,14 @@ if ('onhashchange' in window) { 403 -run: +foo 404 405 :(scenario run_dummy) -406 def main [ +406 def main [ 407 _ <- copy 0 408 ] 409 +run: _ <- copy {0: "literal"} 410 411 :(scenario write_to_0_disallowed) 412 % Hide_errors = true; -413 def main [ +413 def main [ 414 0:num <- copy 34 415 ] 416 -mem: storing 34 in location 0 @@ -482,25 +482,25 @@ if ('onhashchange' in window) { 419 //: to put spaces around the '<-'. 420 421 :(scenario comma_without_space) -422 def main [ +422 def main [ 423 1:num, 2:num <- copy 2,2 424 ] 425 +mem: storing 2 in location 1 426 427 :(scenario space_without_comma) -428 def main [ +428 def main [ 429 1:num, 2:num <- copy 2 2 430 ] 431 +mem: storing 2 in location 1 432 433 :(scenario comma_before_space) -434 def main [ +434 def main [ 435 1:num, 2:num <- copy 2, 2 436 ] 437 +mem: storing 2 in location 1 438 439 :(scenario comma_after_space) -440 def main [ +440 def main [ 441 1:num, 2:num <- copy 2 ,2 442 ] 443 +mem: storing 2 in location 1 -- cgit 1.4.1-2-gfad0