cuelang.org/go@v0.13.0/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  
    67  // Let references should also work inside embedded scalars.
    68  // Issue #1955
    69  scalarReference: {
    70  	inScalar: p0: {
    71  		5
    72  		let x = 6
    73  		#b: x
    74  	}
    75  	inScalar: p1: {
    76  		#b: x
    77  		let x = 6
    78  		5
    79  	}
    80  	inList: p0: {
    81  		let x = { a: 1 }
    82  		[ x ]
    83  	}
    84  	inList: p1: {
    85  		[ x ]
    86  		let x = { a: 1 }
    87  	}
    88  }
    89  
    90  issue1116: {
    91  	a: {
    92  		#a: ["a", "b"]
    93  		let List = #a
    94  		List[len(List)-1]
    95  	}
    96  	b: {
    97  		let List = #a
    98  		List[len(List)-1]
    99  		#a: ["a", "b"]
   100  	}
   101  }
   102  -- out/compile --
   103  --- in.cue
   104  {
   105    a1list: [
   106      {
   107        1
   108      },
   109    ]
   110    let A1#1 = 〈0;a1list〉
   111    a1: ((100 * 〈0;let A1#1〉[0]) + 〈0;let A1#1〉[0])
   112    a2list: [
   113      {
   114        2
   115      },
   116    ]
   117    let A2#2 = 〈0;a2list〉
   118    a2: {
   119      b: ((100 * 〈1;let A2#2〉[0]) + 〈1;let A2#2〉[0])
   120    }
   121    a3list: [
   122      {
   123        3
   124      },
   125    ]
   126    let A3#3 = 〈0;a3list〉
   127    a3: {
   128      b: {
   129        c: ((100 * 〈2;let A3#3〉[0]) + 〈2;let A3#3〉[0])
   130      }
   131    }
   132    a4list: [
   133      {
   134        4
   135      },
   136    ]
   137    let A4#4 = 〈0;a4list〉
   138    a4: [
   139      for _, x in 〈1;let A4#4〉 {
   140        v: 404
   141      },
   142    ]
   143    a5list: [
   144      {
   145        5
   146      },
   147    ]
   148    let A5#5 = 〈0;a5list〉
   149    a5: {
   150      b: [
   151        for _, x in 〈2;let A5#5〉 {
   152          v: 505
   153        },
   154      ]
   155    }
   156    a6list: [
   157      {
   158        6
   159      },
   160    ]
   161    let A6#6 = 〈0;a6list〉
   162    a6: {
   163      b: {
   164        c: [
   165          for _, x in 〈3;let A6#6〉 {
   166            v: 606
   167          },
   168        ]
   169      }
   170    }
   171    a7list: [
   172      {
   173        7
   174      },
   175    ]
   176    let A7#7 = 〈0;a7list〉
   177    a7: {
   178      for _, x in 〈1;let A7#7〉 {
   179        v: 707
   180      }
   181    }
   182    a8list: [
   183      {
   184        8
   185      },
   186    ]
   187    let A8#8 = 〈0;a8list〉
   188    a8: {
   189      b: {
   190        for _, x in 〈2;let A8#8〉 {
   191          v: 808
   192        }
   193      }
   194    }
   195    a9list: [
   196      {
   197        9
   198      },
   199    ]
   200    let A9#9 = 〈0;a9list〉
   201    a9: {
   202      b: {
   203        c: {
   204          for _, x in 〈3;let A9#9〉 {
   205            v: 909
   206          }
   207        }
   208      }
   209    }
   210    incompleteLet: {
   211      input: [
   212        1,
   213        2,
   214        3,
   215        4,
   216        5,
   217      ]
   218      last: {
   219        min: 〈import;list〉.Min(〈1;input〉)
   220        max: 〈import;list〉.Max(〈1;input〉)
   221      }
   222      bar: {
   223        let mn#A = 〈1;last〉.min
   224        let mx#B = 〈import;list〉.max
   225        min: 〈0;let mn#A〉
   226        max: 〈0;let mx#B〉
   227      }
   228      x: {
   229        if (〈import;list〉.max < 0) {}
   230      }
   231    }
   232    scalarReference: {
   233      inScalar: {
   234        p0: {
   235          5
   236          let x#C = 6
   237          #b: 〈0;let x#C〉
   238        }
   239      }
   240      inScalar: {
   241        p1: {
   242          #b: 〈0;let x#D〉
   243          let x#D = 6
   244          5
   245        }
   246      }
   247      inList: {
   248        p0: {
   249          let x#E = {
   250            a: 1
   251          }
   252          [
   253            〈1;let x#E〉,
   254          ]
   255        }
   256      }
   257      inList: {
   258        p1: {
   259          [
   260            〈1;let x#F〉,
   261          ]
   262          let x#F = {
   263            a: 1
   264          }
   265        }
   266      }
   267    }
   268    issue1116: {
   269      a: {
   270        #a: [
   271          "a",
   272          "b",
   273        ]
   274        let List#10 = 〈0;#a〉
   275        〈0;let List#10〉[(len(〈0;let List#10〉) - 1)]
   276      }
   277      b: {
   278        let List#11 = 〈0;#a〉
   279        〈0;let List#11〉[(len(〈0;let List#11〉) - 1)]
   280        #a: [
   281          "a",
   282          "b",
   283        ]
   284      }
   285    }
   286  }
   287  -- out/eval/stats --
   288  Leaks:  3
   289  Freed:  112
   290  Reused: 107
   291  Allocs: 8
   292  Retain: 10
   293  
   294  Unifications: 115
   295  Conjuncts:    169
   296  Disjuncts:    117
   297  -- out/evalalpha --
   298  (struct){
   299    a1list: (#list){
   300      0: (int){ 1 }
   301    }
   302    let A1#1 = ~(a1list)
   303    a1: (int){ 101 }
   304    a2list: (#list){
   305      0: (int){ 2 }
   306    }
   307    let A2#2 = ~(a2list)
   308    a2: (struct){
   309      b: (int){ 202 }
   310    }
   311    a3list: (#list){
   312      0: (int){ 3 }
   313    }
   314    let A3#3 = ~(a3list)
   315    a3: (struct){
   316      b: (struct){
   317        c: (int){ 303 }
   318      }
   319    }
   320    a4list: (#list){
   321      0: (int){ 4 }
   322    }
   323    let A4#4 = ~(a4list)
   324    a4: (#list){
   325      0: (struct){
   326        v: (int){ 404 }
   327      }
   328    }
   329    a5list: (#list){
   330      0: (int){ 5 }
   331    }
   332    let A5#5 = ~(a5list)
   333    a5: (struct){
   334      b: (#list){
   335        0: (struct){
   336          v: (int){ 505 }
   337        }
   338      }
   339    }
   340    a6list: (#list){
   341      0: (int){ 6 }
   342    }
   343    let A6#6 = ~(a6list)
   344    a6: (struct){
   345      b: (struct){
   346        c: (#list){
   347          0: (struct){
   348            v: (int){ 606 }
   349          }
   350        }
   351      }
   352    }
   353    a7list: (#list){
   354      0: (int){ 7 }
   355    }
   356    let A7#7 = ~(a7list)
   357    a7: (struct){
   358      v: (int){ 707 }
   359    }
   360    a8list: (#list){
   361      0: (int){ 8 }
   362    }
   363    let A8#8 = ~(a8list)
   364    a8: (struct){
   365      b: (struct){
   366        v: (int){ 808 }
   367      }
   368    }
   369    a9list: (#list){
   370      0: (int){ 9 }
   371    }
   372    let A9#9 = ~(a9list)
   373    a9: (struct){
   374      b: (struct){
   375        c: (struct){
   376          v: (int){ 909 }
   377        }
   378      }
   379    }
   380    incompleteLet: (struct){
   381      input: (#list){
   382        0: (int){ 1 }
   383        1: (int){ 2 }
   384        2: (int){ 3 }
   385        3: (int){ 4 }
   386        4: (int){ 5 }
   387      }
   388      last: (struct){
   389        min: (int){ 1 }
   390        max: (int){ 5 }
   391      }
   392      bar: (struct){
   393        let mn#A = (int){ 1 }
   394        let mx#B = (_|_){
   395          // [incomplete] incompleteLet.bar.mx: undefined field: max:
   396          //     ./in.cue:54:17
   397        }
   398        min: (int){ 1 }
   399        max: (_|_){
   400          // [incomplete] incompleteLet.bar.max: undefined field: max:
   401          //     ./in.cue:54:17
   402        }
   403      }
   404      x: (_|_){
   405        // [incomplete] incompleteLet.x: undefined field: max:
   406        //     ./in.cue:61:11
   407      }
   408    }
   409    scalarReference: (struct){
   410      inScalar: (struct){
   411        p0: (int){
   412          5
   413          let x#C = (int){ 6 }
   414          #b: (int){ 6 }
   415        }
   416        p1: (int){
   417          5
   418          #b: (int){ 6 }
   419          let x#D = (int){ 6 }
   420        }
   421      }
   422      inList: (struct){
   423        p0: (#list){
   424          let x#E = (struct){
   425            a: (int){ 1 }
   426          }
   427          0: (struct){
   428            a: (int){ 1 }
   429          }
   430        }
   431        p1: (#list){
   432          let x#F = (struct){
   433            a: (int){ 1 }
   434          }
   435          0: (struct){
   436            a: (int){ 1 }
   437          }
   438        }
   439      }
   440    }
   441    issue1116: (struct){
   442      a: (string){
   443        "b"
   444        #a: (#list){
   445          0: (string){ "a" }
   446          1: (string){ "b" }
   447        }
   448        let List#10 = ~(issue1116.a.#a)
   449      }
   450      b: (string){
   451        "b"
   452        let List#11 = ~(issue1116.b.#a)
   453        #a: (#list){
   454          0: (string){ "a" }
   455          1: (string){ "b" }
   456        }
   457      }
   458    }
   459  }
   460  -- diff/-out/evalalpha<==>+out/eval --
   461  diff old new
   462  --- old
   463  +++ new
   464  @@ -2,16 +2,12 @@
   465     a1list: (#list){
   466       0: (int){ 1 }
   467     }
   468  -  let A1#1 = (#list){
   469  -    0: (int){ 1 }
   470  -  }
   471  +  let A1#1 = ~(a1list)
   472     a1: (int){ 101 }
   473     a2list: (#list){
   474       0: (int){ 2 }
   475     }
   476  -  let A2#2 = (#list){
   477  -    0: (int){ 2 }
   478  -  }
   479  +  let A2#2 = ~(a2list)
   480     a2: (struct){
   481       b: (int){ 202 }
   482     }
   483  @@ -18,9 +14,7 @@
   484     a3list: (#list){
   485       0: (int){ 3 }
   486     }
   487  -  let A3#3 = (#list){
   488  -    0: (int){ 3 }
   489  -  }
   490  +  let A3#3 = ~(a3list)
   491     a3: (struct){
   492       b: (struct){
   493         c: (int){ 303 }
   494  @@ -29,9 +23,7 @@
   495     a4list: (#list){
   496       0: (int){ 4 }
   497     }
   498  -  let A4#4 = (#list){
   499  -    0: (int){ 4 }
   500  -  }
   501  +  let A4#4 = ~(a4list)
   502     a4: (#list){
   503       0: (struct){
   504         v: (int){ 404 }
   505  @@ -40,9 +32,7 @@
   506     a5list: (#list){
   507       0: (int){ 5 }
   508     }
   509  -  let A5#5 = (#list){
   510  -    0: (int){ 5 }
   511  -  }
   512  +  let A5#5 = ~(a5list)
   513     a5: (struct){
   514       b: (#list){
   515         0: (struct){
   516  @@ -53,9 +43,7 @@
   517     a6list: (#list){
   518       0: (int){ 6 }
   519     }
   520  -  let A6#6 = (#list){
   521  -    0: (int){ 6 }
   522  -  }
   523  +  let A6#6 = ~(a6list)
   524     a6: (struct){
   525       b: (struct){
   526         c: (#list){
   527  @@ -68,9 +56,7 @@
   528     a7list: (#list){
   529       0: (int){ 7 }
   530     }
   531  -  let A7#7 = (#list){
   532  -    0: (int){ 7 }
   533  -  }
   534  +  let A7#7 = ~(a7list)
   535     a7: (struct){
   536       v: (int){ 707 }
   537     }
   538  @@ -77,9 +63,7 @@
   539     a8list: (#list){
   540       0: (int){ 8 }
   541     }
   542  -  let A8#8 = (#list){
   543  -    0: (int){ 8 }
   544  -  }
   545  +  let A8#8 = ~(a8list)
   546     a8: (struct){
   547       b: (struct){
   548         v: (int){ 808 }
   549  @@ -88,9 +72,7 @@
   550     a9list: (#list){
   551       0: (int){ 9 }
   552     }
   553  -  let A9#9 = (#list){
   554  -    0: (int){ 9 }
   555  -  }
   556  +  let A9#9 = ~(a9list)
   557     a9: (struct){
   558       b: (struct){
   559         c: (struct){
   560  @@ -166,17 +148,11 @@
   561           0: (string){ "a" }
   562           1: (string){ "b" }
   563         }
   564  -      let List#10 = (#list){
   565  -        0: (string){ "a" }
   566  -        1: (string){ "b" }
   567  -      }
   568  +      let List#10 = ~(issue1116.a.#a)
   569       }
   570       b: (string){
   571         "b"
   572  -      let List#11 = (_|_){
   573  -        // [incomplete] issue1116.b.List: cycle error referencing #a:
   574  -        //     ./in.cue:96:14
   575  -      }
   576  +      let List#11 = ~(issue1116.b.#a)
   577         #a: (#list){
   578           0: (string){ "a" }
   579           1: (string){ "b" }
   580  -- out/eval --
   581  (struct){
   582    a1list: (#list){
   583      0: (int){ 1 }
   584    }
   585    let A1#1 = (#list){
   586      0: (int){ 1 }
   587    }
   588    a1: (int){ 101 }
   589    a2list: (#list){
   590      0: (int){ 2 }
   591    }
   592    let A2#2 = (#list){
   593      0: (int){ 2 }
   594    }
   595    a2: (struct){
   596      b: (int){ 202 }
   597    }
   598    a3list: (#list){
   599      0: (int){ 3 }
   600    }
   601    let A3#3 = (#list){
   602      0: (int){ 3 }
   603    }
   604    a3: (struct){
   605      b: (struct){
   606        c: (int){ 303 }
   607      }
   608    }
   609    a4list: (#list){
   610      0: (int){ 4 }
   611    }
   612    let A4#4 = (#list){
   613      0: (int){ 4 }
   614    }
   615    a4: (#list){
   616      0: (struct){
   617        v: (int){ 404 }
   618      }
   619    }
   620    a5list: (#list){
   621      0: (int){ 5 }
   622    }
   623    let A5#5 = (#list){
   624      0: (int){ 5 }
   625    }
   626    a5: (struct){
   627      b: (#list){
   628        0: (struct){
   629          v: (int){ 505 }
   630        }
   631      }
   632    }
   633    a6list: (#list){
   634      0: (int){ 6 }
   635    }
   636    let A6#6 = (#list){
   637      0: (int){ 6 }
   638    }
   639    a6: (struct){
   640      b: (struct){
   641        c: (#list){
   642          0: (struct){
   643            v: (int){ 606 }
   644          }
   645        }
   646      }
   647    }
   648    a7list: (#list){
   649      0: (int){ 7 }
   650    }
   651    let A7#7 = (#list){
   652      0: (int){ 7 }
   653    }
   654    a7: (struct){
   655      v: (int){ 707 }
   656    }
   657    a8list: (#list){
   658      0: (int){ 8 }
   659    }
   660    let A8#8 = (#list){
   661      0: (int){ 8 }
   662    }
   663    a8: (struct){
   664      b: (struct){
   665        v: (int){ 808 }
   666      }
   667    }
   668    a9list: (#list){
   669      0: (int){ 9 }
   670    }
   671    let A9#9 = (#list){
   672      0: (int){ 9 }
   673    }
   674    a9: (struct){
   675      b: (struct){
   676        c: (struct){
   677          v: (int){ 909 }
   678        }
   679      }
   680    }
   681    incompleteLet: (struct){
   682      input: (#list){
   683        0: (int){ 1 }
   684        1: (int){ 2 }
   685        2: (int){ 3 }
   686        3: (int){ 4 }
   687        4: (int){ 5 }
   688      }
   689      last: (struct){
   690        min: (int){ 1 }
   691        max: (int){ 5 }
   692      }
   693      bar: (struct){
   694        let mn#A = (int){ 1 }
   695        let mx#B = (_|_){
   696          // [incomplete] incompleteLet.bar.mx: undefined field: max:
   697          //     ./in.cue:54:17
   698        }
   699        min: (int){ 1 }
   700        max: (_|_){
   701          // [incomplete] incompleteLet.bar.max: undefined field: max:
   702          //     ./in.cue:54:17
   703        }
   704      }
   705      x: (_|_){
   706        // [incomplete] incompleteLet.x: undefined field: max:
   707        //     ./in.cue:61:11
   708      }
   709    }
   710    scalarReference: (struct){
   711      inScalar: (struct){
   712        p0: (int){
   713          5
   714          let x#C = (int){ 6 }
   715          #b: (int){ 6 }
   716        }
   717        p1: (int){
   718          5
   719          #b: (int){ 6 }
   720          let x#D = (int){ 6 }
   721        }
   722      }
   723      inList: (struct){
   724        p0: (#list){
   725          let x#E = (struct){
   726            a: (int){ 1 }
   727          }
   728          0: (struct){
   729            a: (int){ 1 }
   730          }
   731        }
   732        p1: (#list){
   733          let x#F = (struct){
   734            a: (int){ 1 }
   735          }
   736          0: (struct){
   737            a: (int){ 1 }
   738          }
   739        }
   740      }
   741    }
   742    issue1116: (struct){
   743      a: (string){
   744        "b"
   745        #a: (#list){
   746          0: (string){ "a" }
   747          1: (string){ "b" }
   748        }
   749        let List#10 = (#list){
   750          0: (string){ "a" }
   751          1: (string){ "b" }
   752        }
   753      }
   754      b: (string){
   755        "b"
   756        let List#11 = (_|_){
   757          // [incomplete] issue1116.b.List: cycle error referencing #a:
   758          //     ./in.cue:96:14
   759        }
   760        #a: (#list){
   761          0: (string){ "a" }
   762          1: (string){ "b" }
   763        }
   764      }
   765    }
   766  }