blob: e11c71ad5ce97573fc2564ef7f4fff5875fd266d [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 {
}
}
}
cycles: {
a: {
let A = { c: B }
let B = A
out: A
}
b: {
let A = { c: B }
let B = { A.c }
out: A
}
issue1042: {
#FullAdder: {
// IN
a: bool
b: bool
c: bool
// OUT
sum: bool
carry: bool
}
#Add16: {
a: [bool] * 16
b: [bool] * 16
out: [bool] * 16
let fulladders = [
for i in list.Range(0, 4, 1) {
#FullAdder & {"a": a[i], "b": b[i], c: carries[i]}
}
]
let carries = [
false,
for i in list.Range(0, 4, 1) { fulladders[i].carry }
]
out: [
for i in list.Range(0, 4, 1) { fulladders[i].sum }
]
}
}
}
-- out/compile --
cycles.a.let[].c.c: cyclic references in let clause or alias:
./in.cue:68:18
cycles.b.let[].c.c: cyclic references in let clause or alias:
./in.cue:74:18
cycles.issue1042.#Add16.let[].for[].c.for[].for[].c: cyclic references in let clause or alias:
./in.cue:97:50
--- 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) {}
}
}
cycles: {
a: {
out: 0;let A
}
b: {
out: 0;let A
}
issue1042: {
#FullAdder: {
a: bool
b: bool
c: bool
sum: bool
carry: bool
}
#Add16: {
a: ([
bool,
] * 16)
b: ([
bool,
] * 16)
out: ([
bool,
] * 16)
out: [
for _, i in import;list〉.Range(0, 4, 1) {
2;let fulladders〉[〈1;i〉].sum
},
]
}
}
}
}
-- out/eval --
cycles.a.let[].c.c: cyclic references in let clause or alias:
./in.cue:68:18
cycles.b.let[].c.c: cyclic references in let clause or alias:
./in.cue:74:18
cycles.issue1042.#Add16.let[].for[].c.for[].for[].c: cyclic references in let clause or alias:
./in.cue:97:50