GCC Code Coverage Report


Directory: ./
File: src/cli/commands/codegen.cpp
Date: 2023-04-27 00:55:30
Exec Total Coverage
Lines: 4 28 14.3%
Functions: 1 2 50.0%
Branches: 1 47 2.1%

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