github.com/joomcode/cue@v0.4.4-0.20221111115225-539fe3512047/cue/testdata/cycle/comprehension.txtar (about) 1 -- in.cue -- 2 // Allow lookup in partially evaluated struct as long as the end result is 3 // concrete. 4 A: { 5 a: { 6 parent: "" 7 children: [ for k, v in A if v.parent == k {k}] 8 } 9 b: { 10 parent: "a" 11 children: [ for k, v in A if v.parent == k {k}] 12 } 13 } 14 15 // This should result in an incomplete error (a reference cycle error classifies 16 // as incomplete). 17 B: { 18 a: { 19 parent: "" 20 children: [ for k, v in B for _, w in v.children {k}] 21 } 22 } 23 24 // Issue #486 25 Issue486: { 26 A: { 27 a: { 28 parent: "" 29 children: [...string] 30 } 31 b: { 32 parent: "a" 33 children: [...string] 34 } 35 c: { 36 parent: "b" 37 children: [...string] 38 } 39 } 40 41 A: [Name=string]: { 42 children: [ 43 for k, v in A 44 if v.parent == Name { 45 k 46 }, 47 ] 48 } 49 } 50 -- out/eval -- 51 (struct){ 52 A: (struct){ 53 a: (struct){ 54 parent: (string){ "" } 55 children: (#list){ 56 } 57 } 58 b: (struct){ 59 parent: (string){ "a" } 60 children: (#list){ 61 } 62 } 63 } 64 B: (struct){ 65 a: (struct){ 66 parent: (string){ "" } 67 children: (_|_){ 68 // [cycle] cycle error: 69 // ./in.cue:19:41 70 } 71 } 72 } 73 Issue486: (struct){ 74 A: (struct){ 75 a: (struct){ 76 parent: (string){ "" } 77 children: (#list){ 78 0: (string){ "b" } 79 } 80 } 81 b: (struct){ 82 parent: (string){ "a" } 83 children: (#list){ 84 0: (string){ "c" } 85 } 86 } 87 c: (struct){ 88 parent: (string){ "b" } 89 children: (#list){ 90 } 91 } 92 } 93 } 94 } 95 -- out/compile -- 96 --- in.cue 97 { 98 A: { 99 a: { 100 parent: "" 101 children: [ 102 for k, v in 〈3;A〉 if (〈0;v〉.parent == 〈0;k〉) { 103 〈1;k〉 104 }, 105 ] 106 } 107 b: { 108 parent: "a" 109 children: [ 110 for k, v in 〈3;A〉 if (〈0;v〉.parent == 〈0;k〉) { 111 〈1;k〉 112 }, 113 ] 114 } 115 } 116 B: { 117 a: { 118 parent: "" 119 children: [ 120 for k, v in 〈3;B〉 for _, w in 〈0;v〉.children { 121 〈2;k〉 122 }, 123 ] 124 } 125 } 126 Issue486: { 127 A: { 128 a: { 129 parent: "" 130 children: [ 131 ...string, 132 ] 133 } 134 b: { 135 parent: "a" 136 children: [ 137 ...string, 138 ] 139 } 140 c: { 141 parent: "b" 142 children: [ 143 ...string, 144 ] 145 } 146 } 147 A: { 148 [string]: { 149 children: [ 150 for k, v in 〈3;A〉 if (〈0;v〉.parent == 〈3;-〉) { 151 〈1;k〉 152 }, 153 ] 154 } 155 } 156 } 157 }