blob: 215f1a56362bf4372ca8a7d77d86dcbcc2c8bb58 [file] [log] [blame]
-- in.cue --
import (
"list"
"strings"
)
list1: {
// Note that Top is not incomplete, only its first element is.
// We allow FlattenN to proceed and pass on the incomplete values.
Out1: list.FlattenN(Top , 1)
Out2: [...] & list.FlattenN(Top , 1)
Out3: list.FlattenN(Top , 1) & [...]
// This evaluates to a list with an incomplete element.
Top: [
[ for _, F in _Sub { F } ],
]
_Sub: a.b
a: {} // b does not
}
list2: {
Out1: list.FlattenN(_Top , 1)
Out2: [...] & list.FlattenN(_Top , 1)
Out3: list.FlattenN(_Top , 1) & [...]
// This evaluates to a list with an incomplete element.
_Top: [
for _, F in #Sub { F }
]
#Sub: a.b
a: {} // b does not
}
value1: {
a: len('sf' | 'dd')
}
value2: {
len('sf' | 'dd')
}
incompleteArgDecimalList: {
a: #a & {param: 123}
#a: {
param: int
transformed: +param
max: list.Max([transformed])
}
}
incompleteArgStringList: {
a: #a & {param: "123"}
#a: {
param: string
transformed: param+""
joined: strings.Join([transformed], "-")
}
}
incompleteList: {
x: _
decimal: list.Max(x)
str: strings.Join(x, "")
}
incompleteListError: {
x: y + []
y: _
decimal: list.Max(x)
str: strings.Join(x, "")
}
badListType: {
x: 2
decimal: list.Max(x)
str: strings.Join(x, "")
}
badListError: {
x: 2 + y
y: "foo"
decimal: list.Max(x)
str: strings.Join(x, "")
}
-- out/eval --
Errors:
badListType.decimal: cannot use 2 (type int) as list in argument 1 to list.Max:
./in.cue:77:8
badListType.str: cannot use 2 (type int) as list in argument 1 to strings.Join:
./in.cue:77:8
badListError.x: invalid operands 2 and "foo" to '+' (type int and string):
./in.cue:83:8
./in.cue:84:8
Result:
(_|_){
// [eval]
list1: (struct){
Out1: (#list){
0: (_|_){
// [cycle] cycle error:
// ./in.cue:16:23
}
}
Out2: (#list){
0: (_|_){
// [cycle] cycle error:
// ./in.cue:16:23
}
}
Out3: (#list){
0: (_|_){
// [cycle] cycle error:
// ./in.cue:16:23
}
}
Top: (#list){
0: (_|_){
// [cycle] cycle error:
// ./in.cue:16:23
}
}
_Sub: (_|_){
// [incomplete] list1._Sub: undefined field: b:
// ./in.cue:19:13
}
a: (struct){
}
}
list2: (struct){
Out1: (_|_){
// [cycle] cycle error:
// ./in.cue:30:21
}
Out2: (_|_){
// [cycle] cycle error:
// ./in.cue:30:21
}
Out3: (_|_){
// [cycle] cycle error:
// ./in.cue:30:21
}
_Top: (_|_){
// [cycle] cycle error:
// ./in.cue:30:21
}
#Sub: (_|_){
// [incomplete] list2.#Sub: undefined field: b:
// ./in.cue:33:13
}
a: (struct){
}
}
value1: (struct){
a: (_|_){
// [incomplete] value1.a: unresolved disjunction 'sf' | 'dd' (type bytes):
// ./in.cue:38:8
}
}
value2: (_|_){
// [incomplete] value2: unresolved disjunction 'sf' | 'dd' (type bytes):
// ./in.cue:42:5
}
incompleteArgDecimalList: (struct){
a: (#struct){
param: (int){ 123 }
transformed: (int){ 123 }
max: (int){ 123 }
}
#a: (#struct){
param: (int){ int }
transformed: (_|_){
// [incomplete] incompleteArgDecimalList.#a.transformed: operand param of '+' not concrete (was int):
// ./in.cue:49:23
}
max: (_|_){
// [incomplete] 0: operand param of '+' not concrete (was int):
// ./in.cue:49:23
}
}
}
incompleteArgStringList: (struct){
a: (#struct){
param: (string){ "123" }
transformed: (string){ "123" }
joined: (string){ "123" }
}
#a: (#struct){
param: (string){ string }
transformed: (_|_){
// [incomplete] incompleteArgStringList.#a.transformed: non-concrete value string in operand to +:
// ./in.cue:58:22
// ./in.cue:57:9
}
joined: (_|_){
// [incomplete] 0: non-concrete value string in operand to +:
// ./in.cue:58:22
// ./in.cue:57:9
}
}
}
incompleteList: (struct){
x: (_){ _ }
decimal: (_|_){
// [incomplete] incompleteList.decimal: non-concrete list for argument 0:
// ./in.cue:65:14
}
str: (_|_){
// [incomplete] incompleteList.str: non-concrete list for argument 0:
// ./in.cue:66:14
}
}
incompleteListError: (struct){
x: (_|_){
// [incomplete] incompleteListError.x: non-concrete value _ in operand to +:
// ./in.cue:70:8
// ./in.cue:71:5
}
y: (_){ _ }
decimal: (_|_){
// [incomplete] incompleteListError.x: non-concrete value _ in operand to +:
// ./in.cue:70:8
// ./in.cue:71:5
}
str: (_|_){
// [incomplete] incompleteListError.x: non-concrete value _ in operand to +:
// ./in.cue:70:8
// ./in.cue:71:5
}
}
badListType: (_|_){
// [eval]
x: (int){ 2 }
decimal: (_|_){
// [eval] badListType.decimal: cannot use 2 (type int) as list in argument 1 to list.Max:
// ./in.cue:77:8
}
str: (_|_){
// [eval] badListType.str: cannot use 2 (type int) as list in argument 1 to strings.Join:
// ./in.cue:77:8
}
}
badListError: (_|_){
// [eval]
x: (_|_){
// [eval] badListError.x: invalid operands 2 and "foo" to '+' (type int and string):
// ./in.cue:83:8
// ./in.cue:84:8
}
y: (string){ "foo" }
decimal: (_|_){
// [eval] badListError.x: invalid operands 2 and "foo" to '+' (type int and string):
// ./in.cue:83:8
// ./in.cue:84:8
}
str: (_|_){
// [eval] badListError.x: invalid operands 2 and "foo" to '+' (type int and string):
// ./in.cue:83:8
// ./in.cue:84:8
}
}
}
-- out/compile --
--- in.cue
{
list1: {
Out1: import;list〉.FlattenN(〈0;Top〉, 1)
Out2: ([
...,
] & import;list〉.FlattenN(〈0;Top〉, 1))
Out3: (〈import;list〉.FlattenN(〈0;Top〉, 1) & [
...,
])
Top: [
[
for _, F in 0;_Sub {
1;F
},
],
]
_Sub: 0;a〉.b
a: {}
}
list2: {
Out1: import;list〉.FlattenN(〈0;_Top〉, 1)
Out2: ([
...,
] & import;list〉.FlattenN(〈0;_Top〉, 1))
Out3: (〈import;list〉.FlattenN(〈0;_Top〉, 1) & [
...,
])
_Top: [
for _, F in 0;#Sub {
1;F
},
]
#Sub: 〈0;a〉.b
a: {}
}
value1: {
a: len(('sf'|'dd'))
}
value2: {
len(('sf'|'dd'))
}
incompleteArgDecimalList: {
a: (〈0;#a & {
param: 123
})
#a: {
param: int
transformed: +〈0;param
max: import;list〉.Max([
0;transformed〉,
])
}
}
incompleteArgStringList: {
a: (〈0;#a & {
param: "123"
})
#a: {
param: string
transformed: (〈0;param + "")
joined: import;strings〉.Join([
0;transformed〉,
], "-")
}
}
incompleteList: {
x: _
decimal: import;list〉.Max(〈0;x〉)
str: import;strings〉.Join(〈0;x〉, "")
}
incompleteListError: {
x: (〈0;y + [])
y: _
decimal: import;list〉.Max(〈0;x〉)
str: import;strings〉.Join(〈0;x〉, "")
}
badListType: {
x: 2
decimal: import;list〉.Max(〈0;x〉)
str: import;strings〉.Join(〈0;x〉, "")
}
badListError: {
x: (2 + 0;y〉)
y: "foo"
decimal: import;list〉.Max(〈0;x〉)
str: import;strings〉.Join(〈0;x〉, "")
}
}