internal/third_party/yaml: parse into CUE ast
Also:
- remove support for parsing into Go-structs
- remove support for encoding
- add comment parsing
- port non-standard test harness to standard go
- add testdata
- fix some bugs related to merging
Change-Id: I7fbd2bed6f76bb5da8a309f8d3fb3fb6228048ab
diff --git a/internal/third_party/yaml/scannerc.go b/internal/third_party/yaml/scannerc.go
index 077fd1d..2229abc 100644
--- a/internal/third_party/yaml/scannerc.go
+++ b/internal/third_party/yaml/scannerc.go
@@ -1427,6 +1427,9 @@
// Eat whitespaces and comments until the next token is found.
func yaml_parser_scan_to_next_token(parser *yaml_parser_t) bool {
+ parser.linesSinceLast = 0
+ parser.spacesSinceLast = 0
+
// Until the next token is not found.
for {
// Allow the BOM mark to start a line.
@@ -1448,6 +1451,7 @@
for parser.buffer[parser.buffer_pos] == ' ' || ((parser.flow_level > 0 || !parser.simple_key_allowed) && parser.buffer[parser.buffer_pos] == '\t') {
skip(parser)
+ parser.spacesSinceLast++
if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
return false
}
@@ -1455,12 +1459,19 @@
// Eat a comment until a line break.
if parser.buffer[parser.buffer_pos] == '#' {
+ rel := parser.relPos()
+ m := parser.mark
+ parser.comment_buffer = parser.comment_buffer[:0]
for !is_breakz(parser.buffer, parser.buffer_pos) {
+ p := parser.buffer_pos
skip(parser)
+ parser.comment_buffer = append(parser.comment_buffer,
+ parser.buffer[p:parser.buffer_pos]...)
if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
return false
}
}
+ add_comment(parser, rel, m, string(parser.comment_buffer))
}
// If it is a line break, eat it.
@@ -1469,6 +1480,7 @@
return false
}
skip_line(parser)
+ parser.linesSinceLast++
// In the block context, a new line may start a simple key.
if parser.flow_level == 0 {
@@ -1557,12 +1569,19 @@
}
if parser.buffer[parser.buffer_pos] == '#' {
+ rel := parser.relPos()
+ m := parser.mark
+ parser.comment_buffer = parser.comment_buffer[:0]
for !is_breakz(parser.buffer, parser.buffer_pos) {
+ p := parser.buffer_pos
skip(parser)
+ parser.comment_buffer = append(parser.comment_buffer,
+ parser.buffer[p:parser.buffer_pos]...)
if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
return false
}
}
+ add_comment(parser, rel, m, string(parser.comment_buffer))
}
// Check if we are at the end of the line.
@@ -2127,12 +2146,19 @@
}
}
if parser.buffer[parser.buffer_pos] == '#' {
+ rel := parser.relPos()
+ m := parser.mark
+ parser.comment_buffer = parser.comment_buffer[:0]
for !is_breakz(parser.buffer, parser.buffer_pos) {
+ p := parser.buffer_pos
skip(parser)
+ parser.comment_buffer = append(parser.comment_buffer,
+ parser.buffer[p:parser.buffer_pos]...)
if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
return false
}
}
+ add_comment(parser, rel, m, string(parser.comment_buffer))
}
// Check if we are at the end of the line.