diff --git a/common/goos/Reader.cpp b/common/goos/Reader.cpp index 427600c0fc..92088cd534 100644 --- a/common/goos/Reader.cpp +++ b/common/goos/Reader.cpp @@ -217,9 +217,11 @@ std::optional Reader::read_from_stdin(const std::string& prompt, ReplWra /*! * Read a string. */ -Object Reader::read_from_string(const std::string& str, bool add_top_level) { +Object Reader::read_from_string(const std::string& str, + bool add_top_level, + const std::optional& string_name) { // create text fragment and add to the DB - auto textFrag = std::make_shared(str); + auto textFrag = std::make_shared(str, string_name.value_or("Program string")); db.insert(textFrag); // perform read diff --git a/common/goos/Reader.h b/common/goos/Reader.h index e4ff1eacb7..7beed321e5 100644 --- a/common/goos/Reader.h +++ b/common/goos/Reader.h @@ -72,7 +72,9 @@ struct Token { class Reader { public: Reader(); - Object read_from_string(const std::string& str, bool add_top_level = true); + Object read_from_string(const std::string& str, + bool add_top_level = true, + const std::optional& string_name = {}); std::optional read_from_stdin(const std::string& prompt, ReplWrapper& repl); Object read_from_file(const std::vector& file_path, bool check_encoding = false); bool check_string_is_valid(const std::string& str) const; diff --git a/common/goos/TextDB.h b/common/goos/TextDB.h index 3418036fa4..b6b62a1140 100644 --- a/common/goos/TextDB.h +++ b/common/goos/TextDB.h @@ -65,9 +65,14 @@ class ReplText : public SourceText { */ class ProgramString : public SourceText { public: - explicit ProgramString(const std::string& text_) : SourceText(text_) {} - std::string get_description() override { return "Program string"; } + explicit ProgramString(const std::string& text_, + const std::string& string_name = "Program string") + : SourceText(text_), m_string_name(string_name) {} + std::string get_description() override { return m_string_name; } ~ProgramString() = default; + + private: + std::string m_string_name; }; /*! diff --git a/goalc/compiler/Compiler.cpp b/goalc/compiler/Compiler.cpp index 894b4d09fe..2166d704d8 100644 --- a/goalc/compiler/Compiler.cpp +++ b/goalc/compiler/Compiler.cpp @@ -428,8 +428,9 @@ void Compiler::run_front_end_on_file(const std::vector& path) { * Run the entire compilation process on the input source code. Will generate an object file, but * won't save it anywhere. */ -void Compiler::run_full_compiler_on_string_no_save(const std::string& src) { - auto code = m_goos.reader.read_from_string({src}); +void Compiler::run_full_compiler_on_string_no_save(const std::string& src, + const std::optional& string_name) { + auto code = m_goos.reader.read_from_string(src, true, string_name); auto compiled = compile_object_file("run-on-string", code, true); color_object_file(compiled); codegen_object_file(compiled); diff --git a/goalc/compiler/Compiler.h b/goalc/compiler/Compiler.h index 505c9a3601..074e49ed65 100644 --- a/goalc/compiler/Compiler.h +++ b/goalc/compiler/Compiler.h @@ -42,7 +42,8 @@ class Compiler { void compile_and_send_from_string(const std::string& source_code); void run_front_end_on_string(const std::string& src); void run_front_end_on_file(const std::vector& path); - void run_full_compiler_on_string_no_save(const std::string& src); + void run_full_compiler_on_string_no_save(const std::string& src, + const std::optional& string_name); void shutdown_target(); void enable_throw_on_redefines() { m_throw_on_define_extern_redefinition = true; } void add_ignored_define_extern_symbol(const std::string& name) { diff --git a/test/offline/offline_test_main.cpp b/test/offline/offline_test_main.cpp index 5d0558a9e6..867b91d683 100644 --- a/test/offline/offline_test_main.cpp +++ b/test/offline/offline_test_main.cpp @@ -327,7 +327,7 @@ bool compile(Decompiler& dc, try { const auto& src = data.output_with_skips; total_lines += line_count(src); - compiler.run_full_compiler_on_string_no_save(src); + compiler.run_full_compiler_on_string_no_save(src, file.name_in_dgo); } catch (const std::exception& e) { fmt::print("Compiler exception: {}\n", e.what()); return false;