about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-08-28 09:34:34 -0700
committerKartik K. Agaram <vc@akkartik.com>2015-08-28 09:34:34 -0700
commita632ccef233a45db9b40df3e0ad711912d9ad5df (patch)
treea1e4e9edcb3ba6de26d4664318b44a0ffb88dea8
parent011b34c04cad5f89fba4e1d7ccac8a66ea39e7f0 (diff)
downloadmu-a632ccef233a45db9b40df3e0ad711912d9ad5df.tar.gz
2088 - warn on duplicate scenario name
-rw-r--r--050scenario.cc5
-rw-r--r--edit.mu2
2 files changed, 6 insertions, 1 deletions
diff --git a/050scenario.cc b/050scenario.cc
index cfaedc24..e5e0878e 100644
--- a/050scenario.cc
+++ b/050scenario.cc
@@ -60,6 +60,7 @@ struct scenario {
 
 :(before "End Globals")
 vector<scenario> Scenarios;
+set<string> Scenario_names;
 
 //:: Parse the 'scenario' form.
 //: Simply store the text of the scenario.
@@ -75,6 +76,9 @@ scenario parse_scenario(istream& in) {
   scenario result;
   result.name = next_word(in);
 //?   cerr << "scenario: " << result.name << '\n'; //? 2
+  if (Scenario_names.find(result.name) != Scenario_names.end())
+    raise << "duplicate scenario name: " << result.name << '\n' << end();
+  Scenario_names.insert(result.name);
   skip_whitespace_and_comments(in);
   assert(in.peek() == '[');
   // scenarios are take special 'code' strings so we need to ignore brackets
@@ -622,6 +626,7 @@ recipe main [
 :(code)
 // just for the scenarios running scenarios in C++ layers
 void run_mu_scenario(const string& form) {
+  Scenario_names.clear();
 //?   cerr << form << '\n'; //? 1
   istringstream in(form);
   in >> std::noskipws;
diff --git a/edit.mu b/edit.mu
index fd1b8243..43d7b864 100644
--- a/edit.mu
+++ b/edit.mu
@@ -1117,7 +1117,7 @@ d]
   check-trace-count-for-label 1, [print-character]
 ]
 
-scenario editor-inserts-characters-at-cursor-5 [
+scenario editor-inserts-characters-at-cursor-6 [
   assume-screen 10/width, 5/height
   1:address:array:character <- new [abc
 d]