| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // Include | ||
| 2 | #include "cli/commands/codegen.h" | ||
| 3 | |||
| 4 | // Kiwi | ||
| 5 | #include "lexer/buffer.h" | ||
| 6 | #include "lexer/lexer.h" | ||
| 7 | #include "parser/parser.h" | ||
| 8 | #include "sema/sema.h" | ||
| 9 | |||
| 10 | #include "codegen/clang/clang_gen.h" | ||
| 11 | #include "codegen/llvm/llvm_gen.h" | ||
| 12 | |||
| 13 | |||
| 14 | namespace lython { | ||
| 15 | |||
| 16 | argparse::ArgumentParser* CodegenCmd::parser() { | ||
| 17 | 8 | argparse::ArgumentParser* p = new_parser(); | |
| 18 | |||
| 19 | 8 | p->add_argument("--file") // | |
| 20 |
1/1✓ Branch 2 taken 8 times.
|
8 | .help("file to process"); |
| 21 | |||
| 22 | 8 | return p; | |
| 23 | } | ||
| 24 | |||
| 25 | int CodegenCmd::main(argparse::ArgumentParser const& args) { | ||
| 26 | |||
| 27 | ✗ | set_log_level(LogLevel::Trace, true); | |
| 28 | ✗ | set_log_level(LogLevel::Debug, true); | |
| 29 | ✗ | set_log_level(LogLevel::Info, true); | |
| 30 | ✗ | set_log_level(LogLevel::Warn, true); | |
| 31 | ✗ | set_log_level(LogLevel::Error, true); | |
| 32 | ✗ | set_log_level(LogLevel::Fatal, true); | |
| 33 | |||
| 34 | ✗ | std::string file; | |
| 35 | ✗ | if (args.is_used("--file")) { | |
| 36 | ✗ | file = args.get<std::string>("--file"); | |
| 37 | } | ||
| 38 | |||
| 39 | ✗ | std::unique_ptr<AbstractBuffer> reader = std::make_unique<FileBuffer>(String(file.c_str())); | |
| 40 | ✗ | Module* mod = nullptr; | |
| 41 | |||
| 42 | ✗ | Lexer lex(*reader.get()); | |
| 43 | ✗ | Parser parser(lex); | |
| 44 | ✗ | mod = parser.parse_module(); | |
| 45 | |||
| 46 | ✗ | parser.show_diagnostics(std::cout); | |
| 47 | |||
| 48 | ✗ | SemanticAnalyser sema; | |
| 49 | ✗ | sema.exec(mod, 0); | |
| 50 | ✗ | sema.show_diagnostic(std::cout, &lex); | |
| 51 | |||
| 52 | #if WITH_CLANG_CODEGEN | ||
| 53 | std::cout << "CLANG_CODE_GEN\n"; | ||
| 54 | ClangGen generator; | ||
| 55 | generator.exec(mod, 0); | ||
| 56 | generator.dump(); | ||
| 57 | #elif WITH_LLVM_CODEGEN | ||
| 58 | ✗ | std::cout << "LLVM_CODE_GEN\n"; | |
| 59 | ✗ | LLVMGen generator; | |
| 60 | ✗ | generator.exec(mod, 0); | |
| 61 | ✗ | generator.dump(); | |
| 62 | #endif | ||
| 63 | |||
| 64 | ✗ | return 0; | |
| 65 | ✗ | }; | |
| 66 | |||
| 67 | |||
| 68 | |||
| 69 | } | ||
| 70 |