Inline cache function.
diff --git a/scanner_c.go b/scanner_c.go index 467a9e3..a7ae55c 100644 --- a/scanner_c.go +++ b/scanner_c.go
@@ -481,8 +481,9 @@ // // Ensure that the buffer contains the required number of characters. -// Return 1 on success, 0 on failure (reader error or memory error). +// Return true on success, false on failure (reader error or memory error). func cache(parser *yaml_parser_t, length int) bool { + // [Go] This was inlined: !cache(A, B) -> unread < B && !update(A, B) return parser.unread >= length || yaml_parser_update_buffer(parser, length) } @@ -673,7 +674,7 @@ // The dispatcher for token fetchers. func yaml_parser_fetch_next_token(parser *yaml_parser_t) bool { // Ensure that the buffer is initialized. - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } @@ -699,7 +700,7 @@ // Ensure that the buffer contains at least 4 characters. 4 is the length // of the longest indicators ('--- ' and '... '). - if !cache(parser, 4) { + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { return false } @@ -1445,7 +1446,7 @@ // Until the next token is not found. for { // Allow the BOM mark to start a line. - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } if parser.mark.column == 0 && is_bom(parser.buffer, parser.buffer_pos) { @@ -1457,13 +1458,13 @@ // - in the flow context // - in the block context, but not at the beginning of the line or // after '-', '?', or ':' (complex value). - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } for parser.buffer[parser.buffer_pos] == ' ' || ((parser.flow_level > 0 || !parser.simple_key_allowed) && parser.buffer[parser.buffer_pos] == '\t') { skip(parser) - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } } @@ -1472,7 +1473,7 @@ if parser.buffer[parser.buffer_pos] == '#' { for !is_breakz(parser.buffer, parser.buffer_pos) { skip(parser) - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } } @@ -1480,7 +1481,7 @@ // If it is a line break, eat it. if is_break(parser.buffer, parser.buffer_pos) { - if !cache(parser, 2) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { return false } skip_line(parser) @@ -1560,13 +1561,13 @@ } // Eat the rest of the line including any comments. - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } for is_blank(parser.buffer, parser.buffer_pos) { skip(parser) - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } } @@ -1574,7 +1575,7 @@ if parser.buffer[parser.buffer_pos] == '#' { for !is_breakz(parser.buffer, parser.buffer_pos) { skip(parser) - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } } @@ -1589,7 +1590,7 @@ // Eat a line break. if is_break(parser.buffer, parser.buffer_pos) { - if !cache(parser, 2) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { return false } skip_line(parser) @@ -1608,7 +1609,7 @@ // func yaml_parser_scan_directive_name(parser *yaml_parser_t, start_mark yaml_mark_t, name *[]byte) bool { // Consume the directive name. - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } @@ -1617,7 +1618,7 @@ if !read(parser, &s) { return false } - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } } @@ -1646,12 +1647,12 @@ // ^^^^^^ func yaml_parser_scan_version_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, major, minor *int8) bool { // Eat whitespaces. - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } for is_blank(parser.buffer, parser.buffer_pos) { skip(parser) - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } } @@ -1688,7 +1689,7 @@ func yaml_parser_scan_version_directive_number(parser *yaml_parser_t, start_mark yaml_mark_t, number *int8) bool { // Repeat while the next character is digit. - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } var value, length int8 @@ -1701,7 +1702,7 @@ } value = value*10 + int8(as_digit(parser.buffer, parser.buffer_pos)) skip(parser) - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } } @@ -1725,13 +1726,13 @@ var handle_value, prefix_value []byte // Eat whitespaces. - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } for is_blank(parser.buffer, parser.buffer_pos) { skip(parser) - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } } @@ -1742,7 +1743,7 @@ } // Expect a whitespace. - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } if !is_blank(parser.buffer, parser.buffer_pos) { @@ -1754,7 +1755,7 @@ // Eat whitespaces. for is_blank(parser.buffer, parser.buffer_pos) { skip(parser) - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } } @@ -1765,7 +1766,7 @@ } // Expect a whitespace or line break. - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } if !is_blankz(parser.buffer, parser.buffer_pos) { @@ -1787,7 +1788,7 @@ skip(parser) // Consume the value. - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } @@ -1795,7 +1796,7 @@ if !read(parser, &s) { return false } - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } } @@ -1845,7 +1846,7 @@ start_mark := parser.mark // Check if the tag is in the canonical form. - if !cache(parser, 2) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { return false } @@ -1901,7 +1902,7 @@ } // Check the character which ends the tag. - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } if !is_blankz(parser.buffer, parser.buffer_pos) { @@ -1926,7 +1927,7 @@ // Scan a tag handle. func yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, handle *[]byte) bool { // Check the initial '!' character. - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } if parser.buffer[parser.buffer_pos] != '!' { @@ -1943,14 +1944,14 @@ } // Copy all subsequent alphabetical and numerical characters. - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } for is_alpha(parser.buffer, parser.buffer_pos) { if !read(parser, &s) { return false } - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } } @@ -1987,7 +1988,7 @@ } // Scan the tag. - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } @@ -2018,7 +2019,7 @@ return false } } - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } } @@ -2040,7 +2041,7 @@ w := 1024 for w > 0 { // Check for a URI-escaped octet. - if !cache(parser, 3) { + if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) { return false } @@ -2086,7 +2087,7 @@ skip(parser) // Scan the additional block scalar indicators. - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } @@ -2102,7 +2103,7 @@ skip(parser) // Check for an indentation indicator. - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } if is_digit(parser.buffer, parser.buffer_pos) { @@ -2129,7 +2130,7 @@ increment = as_digit(parser.buffer, parser.buffer_pos) skip(parser) - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' { @@ -2143,19 +2144,19 @@ } // Eat whitespaces and comments to the end of the line. - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } for is_blank(parser.buffer, parser.buffer_pos) { skip(parser) - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } } if parser.buffer[parser.buffer_pos] == '#' { for !is_breakz(parser.buffer, parser.buffer_pos) { skip(parser) - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } } @@ -2170,7 +2171,7 @@ // Eat a line break. if is_break(parser.buffer, parser.buffer_pos) { - if !cache(parser, 2) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { return false } skip_line(parser) @@ -2195,7 +2196,7 @@ } // Scan the block scalar content. - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } var leading_blank, trailing_blank bool @@ -2228,13 +2229,13 @@ if !read(parser, &s) { return false } - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } } // Consume the line break. - if !cache(parser, 2) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { return false } @@ -2279,12 +2280,12 @@ max_indent := 0 for { // Eat the intendation spaces. - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } for (*indent == 0 || parser.mark.column < *indent) && is_space(parser.buffer, parser.buffer_pos) { skip(parser) - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } } @@ -2304,7 +2305,7 @@ } // Consume the line break. - if !cache(parser, 2) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { return false } if !read_line(parser, breaks) { @@ -2336,7 +2337,7 @@ var s, leading_break, trailing_breaks, whitespaces []byte for { // Check that there are no document indicators at the beginning of the line. - if !cache(parser, 7) { + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { return false } @@ -2361,9 +2362,6 @@ } // Consume non-blank characters. - //if !cache(parser, 2) { - // return false - //} leading_blanks := false for !is_blankz(parser.buffer, parser.buffer_pos) { if single && parser.buffer[parser.buffer_pos] == '\'' && parser.buffer[parser.buffer_pos+1] == '\'' { @@ -2381,7 +2379,7 @@ } else if !single && parser.buffer[parser.buffer_pos] == '\\' && is_break(parser.buffer, parser.buffer_pos+1) { // It is an escaped line break. - if !cache(parser, 3) { + if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) { return false } skip(parser) @@ -2455,7 +2453,7 @@ var value int // Scan the character value. - if !cache(parser, code_length) { + if parser.unread < code_length && !yaml_parser_update_buffer(parser, code_length) { return false } for k := 0; k < code_length; k++ { @@ -2500,7 +2498,7 @@ return false } } - if !cache(parser, 2) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { return false } } @@ -2517,7 +2515,7 @@ } // Consume blank characters. - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } @@ -2532,7 +2530,7 @@ skip(parser) } } else { - if !cache(parser, 2) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { return false } @@ -2549,7 +2547,7 @@ } } } - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } } @@ -2606,7 +2604,7 @@ // Consume the content of the plain scalar. for { // Check for a document indicator. - if !cache(parser, 4) { + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { return false } if parser.mark.column == 0 && @@ -2676,7 +2674,7 @@ } end_mark = parser.mark - if !cache(parser, 2) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { return false } } @@ -2687,7 +2685,7 @@ } // Consume blank characters. - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } @@ -2710,7 +2708,7 @@ skip(parser) } } else { - if !cache(parser, 2) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { return false } @@ -2727,7 +2725,7 @@ } } } - if !cache(parser, 1) { + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } }