cuelang.org/go@v0.13.0/cue/testdata/eval/let.txtar (about)

     1  -- in.cue --
     2   let A = 3 * 3
     3  let B = A + A
     4  let C = B + B
     5  let D = C + C
     6  let E = D + D
     7  let F = E + E
     8  b: {
     9  	let G = F + F
    10  	let H = G + G
    11  	let I = H + H
    12  	let J = I + I
    13  	let K = J + J
    14  	let L = K + K
    15  	let M = L + L
    16  	let N = M + M
    17  	let O = N + N
    18  	let P = O + O
    19  	let Q = P + P
    20  	let R = Q + Q
    21  	let S = R + R
    22  	let T = S + S
    23  
    24  	a: T
    25  	b: F
    26  }
    27  issue1828: {
    28  	volumes: L3
    29  
    30  	let L3 = {
    31  		for v2 in [for v1 in L2 {}] {}
    32  	}
    33  
    34  	let L2 = L1
    35  	let L1 = []
    36  }
    37  ignoreErrorInLet: {
    38  	let X = 1 & 2
    39  	disjunction: *X | 3
    40  }
    41  -- incomprehension.cue --
    42  // for comprehensions in list do not have to split the let as each instance
    43  // is already associated with a separate environment.
    44  list: {
    45  	l: [ 1, 2, 3 ]
    46  	c: [
    47  		for v in l {
    48  			let X = v*4 // can share
    49  			X
    50  		}
    51  	]
    52  }
    53  
    54  referencesForDirectly: {
    55  	l: [ 1, 2, 3 ]
    56  	for k, v in l {
    57  		let Y = v*4 // multi
    58  		"\(k)": Y
    59  	}
    60  }
    61  
    62  referencesForViaLet: {
    63  	l: [ 1, 2, 3 ]
    64  	for k, v in l let X = v*4 {
    65  		let Y = X // multi
    66  		"\(k)": Y
    67  	}
    68  }
    69  
    70  letClauseReferencesInert: {
    71  	x: 2
    72  	l: [ 1, 2, 3 ]
    73  	for k, v in l let X = x {
    74  		let Y = X // can share
    75  		"\(k)": Y
    76  	}
    77  }
    78  
    79  // for indirect references, it is okay to not "split" a let clause, as the
    80  // it will only fail as a result of not splitting if the referred values
    81  // would fail as well.
    82  indirectReference: {
    83  	l: [ 1, 2, 3 ]
    84  	for k, v in l {
    85  		y: v // fails if v differs for each y.
    86  		let X = y*4 // can share, as y fails if let fails.
    87  		"\(k)": X
    88  	}
    89  }
    90  
    91  nestedFor: {
    92  	for k, y in [ 4, 5 ] {
    93  		let X = {
    94  			for x in [ 1, 2 ] {
    95  				let X = x
    96  				"\(X)": X
    97  			}
    98  		}
    99  		"\(k)": X
   100  	}
   101  }
   102  
   103  -- issue2166.cue --
   104  letWithDynamicInComprehension: {
   105  	_i: {
   106  		a: "d"
   107  		b: "e"
   108  	}
   109  
   110  	for k, v in _i {
   111  		let T = v
   112  		(T): "1"
   113  	}
   114  }
   115  -- issue2218.cue --
   116  _parent_configs: {
   117  	PARENT: true
   118  }
   119  _configs: {
   120  	CHILD1: {
   121  		property: true
   122  	}
   123  	CHILD2: {
   124  		property: true
   125  		parent:      "PARENT"
   126  	}
   127  }
   128  disabled_parent_test: {for k, v in _configs {
   129  	let parent_config = (*_parent_configs[v.parent] | false)
   130  	"\(k)": {
   131  		"parent_config": parent_config
   132  	}
   133  }}
   134  -- issue2063.cue --
   135  import (
   136  	"encoding/yaml"
   137  	"strings"
   138  )
   139  
   140  // Issue #2063
   141  keepDescending: t1: {
   142  	ec: {}
   143  	bs: {
   144  		let m = ec.b
   145  		if m == _|_ { }
   146  		x: y: ""
   147  	}
   148  }
   149  
   150  keepDescending: t2: {
   151  	x: yaml.Marshal(bs)
   152  
   153  	ec: {}
   154  	bs: {
   155  		let m = ec.b
   156  		if m.b == _|_ { }
   157  		X: Y: strings.Join([], "")
   158  	}
   159  }
   160  -- out/evalalpha --
   161  Errors:
   162  indirectReference.y: conflicting values 2 and 1:
   163      ./incomprehension.cue:42:7
   164      ./incomprehension.cue:42:10
   165  indirectReference.y: conflicting values 3 and 1:
   166      ./incomprehension.cue:42:7
   167      ./incomprehension.cue:42:13
   168  
   169  Result:
   170  (_|_){
   171    // [eval]
   172    let A#1 = (int){ 9 }
   173    let B#2 = (int){ 18 }
   174    let C#3 = (int){ 36 }
   175    let D#4 = (int){ 72 }
   176    let E#5 = (int){ 144 }
   177    let F#6 = (int){ 288 }
   178    b: (struct){
   179      let G#7 = (int){ 576 }
   180      let H#8 = (int){ 1152 }
   181      let I#9 = (int){ 2304 }
   182      let J#A = (int){ 4608 }
   183      let K#B = (int){ 9216 }
   184      let L#C = (int){ 18432 }
   185      let M#D = (int){ 36864 }
   186      let N#E = (int){ 73728 }
   187      let O#F = (int){ 147456 }
   188      let P#10 = (int){ 294912 }
   189      let Q#11 = (int){ 589824 }
   190      let R#12 = (int){ 1179648 }
   191      let S#13 = (int){ 2359296 }
   192      let T#14 = (int){ 4718592 }
   193      a: (int){ 4718592 }
   194      b: (int){ 288 }
   195    }
   196    issue1828: (struct){
   197      volumes: (struct){
   198      }
   199      let L3#15 = (struct){
   200      }
   201      let L2#16 = (#list){
   202      }
   203      let L1#17 = (#list){
   204      }
   205    }
   206    ignoreErrorInLet: (struct){
   207      let X#18 = (_|_){
   208        // [eval] ignoreErrorInLet.X: conflicting values 2 and 1:
   209        //     ./in.cue:37:10
   210        //     ./in.cue:37:14
   211      }
   212      disjunction: (int){ 3 }
   213    }
   214    list: (struct){
   215      l: (#list){
   216        0: (int){ 1 }
   217        1: (int){ 2 }
   218        2: (int){ 3 }
   219      }
   220      c: (#list){
   221        0: (int){
   222          4
   223          let X#19 = (int){ 4 }
   224        }
   225        1: (int){
   226          8
   227          let X#19 = (int){ 8 }
   228        }
   229        2: (int){
   230          12
   231          let X#19 = (int){ 12 }
   232        }
   233      }
   234    }
   235    referencesForDirectly: (struct){
   236      l: (#list){
   237        0: (int){ 1 }
   238        1: (int){ 2 }
   239        2: (int){ 3 }
   240      }
   241      let Y#1Amulti = (〈1;v〉 * 4)
   242      "0": (int){ 4 }
   243      "1": (int){ 8 }
   244      "2": (int){ 12 }
   245    }
   246    referencesForViaLet: (struct){
   247      l: (#list){
   248        0: (int){ 1 }
   249        1: (int){ 2 }
   250        2: (int){ 3 }
   251      }
   252      let Y#1Bmulti = 〈1;X〉
   253      "0": (int){ 4 }
   254      "1": (int){ 8 }
   255      "2": (int){ 12 }
   256    }
   257    letClauseReferencesInert: (struct){
   258      x: (int){ 2 }
   259      l: (#list){
   260        0: (int){ 1 }
   261        1: (int){ 2 }
   262        2: (int){ 3 }
   263      }
   264      let Y#1Cmulti = 〈1;X〉
   265      "0": (int){ 2 }
   266      "1": (int){ 2 }
   267      "2": (int){ 2 }
   268    }
   269    indirectReference: (_|_){
   270      // [eval]
   271      l: (#list){
   272        0: (int){ 1 }
   273        1: (int){ 2 }
   274        2: (int){ 3 }
   275      }
   276      y: (_|_){
   277        // [eval] indirectReference.y: conflicting values 2 and 1:
   278        //     ./incomprehension.cue:42:7
   279        //     ./incomprehension.cue:42:10
   280        // indirectReference.y: conflicting values 3 and 1:
   281        //     ./incomprehension.cue:42:7
   282        //     ./incomprehension.cue:42:13
   283      }
   284      let X#1Dmulti = (〈0;y〉 * 4)
   285      "0": (_|_){
   286        // [eval] indirectReference.y: conflicting values 2 and 1:
   287        //     ./incomprehension.cue:42:7
   288        //     ./incomprehension.cue:42:10
   289        // indirectReference.y: conflicting values 3 and 1:
   290        //     ./incomprehension.cue:42:7
   291        //     ./incomprehension.cue:42:13
   292      }
   293      "1": (_|_){
   294        // [eval] indirectReference.y: conflicting values 2 and 1:
   295        //     ./incomprehension.cue:42:7
   296        //     ./incomprehension.cue:42:10
   297        // indirectReference.y: conflicting values 3 and 1:
   298        //     ./incomprehension.cue:42:7
   299        //     ./incomprehension.cue:42:13
   300      }
   301      "2": (_|_){
   302        // [eval] indirectReference.y: conflicting values 2 and 1:
   303        //     ./incomprehension.cue:42:7
   304        //     ./incomprehension.cue:42:10
   305        // indirectReference.y: conflicting values 3 and 1:
   306        //     ./incomprehension.cue:42:7
   307        //     ./incomprehension.cue:42:13
   308      }
   309    }
   310    nestedFor: (struct){
   311      let X#1Emulti = {
   312        for _, x in [
   313          1,
   314          2,
   315        ] {
   316          let X#1Fmulti = 〈1;x〉
   317          "\(〈0;let X#1F〉)": 〈0;let X#1F〉
   318        }
   319      }
   320      "0": (struct){
   321        let X#1Fmulti = 〈1;x〉
   322        "1": (int){ 1 }
   323        "2": (int){ 2 }
   324      }
   325      "1": (struct){
   326        let X#1Fmulti = 〈1;x〉
   327        "1": (int){ 1 }
   328        "2": (int){ 2 }
   329      }
   330    }
   331    keepDescending: (struct){
   332      t1: (struct){
   333        ec: (struct){
   334        }
   335        bs: (struct){
   336          let m#21 = (_|_){
   337            // [incomplete] keepDescending.t1.bs.m: undefined field: b:
   338            //     ./issue2063.cue:10:14
   339          }
   340          x: (struct){
   341            y: (string){ "" }
   342          }
   343        }
   344      }
   345      t2: (struct){
   346        x: (string){ "X:\n  \"Y\": \"\"\n" }
   347        ec: (struct){
   348        }
   349        bs: (struct){
   350          let m#22 = (_|_){
   351            // [incomplete] keepDescending.t2.bs.m: undefined field: b:
   352            //     ./issue2063.cue:21:14
   353          }
   354          X: (struct){
   355            Y: (string){ "" }
   356          }
   357        }
   358      }
   359    }
   360    letWithDynamicInComprehension: (struct){
   361      _i: (struct){
   362        a: (string){ "d" }
   363        b: (string){ "e" }
   364      }
   365      let T#23multi = 〈1;v〉
   366      e: (string){ "1" }
   367      d: (string){ "1" }
   368    }
   369    _parent_configs: (struct){
   370      PARENT: (bool){ true }
   371    }
   372    _configs: (struct){
   373      CHILD1: (struct){
   374        property: (bool){ true }
   375      }
   376      CHILD2: (struct){
   377        property: (bool){ true }
   378        parent: (string){ "PARENT" }
   379      }
   380    }
   381    disabled_parent_test: (struct){
   382      let parent_config#24multi = (*〈3;_parent_configs〉[〈1;v〉.parent]|false)
   383      CHILD1: (struct){
   384        parent_config: (bool){ false }
   385      }
   386      CHILD2: (struct){
   387        parent_config: (bool){ |(*(bool){ true }, (bool){ false }) }
   388      }
   389    }
   390  }
   391  -- diff/-out/evalalpha<==>+out/eval --
   392  diff old new
   393  --- old
   394  +++ new
   395  @@ -2,13 +2,9 @@
   396   indirectReference.y: conflicting values 2 and 1:
   397       ./incomprehension.cue:42:7
   398       ./incomprehension.cue:42:10
   399  -    ./incomprehension.cue:43:2
   400  -    ./incomprehension.cue:44:6
   401   indirectReference.y: conflicting values 3 and 1:
   402       ./incomprehension.cue:42:7
   403       ./incomprehension.cue:42:13
   404  -    ./incomprehension.cue:43:2
   405  -    ./incomprehension.cue:44:6
   406   
   407   Result:
   408   (_|_){
   409  @@ -105,7 +101,7 @@
   410         1: (int){ 2 }
   411         2: (int){ 3 }
   412       }
   413  -    let Y#1C = (int){ 2 }
   414  +    let Y#1Cmulti = 〈1;X〉
   415       "0": (int){ 2 }
   416       "1": (int){ 2 }
   417       "2": (int){ 2 }
   418  @@ -121,61 +117,34 @@
   419         // [eval] indirectReference.y: conflicting values 2 and 1:
   420         //     ./incomprehension.cue:42:7
   421         //     ./incomprehension.cue:42:10
   422  -      //     ./incomprehension.cue:43:2
   423  -      //     ./incomprehension.cue:44:6
   424  -      // indirectReference.y: conflicting values 3 and 1:
   425  -      //     ./incomprehension.cue:42:7
   426  -      //     ./incomprehension.cue:42:13
   427  -      //     ./incomprehension.cue:43:2
   428  -      //     ./incomprehension.cue:44:6
   429  -    }
   430  -    let X#1D = (_|_){
   431  -      // [eval] indirectReference.y: conflicting values 2 and 1:
   432  -      //     ./incomprehension.cue:42:7
   433  -      //     ./incomprehension.cue:42:10
   434  -      //     ./incomprehension.cue:43:2
   435  -      //     ./incomprehension.cue:44:6
   436  -      // indirectReference.y: conflicting values 3 and 1:
   437  -      //     ./incomprehension.cue:42:7
   438  -      //     ./incomprehension.cue:42:13
   439  -      //     ./incomprehension.cue:43:2
   440  -      //     ./incomprehension.cue:44:6
   441  -    }
   442  +      // indirectReference.y: conflicting values 3 and 1:
   443  +      //     ./incomprehension.cue:42:7
   444  +      //     ./incomprehension.cue:42:13
   445  +    }
   446  +    let X#1Dmulti = (〈0;y〉 * 4)
   447       "0": (_|_){
   448         // [eval] indirectReference.y: conflicting values 2 and 1:
   449         //     ./incomprehension.cue:42:7
   450         //     ./incomprehension.cue:42:10
   451  -      //     ./incomprehension.cue:43:2
   452  -      //     ./incomprehension.cue:44:6
   453  -      // indirectReference.y: conflicting values 3 and 1:
   454  -      //     ./incomprehension.cue:42:7
   455  -      //     ./incomprehension.cue:42:13
   456  -      //     ./incomprehension.cue:43:2
   457  -      //     ./incomprehension.cue:44:6
   458  +      // indirectReference.y: conflicting values 3 and 1:
   459  +      //     ./incomprehension.cue:42:7
   460  +      //     ./incomprehension.cue:42:13
   461       }
   462       "1": (_|_){
   463         // [eval] indirectReference.y: conflicting values 2 and 1:
   464         //     ./incomprehension.cue:42:7
   465         //     ./incomprehension.cue:42:10
   466  -      //     ./incomprehension.cue:43:2
   467  -      //     ./incomprehension.cue:44:6
   468  -      // indirectReference.y: conflicting values 3 and 1:
   469  -      //     ./incomprehension.cue:42:7
   470  -      //     ./incomprehension.cue:42:13
   471  -      //     ./incomprehension.cue:43:2
   472  -      //     ./incomprehension.cue:44:6
   473  +      // indirectReference.y: conflicting values 3 and 1:
   474  +      //     ./incomprehension.cue:42:7
   475  +      //     ./incomprehension.cue:42:13
   476       }
   477       "2": (_|_){
   478         // [eval] indirectReference.y: conflicting values 2 and 1:
   479         //     ./incomprehension.cue:42:7
   480         //     ./incomprehension.cue:42:10
   481  -      //     ./incomprehension.cue:43:2
   482  -      //     ./incomprehension.cue:44:6
   483  -      // indirectReference.y: conflicting values 3 and 1:
   484  -      //     ./incomprehension.cue:42:7
   485  -      //     ./incomprehension.cue:42:13
   486  -      //     ./incomprehension.cue:43:2
   487  -      //     ./incomprehension.cue:44:6
   488  +      // indirectReference.y: conflicting values 3 and 1:
   489  +      //     ./incomprehension.cue:42:7
   490  +      //     ./incomprehension.cue:42:13
   491       }
   492     }
   493     nestedFor: (struct){
   494  @@ -234,8 +203,8 @@
   495         b: (string){ "e" }
   496       }
   497       let T#23multi = 〈1;v〉
   498  -    d: (string){ "1" }
   499       e: (string){ "1" }
   500  +    d: (string){ "1" }
   501     }
   502     _parent_configs: (struct){
   503       PARENT: (bool){ true }
   504  -- out/eval/stats --
   505  Leaks:  52
   506  Freed:  158
   507  Reused: 149
   508  Allocs: 61
   509  Retain: 184
   510  
   511  Unifications: 196
   512  Conjuncts:    365
   513  Disjuncts:    241
   514  -- out/eval --
   515  Errors:
   516  indirectReference.y: conflicting values 2 and 1:
   517      ./incomprehension.cue:42:7
   518      ./incomprehension.cue:42:10
   519      ./incomprehension.cue:43:2
   520      ./incomprehension.cue:44:6
   521  indirectReference.y: conflicting values 3 and 1:
   522      ./incomprehension.cue:42:7
   523      ./incomprehension.cue:42:13
   524      ./incomprehension.cue:43:2
   525      ./incomprehension.cue:44:6
   526  
   527  Result:
   528  (_|_){
   529    // [eval]
   530    let A#1 = (int){ 9 }
   531    let B#2 = (int){ 18 }
   532    let C#3 = (int){ 36 }
   533    let D#4 = (int){ 72 }
   534    let E#5 = (int){ 144 }
   535    let F#6 = (int){ 288 }
   536    b: (struct){
   537      let G#7 = (int){ 576 }
   538      let H#8 = (int){ 1152 }
   539      let I#9 = (int){ 2304 }
   540      let J#A = (int){ 4608 }
   541      let K#B = (int){ 9216 }
   542      let L#C = (int){ 18432 }
   543      let M#D = (int){ 36864 }
   544      let N#E = (int){ 73728 }
   545      let O#F = (int){ 147456 }
   546      let P#10 = (int){ 294912 }
   547      let Q#11 = (int){ 589824 }
   548      let R#12 = (int){ 1179648 }
   549      let S#13 = (int){ 2359296 }
   550      let T#14 = (int){ 4718592 }
   551      a: (int){ 4718592 }
   552      b: (int){ 288 }
   553    }
   554    issue1828: (struct){
   555      volumes: (struct){
   556      }
   557      let L3#15 = (struct){
   558      }
   559      let L2#16 = (#list){
   560      }
   561      let L1#17 = (#list){
   562      }
   563    }
   564    ignoreErrorInLet: (struct){
   565      let X#18 = (_|_){
   566        // [eval] ignoreErrorInLet.X: conflicting values 2 and 1:
   567        //     ./in.cue:37:10
   568        //     ./in.cue:37:14
   569      }
   570      disjunction: (int){ 3 }
   571    }
   572    list: (struct){
   573      l: (#list){
   574        0: (int){ 1 }
   575        1: (int){ 2 }
   576        2: (int){ 3 }
   577      }
   578      c: (#list){
   579        0: (int){
   580          4
   581          let X#19 = (int){ 4 }
   582        }
   583        1: (int){
   584          8
   585          let X#19 = (int){ 8 }
   586        }
   587        2: (int){
   588          12
   589          let X#19 = (int){ 12 }
   590        }
   591      }
   592    }
   593    referencesForDirectly: (struct){
   594      l: (#list){
   595        0: (int){ 1 }
   596        1: (int){ 2 }
   597        2: (int){ 3 }
   598      }
   599      let Y#1Amulti = (〈1;v〉 * 4)
   600      "0": (int){ 4 }
   601      "1": (int){ 8 }
   602      "2": (int){ 12 }
   603    }
   604    referencesForViaLet: (struct){
   605      l: (#list){
   606        0: (int){ 1 }
   607        1: (int){ 2 }
   608        2: (int){ 3 }
   609      }
   610      let Y#1Bmulti = 〈1;X〉
   611      "0": (int){ 4 }
   612      "1": (int){ 8 }
   613      "2": (int){ 12 }
   614    }
   615    letClauseReferencesInert: (struct){
   616      x: (int){ 2 }
   617      l: (#list){
   618        0: (int){ 1 }
   619        1: (int){ 2 }
   620        2: (int){ 3 }
   621      }
   622      let Y#1C = (int){ 2 }
   623      "0": (int){ 2 }
   624      "1": (int){ 2 }
   625      "2": (int){ 2 }
   626    }
   627    indirectReference: (_|_){
   628      // [eval]
   629      l: (#list){
   630        0: (int){ 1 }
   631        1: (int){ 2 }
   632        2: (int){ 3 }
   633      }
   634      y: (_|_){
   635        // [eval] indirectReference.y: conflicting values 2 and 1:
   636        //     ./incomprehension.cue:42:7
   637        //     ./incomprehension.cue:42:10
   638        //     ./incomprehension.cue:43:2
   639        //     ./incomprehension.cue:44:6
   640        // indirectReference.y: conflicting values 3 and 1:
   641        //     ./incomprehension.cue:42:7
   642        //     ./incomprehension.cue:42:13
   643        //     ./incomprehension.cue:43:2
   644        //     ./incomprehension.cue:44:6
   645      }
   646      let X#1D = (_|_){
   647        // [eval] indirectReference.y: conflicting values 2 and 1:
   648        //     ./incomprehension.cue:42:7
   649        //     ./incomprehension.cue:42:10
   650        //     ./incomprehension.cue:43:2
   651        //     ./incomprehension.cue:44:6
   652        // indirectReference.y: conflicting values 3 and 1:
   653        //     ./incomprehension.cue:42:7
   654        //     ./incomprehension.cue:42:13
   655        //     ./incomprehension.cue:43:2
   656        //     ./incomprehension.cue:44:6
   657      }
   658      "0": (_|_){
   659        // [eval] indirectReference.y: conflicting values 2 and 1:
   660        //     ./incomprehension.cue:42:7
   661        //     ./incomprehension.cue:42:10
   662        //     ./incomprehension.cue:43:2
   663        //     ./incomprehension.cue:44:6
   664        // indirectReference.y: conflicting values 3 and 1:
   665        //     ./incomprehension.cue:42:7
   666        //     ./incomprehension.cue:42:13
   667        //     ./incomprehension.cue:43:2
   668        //     ./incomprehension.cue:44:6
   669      }
   670      "1": (_|_){
   671        // [eval] indirectReference.y: conflicting values 2 and 1:
   672        //     ./incomprehension.cue:42:7
   673        //     ./incomprehension.cue:42:10
   674        //     ./incomprehension.cue:43:2
   675        //     ./incomprehension.cue:44:6
   676        // indirectReference.y: conflicting values 3 and 1:
   677        //     ./incomprehension.cue:42:7
   678        //     ./incomprehension.cue:42:13
   679        //     ./incomprehension.cue:43:2
   680        //     ./incomprehension.cue:44:6
   681      }
   682      "2": (_|_){
   683        // [eval] indirectReference.y: conflicting values 2 and 1:
   684        //     ./incomprehension.cue:42:7
   685        //     ./incomprehension.cue:42:10
   686        //     ./incomprehension.cue:43:2
   687        //     ./incomprehension.cue:44:6
   688        // indirectReference.y: conflicting values 3 and 1:
   689        //     ./incomprehension.cue:42:7
   690        //     ./incomprehension.cue:42:13
   691        //     ./incomprehension.cue:43:2
   692        //     ./incomprehension.cue:44:6
   693      }
   694    }
   695    nestedFor: (struct){
   696      let X#1Emulti = {
   697        for _, x in [
   698          1,
   699          2,
   700        ] {
   701          let X#1Fmulti = 〈1;x〉
   702          "\(〈0;let X#1F〉)": 〈0;let X#1F〉
   703        }
   704      }
   705      "0": (struct){
   706        let X#1Fmulti = 〈1;x〉
   707        "1": (int){ 1 }
   708        "2": (int){ 2 }
   709      }
   710      "1": (struct){
   711        let X#1Fmulti = 〈1;x〉
   712        "1": (int){ 1 }
   713        "2": (int){ 2 }
   714      }
   715    }
   716    keepDescending: (struct){
   717      t1: (struct){
   718        ec: (struct){
   719        }
   720        bs: (struct){
   721          let m#21 = (_|_){
   722            // [incomplete] keepDescending.t1.bs.m: undefined field: b:
   723            //     ./issue2063.cue:10:14
   724          }
   725          x: (struct){
   726            y: (string){ "" }
   727          }
   728        }
   729      }
   730      t2: (struct){
   731        x: (string){ "X:\n  \"Y\": \"\"\n" }
   732        ec: (struct){
   733        }
   734        bs: (struct){
   735          let m#22 = (_|_){
   736            // [incomplete] keepDescending.t2.bs.m: undefined field: b:
   737            //     ./issue2063.cue:21:14
   738          }
   739          X: (struct){
   740            Y: (string){ "" }
   741          }
   742        }
   743      }
   744    }
   745    letWithDynamicInComprehension: (struct){
   746      _i: (struct){
   747        a: (string){ "d" }
   748        b: (string){ "e" }
   749      }
   750      let T#23multi = 〈1;v〉
   751      d: (string){ "1" }
   752      e: (string){ "1" }
   753    }
   754    _parent_configs: (struct){
   755      PARENT: (bool){ true }
   756    }
   757    _configs: (struct){
   758      CHILD1: (struct){
   759        property: (bool){ true }
   760      }
   761      CHILD2: (struct){
   762        property: (bool){ true }
   763        parent: (string){ "PARENT" }
   764      }
   765    }
   766    disabled_parent_test: (struct){
   767      let parent_config#24multi = (*〈3;_parent_configs〉[〈1;v〉.parent]|false)
   768      CHILD1: (struct){
   769        parent_config: (bool){ false }
   770      }
   771      CHILD2: (struct){
   772        parent_config: (bool){ |(*(bool){ true }, (bool){ false }) }
   773      }
   774    }
   775  }
   776  -- out/compile --
   777  --- in.cue
   778  {
   779    let A#1 = (3 * 3)
   780    let B#2 = (〈0;let A#1〉 + 〈0;let A#1〉)
   781    let C#3 = (〈0;let B#2〉 + 〈0;let B#2〉)
   782    let D#4 = (〈0;let C#3〉 + 〈0;let C#3〉)
   783    let E#5 = (〈0;let D#4〉 + 〈0;let D#4〉)
   784    let F#6 = (〈0;let E#5〉 + 〈0;let E#5〉)
   785    b: {
   786      let G#7 = (〈1;let F#6〉 + 〈1;let F#6〉)
   787      let H#8 = (〈0;let G#7〉 + 〈0;let G#7〉)
   788      let I#9 = (〈0;let H#8〉 + 〈0;let H#8〉)
   789      let J#A = (〈0;let I#9〉 + 〈0;let I#9〉)
   790      let K#B = (〈0;let J#A〉 + 〈0;let J#A〉)
   791      let L#C = (〈0;let K#B〉 + 〈0;let K#B〉)
   792      let M#D = (〈0;let L#C〉 + 〈0;let L#C〉)
   793      let N#E = (〈0;let M#D〉 + 〈0;let M#D〉)
   794      let O#F = (〈0;let N#E〉 + 〈0;let N#E〉)
   795      let P#10 = (〈0;let O#F〉 + 〈0;let O#F〉)
   796      let Q#11 = (〈0;let P#10〉 + 〈0;let P#10〉)
   797      let R#12 = (〈0;let Q#11〉 + 〈0;let Q#11〉)
   798      let S#13 = (〈0;let R#12〉 + 〈0;let R#12〉)
   799      let T#14 = (〈0;let S#13〉 + 〈0;let S#13〉)
   800      a: 〈0;let T#14〉
   801      b: 〈1;let F#6〉
   802    }
   803    issue1828: {
   804      volumes: 〈0;let L3#15〉
   805      let L3#15 = {
   806        for _, v2 in [
   807          for _, v1 in 〈2;let L2#16〉 {},
   808        ] {}
   809      }
   810      let L2#16 = 〈0;let L1#17〉
   811      let L1#17 = []
   812    }
   813    ignoreErrorInLet: {
   814      let X#18 = (1 & 2)
   815      disjunction: (*〈0;let X#18〉|3)
   816    }
   817  }
   818  --- incomprehension.cue
   819  {
   820    list: {
   821      l: [
   822        1,
   823        2,
   824        3,
   825      ]
   826      c: [
   827        for _, v in 〈1;l〉 {
   828          let X#19 = (〈1;v〉 * 4)
   829          〈0;let X#19〉
   830        },
   831      ]
   832    }
   833    referencesForDirectly: {
   834      l: [
   835        1,
   836        2,
   837        3,
   838      ]
   839      for k, v in 〈0;l〉 {
   840        let Y#1Amulti = (〈1;v〉 * 4)
   841        "\(〈1;k〉)": 〈0;let Y#1A〉
   842      }
   843    }
   844    referencesForViaLet: {
   845      l: [
   846        1,
   847        2,
   848        3,
   849      ]
   850      for k, v in 〈0;l〉 let X = (〈0;v〉 * 4) {
   851        let Y#1Bmulti = 〈1;X〉
   852        "\(〈2;k〉)": 〈0;let Y#1B〉
   853      }
   854    }
   855    letClauseReferencesInert: {
   856      x: 2
   857      l: [
   858        1,
   859        2,
   860        3,
   861      ]
   862      for k, v in 〈0;l〉 let X = 〈1;x〉 {
   863        let Y#1C = 〈1;X〉
   864        "\(〈2;k〉)": 〈0;let Y#1C〉
   865      }
   866    }
   867    indirectReference: {
   868      l: [
   869        1,
   870        2,
   871        3,
   872      ]
   873      for k, v in 〈0;l〉 {
   874        y: 〈1;v〉
   875        let X#1D = (〈0;y〉 * 4)
   876        "\(〈1;k〉)": 〈0;let X#1D〉
   877      }
   878    }
   879    nestedFor: {
   880      for k, y in [
   881        4,
   882        5,
   883      ] {
   884        let X#1Emulti = {
   885          for _, x in [
   886            1,
   887            2,
   888          ] {
   889            let X#1Fmulti = 〈1;x〉
   890            "\(〈0;let X#1F〉)": 〈0;let X#1F〉
   891          }
   892        }
   893        "\(〈1;k〉)": 〈0;let X#1E〉
   894      }
   895    }
   896  }
   897  --- issue2063.cue
   898  {
   899    keepDescending: {
   900      t1: {
   901        ec: {}
   902        bs: {
   903          let m#21 = 〈1;ec〉.b
   904          if (〈0;let m#21〉 == _|_(explicit error (_|_ literal) in source)) {}
   905          x: {
   906            y: ""
   907          }
   908        }
   909      }
   910    }
   911    keepDescending: {
   912      t2: {
   913        x: 〈import;"encoding/yaml"〉.Marshal(〈0;bs〉)
   914        ec: {}
   915        bs: {
   916          let m#22 = 〈1;ec〉.b
   917          if (〈0;let m#22〉.b == _|_(explicit error (_|_ literal) in source)) {}
   918          X: {
   919            Y: 〈import;strings〉.Join([], "")
   920          }
   921        }
   922      }
   923    }
   924  }
   925  --- issue2166.cue
   926  {
   927    letWithDynamicInComprehension: {
   928      _i: {
   929        a: "d"
   930        b: "e"
   931      }
   932      for k, v in 〈0;_i〉 {
   933        let T#23multi = 〈1;v〉
   934        〈0;let T#23〉: "1"
   935      }
   936    }
   937  }
   938  --- issue2218.cue
   939  {
   940    _parent_configs: {
   941      PARENT: true
   942    }
   943    _configs: {
   944      CHILD1: {
   945        property: true
   946      }
   947      CHILD2: {
   948        property: true
   949        parent: "PARENT"
   950      }
   951    }
   952    disabled_parent_test: {
   953      for k, v in 〈1;_configs〉 {
   954        let parent_config#24multi = (*〈3;_parent_configs〉[〈1;v〉.parent]|false)
   955        "\(〈1;k〉)": {
   956          parent_config: 〈1;let parent_config#24〉
   957        }
   958      }
   959    }
   960  }