| line |
true |
false |
branch |
|
33
|
21 |
0 |
if (n >= 0 && n <= 38) return decimal_pow10_table[n]; |
|
|
21 |
0 |
if (n >= 0 && n <= 38) return decimal_pow10_table[n]; |
|
40
|
0 |
6 |
if (n < 0) return powl(10.0L, n); |
|
43
|
4 |
6 |
for (i = 0; i < n; i++) r *= 10.0L; |
|
75
|
2284 |
571 |
for (i = 0; i < 4; i++) { |
|
95
|
1106 |
4 |
for (i = 0; i < 4 && carry; i++) { |
|
|
535 |
571 |
for (i = 0; i < 4 && carry; i++) { |
|
109
|
2033 |
0 |
while (i < len && (s[i] == ' ' || s[i] == '\t')) i++; |
|
|
0 |
2033 |
while (i < len && (s[i] == ' ' || s[i] == '\t')) i++; |
|
|
0 |
2033 |
while (i < len && (s[i] == ' ' || s[i] == '\t')) i++; |
|
110
|
2033 |
0 |
if (i < len && (s[i] == '+' || s[i] == '-')) { |
|
|
2033 |
0 |
if (i < len && (s[i] == '+' || s[i] == '-')) { |
|
|
10 |
2023 |
if (i < len && (s[i] == '+' || s[i] == '-')) { |
|
111
|
10 |
0 |
if (s[i] == '-') neg = 1; |
|
115
|
6668 |
2032 |
while (i < len) { |
|
117
|
1016 |
5652 |
if (c == '.') { |
|
118
|
0 |
1016 |
if (seen_dot) return 0; |
|
122
|
5652 |
0 |
if (c < '0' || c > '9') return 0; |
|
|
0 |
5652 |
if (c < '0' || c > '9') return 0; |
|
124
|
2076 |
3576 |
if (seen_dot) { |
|
125
|
0 |
2076 |
if (frac_used >= scale) continue; /* truncate */ |
|
128
|
0 |
5652 |
if (!mul10_128(&hi, &lo)) return 0; |
|
131
|
2 |
5650 |
if (hi == 0xFFFFFFFFFFFFFFFFULL && lo > 0xFFFFFFFFFFFFFFFFULL - digit) |
|
|
1 |
1 |
if (hi == 0xFFFFFFFFFFFFFFFFULL && lo > 0xFFFFFFFFFFFFFFFFULL - digit) |
|
134
|
6 |
5645 |
if (newlo < lo) hi++; |
|
138
|
0 |
2032 |
if (!seen_digit) return 0; |
|
140
|
2001 |
2032 |
while (frac_used < scale) { |
|
141
|
0 |
2001 |
if (!mul10_128(&hi, &lo)) return 0; |
|
147
|
1 |
2031 |
if (hi > 0x8000000000000000ULL) return 0; |
|
148
|
6 |
2025 |
if (hi == 0x8000000000000000ULL && (!neg || lo != 0)) return 0; |
|
|
4 |
2 |
if (hi == 0x8000000000000000ULL && (!neg || lo != 0)) return 0; |
|
|
0 |
4 |
if (hi == 0x8000000000000000ULL && (!neg || lo != 0)) return 0; |
|
150
|
10 |
2019 |
if (neg) { |
|
152
|
4 |
6 |
hi = ~hi + (lo == 0 ? 1 : 0); |
|
166
|
13 |
0 |
while (i < len && (s[i] == ' ' || s[i] == '\t')) i++; |
|
|
0 |
13 |
while (i < len && (s[i] == ' ' || s[i] == '\t')) i++; |
|
|
0 |
13 |
while (i < len && (s[i] == ' ' || s[i] == '\t')) i++; |
|
167
|
13 |
0 |
if (i < len && (s[i] == '+' || s[i] == '-')) { |
|
|
13 |
0 |
if (i < len && (s[i] == '+' || s[i] == '-')) { |
|
|
4 |
9 |
if (i < len && (s[i] == '+' || s[i] == '-')) { |
|
168
|
4 |
0 |
if (s[i] == '-') neg = 1; |
|
171
|
577 |
12 |
while (i < len) { |
|
173
|
6 |
571 |
if (c == '.') { |
|
174
|
0 |
6 |
if (seen_dot) return 0; |
|
178
|
571 |
0 |
if (c < '0' || c > '9') return 0; |
|
|
0 |
571 |
if (c < '0' || c > '9') return 0; |
|
180
|
16 |
555 |
if (seen_dot) { |
|
181
|
0 |
16 |
if (frac_used >= scale) continue; |
|
184
|
0 |
571 |
if (!mul10_256(limbs)) return 0; |
|
185
|
1 |
570 |
if (add_digit_256(limbs, (uint64_t)(c - '0'))) return 0; |
|
187
|
0 |
12 |
if (!seen_digit) return 0; |
|
188
|
0 |
12 |
while (frac_used < scale) { |
|
189
|
0 |
0 |
if (!mul10_256(limbs)) return 0; |
|
194
|
0 |
12 |
if (limbs[3] > 0x8000000000000000ULL) return 0; |
|
195
|
2 |
10 |
if (limbs[3] == 0x8000000000000000ULL |
|
196
|
1 |
1 |
&& (!neg || limbs[0] != 0 || limbs[1] != 0 || limbs[2] != 0)) |
|
|
1 |
0 |
&& (!neg || limbs[0] != 0 || limbs[1] != 0 || limbs[2] != 0)) |
|
|
1 |
0 |
&& (!neg || limbs[0] != 0 || limbs[1] != 0 || limbs[2] != 0)) |
|
|
0 |
1 |
&& (!neg || limbs[0] != 0 || limbs[1] != 0 || limbs[2] != 0)) |
|
198
|
4 |
7 |
if (neg) { |
|
200
|
16 |
4 |
for (j = 0; j < 4; j++) limbs[j] = ~limbs[j]; |
|
213
|
0 |
2013 |
if (!parse_decimal128_str(s, len, scale, &hi, &lo)) return 0; |
|
215
|
2010 |
3 |
if (hi == 0 && (lo & 0x8000000000000000ULL) == 0) { |
|
|
2010 |
0 |
if (hi == 0 && (lo & 0x8000000000000000ULL) == 0) { |
|
219
|
3 |
0 |
if (hi == ~(uint64_t)0 && (lo & 0x8000000000000000ULL)) { |
|
|
3 |
0 |
if (hi == ~(uint64_t)0 && (lo & 0x8000000000000000ULL)) { |