Line | Branch | Exec | Source |
---|---|---|---|
1 | #include "data.h" | ||
2 | |||
3 | namespace | ||
4 | { | ||
5 | |||
6 | struct cpp_file | ||
7 | { | ||
8 | bool use_iostream = false; | ||
9 | bool use_string = false; | ||
10 | bool use_text_conversion = false; | ||
11 | bool use_fstream = false; | ||
12 | |||
13 | std::vector<std::string> lines; | ||
14 | }; | ||
15 | |||
16 | 14 | inline bool generate_cpp_code(const intermediate& i, cpp_file& file, data&) | |
17 | { | ||
18 |
1/2✓ Branch 2 taken 14 times.
✗ Branch 3 not taken.
|
14 | file.lines.push_back("// " + i.line); |
19 | |||
20 |
8/12✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 1 times.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✓ Branch 9 taken 4 times.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
14 | switch (i.command) |
21 | { | ||
22 | ✗ | case (intermediate::cmd::comment): | |
23 | { | ||
24 | ✗ | file.lines.push_back("//" + i.operand); | |
25 | ✗ | break; | |
26 | } | ||
27 | 1 | case (intermediate::cmd::text_init_memory): | |
28 | { | ||
29 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | file.lines.push_back("std::string text = \"" + i.operand + "\";"); |
30 | 1 | file.use_string = true; | |
31 | 1 | break; | |
32 | } | ||
33 | ✗ | case (intermediate::cmd::text_memory): | |
34 | { | ||
35 | ✗ | file.lines.push_back("text = \"" + i.operand + "\";"); | |
36 | ✗ | break; | |
37 | } | ||
38 | 3 | case (intermediate::cmd::print_memory): | |
39 | { | ||
40 |
2/4✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
|
3 | file.lines.push_back("std::cout << text << std::endl;"); |
41 | 3 | file.use_iostream = true; | |
42 | 3 | break; | |
43 | } | ||
44 | ✗ | case (intermediate::cmd::load_init_memory): | |
45 | { | ||
46 | ✗ | file.lines.push_back("std::string text;"); | |
47 | } | ||
48 | [[fallthrough]]; | ||
49 | 2 | case (intermediate::cmd::load_memory): | |
50 | { | ||
51 |
2/4✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
|
2 | file.lines.push_back("{"); |
52 |
2/4✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
|
2 | file.lines.push_back(" std::ifstream file{\"" + i.operand + "\"};"); |
53 |
2/4✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
|
2 | file.lines.push_back(" if (!file.is_open())"); |
54 |
2/4✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
|
2 | file.lines.push_back(" return EXIT_FAILURE;"); |
55 |
2/4✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
|
2 | file.lines.push_back(" std::stringstream buffer;"); |
56 |
2/4✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
|
2 | file.lines.push_back(" buffer << file.rdbuf();"); |
57 |
2/4✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
|
2 | file.lines.push_back(" text = buffer.str();"); |
58 |
2/4✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
|
2 | file.lines.push_back(" file.close();"); |
59 |
2/4✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
|
2 | file.lines.push_back("}"); |
60 | |||
61 | 2 | file.use_fstream = true; | |
62 | 2 | break; | |
63 | } | ||
64 | 1 | case (intermediate::cmd::create_file): | |
65 | { | ||
66 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | file.lines.push_back("{"); |
67 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | file.lines.push_back(" std::ofstream file{\"" + i.operand + "\"};"); |
68 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | file.lines.push_back(" file.close();"); |
69 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | file.lines.push_back("}"); |
70 | |||
71 | 1 | file.use_fstream = true; | |
72 | 1 | break; | |
73 | } | ||
74 | 1 | case (intermediate::cmd::save_memory): | |
75 | { | ||
76 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | file.lines.push_back("{"); |
77 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | file.lines.push_back(" std::ofstream output_file{\"" + i.operand + |
78 | "\"};"); | ||
79 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | file.lines.push_back(" if (!output_file.is_open())"); |
80 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | file.lines.push_back(" return EXIT_FAILURE;"); |
81 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | file.lines.push_back(" output_file << text << std::endl;"); |
82 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | file.lines.push_back(" output_file.close();"); |
83 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | file.lines.push_back("}"); |
84 | 1 | file.use_fstream = true; | |
85 | 1 | break; | |
86 | } | ||
87 | 1 | case (intermediate::cmd::process_memory): | |
88 | { | ||
89 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | file.lines.push_back("text_conversion::convert_to_title_case(text);"); |
90 | 1 | file.use_text_conversion = true; | |
91 | 1 | break; | |
92 | } | ||
93 | 4 | case (intermediate::cmd::print_text): | |
94 | { | ||
95 |
2/4✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
|
4 | file.lines.push_back("std::cout << \"" + i.operand + |
96 | "\" << std::endl;"); | ||
97 | 4 | file.use_iostream = true; | |
98 | 4 | break; | |
99 | } | ||
100 | 1 | case (intermediate::cmd::save_text): | |
101 | { | ||
102 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | file.lines.push_back("{"); |
103 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | file.lines.push_back(" std::ofstream output_file{\"" + i.operandB + |
104 | "\"};"); | ||
105 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | file.lines.push_back(" if (!output_file.is_open())"); |
106 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | file.lines.push_back(" return EXIT_FAILURE;"); |
107 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | file.lines.push_back(" output_file << \"" + i.operand + |
108 | "\" << std::endl;"); | ||
109 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | file.lines.push_back(" output_file.close();"); |
110 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | file.lines.push_back("}"); |
111 | 1 | file.use_fstream = true; | |
112 | 1 | break; | |
113 | break; | ||
114 | } | ||
115 | } | ||
116 | |||
117 | 14 | return true; | |
118 | } | ||
119 | } // namespace | ||
120 | |||
121 | 1 | void generate_cpp(data& data) | |
122 | { | ||
123 | 1 | cpp_file file; | |
124 | |||
125 |
2/2✓ Branch 5 taken 14 times.
✓ Branch 6 taken 1 times.
|
15 | for (const auto& ic : data.c) |
126 | { | ||
127 |
2/4✓ Branch 1 taken 14 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 14 times.
|
14 | if (!generate_cpp_code(ic, file, data)) |
128 | ✗ | return; | |
129 | } | ||
130 | |||
131 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | if (file.use_text_conversion) |
132 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | data.result.push_back("#include \"text_conversion.h\""); |
133 | |||
134 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | data.result.push_back("#include <cstdlib>"); |
135 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | if (file.use_iostream) |
136 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | data.result.push_back("#include <iostream>"); |
137 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | if (file.use_string) |
138 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | data.result.push_back("#include <string>"); |
139 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | if (file.use_fstream) |
140 | { | ||
141 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | data.result.push_back("#include <fstream>"); |
142 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | data.result.push_back("#include <sstream>"); |
143 | } | ||
144 | |||
145 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | data.result.push_back("\nint main() {"); |
146 | |||
147 |
2/2✓ Branch 4 taken 59 times.
✓ Branch 5 taken 1 times.
|
60 | for (const auto& line : file.lines) |
148 |
2/4✓ Branch 1 taken 59 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 59 times.
✗ Branch 5 not taken.
|
59 | data.result.push_back(" " + line); |
149 | |||
150 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | data.result.push_back(" return EXIT_SUCCESS;"); |
151 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | data.result.push_back("}\n"); |
152 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | } |
153 |