Coverage Report

Created: 2025-11-16 06:09

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/unsafe-libyaml/src/scanner.rs
Line
Count
Source
1
use crate::api::{
2
    yaml_free, yaml_malloc, yaml_queue_extend, yaml_stack_extend, yaml_string_extend,
3
    yaml_string_join,
4
};
5
use crate::externs::{memcpy, memmove, memset, strcmp, strlen};
6
use crate::ops::{ForceAdd as _, ForceMul as _};
7
use crate::reader::yaml_parser_update_buffer;
8
use crate::success::{Success, FAIL, OK};
9
use crate::yaml::{ptrdiff_t, size_t, yaml_char_t, yaml_string_t, NULL_STRING};
10
use crate::{
11
    libc, yaml_mark_t, yaml_parser_t, yaml_simple_key_t, yaml_token_t, yaml_token_type_t,
12
    PointerExt, YAML_ALIAS_TOKEN, YAML_ANCHOR_TOKEN, YAML_BLOCK_END_TOKEN, YAML_BLOCK_ENTRY_TOKEN,
13
    YAML_BLOCK_MAPPING_START_TOKEN, YAML_BLOCK_SEQUENCE_START_TOKEN, YAML_DOCUMENT_END_TOKEN,
14
    YAML_DOCUMENT_START_TOKEN, YAML_DOUBLE_QUOTED_SCALAR_STYLE, YAML_FLOW_ENTRY_TOKEN,
15
    YAML_FLOW_MAPPING_END_TOKEN, YAML_FLOW_MAPPING_START_TOKEN, YAML_FLOW_SEQUENCE_END_TOKEN,
16
    YAML_FLOW_SEQUENCE_START_TOKEN, YAML_FOLDED_SCALAR_STYLE, YAML_KEY_TOKEN,
17
    YAML_LITERAL_SCALAR_STYLE, YAML_MEMORY_ERROR, YAML_NO_ERROR, YAML_PLAIN_SCALAR_STYLE,
18
    YAML_SCALAR_TOKEN, YAML_SCANNER_ERROR, YAML_SINGLE_QUOTED_SCALAR_STYLE, YAML_STREAM_END_TOKEN,
19
    YAML_STREAM_START_TOKEN, YAML_TAG_DIRECTIVE_TOKEN, YAML_TAG_TOKEN, YAML_VALUE_TOKEN,
20
    YAML_VERSION_DIRECTIVE_TOKEN,
21
};
22
use core::mem::{size_of, MaybeUninit};
23
use core::ptr::{self, addr_of_mut};
24
25
950M
unsafe fn CACHE(parser: *mut yaml_parser_t, length: size_t) -> Success {
26
950M
    if (*parser).unread >= length {
27
950M
        OK
28
    } else {
29
125k
        yaml_parser_update_buffer(parser, length)
30
    }
31
950M
}
32
33
232M
unsafe fn SKIP(parser: *mut yaml_parser_t) {
34
232M
    let width = WIDTH!((*parser).buffer);
35
232M
    (*parser).mark.index = (*parser).mark.index.force_add(width as u64);
36
232M
    (*parser).mark.column = (*parser).mark.column.force_add(1);
37
232M
    (*parser).unread = (*parser).unread.wrapping_sub(1);
38
232M
    (*parser).buffer.pointer = (*parser).buffer.pointer.wrapping_offset(width as isize);
39
232M
}
40
41
19.2M
unsafe fn SKIP_LINE(parser: *mut yaml_parser_t) {
42
19.2M
    if IS_CRLF!((*parser).buffer) {
43
690k
        (*parser).mark.index = (*parser).mark.index.force_add(2);
44
690k
        (*parser).mark.column = 0;
45
690k
        (*parser).mark.line = (*parser).mark.line.force_add(1);
46
690k
        (*parser).unread = (*parser).unread.wrapping_sub(2);
47
690k
        (*parser).buffer.pointer = (*parser).buffer.pointer.wrapping_offset(2);
48
18.5M
    } else if IS_BREAK!((*parser).buffer) {
49
18.5M
        let width = WIDTH!((*parser).buffer);
50
18.5M
        (*parser).mark.index = (*parser).mark.index.force_add(width as u64);
51
18.5M
        (*parser).mark.column = 0;
52
18.5M
        (*parser).mark.line = (*parser).mark.line.force_add(1);
53
18.5M
        (*parser).unread = (*parser).unread.wrapping_sub(1);
54
18.5M
        (*parser).buffer.pointer = (*parser).buffer.pointer.wrapping_offset(width as isize);
55
0
    };
56
19.2M
}
57
58
311M
unsafe fn READ(parser: *mut yaml_parser_t, string: *mut yaml_string_t) {
59
311M
    STRING_EXTEND!(*string);
60
311M
    let width = WIDTH!((*parser).buffer);
61
311M
    COPY!(*string, (*parser).buffer);
62
311M
    (*parser).mark.index = (*parser).mark.index.force_add(width as u64);
63
311M
    (*parser).mark.column = (*parser).mark.column.force_add(1);
64
311M
    (*parser).unread = (*parser).unread.wrapping_sub(1);
65
311M
}
66
67
26.7M
unsafe fn READ_LINE(parser: *mut yaml_parser_t, string: *mut yaml_string_t) {
68
26.7M
    STRING_EXTEND!(*string);
69
26.7M
    if CHECK_AT!((*parser).buffer, b'\r', 0) && CHECK_AT!((*parser).buffer, b'\n', 1) {
70
613k
        *(*string).pointer = b'\n';
71
613k
        (*string).pointer = (*string).pointer.wrapping_offset(1);
72
613k
        (*parser).buffer.pointer = (*parser).buffer.pointer.wrapping_offset(2);
73
613k
        (*parser).mark.index = (*parser).mark.index.force_add(2);
74
613k
        (*parser).mark.column = 0;
75
613k
        (*parser).mark.line = (*parser).mark.line.force_add(1);
76
613k
        (*parser).unread = (*parser).unread.wrapping_sub(2);
77
26.1M
    } else if CHECK_AT!((*parser).buffer, b'\r', 0) || CHECK_AT!((*parser).buffer, b'\n', 0) {
78
23.9M
        *(*string).pointer = b'\n';
79
23.9M
        (*string).pointer = (*string).pointer.wrapping_offset(1);
80
23.9M
        (*parser).buffer.pointer = (*parser).buffer.pointer.wrapping_offset(1);
81
23.9M
        (*parser).mark.index = (*parser).mark.index.force_add(1);
82
23.9M
        (*parser).mark.column = 0;
83
23.9M
        (*parser).mark.line = (*parser).mark.line.force_add(1);
84
23.9M
        (*parser).unread = (*parser).unread.wrapping_sub(1);
85
23.9M
    } else if CHECK_AT!((*parser).buffer, b'\xC2', 0) && CHECK_AT!((*parser).buffer, b'\x85', 1) {
86
229k
        *(*string).pointer = b'\n';
87
229k
        (*string).pointer = (*string).pointer.wrapping_offset(1);
88
229k
        (*parser).buffer.pointer = (*parser).buffer.pointer.wrapping_offset(2);
89
229k
        (*parser).mark.index = (*parser).mark.index.force_add(2);
90
229k
        (*parser).mark.column = 0;
91
229k
        (*parser).mark.line = (*parser).mark.line.force_add(1);
92
229k
        (*parser).unread = (*parser).unread.wrapping_sub(1);
93
1.99M
    } else if CHECK_AT!((*parser).buffer, b'\xE2', 0)
94
1.99M
        && CHECK_AT!((*parser).buffer, b'\x80', 1)
95
1.99M
        && (CHECK_AT!((*parser).buffer, b'\xA8', 2) || CHECK_AT!((*parser).buffer, b'\xA9', 2))
96
1.99M
    {
97
1.99M
        *(*string).pointer = *(*parser).buffer.pointer;
98
1.99M
        (*string).pointer = (*string).pointer.wrapping_offset(1);
99
1.99M
        (*parser).buffer.pointer = (*parser).buffer.pointer.wrapping_offset(1);
100
1.99M
        *(*string).pointer = *(*parser).buffer.pointer;
101
1.99M
        (*string).pointer = (*string).pointer.wrapping_offset(1);
102
1.99M
        (*parser).buffer.pointer = (*parser).buffer.pointer.wrapping_offset(1);
103
1.99M
        *(*string).pointer = *(*parser).buffer.pointer;
104
1.99M
        (*string).pointer = (*string).pointer.wrapping_offset(1);
105
1.99M
        (*parser).buffer.pointer = (*parser).buffer.pointer.wrapping_offset(1);
106
1.99M
        (*parser).mark.index = (*parser).mark.index.force_add(3);
107
1.99M
        (*parser).mark.column = 0;
108
1.99M
        (*parser).mark.line = (*parser).mark.line.force_add(1);
109
1.99M
        (*parser).unread = (*parser).unread.wrapping_sub(1);
110
1.99M
    };
111
26.7M
}
112
113
macro_rules! READ {
114
    ($parser:expr, $string:expr) => {
115
        READ($parser, addr_of_mut!($string))
116
    };
117
}
118
119
macro_rules! READ_LINE {
120
    ($parser:expr, $string:expr) => {
121
        READ_LINE($parser, addr_of_mut!($string))
122
    };
123
}
124
125
/// Scan the input stream and produce the next token.
126
///
127
/// Call the function subsequently to produce a sequence of tokens corresponding
128
/// to the input stream. The initial token has the type YAML_STREAM_START_TOKEN
129
/// while the ending token has the type YAML_STREAM_END_TOKEN.
130
///
131
/// An application is responsible for freeing any buffers associated with the
132
/// produced token object using the yaml_token_delete function.
133
///
134
/// An application must not alternate the calls of yaml_parser_scan() with the
135
/// calls of yaml_parser_parse() or yaml_parser_load(). Doing this will break
136
/// the parser.
137
42.7M
pub unsafe fn yaml_parser_scan(parser: *mut yaml_parser_t, token: *mut yaml_token_t) -> Success {
138
42.7M
    __assert!(!parser.is_null());
139
42.7M
    __assert!(!token.is_null());
140
42.7M
    memset(
141
42.7M
        token as *mut libc::c_void,
142
        0,
143
42.7M
        size_of::<yaml_token_t>() as libc::c_ulong,
144
    );
145
42.7M
    if (*parser).stream_end_produced || (*parser).error != YAML_NO_ERROR {
146
0
        return OK;
147
42.7M
    }
148
42.7M
    if !(*parser).token_available {
149
42.7M
        if yaml_parser_fetch_more_tokens(parser).fail {
150
3.19k
            return FAIL;
151
42.7M
        }
152
0
    }
153
42.7M
    *token = DEQUEUE!((*parser).tokens);
154
42.7M
    (*parser).token_available = false;
155
42.7M
    let fresh2 = addr_of_mut!((*parser).tokens_parsed);
156
42.7M
    *fresh2 = (*fresh2).force_add(1);
157
42.7M
    if (*token).type_ == YAML_STREAM_END_TOKEN {
158
4.79k
        (*parser).stream_end_produced = true;
159
42.6M
    }
160
42.7M
    OK
161
42.7M
}
162
163
7.94k
unsafe fn yaml_parser_set_scanner_error(
164
7.94k
    parser: *mut yaml_parser_t,
165
7.94k
    context: *const libc::c_char,
166
7.94k
    context_mark: yaml_mark_t,
167
7.94k
    problem: *const libc::c_char,
168
7.94k
) {
169
7.94k
    (*parser).error = YAML_SCANNER_ERROR;
170
7.94k
    let fresh3 = addr_of_mut!((*parser).context);
171
7.94k
    *fresh3 = context;
172
7.94k
    (*parser).context_mark = context_mark;
173
7.94k
    let fresh4 = addr_of_mut!((*parser).problem);
174
7.94k
    *fresh4 = problem;
175
7.94k
    (*parser).problem_mark = (*parser).mark;
176
7.94k
}
177
178
126M
pub(crate) unsafe fn yaml_parser_fetch_more_tokens(parser: *mut yaml_parser_t) -> Success {
179
    let mut need_more_tokens;
180
    loop {
181
214M
        need_more_tokens = false;
182
214M
        if (*parser).tokens.head == (*parser).tokens.tail {
183
33.3M
            need_more_tokens = true;
184
33.3M
        } else {
185
            let mut simple_key: *mut yaml_simple_key_t;
186
181M
            if yaml_parser_stale_simple_keys(parser).fail {
187
110
                return FAIL;
188
181M
            }
189
181M
            simple_key = (*parser)
190
181M
                .simple_keys
191
181M
                .start
192
181M
                .add((*parser).not_simple_keys as usize);
193
3.35G
            while simple_key != (*parser).simple_keys.top {
194
3.23G
                if (*simple_key).possible && (*simple_key).token_number == (*parser).tokens_parsed {
195
54.6M
                    need_more_tokens = true;
196
54.6M
                    break;
197
3.17G
                } else {
198
3.17G
                    simple_key = simple_key.wrapping_offset(1);
199
3.17G
                }
200
            }
201
        }
202
214M
        if !need_more_tokens {
203
126M
            break;
204
87.9M
        }
205
87.9M
        if yaml_parser_fetch_next_token(parser).fail {
206
9.26k
            return FAIL;
207
87.9M
        }
208
    }
209
126M
    (*parser).token_available = true;
210
126M
    OK
211
126M
}
212
213
87.9M
unsafe fn yaml_parser_fetch_next_token(parser: *mut yaml_parser_t) -> Success {
214
87.9M
    if CACHE(parser, 1_u64).fail {
215
546
        return FAIL;
216
87.9M
    }
217
87.9M
    if !(*parser).stream_start_produced {
218
25.3k
        yaml_parser_fetch_stream_start(parser);
219
25.3k
        return OK;
220
87.9M
    }
221
87.9M
    if yaml_parser_scan_to_next_token(parser).fail {
222
75
        return FAIL;
223
87.9M
    }
224
87.9M
    if yaml_parser_stale_simple_keys(parser).fail {
225
29
        return FAIL;
226
87.9M
    }
227
87.9M
    yaml_parser_unroll_indent(parser, (*parser).mark.column as ptrdiff_t);
228
87.9M
    if CACHE(parser, 4_u64).fail {
229
95
        return FAIL;
230
87.9M
    }
231
87.9M
    if IS_Z!((*parser).buffer) {
232
15.3k
        return yaml_parser_fetch_stream_end(parser);
233
87.9M
    }
234
87.9M
    if (*parser).mark.column == 0_u64 && CHECK!((*parser).buffer, b'%') {
235
117k
        return yaml_parser_fetch_directive(parser);
236
87.7M
    }
237
87.7M
    if (*parser).mark.column == 0_u64
238
6.26M
        && CHECK_AT!((*parser).buffer, b'-', 0)
239
1.90M
        && CHECK_AT!((*parser).buffer, b'-', 1)
240
267k
        && CHECK_AT!((*parser).buffer, b'-', 2)
241
247k
        && IS_BLANKZ_AT!((*parser).buffer, 3)
242
    {
243
232k
        return yaml_parser_fetch_document_indicator(parser, YAML_DOCUMENT_START_TOKEN);
244
87.5M
    }
245
87.5M
    if (*parser).mark.column == 0_u64
246
6.03M
        && CHECK_AT!((*parser).buffer, b'.', 0)
247
30.7k
        && CHECK_AT!((*parser).buffer, b'.', 1)
248
25.4k
        && CHECK_AT!((*parser).buffer, b'.', 2)
249
22.3k
        && IS_BLANKZ_AT!((*parser).buffer, 3)
250
    {
251
16.3k
        return yaml_parser_fetch_document_indicator(parser, YAML_DOCUMENT_END_TOKEN);
252
87.5M
    }
253
87.5M
    if CHECK!((*parser).buffer, b'[') {
254
16.8M
        return yaml_parser_fetch_flow_collection_start(parser, YAML_FLOW_SEQUENCE_START_TOKEN);
255
70.7M
    }
256
70.7M
    if CHECK!((*parser).buffer, b'{') {
257
30.3M
        return yaml_parser_fetch_flow_collection_start(parser, YAML_FLOW_MAPPING_START_TOKEN);
258
40.4M
    }
259
40.4M
    if CHECK!((*parser).buffer, b']') {
260
134k
        return yaml_parser_fetch_flow_collection_end(parser, YAML_FLOW_SEQUENCE_END_TOKEN);
261
40.2M
    }
262
40.2M
    if CHECK!((*parser).buffer, b'}') {
263
4.47M
        return yaml_parser_fetch_flow_collection_end(parser, YAML_FLOW_MAPPING_END_TOKEN);
264
35.8M
    }
265
35.8M
    if CHECK!((*parser).buffer, b',') {
266
5.04M
        return yaml_parser_fetch_flow_entry(parser);
267
30.7M
    }
268
30.7M
    if CHECK!((*parser).buffer, b'-') && IS_BLANKZ_AT!((*parser).buffer, 1) {
269
14.4M
        return yaml_parser_fetch_block_entry(parser);
270
16.3M
    }
271
16.3M
    if CHECK!((*parser).buffer, b'?')
272
4.48M
        && ((*parser).flow_level != 0 || IS_BLANKZ_AT!((*parser).buffer, 1))
273
    {
274
4.45M
        return yaml_parser_fetch_key(parser);
275
11.8M
    }
276
11.8M
    if CHECK!((*parser).buffer, b':')
277
5.56M
        && ((*parser).flow_level != 0 || IS_BLANKZ_AT!((*parser).buffer, 1))
278
    {
279
4.80M
        return yaml_parser_fetch_value(parser);
280
7.07M
    }
281
7.07M
    if CHECK!((*parser).buffer, b'*') {
282
80.4k
        return yaml_parser_fetch_anchor(parser, YAML_ALIAS_TOKEN);
283
6.99M
    }
284
6.99M
    if CHECK!((*parser).buffer, b'&') {
285
71.8k
        return yaml_parser_fetch_anchor(parser, YAML_ANCHOR_TOKEN);
286
6.91M
    }
287
6.91M
    if CHECK!((*parser).buffer, b'!') {
288
269k
        return yaml_parser_fetch_tag(parser);
289
6.64M
    }
290
6.64M
    if CHECK!((*parser).buffer, b'|') && (*parser).flow_level == 0 {
291
8.73k
        return yaml_parser_fetch_block_scalar(parser, true);
292
6.64M
    }
293
6.64M
    if CHECK!((*parser).buffer, b'>') && (*parser).flow_level == 0 {
294
15.6k
        return yaml_parser_fetch_block_scalar(parser, false);
295
6.62M
    }
296
6.62M
    if CHECK!((*parser).buffer, b'\'') {
297
501k
        return yaml_parser_fetch_flow_scalar(parser, true);
298
6.12M
    }
299
6.12M
    if CHECK!((*parser).buffer, b'"') {
300
48.7k
        return yaml_parser_fetch_flow_scalar(parser, false);
301
6.07M
    }
302
6.07M
    if !(IS_BLANKZ!((*parser).buffer)
303
6.07M
        || CHECK!((*parser).buffer, b'-')
304
5.74M
        || CHECK!((*parser).buffer, b'?')
305
5.72M
        || CHECK!((*parser).buffer, b':')
306
4.96M
        || CHECK!((*parser).buffer, b',')
307
4.96M
        || CHECK!((*parser).buffer, b'[')
308
4.96M
        || CHECK!((*parser).buffer, b']')
309
4.96M
        || CHECK!((*parser).buffer, b'{')
310
4.96M
        || CHECK!((*parser).buffer, b'}')
311
4.96M
        || CHECK!((*parser).buffer, b'#')
312
4.96M
        || CHECK!((*parser).buffer, b'&')
313
4.96M
        || CHECK!((*parser).buffer, b'*')
314
4.96M
        || CHECK!((*parser).buffer, b'!')
315
4.96M
        || CHECK!((*parser).buffer, b'|')
316
4.96M
        || CHECK!((*parser).buffer, b'>')
317
4.96M
        || CHECK!((*parser).buffer, b'\'')
318
4.96M
        || CHECK!((*parser).buffer, b'"')
319
4.96M
        || CHECK!((*parser).buffer, b'%')
320
4.96M
        || CHECK!((*parser).buffer, b'@')
321
4.96M
        || CHECK!((*parser).buffer, b'`'))
322
1.11M
        || CHECK!((*parser).buffer, b'-') && !IS_BLANK_AT!((*parser).buffer, 1)
323
786k
        || (*parser).flow_level == 0
324
786k
            && (CHECK!((*parser).buffer, b'?') || CHECK!((*parser).buffer, b':'))
325
786k
            && !IS_BLANKZ_AT!((*parser).buffer, 1)
326
    {
327
6.07M
        return yaml_parser_fetch_plain_scalar(parser);
328
299
    }
329
299
    yaml_parser_set_scanner_error(
330
299
        parser,
331
299
        b"while scanning for the next token\0" as *const u8 as *const libc::c_char,
332
299
        (*parser).mark,
333
299
        b"found character that cannot start any token\0" as *const u8 as *const libc::c_char,
334
    );
335
299
    FAIL
336
87.9M
}
337
338
268M
unsafe fn yaml_parser_stale_simple_keys(parser: *mut yaml_parser_t) -> Success {
339
    let mut simple_key: *mut yaml_simple_key_t;
340
268M
    simple_key = (*parser)
341
268M
        .simple_keys
342
268M
        .start
343
268M
        .add((*parser).not_simple_keys as usize);
344
10.3G
    while simple_key != (*parser).simple_keys.top {
345
10.0G
        if (*simple_key).possible
346
6.56G
            && ((*simple_key).mark.line < (*parser).mark.line
347
6.51G
                || (*simple_key).mark.index.force_add(1024_u64) < (*parser).mark.index)
348
        {
349
46.9M
            if (*simple_key).required {
350
139
                yaml_parser_set_scanner_error(
351
139
                    parser,
352
139
                    b"while scanning a simple key\0" as *const u8 as *const libc::c_char,
353
139
                    (*simple_key).mark,
354
139
                    b"could not find expected ':'\0" as *const u8 as *const libc::c_char,
355
                );
356
139
                return FAIL;
357
46.9M
            }
358
46.9M
            (*simple_key).possible = false;
359
46.9M
            if (*parser)
360
46.9M
                .simple_keys
361
46.9M
                .start
362
46.9M
                .add((*parser).not_simple_keys as usize)
363
46.9M
                == simple_key
364
46.7M
            {
365
46.7M
                (*parser).not_simple_keys += 1;
366
46.7M
            }
367
10.0G
        }
368
10.0G
        simple_key = simple_key.wrapping_offset(1);
369
    }
370
268M
    OK
371
268M
}
372
373
54.1M
unsafe fn yaml_parser_save_simple_key(parser: *mut yaml_parser_t) -> Success {
374
54.1M
    let required = (*parser).flow_level == 0
375
3.24M
        && (*parser).indent as libc::c_long == (*parser).mark.column as ptrdiff_t;
376
54.1M
    if (*parser).simple_key_allowed {
377
52.6M
        let simple_key = yaml_simple_key_t {
378
52.6M
            possible: true,
379
52.6M
            required,
380
52.6M
            token_number: (*parser).tokens_parsed.force_add(
381
52.6M
                (*parser).tokens.tail.c_offset_from((*parser).tokens.head) as libc::c_ulong,
382
52.6M
            ),
383
52.6M
            mark: (*parser).mark,
384
52.6M
        };
385
52.6M
        if yaml_parser_remove_simple_key(parser).fail {
386
0
            return FAIL;
387
52.6M
        }
388
52.6M
        *(*parser).simple_keys.top.wrapping_offset(-1_isize) = simple_key;
389
52.6M
        if (*parser)
390
52.6M
            .simple_keys
391
52.6M
            .start
392
52.6M
            .add((*parser).not_simple_keys as usize)
393
52.6M
            == (*parser).simple_keys.top
394
209k
        {
395
209k
            (*parser).not_simple_keys -= 1;
396
52.4M
        }
397
1.50M
    }
398
54.1M
    OK
399
54.1M
}
400
401
81.6M
unsafe fn yaml_parser_remove_simple_key(parser: *mut yaml_parser_t) -> Success {
402
81.6M
    let simple_key: *mut yaml_simple_key_t = (*parser).simple_keys.top.wrapping_offset(-1_isize);
403
81.6M
    if (*simple_key).possible {
404
3.01M
        if (*simple_key).required {
405
494
            yaml_parser_set_scanner_error(
406
494
                parser,
407
494
                b"while scanning a simple key\0" as *const u8 as *const libc::c_char,
408
494
                (*simple_key).mark,
409
494
                b"could not find expected ':'\0" as *const u8 as *const libc::c_char,
410
            );
411
494
            return FAIL;
412
3.01M
        }
413
78.5M
    }
414
81.6M
    (*simple_key).possible = false;
415
81.6M
    OK
416
81.6M
}
417
418
47.1M
unsafe fn yaml_parser_increase_flow_level(parser: *mut yaml_parser_t) -> Success {
419
47.1M
    let empty_simple_key = yaml_simple_key_t {
420
47.1M
        possible: false,
421
47.1M
        required: false,
422
47.1M
        token_number: 0_u64,
423
47.1M
        mark: yaml_mark_t {
424
47.1M
            index: 0_u64,
425
47.1M
            line: 0_u64,
426
47.1M
            column: 0_u64,
427
47.1M
        },
428
47.1M
    };
429
47.1M
    PUSH!((*parser).simple_keys, empty_simple_key);
430
47.1M
    if (*parser).flow_level == libc::c_int::MAX {
431
0
        (*parser).error = YAML_MEMORY_ERROR;
432
0
        return FAIL;
433
47.1M
    }
434
47.1M
    let fresh7 = addr_of_mut!((*parser).flow_level);
435
47.1M
    *fresh7 += 1;
436
47.1M
    OK
437
47.1M
}
438
439
4.60M
unsafe fn yaml_parser_decrease_flow_level(parser: *mut yaml_parser_t) {
440
4.60M
    if (*parser).flow_level != 0 {
441
278k
        let fresh8 = addr_of_mut!((*parser).flow_level);
442
278k
        *fresh8 -= 1;
443
278k
        if (*parser)
444
278k
            .simple_keys
445
278k
            .start
446
278k
            .add((*parser).not_simple_keys as usize)
447
278k
            == (*parser).simple_keys.top
448
25.1k
        {
449
25.1k
            (*parser).not_simple_keys -= 1;
450
253k
        }
451
278k
        let _ = POP!((*parser).simple_keys);
452
4.33M
    }
453
4.60M
}
454
455
21.3M
unsafe fn yaml_parser_roll_indent(
456
21.3M
    parser: *mut yaml_parser_t,
457
21.3M
    column: ptrdiff_t,
458
21.3M
    number: ptrdiff_t,
459
21.3M
    type_: yaml_token_type_t,
460
21.3M
    mark: yaml_mark_t,
461
21.3M
) -> Success {
462
21.3M
    let mut token = MaybeUninit::<yaml_token_t>::uninit();
463
21.3M
    let token = token.as_mut_ptr();
464
21.3M
    if (*parser).flow_level != 0 {
465
164k
        return OK;
466
21.1M
    }
467
21.1M
    if ((*parser).indent as libc::c_long) < column {
468
18.5M
        PUSH!((*parser).indents, (*parser).indent);
469
18.5M
        if column > ptrdiff_t::from(libc::c_int::MAX) {
470
0
            (*parser).error = YAML_MEMORY_ERROR;
471
0
            return FAIL;
472
18.5M
        }
473
18.5M
        (*parser).indent = column as libc::c_int;
474
18.5M
        memset(
475
18.5M
            token as *mut libc::c_void,
476
            0,
477
18.5M
            size_of::<yaml_token_t>() as libc::c_ulong,
478
        );
479
18.5M
        (*token).type_ = type_;
480
18.5M
        (*token).start_mark = mark;
481
18.5M
        (*token).end_mark = mark;
482
18.5M
        if number == -1_i64 {
483
16.5M
            ENQUEUE!((*parser).tokens, *token);
484
        } else {
485
2.05M
            QUEUE_INSERT!(
486
                (*parser).tokens,
487
2.05M
                (number as libc::c_ulong).wrapping_sub((*parser).tokens_parsed),
488
2.05M
                *token
489
            );
490
        }
491
2.55M
    }
492
21.1M
    OK
493
21.3M
}
494
495
88.3M
unsafe fn yaml_parser_unroll_indent(parser: *mut yaml_parser_t, column: ptrdiff_t) {
496
88.3M
    let mut token = MaybeUninit::<yaml_token_t>::uninit();
497
88.3M
    let token = token.as_mut_ptr();
498
88.3M
    if (*parser).flow_level != 0 {
499
57.4M
        return;
500
30.8M
    }
501
49.3M
    while (*parser).indent as libc::c_long > column {
502
18.4M
        memset(
503
18.4M
            token as *mut libc::c_void,
504
            0,
505
18.4M
            size_of::<yaml_token_t>() as libc::c_ulong,
506
        );
507
18.4M
        (*token).type_ = YAML_BLOCK_END_TOKEN;
508
18.4M
        (*token).start_mark = (*parser).mark;
509
18.4M
        (*token).end_mark = (*parser).mark;
510
18.4M
        ENQUEUE!((*parser).tokens, *token);
511
18.4M
        (*parser).indent = POP!((*parser).indents);
512
    }
513
88.3M
}
514
515
25.3k
unsafe fn yaml_parser_fetch_stream_start(parser: *mut yaml_parser_t) {
516
25.3k
    let simple_key = yaml_simple_key_t {
517
25.3k
        possible: false,
518
25.3k
        required: false,
519
25.3k
        token_number: 0_u64,
520
25.3k
        mark: yaml_mark_t {
521
25.3k
            index: 0_u64,
522
25.3k
            line: 0_u64,
523
25.3k
            column: 0_u64,
524
25.3k
        },
525
25.3k
    };
526
25.3k
    let mut token = MaybeUninit::<yaml_token_t>::uninit();
527
25.3k
    let token = token.as_mut_ptr();
528
25.3k
    (*parser).indent = -1;
529
25.3k
    PUSH!((*parser).simple_keys, simple_key);
530
25.3k
    (*parser).not_simple_keys = 1;
531
25.3k
    (*parser).simple_key_allowed = true;
532
25.3k
    (*parser).stream_start_produced = true;
533
25.3k
    memset(
534
25.3k
        token as *mut libc::c_void,
535
        0,
536
25.3k
        size_of::<yaml_token_t>() as libc::c_ulong,
537
    );
538
25.3k
    (*token).type_ = YAML_STREAM_START_TOKEN;
539
25.3k
    (*token).start_mark = (*parser).mark;
540
25.3k
    (*token).end_mark = (*parser).mark;
541
25.3k
    (*token).data.stream_start.encoding = (*parser).encoding;
542
25.3k
    ENQUEUE!((*parser).tokens, *token);
543
25.3k
}
544
545
15.3k
unsafe fn yaml_parser_fetch_stream_end(parser: *mut yaml_parser_t) -> Success {
546
15.3k
    let mut token = MaybeUninit::<yaml_token_t>::uninit();
547
15.3k
    let token = token.as_mut_ptr();
548
15.3k
    if (*parser).mark.column != 0_u64 {
549
12.9k
        (*parser).mark.column = 0_u64;
550
12.9k
        let fresh22 = addr_of_mut!((*parser).mark.line);
551
12.9k
        *fresh22 = (*fresh22).force_add(1);
552
12.9k
    }
553
15.3k
    yaml_parser_unroll_indent(parser, -1_i64);
554
15.3k
    if yaml_parser_remove_simple_key(parser).fail {
555
477
        return FAIL;
556
14.9k
    }
557
14.9k
    (*parser).simple_key_allowed = false;
558
14.9k
    memset(
559
14.9k
        token as *mut libc::c_void,
560
        0,
561
14.9k
        size_of::<yaml_token_t>() as libc::c_ulong,
562
    );
563
14.9k
    (*token).type_ = YAML_STREAM_END_TOKEN;
564
14.9k
    (*token).start_mark = (*parser).mark;
565
14.9k
    (*token).end_mark = (*parser).mark;
566
14.9k
    ENQUEUE!((*parser).tokens, *token);
567
14.9k
    OK
568
15.3k
}
569
570
117k
unsafe fn yaml_parser_fetch_directive(parser: *mut yaml_parser_t) -> Success {
571
117k
    let mut token = MaybeUninit::<yaml_token_t>::uninit();
572
117k
    let token = token.as_mut_ptr();
573
117k
    yaml_parser_unroll_indent(parser, -1_i64);
574
117k
    if yaml_parser_remove_simple_key(parser).fail {
575
0
        return FAIL;
576
117k
    }
577
117k
    (*parser).simple_key_allowed = false;
578
117k
    if yaml_parser_scan_directive(parser, token).fail {
579
1.50k
        return FAIL;
580
115k
    }
581
115k
    ENQUEUE!((*parser).tokens, *token);
582
115k
    OK
583
117k
}
584
585
248k
unsafe fn yaml_parser_fetch_document_indicator(
586
248k
    parser: *mut yaml_parser_t,
587
248k
    type_: yaml_token_type_t,
588
248k
) -> Success {
589
248k
    let mut token = MaybeUninit::<yaml_token_t>::uninit();
590
248k
    let token = token.as_mut_ptr();
591
248k
    yaml_parser_unroll_indent(parser, -1_i64);
592
248k
    if yaml_parser_remove_simple_key(parser).fail {
593
0
        return FAIL;
594
248k
    }
595
248k
    (*parser).simple_key_allowed = false;
596
248k
    let start_mark: yaml_mark_t = (*parser).mark;
597
248k
    SKIP(parser);
598
248k
    SKIP(parser);
599
248k
    SKIP(parser);
600
248k
    let end_mark: yaml_mark_t = (*parser).mark;
601
248k
    memset(
602
248k
        token as *mut libc::c_void,
603
        0,
604
248k
        size_of::<yaml_token_t>() as libc::c_ulong,
605
    );
606
248k
    (*token).type_ = type_;
607
248k
    (*token).start_mark = start_mark;
608
248k
    (*token).end_mark = end_mark;
609
248k
    ENQUEUE!((*parser).tokens, *token);
610
248k
    OK
611
248k
}
612
613
47.1M
unsafe fn yaml_parser_fetch_flow_collection_start(
614
47.1M
    parser: *mut yaml_parser_t,
615
47.1M
    type_: yaml_token_type_t,
616
47.1M
) -> Success {
617
47.1M
    let mut token = MaybeUninit::<yaml_token_t>::uninit();
618
47.1M
    let token = token.as_mut_ptr();
619
47.1M
    if yaml_parser_save_simple_key(parser).fail {
620
0
        return FAIL;
621
47.1M
    }
622
47.1M
    if yaml_parser_increase_flow_level(parser).fail {
623
0
        return FAIL;
624
47.1M
    }
625
47.1M
    (*parser).simple_key_allowed = true;
626
47.1M
    let start_mark: yaml_mark_t = (*parser).mark;
627
47.1M
    SKIP(parser);
628
47.1M
    let end_mark: yaml_mark_t = (*parser).mark;
629
47.1M
    memset(
630
47.1M
        token as *mut libc::c_void,
631
        0,
632
47.1M
        size_of::<yaml_token_t>() as libc::c_ulong,
633
    );
634
47.1M
    (*token).type_ = type_;
635
47.1M
    (*token).start_mark = start_mark;
636
47.1M
    (*token).end_mark = end_mark;
637
47.1M
    ENQUEUE!((*parser).tokens, *token);
638
47.1M
    OK
639
47.1M
}
640
641
4.60M
unsafe fn yaml_parser_fetch_flow_collection_end(
642
4.60M
    parser: *mut yaml_parser_t,
643
4.60M
    type_: yaml_token_type_t,
644
4.60M
) -> Success {
645
4.60M
    let mut token = MaybeUninit::<yaml_token_t>::uninit();
646
4.60M
    let token = token.as_mut_ptr();
647
4.60M
    if yaml_parser_remove_simple_key(parser).fail {
648
6
        return FAIL;
649
4.60M
    }
650
4.60M
    yaml_parser_decrease_flow_level(parser);
651
4.60M
    (*parser).simple_key_allowed = false;
652
4.60M
    let start_mark: yaml_mark_t = (*parser).mark;
653
4.60M
    SKIP(parser);
654
4.60M
    let end_mark: yaml_mark_t = (*parser).mark;
655
4.60M
    memset(
656
4.60M
        token as *mut libc::c_void,
657
        0,
658
4.60M
        size_of::<yaml_token_t>() as libc::c_ulong,
659
    );
660
4.60M
    (*token).type_ = type_;
661
4.60M
    (*token).start_mark = start_mark;
662
4.60M
    (*token).end_mark = end_mark;
663
4.60M
    ENQUEUE!((*parser).tokens, *token);
664
4.60M
    OK
665
4.60M
}
666
667
5.04M
unsafe fn yaml_parser_fetch_flow_entry(parser: *mut yaml_parser_t) -> Success {
668
5.04M
    let mut token = MaybeUninit::<yaml_token_t>::uninit();
669
5.04M
    let token = token.as_mut_ptr();
670
5.04M
    if yaml_parser_remove_simple_key(parser).fail {
671
4
        return FAIL;
672
5.04M
    }
673
5.04M
    (*parser).simple_key_allowed = true;
674
5.04M
    let start_mark: yaml_mark_t = (*parser).mark;
675
5.04M
    SKIP(parser);
676
5.04M
    let end_mark: yaml_mark_t = (*parser).mark;
677
5.04M
    memset(
678
5.04M
        token as *mut libc::c_void,
679
        0,
680
5.04M
        size_of::<yaml_token_t>() as libc::c_ulong,
681
    );
682
5.04M
    (*token).type_ = YAML_FLOW_ENTRY_TOKEN;
683
5.04M
    (*token).start_mark = start_mark;
684
5.04M
    (*token).end_mark = end_mark;
685
5.04M
    ENQUEUE!((*parser).tokens, *token);
686
5.04M
    OK
687
5.04M
}
688
689
14.4M
unsafe fn yaml_parser_fetch_block_entry(parser: *mut yaml_parser_t) -> Success {
690
14.4M
    let mut token = MaybeUninit::<yaml_token_t>::uninit();
691
14.4M
    let token = token.as_mut_ptr();
692
14.4M
    if (*parser).flow_level == 0 {
693
13.1M
        if !(*parser).simple_key_allowed {
694
24
            yaml_parser_set_scanner_error(
695
24
                parser,
696
24
                ptr::null::<libc::c_char>(),
697
24
                (*parser).mark,
698
24
                b"block sequence entries are not allowed in this context\0" as *const u8
699
24
                    as *const libc::c_char,
700
            );
701
24
            return FAIL;
702
13.1M
        }
703
13.1M
        if yaml_parser_roll_indent(
704
13.1M
            parser,
705
13.1M
            (*parser).mark.column as ptrdiff_t,
706
13.1M
            -1_i64,
707
13.1M
            YAML_BLOCK_SEQUENCE_START_TOKEN,
708
13.1M
            (*parser).mark,
709
13.1M
        )
710
13.1M
        .fail
711
        {
712
0
            return FAIL;
713
13.1M
        }
714
1.23M
    }
715
14.4M
    if yaml_parser_remove_simple_key(parser).fail {
716
0
        return FAIL;
717
14.4M
    }
718
14.4M
    (*parser).simple_key_allowed = true;
719
14.4M
    let start_mark: yaml_mark_t = (*parser).mark;
720
14.4M
    SKIP(parser);
721
14.4M
    let end_mark: yaml_mark_t = (*parser).mark;
722
14.4M
    memset(
723
14.4M
        token as *mut libc::c_void,
724
        0,
725
14.4M
        size_of::<yaml_token_t>() as libc::c_ulong,
726
    );
727
14.4M
    (*token).type_ = YAML_BLOCK_ENTRY_TOKEN;
728
14.4M
    (*token).start_mark = start_mark;
729
14.4M
    (*token).end_mark = end_mark;
730
14.4M
    ENQUEUE!((*parser).tokens, *token);
731
14.4M
    OK
732
14.4M
}
733
734
4.45M
unsafe fn yaml_parser_fetch_key(parser: *mut yaml_parser_t) -> Success {
735
4.45M
    let mut token = MaybeUninit::<yaml_token_t>::uninit();
736
4.45M
    let token = token.as_mut_ptr();
737
4.45M
    if (*parser).flow_level == 0 {
738
3.97M
        if !(*parser).simple_key_allowed {
739
21
            yaml_parser_set_scanner_error(
740
21
                parser,
741
21
                ptr::null::<libc::c_char>(),
742
21
                (*parser).mark,
743
21
                b"mapping keys are not allowed in this context\0" as *const u8
744
21
                    as *const libc::c_char,
745
            );
746
21
            return FAIL;
747
3.97M
        }
748
3.97M
        if yaml_parser_roll_indent(
749
3.97M
            parser,
750
3.97M
            (*parser).mark.column as ptrdiff_t,
751
3.97M
            -1_i64,
752
3.97M
            YAML_BLOCK_MAPPING_START_TOKEN,
753
3.97M
            (*parser).mark,
754
3.97M
        )
755
3.97M
        .fail
756
        {
757
0
            return FAIL;
758
3.97M
        }
759
484k
    }
760
4.45M
    if yaml_parser_remove_simple_key(parser).fail {
761
0
        return FAIL;
762
4.45M
    }
763
4.45M
    (*parser).simple_key_allowed = (*parser).flow_level == 0;
764
4.45M
    let start_mark: yaml_mark_t = (*parser).mark;
765
4.45M
    SKIP(parser);
766
4.45M
    let end_mark: yaml_mark_t = (*parser).mark;
767
4.45M
    memset(
768
4.45M
        token as *mut libc::c_void,
769
        0,
770
4.45M
        size_of::<yaml_token_t>() as libc::c_ulong,
771
    );
772
4.45M
    (*token).type_ = YAML_KEY_TOKEN;
773
4.45M
    (*token).start_mark = start_mark;
774
4.45M
    (*token).end_mark = end_mark;
775
4.45M
    ENQUEUE!((*parser).tokens, *token);
776
4.45M
    OK
777
4.45M
}
778
779
4.80M
unsafe fn yaml_parser_fetch_value(parser: *mut yaml_parser_t) -> Success {
780
4.80M
    let mut token = MaybeUninit::<yaml_token_t>::uninit();
781
4.80M
    let token = token.as_mut_ptr();
782
4.80M
    let simple_key: *mut yaml_simple_key_t = (*parser).simple_keys.top.wrapping_offset(-1_isize);
783
4.80M
    if (*simple_key).possible {
784
2.58M
        memset(
785
2.58M
            token as *mut libc::c_void,
786
            0,
787
2.58M
            size_of::<yaml_token_t>() as libc::c_ulong,
788
        );
789
2.58M
        (*token).type_ = YAML_KEY_TOKEN;
790
2.58M
        (*token).start_mark = (*simple_key).mark;
791
2.58M
        (*token).end_mark = (*simple_key).mark;
792
2.58M
        QUEUE_INSERT!(
793
            (*parser).tokens,
794
2.58M
            ((*simple_key).token_number).wrapping_sub((*parser).tokens_parsed),
795
2.58M
            *token
796
        );
797
2.58M
        if yaml_parser_roll_indent(
798
2.58M
            parser,
799
2.58M
            (*simple_key).mark.column as ptrdiff_t,
800
2.58M
            (*simple_key).token_number as ptrdiff_t,
801
2.58M
            YAML_BLOCK_MAPPING_START_TOKEN,
802
2.58M
            (*simple_key).mark,
803
2.58M
        )
804
2.58M
        .fail
805
        {
806
0
            return FAIL;
807
2.58M
        }
808
2.58M
        (*simple_key).possible = false;
809
2.58M
        (*parser).simple_key_allowed = false;
810
    } else {
811
2.21M
        if (*parser).flow_level == 0 {
812
1.55M
            if !(*parser).simple_key_allowed {
813
66
                yaml_parser_set_scanner_error(
814
66
                    parser,
815
66
                    ptr::null::<libc::c_char>(),
816
66
                    (*parser).mark,
817
66
                    b"mapping values are not allowed in this context\0" as *const u8
818
66
                        as *const libc::c_char,
819
                );
820
66
                return FAIL;
821
1.55M
            }
822
1.55M
            if yaml_parser_roll_indent(
823
1.55M
                parser,
824
1.55M
                (*parser).mark.column as ptrdiff_t,
825
1.55M
                -1_i64,
826
1.55M
                YAML_BLOCK_MAPPING_START_TOKEN,
827
1.55M
                (*parser).mark,
828
1.55M
            )
829
1.55M
            .fail
830
            {
831
0
                return FAIL;
832
1.55M
            }
833
666k
        }
834
2.21M
        (*parser).simple_key_allowed = (*parser).flow_level == 0;
835
    }
836
4.80M
    let start_mark: yaml_mark_t = (*parser).mark;
837
4.80M
    SKIP(parser);
838
4.80M
    let end_mark: yaml_mark_t = (*parser).mark;
839
4.80M
    memset(
840
4.80M
        token as *mut libc::c_void,
841
        0,
842
4.80M
        size_of::<yaml_token_t>() as libc::c_ulong,
843
    );
844
4.80M
    (*token).type_ = YAML_VALUE_TOKEN;
845
4.80M
    (*token).start_mark = start_mark;
846
4.80M
    (*token).end_mark = end_mark;
847
4.80M
    ENQUEUE!((*parser).tokens, *token);
848
4.80M
    OK
849
4.80M
}
850
851
152k
unsafe fn yaml_parser_fetch_anchor(
852
152k
    parser: *mut yaml_parser_t,
853
152k
    type_: yaml_token_type_t,
854
152k
) -> Success {
855
152k
    let mut token = MaybeUninit::<yaml_token_t>::uninit();
856
152k
    let token = token.as_mut_ptr();
857
152k
    if yaml_parser_save_simple_key(parser).fail {
858
0
        return FAIL;
859
152k
    }
860
152k
    (*parser).simple_key_allowed = false;
861
152k
    if yaml_parser_scan_anchor(parser, token, type_).fail {
862
439
        return FAIL;
863
151k
    }
864
151k
    ENQUEUE!((*parser).tokens, *token);
865
151k
    OK
866
152k
}
867
868
269k
unsafe fn yaml_parser_fetch_tag(parser: *mut yaml_parser_t) -> Success {
869
269k
    let mut token = MaybeUninit::<yaml_token_t>::uninit();
870
269k
    let token = token.as_mut_ptr();
871
269k
    if yaml_parser_save_simple_key(parser).fail {
872
0
        return FAIL;
873
269k
    }
874
269k
    (*parser).simple_key_allowed = false;
875
269k
    if yaml_parser_scan_tag(parser, token).fail {
876
945
        return FAIL;
877
269k
    }
878
269k
    ENQUEUE!((*parser).tokens, *token);
879
269k
    OK
880
269k
}
881
882
24.4k
unsafe fn yaml_parser_fetch_block_scalar(parser: *mut yaml_parser_t, literal: bool) -> Success {
883
24.4k
    let mut token = MaybeUninit::<yaml_token_t>::uninit();
884
24.4k
    let token = token.as_mut_ptr();
885
24.4k
    if yaml_parser_remove_simple_key(parser).fail {
886
7
        return FAIL;
887
24.3k
    }
888
24.3k
    (*parser).simple_key_allowed = true;
889
24.3k
    if yaml_parser_scan_block_scalar(parser, token, literal).fail {
890
343
        return FAIL;
891
24.0k
    }
892
24.0k
    ENQUEUE!((*parser).tokens, *token);
893
24.0k
    OK
894
24.4k
}
895
896
549k
unsafe fn yaml_parser_fetch_flow_scalar(parser: *mut yaml_parser_t, single: bool) -> Success {
897
549k
    let mut token = MaybeUninit::<yaml_token_t>::uninit();
898
549k
    let token = token.as_mut_ptr();
899
549k
    if yaml_parser_save_simple_key(parser).fail {
900
0
        return FAIL;
901
549k
    }
902
549k
    (*parser).simple_key_allowed = false;
903
549k
    if yaml_parser_scan_flow_scalar(parser, token, single).fail {
904
4.01k
        return FAIL;
905
545k
    }
906
545k
    ENQUEUE!((*parser).tokens, *token);
907
545k
    OK
908
549k
}
909
910
6.07M
unsafe fn yaml_parser_fetch_plain_scalar(parser: *mut yaml_parser_t) -> Success {
911
6.07M
    let mut token = MaybeUninit::<yaml_token_t>::uninit();
912
6.07M
    let token = token.as_mut_ptr();
913
6.07M
    if yaml_parser_save_simple_key(parser).fail {
914
0
        return FAIL;
915
6.07M
    }
916
6.07M
    (*parser).simple_key_allowed = false;
917
6.07M
    if yaml_parser_scan_plain_scalar(parser, token).fail {
918
371
        return FAIL;
919
6.07M
    }
920
6.07M
    ENQUEUE!((*parser).tokens, *token);
921
6.07M
    OK
922
6.07M
}
923
924
87.9M
unsafe fn yaml_parser_scan_to_next_token(parser: *mut yaml_parser_t) -> Success {
925
    loop {
926
106M
        if CACHE(parser, 1_u64).fail {
927
4
            return FAIL;
928
106M
        }
929
106M
        if (*parser).mark.column == 0_u64 && IS_BOM!((*parser).buffer) {
930
25.1k
            SKIP(parser);
931
106M
        }
932
106M
        if CACHE(parser, 1_u64).fail {
933
5
            return FAIL;
934
106M
        }
935
175M
        while CHECK!((*parser).buffer, b' ')
936
110M
            || ((*parser).flow_level != 0 || !(*parser).simple_key_allowed)
937
75.1M
                && CHECK!((*parser).buffer, b'\t')
938
        {
939
68.0M
            SKIP(parser);
940
68.0M
            if CACHE(parser, 1_u64).fail {
941
13
                return FAIL;
942
68.0M
            }
943
        }
944
106M
        if CHECK!((*parser).buffer, b'#') {
945
10.7M
            while !IS_BREAKZ!((*parser).buffer) {
946
10.6M
                SKIP(parser);
947
10.6M
                if CACHE(parser, 1_u64).fail {
948
36
                    return FAIL;
949
10.6M
                }
950
            }
951
106M
        }
952
106M
        if !IS_BREAK!((*parser).buffer) {
953
87.9M
            break;
954
19.0M
        }
955
19.0M
        if CACHE(parser, 2_u64).fail {
956
17
            return FAIL;
957
19.0M
        }
958
19.0M
        SKIP_LINE(parser);
959
19.0M
        if (*parser).flow_level == 0 {
960
14.7M
            (*parser).simple_key_allowed = true;
961
14.7M
        }
962
    }
963
87.9M
    OK
964
87.9M
}
965
966
117k
unsafe fn yaml_parser_scan_directive(
967
117k
    parser: *mut yaml_parser_t,
968
117k
    token: *mut yaml_token_t,
969
117k
) -> Success {
970
    let mut current_block: u64;
971
    let end_mark: yaml_mark_t;
972
117k
    let mut name: *mut yaml_char_t = ptr::null_mut::<yaml_char_t>();
973
117k
    let mut major: libc::c_int = 0;
974
117k
    let mut minor: libc::c_int = 0;
975
117k
    let mut handle: *mut yaml_char_t = ptr::null_mut::<yaml_char_t>();
976
117k
    let mut prefix: *mut yaml_char_t = ptr::null_mut::<yaml_char_t>();
977
117k
    let start_mark: yaml_mark_t = (*parser).mark;
978
117k
    SKIP(parser);
979
117k
    if yaml_parser_scan_directive_name(parser, start_mark, addr_of_mut!(name)).ok {
980
117k
        if strcmp(
981
117k
            name as *mut libc::c_char,
982
117k
            b"YAML\0" as *const u8 as *const libc::c_char,
983
117k
        ) == 0
984
        {
985
93.5k
            if yaml_parser_scan_version_directive_value(
986
93.5k
                parser,
987
93.5k
                start_mark,
988
93.5k
                addr_of_mut!(major),
989
93.5k
                addr_of_mut!(minor),
990
93.5k
            )
991
93.5k
            .fail
992
348
            {
993
348
                current_block = 11397968426844348457;
994
93.2k
            } else {
995
93.2k
                end_mark = (*parser).mark;
996
93.2k
                memset(
997
93.2k
                    token as *mut libc::c_void,
998
93.2k
                    0,
999
93.2k
                    size_of::<yaml_token_t>() as libc::c_ulong,
1000
93.2k
                );
1001
93.2k
                (*token).type_ = YAML_VERSION_DIRECTIVE_TOKEN;
1002
93.2k
                (*token).start_mark = start_mark;
1003
93.2k
                (*token).end_mark = end_mark;
1004
93.2k
                (*token).data.version_directive.major = major;
1005
93.2k
                (*token).data.version_directive.minor = minor;
1006
93.2k
                current_block = 17407779659766490442;
1007
93.2k
            }
1008
23.5k
        } else if strcmp(
1009
23.5k
            name as *mut libc::c_char,
1010
23.5k
            b"TAG\0" as *const u8 as *const libc::c_char,
1011
23.5k
        ) == 0
1012
        {
1013
23.0k
            if yaml_parser_scan_tag_directive_value(
1014
23.0k
                parser,
1015
23.0k
                start_mark,
1016
23.0k
                addr_of_mut!(handle),
1017
23.0k
                addr_of_mut!(prefix),
1018
23.0k
            )
1019
23.0k
            .fail
1020
371
            {
1021
371
                current_block = 11397968426844348457;
1022
22.6k
            } else {
1023
22.6k
                end_mark = (*parser).mark;
1024
22.6k
                memset(
1025
22.6k
                    token as *mut libc::c_void,
1026
22.6k
                    0,
1027
22.6k
                    size_of::<yaml_token_t>() as libc::c_ulong,
1028
22.6k
                );
1029
22.6k
                (*token).type_ = YAML_TAG_DIRECTIVE_TOKEN;
1030
22.6k
                (*token).start_mark = start_mark;
1031
22.6k
                (*token).end_mark = end_mark;
1032
22.6k
                let fresh112 = addr_of_mut!((*token).data.tag_directive.handle);
1033
22.6k
                *fresh112 = handle;
1034
22.6k
                let fresh113 = addr_of_mut!((*token).data.tag_directive.prefix);
1035
22.6k
                *fresh113 = prefix;
1036
22.6k
                current_block = 17407779659766490442;
1037
22.6k
            }
1038
462
        } else {
1039
462
            yaml_parser_set_scanner_error(
1040
462
                parser,
1041
462
                b"while scanning a directive\0" as *const u8 as *const libc::c_char,
1042
462
                start_mark,
1043
462
                b"found unknown directive name\0" as *const u8 as *const libc::c_char,
1044
462
            );
1045
462
            current_block = 11397968426844348457;
1046
462
        }
1047
117k
        if current_block != 11397968426844348457 {
1048
115k
            if CACHE(parser, 1_u64).ok {
1049
                loop {
1050
2.73M
                    if !IS_BLANK!((*parser).buffer) {
1051
115k
                        current_block = 11584701595673473500;
1052
115k
                        break;
1053
2.61M
                    }
1054
2.61M
                    SKIP(parser);
1055
2.61M
                    if CACHE(parser, 1_u64).fail {
1056
4
                        current_block = 11397968426844348457;
1057
4
                        break;
1058
2.61M
                    }
1059
                }
1060
115k
                if current_block != 11397968426844348457 {
1061
115k
                    if CHECK!((*parser).buffer, b'#') {
1062
                        loop {
1063
7.32M
                            if IS_BREAKZ!((*parser).buffer) {
1064
54.4k
                                current_block = 6669252993407410313;
1065
54.4k
                                break;
1066
7.26M
                            }
1067
7.26M
                            SKIP(parser);
1068
7.26M
                            if CACHE(parser, 1_u64).fail {
1069
19
                                current_block = 11397968426844348457;
1070
19
                                break;
1071
7.26M
                            }
1072
                        }
1073
61.3k
                    } else {
1074
61.3k
                        current_block = 6669252993407410313;
1075
61.3k
                    }
1076
115k
                    if current_block != 11397968426844348457 {
1077
115k
                        if !IS_BREAKZ!((*parser).buffer) {
1078
38
                            yaml_parser_set_scanner_error(
1079
38
                                parser,
1080
38
                                b"while scanning a directive\0" as *const u8 as *const libc::c_char,
1081
38
                                start_mark,
1082
38
                                b"did not find expected comment or line break\0" as *const u8
1083
38
                                    as *const libc::c_char,
1084
38
                            );
1085
38
                        } else {
1086
115k
                            if IS_BREAK!((*parser).buffer) {
1087
115k
                                if CACHE(parser, 2_u64).fail {
1088
3
                                    current_block = 11397968426844348457;
1089
115k
                                } else {
1090
115k
                                    SKIP_LINE(parser);
1091
115k
                                    current_block = 652864300344834934;
1092
115k
                                }
1093
794
                            } else {
1094
794
                                current_block = 652864300344834934;
1095
794
                            }
1096
115k
                            if current_block != 11397968426844348457 {
1097
115k
                                yaml_free(name as *mut libc::c_void);
1098
115k
                                return OK;
1099
3
                            }
1100
                        }
1101
19
                    }
1102
4
                }
1103
0
            }
1104
1.18k
        }
1105
263
    }
1106
1.50k
    yaml_free(prefix as *mut libc::c_void);
1107
1.50k
    yaml_free(handle as *mut libc::c_void);
1108
1.50k
    yaml_free(name as *mut libc::c_void);
1109
1.50k
    FAIL
1110
117k
}
1111
1112
117k
unsafe fn yaml_parser_scan_directive_name(
1113
117k
    parser: *mut yaml_parser_t,
1114
117k
    start_mark: yaml_mark_t,
1115
117k
    name: *mut *mut yaml_char_t,
1116
117k
) -> Success {
1117
    let current_block: u64;
1118
117k
    let mut string = NULL_STRING;
1119
117k
    STRING_INIT!(string);
1120
117k
    if CACHE(parser, 1_u64).ok {
1121
        loop {
1122
564k
            if !IS_ALPHA!((*parser).buffer) {
1123
117k
                current_block = 10879442775620481940;
1124
117k
                break;
1125
447k
            }
1126
447k
            READ!(parser, string);
1127
447k
            if CACHE(parser, 1_u64).fail {
1128
4
                current_block = 8318012024179131575;
1129
4
                break;
1130
447k
            }
1131
        }
1132
117k
        if current_block != 8318012024179131575 {
1133
117k
            if string.start == string.pointer {
1134
199
                yaml_parser_set_scanner_error(
1135
199
                    parser,
1136
199
                    b"while scanning a directive\0" as *const u8 as *const libc::c_char,
1137
199
                    start_mark,
1138
199
                    b"could not find expected directive name\0" as *const u8 as *const libc::c_char,
1139
199
                );
1140
117k
            } else if !IS_BLANKZ!((*parser).buffer) {
1141
60
                yaml_parser_set_scanner_error(
1142
60
                    parser,
1143
60
                    b"while scanning a directive\0" as *const u8 as *const libc::c_char,
1144
60
                    start_mark,
1145
60
                    b"found unexpected non-alphabetical character\0" as *const u8
1146
60
                        as *const libc::c_char,
1147
60
                );
1148
60
            } else {
1149
117k
                *name = string.start;
1150
117k
                return OK;
1151
            }
1152
4
        }
1153
0
    }
1154
263
    STRING_DEL!(string);
1155
263
    FAIL
1156
117k
}
1157
1158
93.5k
unsafe fn yaml_parser_scan_version_directive_value(
1159
93.5k
    parser: *mut yaml_parser_t,
1160
93.5k
    start_mark: yaml_mark_t,
1161
93.5k
    major: *mut libc::c_int,
1162
93.5k
    minor: *mut libc::c_int,
1163
93.5k
) -> Success {
1164
93.5k
    if CACHE(parser, 1_u64).fail {
1165
0
        return FAIL;
1166
93.5k
    }
1167
11.0M
    while IS_BLANK!((*parser).buffer) {
1168
10.9M
        SKIP(parser);
1169
10.9M
        if CACHE(parser, 1_u64).fail {
1170
3
            return FAIL;
1171
10.9M
        }
1172
    }
1173
93.5k
    if yaml_parser_scan_version_directive_number(parser, start_mark, major).fail {
1174
153
        return FAIL;
1175
93.3k
    }
1176
93.3k
    if !CHECK!((*parser).buffer, b'.') {
1177
99
        yaml_parser_set_scanner_error(
1178
99
            parser,
1179
99
            b"while scanning a %YAML directive\0" as *const u8 as *const libc::c_char,
1180
99
            start_mark,
1181
99
            b"did not find expected digit or '.' character\0" as *const u8 as *const libc::c_char,
1182
        );
1183
99
        return FAIL;
1184
93.2k
    }
1185
93.2k
    SKIP(parser);
1186
93.2k
    yaml_parser_scan_version_directive_number(parser, start_mark, minor)
1187
93.5k
}
1188
1189
const MAX_NUMBER_LENGTH: u64 = 9_u64;
1190
1191
186k
unsafe fn yaml_parser_scan_version_directive_number(
1192
186k
    parser: *mut yaml_parser_t,
1193
186k
    start_mark: yaml_mark_t,
1194
186k
    number: *mut libc::c_int,
1195
186k
) -> Success {
1196
186k
    let mut value: libc::c_int = 0;
1197
186k
    let mut length: size_t = 0_u64;
1198
186k
    if CACHE(parser, 1_u64).fail {
1199
7
        return FAIL;
1200
186k
    }
1201
386k
    while IS_DIGIT!((*parser).buffer) {
1202
199k
        length = length.force_add(1);
1203
199k
        if length > MAX_NUMBER_LENGTH {
1204
5
            yaml_parser_set_scanner_error(
1205
5
                parser,
1206
5
                b"while scanning a %YAML directive\0" as *const u8 as *const libc::c_char,
1207
5
                start_mark,
1208
5
                b"found extremely long version number\0" as *const u8 as *const libc::c_char,
1209
            );
1210
5
            return FAIL;
1211
199k
        }
1212
199k
        value = value.force_mul(10).force_add(AS_DIGIT!((*parser).buffer));
1213
199k
        SKIP(parser);
1214
199k
        if CACHE(parser, 1_u64).fail {
1215
6
            return FAIL;
1216
199k
        }
1217
    }
1218
186k
    if length == 0 {
1219
228
        yaml_parser_set_scanner_error(
1220
228
            parser,
1221
228
            b"while scanning a %YAML directive\0" as *const u8 as *const libc::c_char,
1222
228
            start_mark,
1223
228
            b"did not find expected version number\0" as *const u8 as *const libc::c_char,
1224
        );
1225
228
        return FAIL;
1226
186k
    }
1227
186k
    *number = value;
1228
186k
    OK
1229
186k
}
1230
1231
23.0k
unsafe fn yaml_parser_scan_tag_directive_value(
1232
23.0k
    parser: *mut yaml_parser_t,
1233
23.0k
    start_mark: yaml_mark_t,
1234
23.0k
    handle: *mut *mut yaml_char_t,
1235
23.0k
    prefix: *mut *mut yaml_char_t,
1236
23.0k
) -> Success {
1237
    let mut current_block: u64;
1238
23.0k
    let mut handle_value: *mut yaml_char_t = ptr::null_mut::<yaml_char_t>();
1239
23.0k
    let mut prefix_value: *mut yaml_char_t = ptr::null_mut::<yaml_char_t>();
1240
23.0k
    if CACHE(parser, 1_u64).fail {
1241
0
        current_block = 5231181710497607163;
1242
23.0k
    } else {
1243
23.0k
        current_block = 14916268686031723178;
1244
23.0k
    }
1245
    'c_34337: loop {
1246
8.87M
        match current_block {
1247
            5231181710497607163 => {
1248
371
                yaml_free(handle_value as *mut libc::c_void);
1249
371
                yaml_free(prefix_value as *mut libc::c_void);
1250
371
                return FAIL;
1251
            }
1252
            _ => {
1253
8.87M
                if IS_BLANK!((*parser).buffer) {
1254
8.85M
                    SKIP(parser);
1255
8.85M
                    if CACHE(parser, 1_u64).fail {
1256
6
                        current_block = 5231181710497607163;
1257
8.85M
                    } else {
1258
8.85M
                        current_block = 14916268686031723178;
1259
8.85M
                    }
1260
                } else {
1261
23.0k
                    if yaml_parser_scan_tag_handle(
1262
23.0k
                        parser,
1263
23.0k
                        true,
1264
23.0k
                        start_mark,
1265
23.0k
                        addr_of_mut!(handle_value),
1266
23.0k
                    )
1267
23.0k
                    .fail
1268
                    {
1269
164
                        current_block = 5231181710497607163;
1270
164
                        continue;
1271
22.8k
                    }
1272
22.8k
                    if CACHE(parser, 1_u64).fail {
1273
3
                        current_block = 5231181710497607163;
1274
3
                        continue;
1275
22.8k
                    }
1276
22.8k
                    if !IS_BLANK!((*parser).buffer) {
1277
27
                        yaml_parser_set_scanner_error(
1278
27
                            parser,
1279
27
                            b"while scanning a %TAG directive\0" as *const u8
1280
27
                                as *const libc::c_char,
1281
27
                            start_mark,
1282
27
                            b"did not find expected whitespace\0" as *const u8
1283
27
                                as *const libc::c_char,
1284
27
                        );
1285
27
                        current_block = 5231181710497607163;
1286
27
                    } else {
1287
5.94M
                        while IS_BLANK!((*parser).buffer) {
1288
5.92M
                            SKIP(parser);
1289
5.92M
                            if CACHE(parser, 1_u64).fail {
1290
5
                                current_block = 5231181710497607163;
1291
5
                                continue 'c_34337;
1292
5.92M
                            }
1293
                        }
1294
22.8k
                        if yaml_parser_scan_tag_uri(
1295
22.8k
                            parser,
1296
22.8k
                            true,
1297
22.8k
                            true,
1298
22.8k
                            ptr::null_mut::<yaml_char_t>(),
1299
22.8k
                            start_mark,
1300
22.8k
                            addr_of_mut!(prefix_value),
1301
22.8k
                        )
1302
22.8k
                        .fail
1303
                        {
1304
137
                            current_block = 5231181710497607163;
1305
137
                            continue;
1306
22.7k
                        }
1307
22.7k
                        if CACHE(parser, 1_u64).fail {
1308
0
                            current_block = 5231181710497607163;
1309
0
                            continue;
1310
22.7k
                        }
1311
22.7k
                        if !IS_BLANKZ!((*parser).buffer) {
1312
29
                            yaml_parser_set_scanner_error(
1313
29
                                parser,
1314
29
                                b"while scanning a %TAG directive\0" as *const u8
1315
29
                                    as *const libc::c_char,
1316
29
                                start_mark,
1317
29
                                b"did not find expected whitespace or line break\0" as *const u8
1318
29
                                    as *const libc::c_char,
1319
29
                            );
1320
29
                            current_block = 5231181710497607163;
1321
29
                        } else {
1322
22.6k
                            *handle = handle_value;
1323
22.6k
                            *prefix = prefix_value;
1324
22.6k
                            return OK;
1325
                        }
1326
                    }
1327
                }
1328
            }
1329
        }
1330
    }
