Coverage Report

Created: 2025-10-29 07:05

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