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
}
}