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 |