GCC Code Coverage Report


Directory: src/
File: script_transcompiler/transcompiler.cpp
Date: 2024-12-30 15:39:09
Exec Total Coverage
Lines: 34 40 85.0%
Functions: 3 3 100.0%
Branches: 34 66 51.5%

Line Branch Exec Source
1 #include "transcompiler.h"
2 #include "backend.h"
3 #include "frontend.h"
4 #include "optimization.h"
5 #include <cstring>
6 #include <fstream>
7
8 5 TARGET get_target(char* arg)
9 {
10
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
5 if (std::strcmp(arg, "py") == 0)
11 1 return TARGET::PY;
12
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
4 if (std::strcmp(arg, "cpp") == 0)
13 1 return TARGET::CPP;
14
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
3 if (std::strcmp(arg, "linux_x86_64") == 0)
15 1 return TARGET::LINUX_X86_64;
16
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
2 if (std::strcmp(arg, "i") == 0)
17 1 return TARGET::INTERMEDIATE;
18
19 1 return TARGET::INVALID;
20 }
21
22 4 void write_to_file(data& data, const std::string& dst)
23 {
24
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
4 if (data.c.empty())
25 {
26 data.add_issue(issue::type::ERROR, issue::phase::STORE,
27 "Generated code is empty.", "", 0);
28 return;
29 }
30
31
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
4 std::ofstream file_stream(dst);
32
33
2/4
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
4 if (!file_stream.is_open())
34 {
35 data.add_issue(issue::type::ERROR, issue::phase::STORE,
36 "Could not write to output file.", "", 0);
37 return;
38 }
39
40
2/2
✓ Branch 5 taken 405 times.
✓ Branch 6 taken 4 times.
409 for (const auto& r : data.result)
41 {
42
2/4
✓ Branch 1 taken 405 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 405 times.
✗ Branch 5 not taken.
405 file_stream << r << "\n";
43 }
44
45
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
4 file_stream.close();
46
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
4 }
47
48 8 void transcompiler(data& data, int argc, char* argv[])
49 {
50
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 5 times.
8 if (argc != 4)
51 {
52
3/6
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 3 times.
✗ Branch 10 not taken.
3 data.add_issue(issue::type::ERROR, issue::phase::PARSING,
53 "Invalid command line arguments.", "", 0);
54 3 return;
55 }
56
57 5 const auto target = get_target(argv[3]);
58
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
5 if (target == TARGET::INVALID)
59 {
60
3/6
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
1 data.add_issue(issue::type::ERROR, issue::phase::PARSING,
61 "Invalid 'target' argument.", "", 0);
62 1 return;
63 }
64
65
2/4
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
4 parse_source(argv[1], data);
66
67
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
4 if (!data.success)
68 return;
69
70 4 optimizationA(data);
71
72 4 optimizationB(data);
73
74 4 memory_init(data);
75
76 4 generate_code(data, target);
77
78
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
4 if (!data.success)
79 return;
80
81
2/4
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
4 write_to_file(data, argv[2]);
82 }
83