cue: make integer literals integer only

Most of the spec was already updated.
This avoids a lot of unintuitive behavior where
stemming from the fact int did not subsume 1.

Dealing with floats is now more cumbersome,
but users can use the more convenient number.
It may be worth it renaming int to integer or to
rename number to num to be consistent. But
maybe the naming is okay as is.

Change-Id: Iaf58f131a2507e9b7c1856bdf65cef5aa10998ad
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/1982
Reviewed-by: Jonathan Amsterdam <jba@google.com>
diff --git a/cue/ast.go b/cue/ast.go
index 3ff7483..d2bed29 100644
--- a/cue/ast.go
+++ b/cue/ast.go
@@ -433,7 +433,7 @@
 		list := &list{baseValue: newExpr(n), elem: s}
 		list.initLit()
 		if n.Ellipsis != token.NoPos || n.Type != nil {
-			list.len = &bound{list.baseValue, opGeq, list.len}
+			list.len = newBound(list.baseValue, opGeq, intKind, list.len)
 			if n.Type != nil {
 				list.typ = v.walk(n.Type)
 			}
@@ -482,11 +482,12 @@
 			}
 		case token.GEQ, token.GTR, token.LSS, token.LEQ,
 			token.NEQ, token.MAT, token.NMAT:
-			value = &bound{
+			value = newBound(
 				newExpr(n),
 				tokenMap[n.Op],
+				topKind|nonGround,
 				v.walk(n.X),
-			}
+			)
 
 		case token.MUL:
 			return v.error(n, "preference mark not allowed at this position")