1331
23.0k
}
1332
1333
152k
unsafe fn yaml_parser_scan_anchor(
1334
152k
    parser: *mut yaml_parser_t,
1335
152k
    token: *mut yaml_token_t,
1336
152k
    type_: yaml_token_type_t,
1337
152k
) -> Success {
1338
    let current_block: u64;
1339
152k
    let mut length: libc::c_int = 0;
1340
    let end_mark: yaml_mark_t;
1341
152k
    let mut string = NULL_STRING;
1342
152k
    STRING_INIT!(string);
1343
152k
    let start_mark: yaml_mark_t = (*parser).mark;
1344
152k
    SKIP(parser);
1345
152k
    if CACHE(parser, 1_u64).ok {
1346
        loop {
1347
9.13M
            if !IS_ALPHA!((*parser).buffer) {
1348
152k
                current_block = 2868539653012386629;
1349
152k
                break;
1350
8.98M
            }
1351
8.98M
            READ!(parser, string);
1352
8.98M
            if CACHE(parser, 1_u64).fail {
1353
4
                current_block = 5883759901342942623;
1354
4
                break;
1355
8.98M
            }
1356
8.98M
            length += 1;
1357
        }
1358
152k
        if current_block != 5883759901342942623 {
1359
152k
            end_mark = (*parser).mark;
1360
152k
            if length == 0
1361
151k
                || !(IS_BLANKZ!((*parser).buffer)
1362
74.5k
                    || CHECK!((*parser).buffer, b'?')
1363
72.5k
                    || CHECK!((*parser).buffer, b':')
1364
69.2k
                    || CHECK!((*parser).buffer, b',')
1365
63.1k
                    || CHECK!((*parser).buffer, b']')
1366
62.2k
                    || CHECK!((*parser).buffer, b'}')
1367
101
                    || CHECK!((*parser).buffer, b'%')
1368
94
                    || CHECK!((*parser).buffer, b'@')
1369
87
                    || CHECK!((*parser).buffer, b'`'))
1370
            {
1371
435
                yaml_parser_set_scanner_error(
1372
435
                    parser,
1373
435
                    if type_ == YAML_ANCHOR_TOKEN {
1374
234
                        b"while scanning an anchor\0" as *const u8 as *const libc::c_char
1375
                    } else {
1376
201
                        b"while scanning an alias\0" as *const u8 as *const libc::c_char
1377
                    },
1378
435
                    start_mark,
1379
435
                    b"did not find expected alphabetic or numeric character\0" as *const u8
1380
435
                        as *const libc::c_char,
1381
                );
1382
            } else {
1383
151k
                if type_ == YAML_ANCHOR_TOKEN {
1384
71.6k
                    memset(
1385
71.6k
                        token as *mut libc::c_void,
1386
71.6k
                        0,
1387
71.6k
                        size_of::<yaml_token_t>() as libc::c_ulong,
1388
71.6k
                    );
1389
71.6k
                    (*token).type_ = YAML_ANCHOR_TOKEN;
1390
71.6k
                    (*token).start_mark = start_mark;
1391
71.6k
                    (*token).end_mark = end_mark;
1392
71.6k
                    let fresh220 = addr_of_mut!((*token).data.anchor.value);
1393
71.6k
                    *fresh220 = string.start;
1394
80.2k
                } else {
1395
80.2k
                    memset(
1396
80.2k
                        token as *mut libc::c_void,
1397
80.2k
                        0,
1398
80.2k
                        size_of::<yaml_token_t>() as libc::c_ulong,
1399
80.2k
                    );
1400
80.2k
                    (*token).type_ = YAML_ALIAS_TOKEN;
1401
80.2k
                    (*token).start_mark = start_mark;
1402
80.2k
                    (*token).end_mark = end_mark;
1403
80.2k
                    let fresh221 = addr_of_mut!((*token).data.alias.value);
1404
80.2k
                    *fresh221 = string.start;
1405
80.2k
                }
1406
151k
                return OK;
1407
            }
1408
4
        }
1409
0
    }
1410
439
    STRING_DEL!(string);
1411
439
    FAIL
1412
152k
}
1413
1414
269k
unsafe fn yaml_parser_scan_tag(parser: *mut yaml_parser_t, token: *mut yaml_token_t) -> Success {
1415
    let mut current_block: u64;
1416
269k
    let mut handle: *mut yaml_char_t = ptr::null_mut::<yaml_char_t>();
1417
269k
    let mut suffix: *mut yaml_char_t = ptr::null_mut::<yaml_char_t>();
1418
    let end_mark: yaml_mark_t;
1419
269k
    let start_mark: yaml_mark_t = (*parser).mark;
1420
269k
    if CACHE(parser, 2_u64).ok {
1421
269k
        if CHECK_AT!((*parser).buffer, b'<', 1) {
1422
4.64k
            handle = yaml_malloc(1_u64) as *mut yaml_char_t;
1423
4.64k
            *handle = b'\0';
1424
4.64k
            SKIP(parser);
1425
4.64k
            SKIP(parser);
1426
4.64k
            if yaml_parser_scan_tag_uri(
1427
4.64k
                parser,
1428
4.64k
                true,
1429
4.64k
                false,
1430
4.64k
                ptr::null_mut::<yaml_char_t>(),
1431
4.64k
                start_mark,
1432
4.64k
                addr_of_mut!(suffix),
1433
4.64k
            )
1434
4.64k
            .fail
1435
126
            {
1436
126
                current_block = 17708497480799081542;
1437
4.51k
            } else if !CHECK!((*parser).buffer, b'>') {
1438
135
                yaml_parser_set_scanner_error(
1439
135
                    parser,
1440
135
                    b"while scanning a tag\0" as *const u8 as *const libc::c_char,
1441
135
                    start_mark,
1442
135
                    b"did not find the expected '>'\0" as *const u8 as *const libc::c_char,
1443
135
                );
1444
135
                current_block = 17708497480799081542;
1445
4.38k
            } else {
1446
4.38k
                SKIP(parser);
1447
4.38k
                current_block = 4488286894823169796;
1448
4.38k
            }
1449
265k
        } else if yaml_parser_scan_tag_handle(parser, false, start_mark, addr_of_mut!(handle)).fail
1450
3
        {
1451
3
            current_block = 17708497480799081542;
1452
265k
        } else if *handle == b'!'
1453
265k
            && *handle.wrapping_offset(1_isize) != b'\0'
1454
71.7k
            && *handle
1455
71.7k
                .wrapping_offset(strlen(handle as *mut libc::c_char).wrapping_sub(1_u64) as isize)
1456
71.7k
                == b'!'
1457
        {
1458
19.0k
            if yaml_parser_scan_tag_uri(
1459
19.0k
                parser,
1460
19.0k
                false,
1461
19.0k
                false,
1462
19.0k
                ptr::null_mut::<yaml_char_t>(),
1463
19.0k
                start_mark,
1464
19.0k
                addr_of_mut!(suffix),
1465
19.0k
            )
1466
19.0k
            .fail
1467
33
            {
1468
33
                current_block = 17708497480799081542;
1469
19.0k
            } else {
1470
19.0k
                current_block = 4488286894823169796;
1471
19.0k
            }
1472
246k
        } else if yaml_parser_scan_tag_uri(
1473
246k
            parser,
1474
246k
            false,
1475
246k
            false,
1476
246k
            handle,
1477
246k
            start_mark,
1478
246k
            addr_of_mut!(suffix),
1479
246k
        )
1480
246k
        .fail
1481
480
        {
1482
480
            current_block = 17708497480799081542;
1483
480
        } else {
1484
245k
            yaml_free(handle as *mut libc::c_void);
1485
245k
            handle = yaml_malloc(2_u64) as *mut yaml_char_t;
1486
245k
            *handle = b'!';
1487
245k
            *handle.wrapping_offset(1_isize) = b'\0';
1488
245k
            if *suffix == b'\0' {
1489
46.3k
                let tmp: *mut yaml_char_t = handle;
1490
46.3k
                handle = suffix;
1491
46.3k
                suffix = tmp;
1492
199k
            }
1493
245k
            current_block = 4488286894823169796;
1494
        }
1495
269k
        if current_block != 17708497480799081542 {
1496
269k
            if CACHE(parser, 1_u64).ok {
1497
269k
                if !IS_BLANKZ!((*parser).buffer) {
1498
130k
                    if (*parser).flow_level == 0 || !CHECK!((*parser).buffer, b',') {
1499
163
                        yaml_parser_set_scanner_error(
1500
163
                            parser,
1501
163
                            b"while scanning a tag\0" as *const u8 as *const libc::c_char,
1502
163
                            start_mark,
1503
163
                            b"did not find expected whitespace or line break\0" as *const u8
1504
163
                                as *const libc::c_char,
1505
163
                        );
1506
163
                        current_block = 17708497480799081542;
1507
130k
                    } else {
1508
130k
                        current_block = 7333393191927787629;
1509
130k
                    }
1510
138k
                } else {
1511
138k
                    current_block = 7333393191927787629;
1512
138k
                }
1513
269k
                if current_block != 17708497480799081542 {
1514
269k
                    end_mark = (*parser).mark;
1515
269k
                    memset(
1516
269k
                        token as *mut libc::c_void,
1517
                        0,
1518
269k
                        size_of::<yaml_token_t>() as libc::c_ulong,
1519
                    );
1520
269k
                    (*token).type_ = YAML_TAG_TOKEN;
1521
269k
                    (*token).start_mark = start_mark;
1522
269k
                    (*token).end_mark = end_mark;
1523
269k
                    let fresh234 = addr_of_mut!((*token).data.tag.handle);
1524
269k
                    *fresh234 = handle;
1525
269k
                    let fresh235 = addr_of_mut!((*token).data.tag.suffix);
1526
269k
                    *fresh235 = suffix;
1527
269k
                    return OK;
1528
163
                }
1529
5
            }
1530
777
        }
1531
0
    }
1532
945
    yaml_free(handle as *mut libc::c_void);
1533
945
    yaml_free(suffix as *mut libc::c_void);
1534
945
    FAIL
1535
269k
}
1536
1537
288k
unsafe fn yaml_parser_scan_tag_handle(
1538
288k
    parser: *mut yaml_parser_t,
1539
288k
    directive: bool,
1540
288k
    start_mark: yaml_mark_t,
1541
288k
    handle: *mut *mut yaml_char_t,
1542
288k
) -> Success {
1543
    let mut current_block: u64;
1544
288k
    let mut string = NULL_STRING;
1545
288k
    STRING_INIT!(string);
1546
288k
    if CACHE(parser, 1_u64).ok {
1547
288k
        if !CHECK!((*parser).buffer, b'!') {
1548
144
            yaml_parser_set_scanner_error(
1549
144
                parser,
1550
144
                if directive {
1551
144
                    b"while scanning a tag directive\0" as *const u8 as *const libc::c_char
1552
                } else {
1553
0
                    b"while scanning a tag\0" as *const u8 as *const libc::c_char
1554
                },
1555
144
                start_mark,
1556
144
                b"did not find expected '!'\0" as *const u8 as *const libc::c_char,
1557
            );
1558
        } else {
1559
288k
            READ!(parser, string);
1560
288k
            if CACHE(parser, 1_u64).ok {
1561
                loop {
1562
37.0M
                    if !IS_ALPHA!((*parser).buffer) {
1563
288k
                        current_block = 7651349459974463963;
1564
288k
                        break;
1565
36.7M
                    }
1566
36.7M
                    READ!(parser, string);
1567
36.7M
                    if CACHE(parser, 1_u64).fail {
1568
3
                        current_block = 1771849829115608806;
1569
3
                        break;
1570
36.7M
                    }
1571
                }
1572
288k
                if current_block != 1771849829115608806 {
1573
288k
                    if CHECK!((*parser).buffer, b'!') {
1574
29.5k
                        READ!(parser, string);
1575
29.5k
                        current_block = 5689001924483802034;
1576
258k
                    } else if directive
1577
12.3k
                        && !(*string.start == b'!'
1578
12.3k
                            && *string.start.wrapping_offset(1_isize) == b'\0')
1579
17
                    {
1580
17
                        yaml_parser_set_scanner_error(
1581
17
                            parser,
1582
17
                            b"while parsing a tag directive\0" as *const u8 as *const libc::c_char,
1583
17
                            start_mark,
1584
17
                            b"did not find expected '!'\0" as *const u8 as *const libc::c_char,
1585
17
                        );
1586
17
                        current_block = 1771849829115608806;
1587
258k
                    } else {
1588
258k
                        current_block = 5689001924483802034;
1589
258k
                    }
1590
288k
                    if current_block != 1771849829115608806 {
1591
288k
                        *handle = string.start;
1592
288k
                        return OK;
1593
17
                    }
1594
3
                }
1595
3
            }
1596
        }
1597
0
    }
1598
167
    STRING_DEL!(string);
1599
167
    FAIL
1600
288k
}
1601
1602
292k
unsafe fn yaml_parser_scan_tag_uri(
1603
292k
    parser: *mut yaml_parser_t,
1604
292k
    uri_char: bool,
1605
292k
    directive: bool,
1606
292k
    head: *mut yaml_char_t,
1607
292k
    start_mark: yaml_mark_t,
1608
292k
    uri: *mut *mut yaml_char_t,
1609
292k
) -> Success {
1610
    let mut current_block: u64;
1611
292k
    let mut length: size_t = if !head.is_null() {
1612
246k
        strlen(head as *mut libc::c_char)
1613
    } else {
1614
46.5k
        0_u64
1615
    };
1616
292k
    let mut string = NULL_STRING;
1617
292k
    STRING_INIT!(string);
1618
292k
    current_block = 14916268686031723178;
1619
    'c_21953: loop {
1620
330k
        match current_block {
1621
            15265153392498847348 => {
1622
776
                STRING_DEL!(string);
1623
776
                return FAIL;
1624
            }
1625
            _ => {
1626
329k
                if string.end.c_offset_from(string.start) as size_t <= length {
1627
37.1k
                    yaml_string_extend(
1628
37.1k
                        addr_of_mut!(string.start),
1629
37.1k
                        addr_of_mut!(string.pointer),
1630
37.1k
                        addr_of_mut!(string.end),
1631
                    );
1632
37.1k
                    current_block = 14916268686031723178;
1633
37.1k
                    continue;
1634
                } else {
1635
292k
                    if length > 1_u64 {
1636
52.7k
                        memcpy(
1637
52.7k
                            string.start as *mut libc::c_void,
1638
52.7k
                            head.wrapping_offset(1_isize) as *const libc::c_void,
1639
52.7k
                            length.wrapping_sub(1_u64),
1640
52.7k
                        );
1641
52.7k
                        string.pointer = string
1642
52.7k
                            .pointer
1643
52.7k
                            .wrapping_offset(length.wrapping_sub(1_u64) as isize);
1644
240k
                    }
1645
292k
                    if CACHE(parser, 1_u64).fail {
1646
3
                        current_block = 15265153392498847348;
1647
3
                        continue;
1648
292k
                    }
1649
43.3M
                    while IS_ALPHA!((*parser).buffer)
1650
5.19M
                        || CHECK!((*parser).buffer, b';')
1651
5.17M
                        || CHECK!((*parser).buffer, b'/')
1652
5.13M
                        || CHECK!((*parser).buffer, b'?')
1653
5.07M
                        || CHECK!((*parser).buffer, b':')
1654
4.94M
                        || CHECK!((*parser).buffer, b'@')
1655
4.83M
                        || CHECK!((*parser).buffer, b'&')
1656
4.82M
                        || CHECK!((*parser).buffer, b'=')
1657
4.77M
                        || CHECK!((*parser).buffer, b'+')
1658
4.68M
                        || CHECK!((*parser).buffer, b'$')
1659
4.62M
                        || CHECK!((*parser).buffer, b'.')
1660
4.61M
                        || CHECK!((*parser).buffer, b'%')
1661
3.35M
                        || CHECK!((*parser).buffer, b'!')
1662
2.64M
                        || CHECK!((*parser).buffer, b'~')
1663
2.61M
                        || CHECK!((*parser).buffer, b'*')
1664
2.59M
                        || CHECK!((*parser).buffer, b'\'')
1665
743k
                        || CHECK!((*parser).buffer, b'(')
1666
587k
                        || CHECK!((*parser).buffer, b')')
1667
546k
                        || uri_char
1668
281k
                            && (CHECK!((*parser).buffer, b',')
1669
264k
                                || CHECK!((*parser).buffer, b'[')
1670
33.1k
                                || CHECK!((*parser).buffer, b']'))
1671
                    {
1672
43.0M
                        if CHECK!((*parser).buffer, b'%') {
1673
1.26M
                            STRING_EXTEND!(string);
1674
1.26M
                            if yaml_parser_scan_uri_escapes(
1675
1.26M
                                parser,
1676
1.26M
                                directive,
1677
1.26M
                                start_mark,
1678
1.26M
                                addr_of_mut!(string),
1679
1.26M
                            )
1680
1.26M
                            .fail
1681
                            {
1682
483
                                current_block = 15265153392498847348;
1683
483
                                continue 'c_21953;
1684
1.26M
                            }
1685
41.8M
                        } else {
1686
41.8M
                            READ!(parser, string);
1687
41.8M
                        }
1688
43.0M
                        length = length.force_add(1);
1689
43.0M
                        if CACHE(parser, 1_u64).fail {
1690
7
                            current_block = 15265153392498847348;
1691
7
                            continue 'c_21953;
1692
43.0M
                        }
1693
                    }
1694
292k
                    if length == 0 {
1695
283
                        STRING_EXTEND!(string);
1696
283
                        yaml_parser_set_scanner_error(
1697
283
                            parser,
1698
283
                            if directive {
1699
136
                                b"while parsing a %TAG directive\0" as *const u8
1700
136
                                    as *const libc::c_char
1701
                            } else {
1702
147
                                b"while parsing a tag\0" as *const u8 as *const libc::c_char
1703
                            },
1704
283
                            start_mark,
1705
283
                            b"did not find expected tag URI\0" as *const u8 as *const libc::c_char,
1706
                        );
1707
283
                        current_block = 15265153392498847348;
1708
                    } else {
1709
292k
                        *uri = string.start;
1710
292k
                        return OK;
1711
                    }
1712
                }
1713
            }
1714
        }
1715
    }
