diff options
Diffstat (limited to '082persist.cc')
-rw-r--r-- | 082persist.cc | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/082persist.cc b/082persist.cc index 0cae8c32..3e53ff6a 100644 --- a/082persist.cc +++ b/082persist.cc @@ -58,14 +58,22 @@ case SAVE: { raise << current_recipe_name() << ": 'save' requires exactly two ingredients, but got " << current_instruction().to_string() << '\n' << end(); break; } - if (!scalar(ingredients.at(0))) - raise << current_recipe_name() << ": first ingredient of 'save' should be a literal string, but got " << current_instruction().ingredients.at(0).to_string() << '\n' << end(); - if (!scalar(ingredients.at(1))) - raise << current_recipe_name() << ": second ingredient of 'save' should be an address:array:character, but got " << current_instruction().ingredients.at(1).to_string() << '\n' << end(); if (Current_scenario) break; // do nothing in tests - string filename = current_instruction().ingredients.at(0).name; - if (!is_literal(current_instruction().ingredients.at(0))) - filename = to_string(ingredients.at(0).at(0)); + string filename; + if (is_literal_string(current_instruction().ingredients.at(0))) { + filename = current_instruction().ingredients.at(0).name; + } + else if (is_mu_string(current_instruction().ingredients.at(0))) { + filename = read_mu_string(ingredients.at(0).at(0)); + } + else { + raise << current_recipe_name() << ": first ingredient of 'save' should be a string, but got " << current_instruction().ingredients.at(0).to_string() << '\n' << end(); + break; + } + if (!scalar(ingredients.at(1))) { + raise << current_recipe_name() << ": second ingredient of 'save' should be an address:array:character, but got " << current_instruction().ingredients.at(1).to_string() << '\n' << end(); + break; + } ofstream fout(("lesson/"+filename).c_str()); string contents = read_mu_string(ingredients.at(1).at(0)); fout << contents; |