asar coverage - build #298


src/asar/
File: src/asar/warnings.cpp
Date: 2025-03-14 15:27:49
Lines:
65/66
98.5%
Functions:
11/11
100.0%
Branches:
74/96
77.1%

Line Branch Exec Source
1 #include <vector>
2
3 // construct a mapping between warning ids and warning names.
4 struct warn_t;
5 std::vector<warn_t> all_warnings;
6 int warning_id_end = 0;
7 struct warn_t {
8 const char *name;
9 bool exists;
10 bool is_default_enabled;
11 119 warn_t() : name(nullptr), exists(false), is_default_enabled(false) {}
12 112 warn_t(int id, const char *name, bool is_default_enabled)
13 112 : name(name), exists(true), is_default_enabled(is_default_enabled) {
14
1/2
✓ Branch 0 taken 112 times.
✗ Branch 1 not taken.
112 if((int)all_warnings.size() <= id) all_warnings.resize(id + 1);
15 112 all_warnings[id] = *this;
16 112 warning_id_end = all_warnings.size();
17 112 }
18 };
19
20 #define SAVE_WARN_NAME(id, name, is_enabled) static warn_t _useless_##id { id, name, is_enabled }
21 #include "warnings.h"
22
23 #include "asar.h"
24 #include <cassert>
25 #include <cstdarg>
26
27 #include "interface-shared.h"
28
29 struct warnings_state
30 {
31 std::vector<bool> enabled;
32
2/4
✓ Branch 0 taken 390 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 501 times.
✗ Branch 3 not taken.
891 warnings_state() : enabled(all_warnings.size(), false) {}
33 };
34
35 static warnings_state current_warnings_state;
36 static autoarray<warnings_state> warnings_state_stack;
37 static warnings_state main_warnings_state;
38
39 814 void warn_impl(int warnid, const char* fmt, int whichpass, ...)
40 {
41
2/2
✓ Branch 0 taken 408 times.
✓ Branch 1 taken 406 times.
814 if (pass == whichpass)
42 {
43
3/4
✓ Branch 0 taken 408 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 209 times.
✓ Branch 3 taken 199 times.
408 assert(warnid >= 0 && warnid < warning_id_end);
44
45
6/7
✓ Branch 0 taken 199 times.
✓ Branch 1 taken 209 times.
✓ Branch 2 taken 20 times.
✓ Branch 3 taken 179 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 24 times.
✓ Branch 6 taken 185 times.
408 if (current_warnings_state.enabled[warnid])
46 {
47 24 char warning_buffer[1024];
48 24 va_list args;
49 44 va_start(args, whichpass);
50
51
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 24 times.
44 vsnprintf(warning_buffer, sizeof(warning_buffer), fmt, args);
52
53 44 va_end(args);
54
1/2
✓ Branch 0 taken 44 times.
✗ Branch 1 not taken.
44 warn((int)warnid, warning_buffer);
55 }
56 }
57 814 }
58
59 88 const char* get_warning_name(asar_warning_id warnid)
60 {
61
3/4
✓ Branch 0 taken 88 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 48 times.
✓ Branch 3 taken 40 times.
88 assert(warnid >= 0 && warnid < warning_id_end);
62
63 88 const warn_t& warning = all_warnings[warnid];
64
3/5
✗ Branch 0 not taken.
✓ Branch 1 taken 40 times.
✓ Branch 2 taken 48 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 48 times.
88 assert(warning.exists);
65
66 88 return warning.name;
67 }
68
69
70
71 68 void set_warning_enabled(asar_warning_id warnid, bool enabled)
72 {
73
3/4
✓ Branch 0 taken 68 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 35 times.
✓ Branch 3 taken 33 times.
68 assert(warnid >= 0 && warnid < warning_id_end);
74
3/5
✗ Branch 0 not taken.
✓ Branch 1 taken 33 times.
✓ Branch 2 taken 35 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 35 times.
68 assert(all_warnings[warnid].exists);
75
76
2/3
✓ Branch 0 taken 33 times.
✓ Branch 1 taken 35 times.
✗ Branch 2 not taken.
68 current_warnings_state.enabled[warnid] = enabled;
77 68 }
78
79 86 asar_warning_id parse_warning_id_from_string(const char* string)
80 {
81 86 const char* pos = string;
82
83
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 86 times.
86 if (pos == nullptr)
84 {
85 return warning_id_end;
86 }
87
88
89
6/6
✓ Branch 0 taken 42 times.
✓ Branch 1 taken 44 times.
✓ Branch 2 taken 33 times.
✓ Branch 3 taken 9 times.
✓ Branch 4 taken 35 times.
✓ Branch 5 taken 9 times.
86 if (pos[0] == 'w' || pos[0] == 'W')
90 {
91 68 ++pos;
92 }
93
2/2
✓ Branch 0 taken 1213 times.
✓ Branch 1 taken 18 times.
1231 for(int i = 0; i < warning_id_end; i++)
94 {
95
10/12
✓ Branch 0 taken 555 times.
✓ Branch 1 taken 42 times.
✓ Branch 2 taken 649 times.
✓ Branch 3 taken 1094 times.
✓ Branch 4 taken 77 times.
✓ Branch 5 taken 564 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 35 times.
✓ Branch 9 taken 537 times.
✓ Branch 10 taken 35 times.
✓ Branch 11 taken 581 times.
1213 if(all_warnings[i].exists && !stricmpwithlower(pos, all_warnings[i].name+1))
96 {
97 68 return asar_warning_id(i);
98 }
99 }
100
101 18 return warning_id_end;
102 }
103
104 290 void reset_warnings_to_default()
105 {
106
2/2
✓ Branch 0 taken 4930 times.
✓ Branch 1 taken 290 times.
5220 for (int i = 0; i < (int)warning_id_end; ++i)
107 {
108 4930 const warn_t& warning = all_warnings[i];
109
110
3/4
✓ Branch 0 taken 2176 times.
✓ Branch 1 taken 2754 times.
✓ Branch 2 taken 2754 times.
✗ Branch 3 not taken.
4930 current_warnings_state.enabled[i] = warning.is_default_enabled;
111 }
112 290 }
113
114 862 void push_warnings(bool warnings_command)
115 {
116
2/2
✓ Branch 0 taken 24 times.
✓ Branch 1 taken 838 times.
862 if (warnings_command)
117 {
118 24 warnings_state_stack.append(current_warnings_state);
119 }
120 else
121 {
122 838 main_warnings_state = current_warnings_state;
123 }
124 862 }
125
126 852 void pull_warnings(bool warnings_command)
127 {
128
4/4
✓ Branch 0 taken 834 times.
✓ Branch 1 taken 18 times.
✓ Branch 2 taken 828 times.
✓ Branch 3 taken 6 times.
852 if (warnings_state_stack.count > 0 || !warnings_command)
129 {
130
2/3
✓ Branch 0 taken 375 times.
✓ Branch 1 taken 471 times.
✗ Branch 2 not taken.
846 warnings_state prev_state;
131
132
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 828 times.
846 if (warnings_command)
133 {
134
3/5
✓ Branch 0 taken 18 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
18 prev_state = warnings_state_stack[warnings_state_stack.count - 1];
135 }
136 else
137 {
138
1/2
✓ Branch 0 taken 828 times.
✗ Branch 1 not taken.
828 prev_state = main_warnings_state;
139 }
140
141
1/2
✓ Branch 0 taken 846 times.
✗ Branch 1 not taken.
846 current_warnings_state = prev_state;
142
143
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 828 times.
846 if (warnings_command)
144 {
145 18 warnings_state_stack.remove(warnings_state_stack.count - 1);
146 }
147 846 }
148 else
149 {
150 6 throw_err_block(0, err_pullwarnings_without_pushwarnings);
151 }
152 846 }
153
154 828 void verify_warnings()
155 {
156
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 822 times.
828 if (warnings_state_stack.count > 0)
157 {
158 6 throw_err_null(0, err_pushwarnings_without_pullwarnings);
159
160 6 warnings_state_stack.reset();
161 }
162 828 }
163