1716
292k
}
1717
1718
1.26M
unsafe fn yaml_parser_scan_uri_escapes(
1719
1.26M
    parser: *mut yaml_parser_t,
1720
1.26M
    directive: bool,
1721
1.26M
    start_mark: yaml_mark_t,
1722
1.26M
    string: *mut yaml_string_t,
1723
1.26M
) -> Success {
1724
1.26M
    let mut width: libc::c_int = 0;
1725
    loop {
1726
1.27M
        if CACHE(parser, 3_u64).fail {
1727
5
            return FAIL;
1728
1.27M
        }
1729
1.27M
        if !(CHECK!((*parser).buffer, b'%')
1730
1.27M
            && IS_HEX_AT!((*parser).buffer, 1)
1731
1.27M
            && IS_HEX_AT!((*parser).buffer, 2))
1732
        {
1733
435
            yaml_parser_set_scanner_error(
1734
435
                parser,
1735
435
                if directive {
1736
1
                    b"while parsing a %TAG directive\0" as *const u8 as *const libc::c_char
1737
                } else {
1738
434
                    b"while parsing a tag\0" as *const u8 as *const libc::c_char
1739
                },
1740
435
                start_mark,
1741
435
                b"did not find URI escaped octet\0" as *const u8 as *const libc::c_char,
1742
            );
1743
435
            return FAIL;
1744
1.27M
        }
1745
1.27M
        let octet: libc::c_uchar = ((AS_HEX_AT!((*parser).buffer, 1) << 4)
1746
1.27M
            + AS_HEX_AT!((*parser).buffer, 2)) as libc::c_uchar;
1747
1.27M
        if width == 0 {
1748
1.26M
            width = if octet & 0x80 == 0 {
1749
1.25M
                1
1750
4.08k
            } else if octet & 0xE0 == 0xC0 {
1751
1.66k
                2
1752
2.42k
            } else if octet & 0xF0 == 0xE0 {
1753
854
                3
1754
1.57k
            } else if octet & 0xF8 == 0xF0 {
1755
1.54k
                4
1756
            } else {
1757
27
                0
1758
            };
1759
1.26M
            if width == 0 {
1760
27
                yaml_parser_set_scanner_error(
1761
27
                    parser,
1762
27
                    if directive {
1763
0
                        b"while parsing a %TAG directive\0" as *const u8 as *const libc::c_char
1764
                    } else {
1765
27
                        b"while parsing a tag\0" as *const u8 as *const libc::c_char
1766
                    },
1767
27
                    start_mark,
1768
27
                    b"found an incorrect leading UTF-8 octet\0" as *const u8 as *const libc::c_char,
1769
                );
1770
27
                return FAIL;
1771
1.26M
            }
1772
7.64k
        } else if octet & 0xC0 != 0x80 {
1773
16
            yaml_parser_set_scanner_error(
1774
16
                parser,
1775
16
                if directive {
1776
0
                    b"while parsing a %TAG directive\0" as *const u8 as *const libc::c_char
1777
                } else {
1778
16
                    b"while parsing a tag\0" as *const u8 as *const libc::c_char
1779
                },
1780
16
                start_mark,
1781
16
                b"found an incorrect trailing UTF-8 octet\0" as *const u8 as *const libc::c_char,
1782
            );
1783
16
            return FAIL;
1784
7.63k
        }
1785
1.27M
        let fresh368 = addr_of_mut!((*string).pointer);
1786
1.27M
        let fresh369 = *fresh368;
1787
1.27M
        *fresh368 = (*fresh368).wrapping_offset(1);
1788
1.27M
        *fresh369 = octet;
1789
1.27M
        SKIP(parser);
1790
1.27M
        SKIP(parser);
1791
1.27M
        SKIP(parser);
1792
1.27M
        width -= 1;
1793
1.27M
        if !(width != 0) {
1794
1.26M
            break;
1795
7.86k
        }
1796
    }
1797
1.26M
    OK
1798
1.26M
}
1799
1800
24.3k
unsafe fn yaml_parser_scan_block_scalar(
1801
24.3k
    parser: *mut yaml_parser_t,
1802
24.3k
    token: *mut yaml_token_t,
1803
24.3k
    literal: bool,
1804
24.3k
) -> Success {
1805
    let mut current_block: u64;
1806
    let mut end_mark: yaml_mark_t;
1807
24.3k
    let mut string = NULL_STRING;
1808
24.3k
    let mut leading_break = NULL_STRING;
1809
24.3k
    let mut trailing_breaks = NULL_STRING;
1810
24.3k
    let mut chomping: libc::c_int = 0;
1811
24.3k
    let mut increment: libc::c_int = 0;
1812
24.3k
    let mut indent: libc::c_int = 0;
1813
24.3k
    let mut leading_blank: libc::c_int = 0;
1814
    let mut trailing_blank: libc::c_int;
1815
24.3k
    STRING_INIT!(string);
1816
24.3k
    STRING_INIT!(leading_break);
1817
24.3k
    STRING_INIT!(trailing_breaks);
1818
24.3k
    let start_mark: yaml_mark_t = (*parser).mark;
1819
24.3k
    SKIP(parser);
1820
24.3k
    if CACHE(parser, 1_u64).ok {
1821
24.3k
        if CHECK!((*parser).buffer, b'+') || CHECK!((*parser).buffer, b'-') {
1822
5.30k
            chomping = if CHECK!((*parser).buffer, b'+') {
1823
3.38k
                1
1824
            } else {
1825
1.92k
                -1
1826
            };
1827
5.30k
            SKIP(parser);
1828
5.30k
            if CACHE(parser, 1_u64).fail {
1829
0
                current_block = 14984465786483313892;
1830
5.30k
            } else if IS_DIGIT!((*parser).buffer) {
1831
749
                if CHECK!((*parser).buffer, b'0') {
1832
9
                    yaml_parser_set_scanner_error(
1833
9
                        parser,
1834
9
                        b"while scanning a block scalar\0" as *const u8 as *const libc::c_char,
1835
9
                        start_mark,
1836
9
                        b"found an indentation indicator equal to 0\0" as *const u8
1837
9
                            as *const libc::c_char,
1838
9
                    );
1839
9
                    current_block = 14984465786483313892;
1840
740
                } else {
1841
740
                    increment = AS_DIGIT!((*parser).buffer);
1842
740
                    SKIP(parser);
1843
740
                    current_block = 11913429853522160501;
1844
740
                }
1845
4.55k
            } else {
1846
4.55k
                current_block = 11913429853522160501;
1847
4.55k
            }
1848
19.0k
        } else if IS_DIGIT!((*parser).buffer) {
1849
5.58k
            if CHECK!((*parser).buffer, b'0') {
1850
13
                yaml_parser_set_scanner_error(
1851
13
                    parser,
1852
13
                    b"while scanning a block scalar\0" as *const u8 as *const libc::c_char,
1853
13
                    start_mark,
1854
13
                    b"found an indentation indicator equal to 0\0" as *const u8
1855
13
                        as *const libc::c_char,
1856
13
                );
1857
13
                current_block = 14984465786483313892;
1858
13
            } else {
1859
5.57k
                increment = AS_DIGIT!((*parser).buffer);
1860
5.57k
                SKIP(parser);
1861
5.57k
                if CACHE(parser, 1_u64).fail {
1862
0
                    current_block = 14984465786483313892;
1863
0
                } else {
1864
5.57k
                    if CHECK!((*parser).buffer, b'+') || CHECK!((*parser).buffer, b'-') {
1865
3.91k
                        chomping = if CHECK!((*parser).buffer, b'+') {
1866
3.24k
                            1
1867
                        } else {
1868
672
                            -1
1869
                        };
1870
3.91k
                        SKIP(parser);
1871
1.65k
                    }
1872
5.57k
                    current_block = 11913429853522160501;
1873
                }
1874
            }
1875
13.5k
        } else {
1876
13.5k
            current_block = 11913429853522160501;
1877
13.5k
        }
1878
24.3k
        if current_block != 14984465786483313892 {
1879
24.3k
            if CACHE(parser, 1_u64).ok {
1880
                loop {
1881
2.39M
                    if !IS_BLANK!((*parser).buffer) {
1882
24.3k
                        current_block = 4090602189656566074;
1883
24.3k
                        break;
1884
2.36M
                    }
1885
2.36M
                    SKIP(parser);
1886
2.36M
                    if CACHE(parser, 1_u64).fail {
1887
5
                        current_block = 14984465786483313892;
1888
5
                        break;
1889
2.36M
                    }
1890
                }
1891
24.3k
                if current_block != 14984465786483313892 {
1892
24.3k
                    if CHECK!((*parser).buffer, b'#') {
1893
                        loop {
1894
6.58M
                            if IS_BREAKZ!((*parser).buffer) {
1895
3.44k
                                current_block = 12997042908615822766;
1896
3.44k
                                break;
1897
6.57M
                            }
1898
6.57M
                            SKIP(parser);
1899
6.57M
                            if CACHE(parser, 1_u64).fail {
1900
13
                                current_block = 14984465786483313892;
1901
13
                                break;
1902
6.57M
                            }
1903
                        }
1904
20.9k
                    } else {
1905
20.9k
                        current_block = 12997042908615822766;
1906
20.9k
                    }
1907
24.3k
                    if current_block != 14984465786483313892 {
1908
24.3k
                        if !IS_BREAKZ!((*parser).buffer) {
1909
227
                            yaml_parser_set_scanner_error(
1910
227
                                parser,
1911
227
                                b"while scanning a block scalar\0" as *const u8
1912
227
                                    as *const libc::c_char,
1913
227
                                start_mark,
1914
227
                                b"did not find expected comment or line break\0" as *const u8
1915
227
                                    as *const libc::c_char,
1916
227
                            );
1917
227
                        } else {
1918
24.1k
                            if IS_BREAK!((*parser).buffer) {
1919
22.9k
                                if CACHE(parser, 2_u64).fail {
1920
4
                                    current_block = 14984465786483313892;
1921
22.9k
                                } else {
1922
22.9k
                                    SKIP_LINE(parser);
1923
22.9k
                                    current_block = 13619784596304402172;
1924
22.9k
                                }
1925
1.20k
                            } else {
1926
1.20k
                                current_block = 13619784596304402172;
1927
1.20k
                            }
1928
24.1k
                            if current_block != 14984465786483313892 {
1929
24.1k
                                end_mark = (*parser).mark;
1930
24.1k
                                if increment != 0 {
1931
6.25k
                                    indent = if (*parser).indent >= 0 {
1932
1.89k
                                        (*parser).indent + increment
1933
                                    } else {
1934
4.35k
                                        increment
1935
                                    };
1936
17.8k
                                }
1937
24.1k
                                if yaml_parser_scan_block_scalar_breaks(
1938
24.1k
                                    parser,
1939
24.1k
                                    addr_of_mut!(indent),
1940
24.1k
                                    addr_of_mut!(trailing_breaks),
1941
24.1k
                                    start_mark,
1942
24.1k
                                    addr_of_mut!(end_mark),
1943
24.1k
                                )
1944
24.1k
                                .ok
1945
                                {
1946
24.1k
                                    if CACHE(parser, 1_u64).ok {
1947
                                        's_281: loop {
1948
52.7k
                                            if !((*parser).mark.column as libc::c_int == indent
1949
29.5k
                                                && !IS_Z!((*parser).buffer))
1950
                                            {
1951
24.0k
                                                current_block = 5793491756164225964;
1952
24.0k
                                                break;
1953
28.6k
                                            }
1954
                                            trailing_blank =
1955
28.6k
                                                IS_BLANK!((*parser).buffer) as libc::c_int;
1956
28.6k
                                            if !literal
1957
17.0k
                                                && *leading_break.start == b'\n'
1958
7.92k
                                                && leading_blank == 0
1959
6.33k
                                                && trailing_blank == 0
1960
                                            {
1961
6.05k
                                                if *trailing_breaks.start == b'\0' {
1962
4.40k
                                                    STRING_EXTEND!(string);
1963
4.40k
                                                    let fresh418 = string.pointer;
1964
4.40k
                                                    string.pointer =
1965
4.40k
                                                        string.pointer.wrapping_offset(1);
1966
4.40k
                                                    *fresh418 = b' ';
1967
1.65k
                                                }
1968
6.05k
                                                CLEAR!(leading_break);
1969
22.6k
                                            } else {
1970
22.6k
                                                JOIN!(string, leading_break);
1971
22.6k
                                                CLEAR!(leading_break);
1972
22.6k
                                            }
1973
28.6k
                                            JOIN!(string, trailing_breaks);
1974
28.6k
                                            CLEAR!(trailing_breaks);
1975
                                            leading_blank =
1976
28.6k
                                                IS_BLANK!((*parser).buffer) as libc::c_int;
1977
14.3M
                                            while !IS_BREAKZ!((*parser).buffer) {
1978
14.2M
                                                READ!(parser, string);
1979
14.2M
                                                if CACHE(parser, 1_u64).fail {
1980
38
                                                    current_block = 14984465786483313892;
1981
38
                                                    break 's_281;
1982
14.2M
                                                }
1983
                                            }
1984
28.6k
                                            if CACHE(parser, 2_u64).fail {
1985
7
                                                current_block = 14984465786483313892;
1986
7
                                                break;
1987
28.6k
                                            }
1988
28.6k
                                            READ_LINE!(parser, leading_break);
1989
28.6k
                                            if yaml_parser_scan_block_scalar_breaks(
1990
28.6k
                                                parser,
1991
28.6k
                                                addr_of_mut!(indent),
1992
28.6k
                                                addr_of_mut!(trailing_breaks),
1993
28.6k
                                                start_mark,
1994
28.6k
                                                addr_of_mut!(end_mark),
1995
28.6k
                                            )
1996
28.6k
                                            .fail
1997
                                            {
1998
3
                                                current_block = 14984465786483313892;
1999
3
                                                break;
2000
28.6k
                                            }
2001
                                        }
2002
24.1k
                                        if current_block != 14984465786483313892 {
2003
24.0k
                                            if chomping != -1 {
2004
21.5k
                                                JOIN!(string, leading_break);
2005
21.5k
                                                current_block = 17787701279558130514;
2006
21.5k
                                            } else {
2007
2.53k
                                                current_block = 17787701279558130514;
2008
2.53k
                                            }
2009
24.0k
                                            if current_block != 14984465786483313892 {
2010
24.0k
                                                if chomping == 1 {
2011
6.57k
                                                    JOIN!(string, trailing_breaks);
2012
17.4k
                                                }
2013
24.0k
                                                memset(
2014
24.0k
                                                    token as *mut libc::c_void,
2015
                                                    0,
2016
24.0k
                                                    size_of::<yaml_token_t>() as libc::c_ulong,
2017
                                                );
2018
24.0k
                                                (*token).type_ = YAML_SCALAR_TOKEN;
2019
24.0k
                                                (*token).start_mark = start_mark;
2020
24.0k
                                                (*token).end_mark = end_mark;
2021
24.0k
                                                let fresh479 =
2022
24.0k
                                                    addr_of_mut!((*token).data.scalar.value);
2023
24.0k
                                                *fresh479 = string.start;
2024
24.0k
                                                (*token).data.scalar.length =
2025
24.0k
                                                    string.pointer.c_offset_from(string.start)
2026
24.0k
                                                        as size_t;
2027
24.0k
                                                (*token).data.scalar.style = if literal {
2028
8.63k
                                                    YAML_LITERAL_SCALAR_STYLE
2029
                                                } else {
2030
15.4k
                                                    YAML_FOLDED_SCALAR_STYLE
2031
                                                };
2032
24.0k
                                                STRING_DEL!(leading_break);
2033
24.0k
                                                STRING_DEL!(trailing_breaks);
2034
24.0k
                                                return OK;
2035
0
                                            }
2036
48
                                        }
2037
0
                                    }
2038
24
                                }
2039
4
                            }
2040
                        }
2041
13
                    }
2042
5
                }
2043
0
            }
2044
22
        }
2045
0
    }
