cuelang.org/go@v0.10.1/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 = (#list){
   303      0: (int){ 1 }
   304    }
   305    a1: (int){ 101 }
   306    a2list: (#list){
   307      0: (int){ 2 }
   308    }
   309    let A2#2 = (#list){
   310      0: (int){ 2 }
   311    }
   312    a2: (struct){
   313      b: (int){ 202 }
   314    }
   315    a3list: (#list){
   316      0: (int){ 3 }
   317    }
   318    let A3#3 = (#list){
   319      0: (int){ 3 }
   320    }
   321    a3: (struct){
   322      b: (struct){
   323        c: (int){ 303 }
   324      }
   325    }
   326    a4list: (#list){
   327      0: (int){ 4 }
   328    }
   329    let A4#4 = (#list){
   330      0: (int){ 4 }
   331    }
   332    a4: (#list){
   333      0: (struct){
   334        v: (int){ 404 }
   335      }
   336    }
   337    a5list: (#list){
   338      0: (int){ 5 }
   339    }
   340    let A5#5 = (#list){
   341      0: (int){ 5 }
   342    }
   343    a5: (struct){
   344      b: (#list){
   345        0: (struct){
   346          v: (int){ 505 }
   347        }
   348      }
   349    }
   350    a6list: (#list){
   351      0: (int){ 6 }
   352    }
   353    let A6#6 = (#list){
   354      0: (int){ 6 }
   355    }
   356    a6: (struct){
   357      b: (struct){
   358        c: (#list){
   359          0: (struct){
   360            v: (int){ 606 }
   361          }
   362        }
   363      }
   364    }
   365    a7list: (#list){
   366      0: (int){ 7 }
   367    }
   368    let A7#7 = (#list){
   369      0: (int){ 7 }
   370    }
   371    a7: (struct){
   372      v: (int){ 707 }
   373    }
   374    a8list: (#list){
   375      0: (int){ 8 }
   376    }
   377    let A8#8 = (#list){
   378      0: (int){ 8 }
   379    }
   380    a8: (struct){
   381      b: (struct){
   382        v: (int){ 808 }
   383      }
   384    }
   385    a9list: (#list){
   386      0: (int){ 9 }
   387    }
   388    let A9#9 = (#list){
   389      0: (int){ 9 }
   390    }
   391    a9: (struct){
   392      b: (struct){
   393        c: (struct){
   394          v: (int){ 909 }
   395        }
   396      }
   397    }
   398    incompleteLet: (struct){
   399      input: (#list){
   400        0: (int){ 1 }
   401        1: (int){ 2 }
   402        2: (int){ 3 }
   403        3: (int){ 4 }
   404        4: (int){ 5 }
   405      }
   406      last: (struct){
   407        min: (int){ 1 }
   408        max: (int){ 5 }
   409      }
   410      bar: (struct){
   411        let mn#A = (int){ 1 }
   412        let mx#B = (_|_){
   413          // [incomplete] incompleteLet.bar.mx: undefined field: max:
   414          //     ./in.cue:54:17
   415        }
   416        min: (int){ 1 }
   417        max: (_|_){
   418          // [incomplete] incompleteLet.bar.mx: undefined field: max:
   419          //     ./in.cue:54:17
   420        }
   421      }
   422      x: (_|_){
   423        // [incomplete] incompleteLet.x: undefined field: max:
   424        //     ./in.cue:61:11
   425      }
   426    }
   427    scalarReference: (struct){
   428      inScalar: (struct){
   429        p0: (int){
   430          5
   431          let x#C = (int){ 6 }
   432          #b: (int){ 6 }
   433        }
   434        p1: (int){
   435          5
   436          #b: (int){ 6 }
   437          let x#D = (int){ 6 }
   438        }
   439      }
   440      inList: (struct){
   441        p0: (#list){
   442          let x#E = (struct){
   443            a: (int){ 1 }
   444          }
   445          0: (struct){
   446            a: (int){ 1 }
   447          }
   448        }
   449        p1: (#list){
   450          let x#F = (struct){
   451            a: (int){ 1 }
   452          }
   453          0: (struct){
   454            a: (int){ 1 }
   455          }
   456        }
   457      }
   458    }
   459    issue1116: (struct){
   460      a: (string){
   461        "b"
   462        #a: (#list){
   463          0: (string){ "a" }
   464          1: (string){ "b" }
   465        }
   466        let List#10 = (#list){
   467          0: (string){ "a" }
   468          1: (string){ "b" }
   469        }
   470      }
   471      b: (string){
   472        "b"
   473        let List#11 = (#list){
   474          0: (string){ "a" }
   475          1: (string){ "b" }
   476        }
   477        #a: (#list){
   478          0: (string){ "a" }
   479          1: (string){ "b" }
   480        }
   481      }
   482    }
   483  }
   484  -- diff/-out/evalalpha<==>+out/eval --
   485  diff old new
   486  --- old
   487  +++ new
   488  @@ -118,7 +118,7 @@
   489         }
   490         min: (int){ 1 }
   491         max: (_|_){
   492  -        // [incomplete] incompleteLet.bar.max: undefined field: max:
   493  +        // [incomplete] incompleteLet.bar.mx: undefined field: max:
   494           //     ./in.cue:54:17
   495         }
   496       }
   497  @@ -173,9 +173,9 @@
   498       }
   499       b: (string){
   500         "b"
   501  -      let List#11 = (_|_){
   502  -        // [incomplete] issue1116.b.List: cycle error referencing #a:
   503  -        //     ./in.cue:96:14
   504  +      let List#11 = (#list){
   505  +        0: (string){ "a" }
   506  +        1: (string){ "b" }
   507         }
   508         #a: (#list){
   509           0: (string){ "a" }
   510  -- diff/todo/p3 --
   511  Investigate let divergence. Probably okay.
   512  -- out/eval --
   513  (struct){
   514    a1list: (#list){
   515      0: (int){ 1 }
   516    }
   517    let A1#1 = (#list){
   518      0: (int){ 1 }
   519    }
   520    a1: (int){ 101 }
   521    a2list: (#list){
   522      0: (int){ 2 }
   523    }
   524    let A2#2 = (#list){
   525      0: (int){ 2 }
   526    }
   527    a2: (struct){
   528      b: (int){ 202 }
   529    }
   530    a3list: (#list){
   531      0: (int){ 3 }
   532    }
   533    let A3#3 = (#list){
   534      0: (int){ 3 }
   535    }
   536    a3: (struct){
   537      b: (struct){
   538        c: (int){ 303 }
   539      }
   540    }
   541    a4list: (#list){
   542      0: (int){ 4 }
   543    }
   544    let A4#4 = (#list){
   545      0: (int){ 4 }
   546    }
   547    a4: (#list){
   548      0: (struct){
   549        v: (int){ 404 }
   550      }
   551    }
   552    a5list: (#list){
   553      0: (int){ 5 }
   554    }
   555    let A5#5 = (#list){
   556      0: (int){ 5 }
   557    }
   558    a5: (struct){
   559      b: (#list){
   560        0: (struct){
   561          v: (int){ 505 }
   562        }
   563      }
   564    }
   565    a6list: (#list){
   566      0: (int){ 6 }
   567    }
   568    let A6#6 = (#list){
   569      0: (int){ 6 }
   570    }
   571    a6: (struct){
   572      b: (struct){
   573        c: (#list){
   574          0: (struct){
   575            v: (int){ 606 }
   576          }
   577        }
   578      }
   579    }
   580    a7list: (#list){
   581      0: (int){ 7 }
   582    }
   583    let A7#7 = (#list){
   584      0: (int){ 7 }
   585    }
   586    a7: (struct){
   587      v: (int){ 707 }
   588    }
   589    a8list: (#list){
   590      0: (int){ 8 }
   591    }
   592    let A8#8 = (#list){
   593      0: (int){ 8 }
   594    }
   595    a8: (struct){
   596      b: (struct){
   597        v: (int){ 808 }
   598      }
   599    }
   600    a9list: (#list){
   601      0: (int){ 9 }
   602    }
   603    let A9#9 = (#list){
   604      0: (int){ 9 }
   605    }
   606    a9: (struct){
   607      b: (struct){
   608        c: (struct){
   609          v: (int){ 909 }
   610        }
   611      }
   612    }
   613    incompleteLet: (struct){
   614      input: (#list){
   615        0: (int){ 1 }
   616        1: (int){ 2 }
   617        2: (int){ 3 }
   618        3: (int){ 4 }
   619        4: (int){ 5 }
   620      }
   621      last: (struct){
   622        min: (int){ 1 }
   623        max: (int){ 5 }
   624      }
   625      bar: (struct){
   626        let mn#A = (int){ 1 }
   627        let mx#B = (_|_){
   628          // [incomplete] incompleteLet.bar.mx: undefined field: max:
   629          //     ./in.cue:54:17
   630        }
   631        min: (int){ 1 }
   632        max: (_|_){
   633          // [incomplete] incompleteLet.bar.max: undefined field: max:
   634          //     ./in.cue:54:17
   635        }
   636      }
   637      x: (_|_){
   638        // [incomplete] incompleteLet.x: undefined field: max:
   639        //     ./in.cue:61:11
   640      }
   641    }
   642    scalarReference: (struct){
   643      inScalar: (struct){
   644        p0: (int){
   645          5
   646          let x#C = (int){ 6 }
   647          #b: (int){ 6 }
   648        }
   649        p1: (int){
   650          5
   651          #b: (int){ 6 }
   652          let x#D = (int){ 6 }
   653        }
   654      }
   655      inList: (struct){
   656        p0: (#list){
   657          let x#E = (struct){
   658            a: (int){ 1 }
   659          }
   660          0: (struct){
   661            a: (int){ 1 }
   662          }
   663        }
   664        p1: (#list){
   665          let x#F = (struct){
   666            a: (int){ 1 }
   667          }
   668          0: (struct){
   669            a: (int){ 1 }
   670          }
   671        }
   672      }
   673    }
   674    issue1116: (struct){
   675      a: (string){
   676        "b"
   677        #a: (#list){
   678          0: (string){ "a" }
   679          1: (string){ "b" }
   680        }
   681        let List#10 = (#list){
   682          0: (string){ "a" }
   683          1: (string){ "b" }
   684        }
   685      }
   686      b: (string){
   687        "b"
   688        let List#11 = (_|_){
   689          // [incomplete] issue1116.b.List: cycle error referencing #a:
   690          //     ./in.cue:96:14
   691        }
   692        #a: (#list){
   693          0: (string){ "a" }
   694          1: (string){ "b" }
   695        }
   696      }
   697    }
   698  }