diff options
Diffstat (limited to 'tiger-compiler/src/testsuite/tasks.cc')
| -rw-r--r-- | tiger-compiler/src/testsuite/tasks.cc | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/tiger-compiler/src/testsuite/tasks.cc b/tiger-compiler/src/testsuite/tasks.cc new file mode 100644 index 0000000..c7f1164 --- /dev/null +++ b/tiger-compiler/src/testsuite/tasks.cc @@ -0,0 +1,49 @@ +/** + ** \file testsuite/tasks.hh + ** \brief Testsuite module related tasks' implementation. + */ + +#include <parse/libparse.hh> +#include <parse/tweast.hh> +#include <testsuite/libtestsuite.hh> + +#include <ast/tasks.hh> +#include <parse/tasks.hh> +#define DEFINE_TASKS 1 +#include <testsuite/tasks.hh> +#undef DEFINE_TASKS + +namespace testsuite::tasks + { + + void add_testsuite_runtime() + { + /** + * A testsuite being a series of function declaration, the prelude is + * not included by default. As such, we need to insert it on our own + * within the AST. + */ + parse::Tweast new_program; + + const auto prelude = parse::parse_prelude(); + const auto current_program = ast::tasks::the_program.release(); + + const auto tests = find_program_tests(*current_program); + + const auto testsuite_runtime = create_testsuite_runtime(tests); + + current_program->emplace_back(testsuite_runtime); + + if (prelude != nullptr) + { + new_program << prelude; + } + + new_program << current_program; + + const auto new_ast = parse::parse(new_program); + + ast::tasks::the_program = std::unique_ptr<ast::ChunkList>{new_ast}; + } + + } // namespace testsuite |