2046
343
    STRING_DEL!(string);
2047
343
    STRING_DEL!(leading_break);
2048
343
    STRING_DEL!(trailing_breaks);
2049
343
    FAIL
2050
24.3k
}
2051
2052
52.7k
unsafe fn yaml_parser_scan_block_scalar_breaks(
2053
52.7k
    parser: *mut yaml_parser_t,
2054
52.7k
    indent: *mut libc::c_int,
2055
52.7k
    breaks: *mut yaml_string_t,
2056
52.7k
    start_mark: yaml_mark_t,
2057
52.7k
    end_mark: *mut yaml_mark_t,
2058
52.7k
) -> Success {
2059
52.7k
    let mut max_indent: libc::c_int = 0;
2060
52.7k
    *end_mark = (*parser).mark;
2061
    loop {
2062
278k
        if CACHE(parser, 1_u64).fail {
2063
13
            return FAIL;
2064
278k
        }
2065
3.64M
        while (*indent == 0 || ((*parser).mark.column as libc::c_int) < *indent)
2066
3.61M
            && IS_SPACE!((*parser).buffer)
2067
        {
2068
3.36M
            SKIP(parser);
2069
3.36M
            if CACHE(parser, 1_u64).fail {
2070
4
                return FAIL;
2071
3.36M
            }
2072
        }
2073
278k
        if (*parser).mark.column as libc::c_int > max_indent {
2074
32.7k
            max_indent = (*parser).mark.column as libc::c_int;
2075
245k
        }
2076
278k
        if (*indent == 0 || ((*parser).mark.column as libc::c_int) < *indent)
2077
249k
            && IS_TAB!((*parser).buffer)
2078
        {
2079
6
            yaml_parser_set_scanner_error(
2080
6
                parser,
2081
6
                b"while scanning a block scalar\0" as *const u8 as *const libc::c_char,
2082
6
                start_mark,
2083
6
                b"found a tab character where an indentation space is expected\0" as *const u8
2084
6
                    as *const libc::c_char,
2085
            );
2086
6
            return FAIL;
2087
278k
        }
2088
278k
        if !IS_BREAK!((*parser).buffer) {
2089
52.7k
            break;
2090
225k
        }
2091
225k
        if CACHE(parser, 2_u64).fail {
2092
4
            return FAIL;
2093
225k
        }
2094
225k
        READ_LINE!(parser, *breaks);
2095
225k
        *end_mark = (*parser).mark;
2096
    }
2097
52.7k
    if *indent == 0 {
2098
17.8k
        *indent = max_indent;
2099
17.8k
        if *indent < (*parser).indent + 1 {
2100
7.57k
            *indent = (*parser).indent + 1;
2101
10.2k
        }
2102
17.8k
        if *indent < 1 {
2103
5.59k
            *indent = 1;
2104
12.2k
        }
2105
34.8k
    }
2106
52.7k
    OK
2107
52.7k
}
2108
2109
549k
unsafe fn yaml_parser_scan_flow_scalar(
2110
549k
    parser: *mut yaml_parser_t,
2111
549k
    token: *mut yaml_token_t,
2112
549k
    single: bool,
2113
549k
) -> Success {
2114
    let current_block: u64;
2115
    let end_mark: yaml_mark_t;
2116
549k
    let mut string = NULL_STRING;
2117
549k
    let mut leading_break = NULL_STRING;
2118
549k
    let mut trailing_breaks = NULL_STRING;
2119
549k
    let mut whitespaces = NULL_STRING;
2120
    let mut leading_blanks;
2121
549k
    STRING_INIT!(string);
2122
549k
    STRING_INIT!(leading_break);
2123
549k
    STRING_INIT!(trailing_breaks);
2124
549k
    STRING_INIT!(whitespaces);
2125
549k
    let start_mark: yaml_mark_t = (*parser).mark;
2126
549k
    SKIP(parser);
2127
    's_58: loop {
2128
4.80M
        if CACHE(parser, 4_u64).fail {
2129
67
            current_block = 8114179180390253173;
2130
67
            break;
2131
4.80M
        }
2132
4.80M
        if (*parser).mark.column == 0_u64
2133
785k
            && (CHECK_AT!((*parser).buffer, b'-', 0)
2134
301k
                && CHECK_AT!((*parser).buffer, b'-', 1)
2135
3.77k
                && CHECK_AT!((*parser).buffer, b'-', 2)
2136
782k
                || CHECK_AT!((*parser).buffer, b'.', 0)
2137
7.09k
                    && CHECK_AT!((*parser).buffer, b'.', 1)
2138
5.06k
                    && CHECK_AT!((*parser).buffer, b'.', 2))
2139
6.81k
            && IS_BLANKZ_AT!((*parser).buffer, 3)
2140
        {
2141
67
            yaml_parser_set_scanner_error(
2142
67
                parser,
2143
67
                b"while scanning a quoted scalar\0" as *const u8 as *const libc::c_char,
2144
67
                start_mark,
2145
67
                b"found unexpected document indicator\0" as *const u8 as *const libc::c_char,
2146
            );
2147
67
            current_block = 8114179180390253173;
2148
67
            break;
2149
4.80M
        } else if IS_Z!((*parser).buffer) {
2150
3.26k
            yaml_parser_set_scanner_error(
2151
3.26k
                parser,
2152
3.26k
                b"while scanning a quoted scalar\0" as *const u8 as *const libc::c_char,
2153
3.26k
                start_mark,
2154
3.26k
                b"found unexpected end of stream\0" as *const u8 as *const libc::c_char,
2155
            );
2156
3.26k
            current_block = 8114179180390253173;
2157
3.26k
            break;
2158
        } else {
2159
4.79M
            if CACHE(parser, 2_u64).fail {
2160
0
                current_block = 8114179180390253173;
2161
0
                break;
2162
4.79M
            }
2163
4.79M
            leading_blanks = false;
2164
80.5M
            while !IS_BLANKZ!((*parser).buffer) {
2165
76.3M
                if single
2166
39.0M
                    && CHECK_AT!((*parser).buffer, b'\'', 0)
2167
5.51M
                    && CHECK_AT!((*parser).buffer, b'\'', 1)
2168
                {
2169
5.01M
                    STRING_EXTEND!(string);
2170
5.01M
                    let fresh521 = string.pointer;
2171
5.01M
                    string.pointer = string.pointer.wrapping_offset(1);
2172
5.01M
                    *fresh521 = b'\'';
2173
5.01M
                    SKIP(parser);
2174
5.01M
                    SKIP(parser);
2175
                } else {
2176
71.3M
                    if CHECK!((*parser).buffer, if single { b'\'' } else { b'"' }) {
2177
545k
                        break;
2178
70.8M
                    }
2179
70.8M
                    if !single
2180
37.3M
                        && CHECK!((*parser).buffer, b'\\')
2181
184k
                        && IS_BREAK_AT!((*parser).buffer, 1)
2182
                    {
2183
86.7k
                        if CACHE(parser, 3_u64).fail {
2184
3
                            current_block = 8114179180390253173;
2185
3
                            break 's_58;
2186
86.7k
                        }
2187
86.7k
                        SKIP(parser);
2188
86.7k
                        SKIP_LINE(parser);
2189
86.7k
                        leading_blanks = true;
2190
86.7k
                        break;
2191
70.7M
                    } else if !single && CHECK!((*parser).buffer, b'\\') {
2192
97.7k
                        let mut code_length: size_t = 0_u64;
2193
97.7k
                        STRING_EXTEND!(string);
2194
97.7k
                        match *(*parser).buffer.pointer.wrapping_offset(1_isize) {
2195
4.00k
                            b'0' => {
2196
4.00k
                                let fresh542 = string.pointer;
2197
4.00k
                                string.pointer = string.pointer.wrapping_offset(1);
2198
4.00k
                                *fresh542 = b'\0';
2199
4.00k
                            }
2200
1.90k
                            b'a' => {
2201
1.90k
                                let fresh543 = string.pointer;
2202
1.90k
                                string.pointer = string.pointer.wrapping_offset(1);
2203
1.90k
                                *fresh543 = b'\x07';
2204
1.90k
                            }
2205
809
                            b'b' => {
2206
809
                                let fresh544 = string.pointer;
2207
809
                                string.pointer = string.pointer.wrapping_offset(1);
2208
809
                                *fresh544 = b'\x08';
2209
809
                            }
2210
8.18k
                            b't' | b'\t' => {
2211
8.18k
                                let fresh545 = string.pointer;
2212
8.18k
                                string.pointer = string.pointer.wrapping_offset(1);
2213
8.18k
                                *fresh545 = b'\t';
2214
8.18k
                            }
2215
758
                            b'n' => {
2216
758
                                let fresh546 = string.pointer;
2217
758
                                string.pointer = string.pointer.wrapping_offset(1);
2218
758
                                *fresh546 = b'\n';
2219
758
                            }
2220
1.01k
                            b'v' => {
2221
1.01k
                                let fresh547 = string.pointer;
2222
1.01k
                                string.pointer = string.pointer.wrapping_offset(1);
2223
1.01k
                                *fresh547 = b'\x0B';
2224
1.01k
                            }
2225
856
                            b'f' => {
2226
856
                                let fresh548 = string.pointer;
2227
856
                                string.pointer = string.pointer.wrapping_offset(1);
2228
856
                                *fresh548 = b'\x0C';
2229
856
                            }
2230
1.02k
                            b'r' => {
2231
1.02k
                                let fresh549 = string.pointer;
2232
1.02k
                                string.pointer = string.pointer.wrapping_offset(1);
2233
1.02k
                                *fresh549 = b'\r';
2234
1.02k
                            }
2235
818
                            b'e' => {
2236
818
                                let fresh550 = string.pointer;
2237
818
                                string.pointer = string.pointer.wrapping_offset(1);
2238
818
                                *fresh550 = b'\x1B';
2239
818
                            }
2240
2.35k
                            b' ' => {
2241
2.35k
                                let fresh551 = string.pointer;
2242
2.35k
                                string.pointer = string.pointer.wrapping_offset(1);
2243
2.35k
                                *fresh551 = b' ';
2244
2.35k
                            }
2245
1.05k
                            b'"' => {
2246
1.05k
                                let fresh552 = string.pointer;
2247
1.05k
                                string.pointer = string.pointer.wrapping_offset(1);
2248
1.05k
                                *fresh552 = b'"';
2249
1.05k
                            }
2250
688
                            b'/' => {
2251
688
                                let fresh553 = string.pointer;
2252
688
                                string.pointer = string.pointer.wrapping_offset(1);
2253
688
                                *fresh553 = b'/';
2254
688
                            }
2255
23.9k
                            b'\\' => {
2256
23.9k
                                let fresh554 = string.pointer;
2257
23.9k
                                string.pointer = string.pointer.wrapping_offset(1);
2258
23.9k
                                *fresh554 = b'\\';
2259
23.9k
                            }
2260
                            // NEL (#x85)
2261
1.16k
                            b'N' => {
2262
1.16k
                                let fresh555 = string.pointer;
2263
1.16k
                                string.pointer = string.pointer.wrapping_offset(1);
2264
1.16k
                                *fresh555 = b'\xC2';
2265
1.16k
                                let fresh556 = string.pointer;
2266
1.16k
                                string.pointer = string.pointer.wrapping_offset(1);
2267
1.16k
                                *fresh556 = b'\x85';
2268
1.16k
                            }
2269
                            // #xA0
2270
622
                            b'_' => {
2271
622
                                let fresh557 = string.pointer;
2272
622
                                string.pointer = string.pointer.wrapping_offset(1);
2273
622
                                *fresh557 = b'\xC2';
2274
622
                                let fresh558 = string.pointer;
2275
622
                                string.pointer = string.pointer.wrapping_offset(1);
2276
622
                                *fresh558 = b'\xA0';
2277
622
                            }
2278
                            // LS (#x2028)
2279
3.82k
                            b'L' => {
2280
3.82k
                                let fresh559 = string.pointer;
2281
3.82k
                                string.pointer = string.pointer.wrapping_offset(1);
2282
3.82k
                                *fresh559 = b'\xE2';
2283
3.82k
                                let fresh560 = string.pointer;
2284
3.82k
                                string.pointer = string.pointer.wrapping_offset(1);
2285
3.82k
                                *fresh560 = b'\x80';
2286
3.82k
                                let fresh561 = string.pointer;
2287
3.82k
                                string.pointer = string.pointer.wrapping_offset(1);
2288
3.82k
                                *fresh561 = b'\xA8';
2289
3.82k
                            }
2290
                            // PS (#x2029)
2291
1.70k
                            b'P' => {
2292
1.70k
                                let fresh562 = string.pointer;
2293
1.70k
                                string.pointer = string.pointer.wrapping_offset(1);
2294
1.70k
                                *fresh562 = b'\xE2';
2295
1.70k
                                let fresh563 = string.pointer;
2296
1.70k
                                string.pointer = string.pointer.wrapping_offset(1);
2297
1.70k
                                *fresh563 = b'\x80';
2298
1.70k
                                let fresh564 = string.pointer;
2299
1.70k
                                string.pointer = string.pointer.wrapping_offset(1);
2300
1.70k
                                *fresh564 = b'\xA9';
2301
1.70k
                            }
2302
2.66k
                            b'x' => {
2303
2.66k
                                code_length = 2_u64;
2304
2.66k
                            }
2305
11.9k
                            b'u' => {
2306
11.9k
                                code_length = 4_u64;
2307
11.9k
                            }
2308
28.2k
                            b'U' => {
2309
28.2k
                                code_length = 8_u64;
2310
28.2k
                            }
2311
                            _ => {
2312
111
                                yaml_parser_set_scanner_error(
2313
111
                                    parser,
2314
111
                                    b"while parsing a quoted scalar\0" as *const u8
2315
111
                                        as *const libc::c_char,
2316
111
                                    start_mark,
2317
111
                                    b"found unknown escape character\0" as *const u8
2318
111
                                        as *const libc::c_char,
2319
                                );
2320
111
                                current_block = 8114179180390253173;
2321
111
                                break 's_58;
2322
                            }
2323
                        }
2324
97.6k
                        SKIP(parser);
2325
97.6k
                        SKIP(parser);
2326
97.6k
                        if code_length != 0 {
2327
42.8k
                            let mut value: libc::c_uint = 0;
2328
                            let mut k: size_t;
2329
42.8k
                            if CACHE(parser, code_length).fail {
2330
3
                                current_block = 8114179180390253173;
2331
3
                                break 's_58;
2332
42.8k
                            }
2333
42.8k
                            k = 0_u64;
2334
320k
                            while k < code_length {
2335
278k
                                if !IS_HEX_AT!((*parser).buffer, k as isize) {
2336
230
                                    yaml_parser_set_scanner_error(
2337
230
                                        parser,
2338
230
                                        b"while parsing a quoted scalar\0" as *const u8
2339
230
                                            as *const libc::c_char,
2340
230
                                        start_mark,
2341
230
                                        b"did not find expected hexadecimal number\0" as *const u8
2342
230
                                            as *const libc::c_char,
2343
                                    );
2344
230
                                    current_block = 8114179180390253173;
2345
230
                                    break 's_58;
2346
                                } else {
2347
278k
                                    value = (value << 4).force_add(AS_HEX_AT!(
2348
                                        (*parser).buffer,
2349
134k
                                        k as isize
2350
                                    )
2351
                                        as libc::c_uint);
2352
278k
                                    k = k.force_add(1);
2353
                                }
2354
                            }
2355
42.5k
                            if value >= 0xD800 && value <= 0xDFFF || value > 0x10FFFF {
2356
148
                                yaml_parser_set_scanner_error(
2357
148
                                    parser,
2358
148
                                    b"while parsing a quoted scalar\0" as *const u8
2359
148
                                        as *const libc::c_char,
2360
148
                                    start_mark,
2361
148
                                    b"found invalid Unicode character escape code\0" as *const u8
2362
148
                                        as *const libc::c_char,
2363
                                );
2364
148
                                current_block = 8114179180390253173;
2365
148
                                break 's_58;
2366
                            } else {
2367
42.4k
                                if value <= 0x7F {
2368
3.56k
                                    let fresh573 = string.pointer;
2369
3.56k
                                    string.pointer = string.pointer.wrapping_offset(1);
2370
3.56k
                                    *fresh573 = value as yaml_char_t;
2371
38.8k
                                } else if value <= 0x7FF {
2372
1.87k
                                    let fresh574 = string.pointer;
2373
1.87k
                                    string.pointer = string.pointer.wrapping_offset(1);
2374
1.87k
                                    *fresh574 = 0xC0_u32.force_add(value >> 6) as yaml_char_t;
2375
1.87k
                                    let fresh575 = string.pointer;
2376
1.87k
                                    string.pointer = string.pointer.wrapping_offset(1);
2377
1.87k
                                    *fresh575 = 0x80_u32.force_add(value & 0x3F) as yaml_char_t;
2378
37.0k
                                } else if value <= 0xFFFF {
2379
24.6k
                                    let fresh576 = string.pointer;
2380
24.6k
                                    string.pointer = string.pointer.wrapping_offset(1);
2381
24.6k
                                    *fresh576 = 0xE0_u32.force_add(value >> 12) as yaml_char_t;
2382
24.6k
                                    let fresh577 = string.pointer;
2383
24.6k
                                    string.pointer = string.pointer.wrapping_offset(1);
2384
24.6k
                                    *fresh577 =
2385
24.6k
                                        0x80_u32.force_add(value >> 6 & 0x3F) as yaml_char_t;
2386
24.6k
                                    let fresh578 = string.pointer;
2387
24.6k
                                    string.pointer = string.pointer.wrapping_offset(1);
2388
24.6k
                                    *fresh578 = 0x80_u32.force_add(value & 0x3F) as yaml_char_t;
2389
24.6k
                                } else {
2390
12.3k
                                    let fresh579 = string.pointer;
2391
12.3k
                                    string.pointer = string.pointer.wrapping_offset(1);
2392
12.3k
                                    *fresh579 = 0xF0_u32.force_add(value >> 18) as yaml_char_t;
2393
12.3k
                                    let fresh580 = string.pointer;
2394
12.3k
                                    string.pointer = string.pointer.wrapping_offset(1);
2395
12.3k
                                    *fresh580 =
2396
12.3k
                                        0x80_u32.force_add(value >> 12 & 0x3F) as yaml_char_t;
2397
12.3k
                                    let fresh581 = string.pointer;
2398
12.3k
                                    string.pointer = string.pointer.wrapping_offset(1);
2399
12.3k
                                    *fresh581 =
2400
12.3k
                                        0x80_u32.force_add(value >> 6 & 0x3F) as yaml_char_t;
2401
12.3k
                                    let fresh582 = string.pointer;
2402
12.3k
                                    string.pointer = string.pointer.wrapping_offset(1);
2403
12.3k
                                    *fresh582 = 0x80_u32.force_add(value & 0x3F) as yaml_char_t;
2404
12.3k
                                }
2405
42.4k
                                k = 0_u64;
2406
319k
                                while k < code_length {
2407
276k
                                    SKIP(parser);
2408
276k
                                    k = k.force_add(1);
2409
276k
                                }
2410
                            }
2411
54.7k
                        }
2412
70.6M
                    } else {
2413
70.6M
                        READ!(parser, string);
2414
70.6M
                    }
2415
                }
2416
75.7M
                if CACHE(parser, 2_u64).fail {
2417
97
                    current_block = 8114179180390253173;
2418
97
                    break 's_58;
2419
75.7M
                }
2420
            }
2421
4.79M
            if CACHE(parser, 1_u64).fail {
2422
4
                current_block = 8114179180390253173;
2423
4
                break;
2424
4.79M
            }
2425
4.79M
            if CHECK!((*parser).buffer, if single { b'\'' } else { b'"' }) {
2426
545k
                current_block = 7468767852762055642;
2427
545k
                break;
2428
4.25M
            }
2429
4.25M
            if CACHE(parser, 1_u64).fail {
2430
0
                current_block = 8114179180390253173;
2431
0
                break;
2432
4.25M
            }
2433
28.5M
            while IS_BLANK!((*parser).buffer) || IS_BREAK!((*parser).buffer) {
2434
24.3M
                if IS_BLANK!((*parser).buffer) {
2435
19.0M
                    if !leading_blanks {
2436
17.1M
                        READ!(parser, whitespaces);
2437
17.1M
                    } else {
2438
1.90M
                        SKIP(parser);
2439
1.90M
                    }
2440
                } else {
2441
5.24M
                    if CACHE(parser, 2_u64).fail {
2442
9
                        current_block = 8114179180390253173;
2443
9
                        break 's_58;
2444
5.24M
                    }
2445
5.24M
                    if !leading_blanks {
2446
719k
                        CLEAR!(whitespaces);
2447
719k
                        READ_LINE!(parser, leading_break);
2448
719k
                        leading_blanks = true;
2449
4.52M
                    } else {
2450
4.52M
                        READ_LINE!(parser, trailing_breaks);
2451
4.52M
                    }
2452
                }
2453
24.3M
                if CACHE(parser, 1_u64).fail {
2454
10
                    current_block = 8114179180390253173;
2455
10
                    break 's_58;
2456
24.3M
                }
2457
            }
2458
4.25M
            if leading_blanks {
2459
806k
                if *leading_break.start == b'\n' {
2460
504k
                    if *trailing_breaks.start == b'\0' {
2461
341k
                        STRING_EXTEND!(string);
2462
341k
                        let fresh711 = string.pointer;
2463
341k
                        string.pointer = string.pointer.wrapping_offset(1);
2464
341k
                        *fresh711 = b' ';
2465
163k
                    } else {
2466
163k
                        JOIN!(string, trailing_breaks);
2467
163k
                        CLEAR!(trailing_breaks);
2468
163k
                    }
2469
504k
                    CLEAR!(leading_break);
2470
302k
                } else {
2471
302k
                    JOIN!(string, leading_break);
2472
302k
                    JOIN!(string, trailing_breaks);
2473
302k
                    CLEAR!(leading_break);
2474
302k
                    CLEAR!(trailing_breaks);
2475
302k
                }
2476
3.44M
            } else {
2477
3.44M
                JOIN!(string, whitespaces);
2478
3.44M
                CLEAR!(whitespaces);
2479
3.44M
            }
2480
        }
2481
    }
