blob: dc4eaaad07a801aaef6a618f2ea2d3fd73de504c [file] [log] [blame]
-- in.cue --
import "list"
a1list: [{1}]
let A1 = a1list
a1: 100*A1[0] + A1[0]
a2list: [{2}]
let A2 = a2list
a2: b: 100*A2[0] + A2[0]
a3list: [{3}]
let A3 = a3list
a3: b: c: 100*A3[0] + A3[0]
a4list: [{4}]
let A4 = a4list
a4: [ for x in A4 { v: 404 } ]
a5list: [{5}]
let A5 = a5list
a5: b: [ for x in A5 { v: 505 } ]
a6list: [{6}]
let A6 = a6list
a6: b: c: [ for x in A6 { v: 606 } ]
a7list: [{7}]
let A7 = a7list
a7: { for x in A7 { v: 707 } }
a8list: [{8}]
let A8 = a8list
a8: b: { for x in A8 { v: 808 } }
a9list: [{9}]
let A9 = a9list
a9: b: c: { for x in A9 { v: 909 } }
// Issue #609:
// When a let value resolved to an incomplete value, it should pass this
// incomplete status to the expression in which it used. But 609 reported
// a gobbling of this incomplete status. The problem seemed to be not
// exclusive to the use of let, though.
incompleteLet: {
input: [1,2,3,4,5]
last: {
min: list.Min(input)
max: list.Max(input)
}
bar: {
let mn = last.min
let mx = list.max
min: mn
max: mx
}
x: {
if list.max < 0 {
}
}
}
-- out/compile --
--- in.cue
{
a1list: [
{
1
},
]
a1: ((100 * 0;let A1〉[0]) + 0;let A1〉[0])
a2list: [
{
2
},
]
a2: {
b: ((100 * 1;let A2〉[0]) + 1;let A2〉[0])
}
a3list: [
{
3
},
]
a3: {
b: {
c: ((100 * 2;let A3〉[0]) + 2;let A3〉[0])
}
}
a4list: [
{
4
},
]
a4: [
for _, x in 0;let A4 {
v: 404
},
]
a5list: [
{
5
},
]
a5: {
b: [
for _, x in 1;let A5 {
v: 505
},
]
}
a6list: [
{
6
},
]
a6: {
b: {
c: [
for _, x in 2;let A6 {
v: 606
},
]
}
}
a7list: [
{
7
},
]
a7: {
for _, x in 1;let A7 {
v: 707
}
}
a8list: [
{
8
},
]
a8: {
b: {
for _, x in 2;let A8 {
v: 808
}
}
}
a9list: [
{
9
},
]
a9: {
b: {
c: {
for _, x in 3;let A9 {
v: 909
}
}
}
}
incompleteLet: {
input: [
1,
2,
3,
4,
5,
]
last: {
min: import;list〉.Min(〈1;input〉)
max: import;list〉.Max(〈1;input〉)
}
bar: {
min: 0;let mn
max: 0;let mx
}
x: {
if (〈import;list〉.max < 0) {}
}
}
}
-- out/eval --
(struct){
a1list: (#list){
0: (int){ 1 }
}
a1: (int){ 101 }
a2list: (#list){
0: (int){ 2 }
}
a2: (struct){
b: (int){ 202 }
}
a3list: (#list){
0: (int){ 3 }
}
a3: (struct){
b: (struct){
c: (int){ 303 }
}
}
a4list: (#list){
0: (int){ 4 }
}
a4: (#list){
0: (struct){
v: (int){ 404 }
}
}
a5list: (#list){
0: (int){ 5 }
}
a5: (struct){
b: (#list){
0: (struct){
v: (int){ 505 }
}
}
}
a6list: (#list){
0: (int){ 6 }
}
a6: (struct){
b: (struct){
c: (#list){
0: (struct){
v: (int){ 606 }
}
}
}
}
a7list: (#list){
0: (int){ 7 }
}
a7: (struct){
v: (int){ 707 }
}
a8list: (#list){
0: (int){ 8 }
}
a8: (struct){
b: (struct){
v: (int){ 808 }
}
}
a9list: (#list){
0: (int){ 9 }
}
a9: (struct){
b: (struct){
c: (struct){
v: (int){ 909 }
}
}
}
incompleteLet: (struct){
input: (#list){
0: (int){ 1 }
1: (int){ 2 }
2: (int){ 3 }
3: (int){ 4 }
4: (int){ 5 }
}
last: (struct){
min: (int){ 1 }
max: (int){ 5 }
}
bar: (struct){
min: (int){ 1 }
max: (_|_){
// [incomplete] incompleteLet.bar.max: undefined field: max:
// ./in.cue:54:23
}
}
x: (_|_){
// [incomplete] incompleteLet.x: undefined field: max:
// ./in.cue:61:17
}
}
}