github.com/joomcode/cue@v0.4.4-0.20221111115225-539fe3512047/cue/testdata/references/let.txtar (about) 1 -- in.cue -- 2 import "list" 3 4 a1list: [{1}] 5 let A1 = a1list 6 a1: 100*A1[0] + A1[0] 7 8 a2list: [{2}] 9 let A2 = a2list 10 a2: b: 100*A2[0] + A2[0] 11 12 a3list: [{3}] 13 let A3 = a3list 14 a3: b: c: 100*A3[0] + A3[0] 15 16 a4list: [{4}] 17 let A4 = a4list 18 a4: [ for x in A4 {v: 404}] 19 20 a5list: [{5}] 21 let A5 = a5list 22 a5: b: [ for x in A5 {v: 505}] 23 24 a6list: [{6}] 25 let A6 = a6list 26 a6: b: c: [ for x in A6 {v: 606}] 27 28 a7list: [{7}] 29 let A7 = a7list 30 a7: {for x in A7 {v: 707}} 31 32 a8list: [{8}] 33 let A8 = a8list 34 a8: b: {for x in A8 {v: 808}} 35 36 a9list: [{9}] 37 let A9 = a9list 38 a9: b: c: {for x in A9 {v: 909}} 39 40 // Issue #609: 41 // When a let value resolved to an incomplete value, it should pass this 42 // incomplete status to the expression in which it used. But 609 reported 43 // a gobbling of this incomplete status. The problem seemed to be not 44 // exclusive to the use of let, though. 45 incompleteLet: { 46 input: [1, 2, 3, 4, 5] 47 48 last: { 49 min: list.Min(input) 50 max: list.Max(input) 51 } 52 53 bar: { 54 let mn = last.min 55 let mx = list.max 56 57 min: mn 58 max: mx 59 } 60 61 x: { 62 if list.max < 0 { 63 } 64 } 65 } 66 issue1116: { 67 a: { 68 #a: ["a", "b"] 69 let List = #a 70 List[len(List)-1] 71 } 72 b: { 73 let List = #a 74 List[len(List)-1] 75 #a: ["a", "b"] 76 } 77 } 78 -- out/compile -- 79 --- in.cue 80 { 81 a1list: [ 82 { 83 1 84 }, 85 ] 86 a1: ((100 * 〈0;let A1〉[0]) + 〈0;let A1〉[0]) 87 a2list: [ 88 { 89 2 90 }, 91 ] 92 a2: { 93 b: ((100 * 〈1;let A2〉[0]) + 〈1;let A2〉[0]) 94 } 95 a3list: [ 96 { 97 3 98 }, 99 ] 100 a3: { 101 b: { 102 c: ((100 * 〈2;let A3〉[0]) + 〈2;let A3〉[0]) 103 } 104 } 105 a4list: [ 106 { 107 4 108 }, 109 ] 110 a4: [ 111 for _, x in 〈1;let A4〉 { 112 v: 404 113 }, 114 ] 115 a5list: [ 116 { 117 5 118 }, 119 ] 120 a5: { 121 b: [ 122 for _, x in 〈2;let A5〉 { 123 v: 505 124 }, 125 ] 126 } 127 a6list: [ 128 { 129 6 130 }, 131 ] 132 a6: { 133 b: { 134 c: [ 135 for _, x in 〈3;let A6〉 { 136 v: 606 137 }, 138 ] 139 } 140 } 141 a7list: [ 142 { 143 7 144 }, 145 ] 146 a7: { 147 for _, x in 〈1;let A7〉 { 148 v: 707 149 } 150 } 151 a8list: [ 152 { 153 8 154 }, 155 ] 156 a8: { 157 b: { 158 for _, x in 〈2;let A8〉 { 159 v: 808 160 } 161 } 162 } 163 a9list: [ 164 { 165 9 166 }, 167 ] 168 a9: { 169 b: { 170 c: { 171 for _, x in 〈3;let A9〉 { 172 v: 909 173 } 174 } 175 } 176 } 177 incompleteLet: { 178 input: [ 179 1, 180 2, 181 3, 182 4, 183 5, 184 ] 185 last: { 186 min: 〈import;list〉.Min(〈1;input〉) 187 max: 〈import;list〉.Max(〈1;input〉) 188 } 189 bar: { 190 min: 〈0;let mn〉 191 max: 〈0;let mx〉 192 } 193 x: { 194 if (〈import;list〉.max < 0) {} 195 } 196 } 197 issue1116: { 198 a: { 199 #a: [ 200 "a", 201 "b", 202 ] 203 〈0;let List〉[(len(〈0;let List〉) - 1)] 204 } 205 b: { 206 〈0;let List〉[(len(〈0;let List〉) - 1)] 207 #a: [ 208 "a", 209 "b", 210 ] 211 } 212 } 213 } 214 -- out/eval -- 215 (struct){ 216 a1list: (#list){ 217 0: (int){ 1 } 218 } 219 a1: (int){ 101 } 220 a2list: (#list){ 221 0: (int){ 2 } 222 } 223 a2: (struct){ 224 b: (int){ 202 } 225 } 226 a3list: (#list){ 227 0: (int){ 3 } 228 } 229 a3: (struct){ 230 b: (struct){ 231 c: (int){ 303 } 232 } 233 } 234 a4list: (#list){ 235 0: (int){ 4 } 236 } 237 a4: (#list){ 238 0: (struct){ 239 v: (int){ 404 } 240 } 241 } 242 a5list: (#list){ 243 0: (int){ 5 } 244 } 245 a5: (struct){ 246 b: (#list){ 247 0: (struct){ 248 v: (int){ 505 } 249 } 250 } 251 } 252 a6list: (#list){ 253 0: (int){ 6 } 254 } 255 a6: (struct){ 256 b: (struct){ 257 c: (#list){ 258 0: (struct){ 259 v: (int){ 606 } 260 } 261 } 262 } 263 } 264 a7list: (#list){ 265 0: (int){ 7 } 266 } 267 a7: (struct){ 268 v: (int){ 707 } 269 } 270 a8list: (#list){ 271 0: (int){ 8 } 272 } 273 a8: (struct){ 274 b: (struct){ 275 v: (int){ 808 } 276 } 277 } 278 a9list: (#list){ 279 0: (int){ 9 } 280 } 281 a9: (struct){ 282 b: (struct){ 283 c: (struct){ 284 v: (int){ 909 } 285 } 286 } 287 } 288 incompleteLet: (struct){ 289 input: (#list){ 290 0: (int){ 1 } 291 1: (int){ 2 } 292 2: (int){ 3 } 293 3: (int){ 4 } 294 4: (int){ 5 } 295 } 296 last: (struct){ 297 min: (int){ 1 } 298 max: (int){ 5 } 299 } 300 bar: (struct){ 301 min: (int){ 1 } 302 max: (_|_){ 303 // [incomplete] incompleteLet.bar.max: undefined field: max: 304 // ./in.cue:54:17 305 } 306 } 307 x: (_|_){ 308 // [incomplete] incompleteLet.x: undefined field: max: 309 // ./in.cue:61:11 310 } 311 } 312 issue1116: (struct){ 313 a: (string){ 314 "b" 315 #a: (#list){ 316 0: (string){ "a" } 317 1: (string){ "b" } 318 } 319 } 320 b: (string){ 321 "b" 322 #a: (#list){ 323 0: (string){ "a" } 324 1: (string){ "b" } 325 } 326 } 327 } 328 }