2482
549k
    if current_block != 8114179180390253173 {
2483
545k
        SKIP(parser);
2484
545k
        end_mark = (*parser).mark;
2485
545k
        memset(
2486
545k
            token as *mut libc::c_void,
2487
            0,
2488
545k
            size_of::<yaml_token_t>() as libc::c_ulong,
2489
        );
2490
545k
        (*token).type_ = YAML_SCALAR_TOKEN;
2491
545k
        (*token).start_mark = start_mark;
2492
545k
        (*token).end_mark = end_mark;
2493
545k
        let fresh716 = addr_of_mut!((*token).data.scalar.value);
2494
545k
        *fresh716 = string.start;
2495
545k
        (*token).data.scalar.length = string.pointer.c_offset_from(string.start) as size_t;
2496
545k
        (*token).data.scalar.style = if single {
2497
499k
            YAML_SINGLE_QUOTED_SCALAR_STYLE
2498
        } else {
2499
45.8k
            YAML_DOUBLE_QUOTED_SCALAR_STYLE
2500
        };
2501
545k
        STRING_DEL!(leading_break);
2502
545k
        STRING_DEL!(trailing_breaks);
2503
545k
        STRING_DEL!(whitespaces);
2504
545k
        return OK;
2505
4.01k
    }
2506
4.01k
    STRING_DEL!(string);
