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  }