| 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 |