2507
4.01k
    STRING_DEL!(leading_break);
2508
4.01k
    STRING_DEL!(trailing_breaks);
2509
4.01k
    STRING_DEL!(whitespaces);
2510
4.01k
    FAIL
2511
549k
}
2512
2513
6.07M
unsafe fn yaml_parser_scan_plain_scalar(
2514
6.07M
    parser: *mut yaml_parser_t,
2515
6.07M
    token: *mut yaml_token_t,
2516
6.07M
) -> Success {
2517
    let current_block: u64;
2518
    let mut end_mark: yaml_mark_t;
2519
6.07M
    let mut string = NULL_STRING;
2520
6.07M
    let mut leading_break = NULL_STRING;
2521
6.07M
    let mut trailing_breaks = NULL_STRING;
2522
6.07M
    let mut whitespaces = NULL_STRING;
2523
6.07M
    let mut leading_blanks = false;
2524
6.07M
    let indent: libc::c_int = (*parser).indent + 1;
2525
6.07M
    STRING_INIT!(string);
2526
6.07M
    STRING_INIT!(leading_break);
2527
6.07M
    STRING_INIT!(trailing_breaks);
2528
6.07M
    STRING_INIT!(whitespaces);
2529
6.07M
    end_mark = (*parser).mark;
2530
6.07M
    let start_mark: yaml_mark_t = end_mark;
2531
    's_57: loop {
2532
9.78M
        if CACHE(parser, 4_u64).fail {
2533
53
            current_block = 16642808987012640029;
2534
53
            break;
2535
9.78M
        }
2536
9.78M
        if (*parser).mark.column == 0_u64
2537
1.48M
            && (CHECK_AT!((*parser).buffer, b'-', 0)
2538
294k
                && CHECK_AT!((*parser).buffer, b'-', 1)
2539
181k
                && CHECK_AT!((*parser).buffer, b'-', 2)
2540
1.33M
                || CHECK_AT!((*parser).buffer, b'.', 0)
2541
46.6k
                    && CHECK_AT!((*parser).buffer, b'.', 1)
2542
36.4k
                    && CHECK_AT!((*parser).buffer, b'.', 2))
2543
179k
            && IS_BLANKZ_AT!((*parser).buffer, 3)
2544
        {
2545
101k
            current_block = 6281126495347172768;
2546
101k
            break;
2547
9.68M
        }
2548
9.68M
        if CHECK!((*parser).buffer, b'#') {
2549
30.9k
            current_block = 6281126495347172768;
2550
30.9k
            break;
2551
9.65M
        }
2552
121M
        while !IS_BLANKZ!((*parser).buffer) {
2553
118M
            if (*parser).flow_level != 0
2554
36.0M
                && CHECK!((*parser).buffer, b':')
2555
110k
                && (CHECK_AT!((*parser).buffer, b',', 1)
2556
110k
                    || CHECK_AT!((*parser).buffer, b'?', 1)
2557
110k
                    || CHECK_AT!((*parser).buffer, b'[', 1)
2558
110k
                    || CHECK_AT!((*parser).buffer, b']', 1)
2559
110k
                    || CHECK_AT!((*parser).buffer, b'{', 1)
2560
110k
                    || CHECK_AT!((*parser).buffer, b'}', 1))
2561
            {
2562
24
                yaml_parser_set_scanner_error(
2563
24
                    parser,
2564
24
                    b"while scanning a plain scalar\0" as *const u8 as *const libc::c_char,
2565
24
                    start_mark,
2566
24
                    b"found unexpected ':'\0" as *const u8 as *const libc::c_char,
2567
                );
2568
24
                current_block = 16642808987012640029;
2569
24
                break 's_57;
2570
            } else {
2571
118M
                if CHECK!((*parser).buffer, b':') && IS_BLANKZ_AT!((*parser).buffer, 1)
2572
115M
                    || (*parser).flow_level != 0
2573
35.9M
                        && (CHECK!((*parser).buffer, b',')
2574
33.1M
                            || CHECK!((*parser).buffer, b'[')
2575
32.9M
                            || CHECK!((*parser).buffer, b']')
2576
32.8M
                            || CHECK!((*parser).buffer, b'{')
2577
32.5M
                            || CHECK!((*parser).buffer, b'}'))
2578
                {
2579
5.92M
                    break;
2580
112M
                }
2581
112M
                if leading_blanks || whitespaces.start != whitespaces.pointer {
2582
3.54M
                    if leading_blanks {
2583
1.10M
                        if *leading_break.start == b'\n' {
2584
596k
                            if *trailing_breaks.start == b'\0' {
2585
458k
                                STRING_EXTEND!(string);
2586
458k
                                let fresh717 = string.pointer;
2587
458k
                                string.pointer = string.pointer.wrapping_offset(1);
2588
458k
                                *fresh717 = b' ';
2589
137k
                            } else {
2590
137k
                                JOIN!(string, trailing_breaks);
2591
137k
                                CLEAR!(trailing_breaks);
2592
137k
                            }
2593
596k
                            CLEAR!(leading_break);
2594
505k
                        } else {
2595
505k
                            JOIN!(string, leading_break);
2596
505k
                            JOIN!(string, trailing_breaks);
2597
505k
                            CLEAR!(leading_break);
2598
505k
                            CLEAR!(trailing_breaks);
2599
505k
                        }
2600
1.10M
                        leading_blanks = false;
2601
2.44M
                    } else {
2602
2.44M
                        JOIN!(string, whitespaces);
2603
2.44M
                        CLEAR!(whitespaces);
2604
2.44M
                    }
2605
108M
                }
2606
112M
                READ!(parser, string);
2607
112M
                end_mark = (*parser).mark;
2608
112M
                if CACHE(parser, 2_u64).fail {
2609
265
                    current_block = 16642808987012640029;
2610
265
                    break 's_57;
2611
112M
                }
2612
            }
2613
        }
2614
9.65M
        if !(IS_BLANK!((*parser).buffer) || IS_BREAK!((*parser).buffer)) {
2615
5.92M
            current_block = 6281126495347172768;
2616
5.92M
            break;
2617
3.72M
        }
2618
3.72M
        if CACHE(parser, 1_u64).fail {
2619
0
            current_block = 16642808987012640029;
2620
0
            break;
2621
3.72M
        }
2622
39.8M
        while IS_BLANK!((*parser).buffer) || IS_BREAK!((*parser).buffer) {
2623
36.1M
            if IS_BLANK!((*parser).buffer) {
2624
14.8M
                if leading_blanks
2625
6.21M
                    && ((*parser).mark.column as libc::c_int) < indent
2626
8.45k
                    && IS_TAB!((*parser).buffer)
2627
                {
2628
4
                    yaml_parser_set_scanner_error(
2629
4
                        parser,
2630
4
                        b"while scanning a plain scalar\0" as *const u8 as *const libc::c_char,
2631
4
                        start_mark,
2632
4
                        b"found a tab character that violates indentation\0" as *const u8
2633
4
                            as *const libc::c_char,
2634
                    );
2635
4
                    current_block = 16642808987012640029;
2636
4
                    break 's_57;
2637
14.8M
                } else if !leading_blanks {
2638
8.64M
                    READ!(parser, whitespaces);
2639
8.64M
                } else {
2640
6.21M
                    SKIP(parser);
2641
6.21M
                }
2642
            } else {
2643
21.2M
                if CACHE(parser, 2_u64).fail {
2644
12
                    current_block = 16642808987012640029;
2645
12
                    break 's_57;
2646
21.2M
                }
2647
21.2M
                if !leading_blanks {
2648
1.25M
                    CLEAR!(whitespaces);
2649
1.25M
                    READ_LINE!(parser, leading_break);
2650
1.25M
                    leading_blanks = true;
2651
20.0M
                } else {
2652
20.0M
                    READ_LINE!(parser, trailing_breaks);
2653
20.0M
                }
2654
            }
2655
36.1M
            if CACHE(parser, 1_u64).fail {
2656
13
                current_block = 16642808987012640029;
2657
13
                break 's_57;
2658
36.1M
            }
2659
        }
2660
3.72M
        if (*parser).flow_level == 0 && ((*parser).mark.column as libc::c_int) < indent {
2661
12.5k
            current_block = 6281126495347172768;
2662
12.5k
            break;
2663
3.71M
        }
2664
    }
