diff options
-rw-r--r-- | 012transform.cc | 1 | ||||
-rw-r--r-- | 050scenario.cc | 4 | ||||
-rw-r--r-- | 091run_interactive.cc | 10 | ||||
-rw-r--r-- | edit/010-warnings.mu | 35 |
4 files changed, 48 insertions, 2 deletions
diff --git a/012transform.cc b/012transform.cc index 7837ae67..ad0d2b73 100644 --- a/012transform.cc +++ b/012transform.cc @@ -42,6 +42,7 @@ void transform_all() { r.transformed_until = t; } } +//? cerr << "wrapping up transform\n"; parse_int_reagents(); // do this after all other transforms have run // End Transform All } diff --git a/050scenario.cc b/050scenario.cc index 71dfa72d..9f4c5c86 100644 --- a/050scenario.cc +++ b/050scenario.cc @@ -197,9 +197,13 @@ case RUN: { case RUN: { ostringstream tmp; tmp << "recipe run" << Next_recipe_ordinal << " [ " << current_instruction().ingredients.at(0).name << " ]"; +//? cerr << "before load\n"; vector<recipe_ordinal> tmp_recipe = load(tmp.str()); +//? cerr << "before bind\n"; bind_special_scenario_names(tmp_recipe.at(0)); +//? cerr << "before transform\n"; transform_all(); +//? cerr << "end\n"; if (Trace_stream) { ++Trace_stream->callstack_depth; trace(9998, "trace") << "run: incrementing callstack depth to " << Trace_stream->callstack_depth << end(); diff --git a/091run_interactive.cc b/091run_interactive.cc index 25e02836..a883a5ae 100644 --- a/091run_interactive.cc +++ b/091run_interactive.cc @@ -107,6 +107,7 @@ bool run_interactive(long long int address) { } void run_code_begin() { +//? cerr << "loading new trace\n"; // stuff to undo later, in run_code_end() Hide_warnings = true; Hide_errors = true; @@ -119,6 +120,7 @@ void run_code_begin() { } void run_code_end() { +//? cerr << "back to old trace\n"; Hide_warnings = false; Hide_errors = false; Disable_redefine_warnings = false; @@ -127,6 +129,7 @@ void run_code_end() { Save_trace_stream = NULL; Trace_file = Save_trace_file; Save_trace_file.clear(); + Recipe.erase(get(Recipe_ordinal, "interactive")); // keep past sandboxes from inserting errors } :(before "End Load Recipes") @@ -417,6 +420,7 @@ case RELOAD: { } :(before "End Primitive Recipe Implementations") case RELOAD: { +//? cerr << "== reload\n"; // clear any containers in advance for (long long int i = 0; i < SIZE(recently_added_types); ++i) { Type_ordinal.erase(get(Type, recently_added_types.at(i)).name); @@ -427,15 +431,17 @@ case RELOAD: { routine* save_current_routine = Current_routine; Current_routine = NULL; vector<recipe_ordinal> recipes_reloaded = load(code); - for (long long int i = 0; i < SIZE(recipes_reloaded); ++i) { + // clear a few things from previous runs + // ad hoc list; we've probably missed a few + for (long long int i = 0; i < SIZE(recipes_reloaded); ++i) Name.erase(recipes_reloaded.at(i)); - } transform_all(); Trace_stream->newline(); // flush trace Current_routine = save_current_routine; products.resize(1); products.at(0).push_back(trace_error_warning_contents()); run_code_end(); // wait until we're done with the trace contents +//? cerr << "reload done\n"; break; } diff --git a/edit/010-warnings.mu b/edit/010-warnings.mu index 6e5eeace..b2d927c2 100644 --- a/edit/010-warnings.mu +++ b/edit/010-warnings.mu @@ -54,6 +54,7 @@ recipe! update-sandbox sandbox:address:sandbox-data -> sandbox:address:sandbox-d warnings:address:address:array:character <- get-address *sandbox, warnings:offset trace:address:address:array:character <- get-address *sandbox, trace:offset fake-screen:address:address:screen <- get-address *sandbox, screen:offset +#? $print [run-interactive], 10/newline *response, *warnings, *fake-screen, *trace, completed?:boolean <- run-interactive data { break-if *warnings @@ -61,6 +62,7 @@ recipe! update-sandbox sandbox:address:sandbox-data -> sandbox:address:sandbox-d *warnings <- new [took too long! ] } +#? $print [done with run-interactive], 10/newline ] # make sure we render any trace @@ -115,6 +117,39 @@ recipe foo [ ] ] +scenario run-hides-warnings-from-past-sandboxes [ + trace-until 100/app # trace too long + assume-screen 100/width, 15/height + 1:address:array:character <- new [] + 2:address:array:character <- new [get foo, x:offset] # invalid + 3:address:programming-environment-data <- new-programming-environment screen:address:screen, 1:address:array:character, 2:address:array:character + assume-console [ + press F4 # generate error + ] + run [ + event-loop screen:address:screen, console:address:console, 3:address:programming-environment-data + ] + assume-console [ + left-click 3, 80 + press ctrl-k + type [add 2, 2] # valid code + press F4 # error should disappear + ] + run [ + event-loop screen:address:screen, console:address:console, 3:address:programming-environment-data + ] + screen-should-contain [ + . run (F4) . + . ┊ . + .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + . ┊ x. + . ┊add 2, 2 . + . ┊4 . + . ┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + . ┊ . + ] +] + scenario run-shows-missing-type-warnings [ trace-until 100/app # trace too long assume-screen 100/width, 15/height |