cue: use 0o notation for octal numbers
instead of Go style octals
Fixes cuelang/cue#4.
Also fixes bug where `0` is interpreted as octal, and
thus only has type int and not float as well
Change-Id: I038bfdd02cecd2c78c8151530d9b8ef2b16e9a8c
diff --git a/internal/third_party/yaml/decode.go b/internal/third_party/yaml/decode.go
index 5a970d2..bc42da9 100644
--- a/internal/third_party/yaml/decode.go
+++ b/internal/third_party/yaml/decode.go
@@ -456,7 +456,13 @@
return d.ident(n, str)
case yaml_INT_TAG:
- return d.makeNum(n, n.value, token.INT)
+ // Convert YAML octal to CUE octal. If YAML accepted an invalid
+ // integer, just convert it as well to ensure CUE will fail.
+ s := n.value
+ if len(s) > 1 && s[0] == '0' && s[1] <= '9' {
+ s = "0o" + s[1:]
+ }
+ return d.makeNum(n, s, token.INT)
case yaml_FLOAT_TAG:
value := n.value
diff --git a/internal/third_party/yaml/decode_test.go b/internal/third_party/yaml/decode_test.go
index be4d034..2e2122d 100644
--- a/internal/third_party/yaml/decode_test.go
+++ b/internal/third_party/yaml/decode_test.go
@@ -122,7 +122,7 @@
"decimal: +685_230",
}, {
"octal: 02472256",
- "octal: 02472256",
+ "octal: 0o2472256",
}, {
"hexa: 0x_0A_74_AE",
"hexa: 0x_0A_74_AE",