2665
6.07M
    if current_block != 16642808987012640029 {
2666
6.07M
        memset(
2667
6.07M
            token as *mut libc::c_void,
2668
            0,
2669
6.07M
            size_of::<yaml_token_t>() as libc::c_ulong,
2670
        );
2671
6.07M
        (*token).type_ = YAML_SCALAR_TOKEN;
2672
6.07M
        (*token).start_mark = start_mark;
2673
6.07M
        (*token).end_mark = end_mark;
2674
6.07M
        let fresh842 = addr_of_mut!((*token).data.scalar.value);
2675
6.07M
        *fresh842 = string.start;
2676
6.07M
        (*token).data.scalar.length = string.pointer.c_offset_from(string.start) as size_t;
2677
6.07M
        (*token).data.scalar.style = YAML_PLAIN_SCALAR_STYLE;
2678
6.07M
        if leading_blanks {
2679
155k
            (*parser).simple_key_allowed = true;
2680
5.91M
        }
2681
6.07M
        STRING_DEL!(leading_break);
2682
6.07M
        STRING_DEL!(trailing_breaks);
2683
6.07M
        STRING_DEL!(whitespaces);
2684
6.07M
        return OK;
2685
371
    }
2686
371
    STRING_DEL!(string);
2687
371
    STRING_DEL!(leading_break);
2688
371
    STRING_DEL!(trailing_breaks);
2689
371
    STRING_DEL!(whitespaces);
2690
371
    FAIL
2691
6.07M
}