Coverage Report

Created: 2026-01-09 06:57

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