From 967be9e750221ab2ab783f95df79bb26d290a45e Mon Sep 17 00:00:00 2001 From: Martial Simon Date: Mon, 15 Sep 2025 01:07:58 +0200 Subject: add: added projects --- tiger-compiler/tcsh/src/tiger_llvmtranslate.i | 39 +++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 tiger-compiler/tcsh/src/tiger_llvmtranslate.i (limited to 'tiger-compiler/tcsh/src/tiger_llvmtranslate.i') diff --git a/tiger-compiler/tcsh/src/tiger_llvmtranslate.i b/tiger-compiler/tcsh/src/tiger_llvmtranslate.i new file mode 100644 index 0000000..70fade9 --- /dev/null +++ b/tiger-compiler/tcsh/src/tiger_llvmtranslate.i @@ -0,0 +1,39 @@ +// -*- C++ -*- + +%module tiger_llvmtranslate + +%include "std_string.i" + +%{ + #include + #include + #include + #include + #include +%} + +%inline +{ + std::string translate(const ast::Ast& tree) + { + auto module = llvmtranslate::translate(tree); + auto runtime = llvmtranslate::runtime_get(*module.first); +#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR <= 7 + auto link = llvm::Linker::LinkModules(module.second.get(), runtime.get()); +#else + auto link = llvm::Linker::linkModules(*module.second, std::move(runtime)); +#endif + postcondition(!link); // Returns true on error + + std::string str; + llvm::raw_string_ostream out(str); + llvm::PrintModulePass printer{out}; +#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR <= 8 + printer.run(*module.second); +#else + llvm::ModuleAnalysisManager dummy_mam; + printer.run(*module.second, dummy_mam); +#endif + return out.str(); + } +} -- cgit v1.2.3