internal/third_party/yaml: decode bool and null to BasicLit

Not all CUE conversion do resolutions of identifiers.

Change-Id: I779ed75c007e4c8918c077c8149d0e29e87a1f34
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/2544
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/internal/third_party/yaml/decode.go b/internal/third_party/yaml/decode.go
index 2b985b0..024794d 100644
--- a/internal/third_party/yaml/decode.go
+++ b/internal/third_party/yaml/decode.go
@@ -449,11 +449,18 @@
 		}
 
 	case yaml_BOOL_TAG:
+		tok := token.FALSE
 		str := "false"
 		if b, _ := resolved.(bool); b {
+			tok = token.TRUE
 			str = "true"
 		}
-		return d.ident(n, str)
+		return &ast.BasicLit{
+			// ValuePos: d.start(n),
+			ValuePos: d.p.parser.relPos().Pos(),
+			Kind:     tok,
+			Value:    str,
+		}
 
 	case yaml_INT_TAG:
 		// Convert YAML octal to CUE octal. If YAML accepted an invalid
@@ -483,7 +490,11 @@
 		return d.makeNum(n, value, token.FLOAT)
 
 	case yaml_NULL_TAG:
-		return d.ident(n, "null")
+		return &ast.BasicLit{
+			ValuePos: d.p.parser.relPos().Pos(),
+			Kind:     token.NULL,
+			Value:    "null",
+		}
 	}
 	err := &ast.BottomLit{
 		// Bottom: d.pos(n.startPos)