GCC Code Coverage Report


Directory: ./
File: src/lexer/token.cpp
Date: 2023-04-27 00:55:30
Exec Total Coverage
Lines: 30 46 65.2%
Functions: 5 7 71.4%
Branches: 175 284 61.6%

Line Branch Exec Source
1 #include "token.h"
2 #include "utilities/strings.h"
3
4 namespace lython {
5
6 String to_string(int8 t) {
7
51/70
✓ Branch 0 taken 9753 times.
✓ Branch 1 taken 256 times.
✓ Branch 2 taken 174 times.
✓ Branch 3 taken 1025 times.
✓ Branch 4 taken 1224 times.
✓ Branch 5 taken 71 times.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2188 times.
✓ Branch 9 taken 733 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1120 times.
✓ Branch 14 taken 123 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 541 times.
✓ Branch 17 taken 128 times.
✓ Branch 18 taken 561 times.
✓ Branch 19 taken 57 times.
✓ Branch 20 taken 174 times.
✓ Branch 21 taken 132 times.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 139 times.
✓ Branch 25 taken 34 times.
✓ Branch 26 taken 62 times.
✓ Branch 27 taken 132 times.
✓ Branch 28 taken 269 times.
✓ Branch 29 taken 95 times.
✓ Branch 30 taken 206 times.
✓ Branch 31 taken 269 times.
✓ Branch 32 taken 78 times.
✓ Branch 33 taken 23 times.
✓ Branch 34 taken 35 times.
✓ Branch 35 taken 1203 times.
✓ Branch 36 taken 22 times.
✓ Branch 37 taken 26 times.
✓ Branch 38 taken 362 times.
✓ Branch 39 taken 431 times.
✓ Branch 40 taken 51 times.
✓ Branch 41 taken 688 times.
✓ Branch 42 taken 521 times.
✗ Branch 43 not taken.
✓ Branch 44 taken 52 times.
✗ Branch 45 not taken.
✓ Branch 46 taken 7 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 34 times.
✓ Branch 52 taken 41 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 23 times.
✗ Branch 56 not taken.
✓ Branch 57 taken 23 times.
✓ Branch 58 taken 68 times.
✓ Branch 59 taken 26 times.
✓ Branch 60 taken 96 times.
✓ Branch 61 taken 34 times.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
✓ Branch 66 taken 213 times.
✓ Branch 67 taken 612 times.
✓ Branch 68 taken 36 times.
✓ Branch 69 taken 928 times.
25113 switch (t) {
8 #define X(name, nb) \
9 case nb: return String(#name);
10
11
50/88
✓ Branch 2 taken 9753 times.
✓ Branch 6 taken 256 times.
✓ Branch 10 taken 174 times.
✓ Branch 14 taken 1025 times.
✓ Branch 18 taken 1224 times.
✓ Branch 22 taken 71 times.
✓ Branch 26 taken 12 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✓ Branch 34 taken 2188 times.
✓ Branch 38 taken 733 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✓ Branch 54 taken 1120 times.
✓ Branch 58 taken 123 times.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✓ Branch 66 taken 541 times.
✓ Branch 70 taken 128 times.
✓ Branch 74 taken 561 times.
✓ Branch 78 taken 57 times.
✓ Branch 82 taken 174 times.
✓ Branch 86 taken 132 times.
✗ Branch 90 not taken.
✗ Branch 91 not taken.
✓ Branch 94 taken 2 times.
✓ Branch 98 taken 139 times.
✓ Branch 102 taken 34 times.
✓ Branch 106 taken 62 times.
✓ Branch 110 taken 132 times.
✓ Branch 114 taken 269 times.
✓ Branch 118 taken 95 times.
✓ Branch 122 taken 206 times.
✓ Branch 126 taken 269 times.
✓ Branch 130 taken 78 times.
✓ Branch 134 taken 23 times.
✓ Branch 138 taken 35 times.
✓ Branch 142 taken 1203 times.
✓ Branch 146 taken 22 times.
✓ Branch 150 taken 26 times.
✓ Branch 154 taken 362 times.
✓ Branch 158 taken 431 times.
✓ Branch 162 taken 51 times.
✓ Branch 166 taken 688 times.
✓ Branch 170 taken 521 times.
✗ Branch 174 not taken.
✗ Branch 175 not taken.
✓ Branch 178 taken 52 times.
✗ Branch 182 not taken.
✗ Branch 183 not taken.
✓ Branch 186 taken 7 times.
✗ Branch 190 not taken.
✗ Branch 191 not taken.
✗ Branch 194 not taken.
✗ Branch 195 not taken.
✗ Branch 198 not taken.
✗ Branch 199 not taken.
✗ Branch 202 not taken.
✗ Branch 203 not taken.
✓ Branch 206 taken 34 times.
✓ Branch 210 taken 41 times.
✗ Branch 214 not taken.
✗ Branch 215 not taken.
✗ Branch 218 not taken.
✗ Branch 219 not taken.
✓ Branch 222 taken 23 times.
✗ Branch 226 not taken.
✗ Branch 227 not taken.
✓ Branch 230 taken 23 times.
✓ Branch 234 taken 68 times.
✓ Branch 238 taken 26 times.
✓ Branch 242 taken 96 times.
✓ Branch 246 taken 34 times.
✗ Branch 250 not taken.
✗ Branch 251 not taken.
✗ Branch 254 not taken.
✗ Branch 255 not taken.
✗ Branch 258 not taken.
✗ Branch 259 not taken.
✗ Branch 262 not taken.
✗ Branch 263 not taken.
✓ Branch 266 taken 213 times.
✓ Branch 270 taken 612 times.
✓ Branch 274 taken 36 times.
24185 LYTHON_TOKEN(X)
12 #undef X
13 928 default:
14
1/1
✓ Branch 2 taken 928 times.
1856 String s = "' '";
15
1/1
✓ Branch 1 taken 928 times.
928 s[1] = t;
16 928 return s;
17 }
18 }
19
20 String to_human_name(int8 t) {
21
4/7
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 505 times.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
507 static String eof = String("EOF (End Of File)");
22
23
1/1
✓ Branch 1 taken 507 times.
507 String n = to_string(t);
24
1/1
✓ Branch 1 taken 507 times.
507 Array<String> arr = split('_', n);
25
26
2/2
✓ Branch 1 taken 160 times.
✓ Branch 2 taken 347 times.
507 if (arr.size() == 2) {
27
1/1
✓ Branch 2 taken 160 times.
160 return arr[1];
28 }
29
30
2/3
✗ Branch 0 not taken.
✓ Branch 1 taken 33 times.
✓ Branch 2 taken 314 times.
347 switch (t) {
31 case EOF: return eof;
32
1/1
✓ Branch 1 taken 33 times.
33 case '\0': return eof;
33 }
34
35 314 return n;
36 507 }
37
38 // this should be computed at compile time
39 // this is used for pretty printing
40 int8 tok_name_size() {
41 std::vector<String> v = {
42 #define X(name, nb) #name,
43 LYTHON_TOKEN(X)
44 #undef X
45 };
46
47 int8 max = 0;
48
49 for (auto& i: v)
50 max = std::max(int8(i.size()), max);
51
52 return max;
53 }
54
55 std::ostream& Token::debug_print(std::ostream& out) const {
56 out << fmt::format("{:>20}", to_string(_type));
57
58 out << " =>"
59 << " [l:" << fmt::format("{:4}", _line) << ", c:" << fmt::format("{:4}", _col) << "] `"
60 << _identifier << "`";
61 return out;
62 }
63
64 std::ostream& Token::print(std::ostream& out) const {
65
66
2/2
✓ Branch 1 taken 270 times.
✓ Branch 2 taken 73 times.
343 if (type() > 0) {
67 270 return out << type();
68 }
69
70
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 73 times.
73 if (type() == tok_identifier) {
71 return out << identifier();
72
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 73 times.
73 } else if (type() == tok_docstring) {
73 return out << "\"\"\"" << identifier() << "\"\"\"";
74
3/6
✓ Branch 1 taken 73 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 73 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 73 times.
73 } else if (type() == tok_int || type() == tok_float) {
75 return out << identifier();
76 }
77
78
1/1
✓ Branch 3 taken 73 times.
73 String const& str = keyword_as_string()[type()];
79
80
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 73 times.
73 if (str.size() > 0) {
81 return out << str;
82 }
83
84 // is this possible ?
85 73 return out << identifier();
86 }
87
88 ReservedKeyword& keywords() {
89 static ReservedKeyword _keywords = {
90 #define X(str, tok) {str, tok},
91 LYTHON_KEYWORDS(X)
92 #undef X
93
6/11
✓ Branch 0 taken 12 times.
✓ Branch 1 taken 7914 times.
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✓ Branch 10 taken 468 times.
✓ Branch 11 taken 12 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
8406 };
94 7926 return _keywords;
95 12 }
96
97 KeywordToString& keyword_as_string() {
98 static KeywordToString _keywords = {
99 #define X(str, tok) {int(tok), String(str)},
100
39/39
✓ Branch 1 taken 12 times.
✓ Branch 4 taken 12 times.
✓ Branch 7 taken 12 times.
✓ Branch 10 taken 12 times.
✓ Branch 13 taken 12 times.
✓ Branch 16 taken 12 times.
✓ Branch 19 taken 12 times.
✓ Branch 22 taken 12 times.
✓ Branch 25 taken 12 times.
✓ Branch 28 taken 12 times.
✓ Branch 31 taken 12 times.
✓ Branch 34 taken 12 times.
✓ Branch 37 taken 12 times.
✓ Branch 40 taken 12 times.
✓ Branch 43 taken 12 times.
✓ Branch 46 taken 12 times.
✓ Branch 49 taken 12 times.
✓ Branch 52 taken 12 times.
✓ Branch 55 taken 12 times.
✓ Branch 58 taken 12 times.
✓ Branch 61 taken 12 times.
✓ Branch 64 taken 12 times.
✓ Branch 67 taken 12 times.
✓ Branch 70 taken 12 times.
✓ Branch 73 taken 12 times.
✓ Branch 76 taken 12 times.
✓ Branch 79 taken 12 times.
✓ Branch 82 taken 12 times.
✓ Branch 85 taken 12 times.
✓ Branch 88 taken 12 times.
✓ Branch 91 taken 12 times.
✓ Branch 94 taken 12 times.
✓ Branch 97 taken 12 times.
✓ Branch 100 taken 12 times.
✓ Branch 103 taken 12 times.
✓ Branch 106 taken 12 times.
✓ Branch 109 taken 12 times.
✓ Branch 112 taken 12 times.
✓ Branch 115 taken 12 times.
480 LYTHON_KEYWORDS(X)
101 #undef X
102
6/11
✓ Branch 0 taken 12 times.
✓ Branch 1 taken 2397 times.
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✓ Branch 10 taken 468 times.
✓ Branch 11 taken 12 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
2901 };
103 2409 return _keywords;
104 480 }
105
106 } // namespace lython
107