cuelang.org/go@v0.10.1/cue/testdata/eval/letjoin.txtar (about)

     1  -- in.cue --
     2  // Test that an error in a let that is merged with itself from two different
     3  // origins does not result in an error as long as the error is not referenced
     4  // outside the let.
     5  t1: {
     6  	x: {
     7  		a: int
     8  		y: {
     9  			let X = {
    10  				b: a
    11  				c: 1
    12  			}
    13  			v: X.c
    14  		}
    15  	}
    16  
    17  	x1: x
    18  	x1: a: 1
    19  
    20  	x2: x
    21  	x2: a: 2
    22  
    23  	xy: x1.y & x2.y
    24  }
    25  
    26  t2: {
    27  	x: {
    28  		a: {}
    29  		y: {
    30  			let X = {
    31  				b: a
    32  				c: 1
    33  			}
    34  			v: X.c
    35  		}
    36  	}
    37  
    38  	x1: x
    39  	x1: a: q: 1
    40  
    41  	x2: x
    42  	x2: a: r: 2
    43  
    44  	xy: x1 & x2
    45  }
    46  -- out/eval/stats --
    47  Leaks:  8
    48  Freed:  65
    49  Reused: 60
    50  Allocs: 13
    51  Retain: 8
    52  
    53  Unifications: 73
    54  Conjuncts:    123
    55  Disjuncts:    69
    56  -- out/evalalpha --
    57  (struct){
    58    t1: (struct){
    59      x: (struct){
    60        a: (int){ int }
    61        y: (struct){
    62          let X#1 = (struct){
    63            b: (int){ int }
    64            c: (int){ 1 }
    65          }
    66          v: (int){ 1 }
    67        }
    68      }
    69      x1: (struct){
    70        a: (int){ 1 }
    71        y: (struct){
    72          let X#1 = (struct){
    73            b: (int){ 1 }
    74            c: (int){ 1 }
    75          }
    76          v: (int){ 1 }
    77        }
    78      }
    79      x2: (struct){
    80        a: (int){ 2 }
    81        y: (struct){
    82          let X#1 = (struct){
    83            b: (int){ 2 }
    84            c: (int){ 1 }
    85          }
    86          v: (int){ 1 }
    87        }
    88      }
    89      xy: (struct){
    90        let X#1multi = {
    91          b: 〈2;a〉
    92          c: 1
    93        }
    94        v: (int){ 1 }
    95      }
    96    }
    97    t2: (struct){
    98      x: (struct){
    99        a: (struct){
   100        }
   101        y: (struct){
   102          let X#2 = (struct){
   103            b: (struct){
   104            }
   105            c: (int){ 1 }
   106          }
   107          v: (int){ 1 }
   108        }
   109      }
   110      x1: (struct){
   111        a: (struct){
   112          q: (int){ 1 }
   113        }
   114        y: (struct){
   115          let X#2 = (struct){
   116            b: (struct){
   117              q: (int){ 1 }
   118            }
   119            c: (int){ 1 }
   120          }
   121          v: (int){ 1 }
   122        }
   123      }
   124      x2: (struct){
   125        a: (struct){
   126          r: (int){ 2 }
   127        }
   128        y: (struct){
   129          let X#2 = (struct){
   130            b: (struct){
   131              r: (int){ 2 }
   132            }
   133            c: (int){ 1 }
   134          }
   135          v: (int){ 1 }
   136        }
   137      }
   138      xy: (struct){
   139        a: (struct){
   140          q: (int){ 1 }
   141          r: (int){ 2 }
   142        }
   143        y: (struct){
   144          let X#2 = (struct){
   145            b: (struct){
   146              q: (int){ 1 }
   147              r: (int){ 2 }
   148            }
   149            c: (int){ 1 }
   150          }
   151          v: (int){ 1 }
   152        }
   153      }
   154    }
   155  }
   156  -- diff/-out/evalalpha<==>+out/eval --
   157  diff old new
   158  --- old
   159  +++ new
   160  @@ -85,9 +85,12 @@
   161           r: (int){ 2 }
   162         }
   163         y: (struct){
   164  -        let X#2multi = {
   165  -          b: 〈2;a〉
   166  -          c: 1
   167  +        let X#2 = (struct){
   168  +          b: (struct){
   169  +            q: (int){ 1 }
   170  +            r: (int){ 2 }
   171  +          }
   172  +          c: (int){ 1 }
   173           }
   174           v: (int){ 1 }
   175         }
   176  -- diff/todo/p4 --
   177  Reduce conjunct group size. Semantically correct, though.
   178  -- out/eval --
   179  (struct){
   180    t1: (struct){
   181      x: (struct){
   182        a: (int){ int }
   183        y: (struct){
   184          let X#1 = (struct){
   185            b: (int){ int }
   186            c: (int){ 1 }
   187          }
   188          v: (int){ 1 }
   189        }
   190      }
   191      x1: (struct){
   192        a: (int){ 1 }
   193        y: (struct){
   194          let X#1 = (struct){
   195            b: (int){ 1 }
   196            c: (int){ 1 }
   197          }
   198          v: (int){ 1 }
   199        }
   200      }
   201      x2: (struct){
   202        a: (int){ 2 }
   203        y: (struct){
   204          let X#1 = (struct){
   205            b: (int){ 2 }
   206            c: (int){ 1 }
   207          }
   208          v: (int){ 1 }
   209        }
   210      }
   211      xy: (struct){
   212        let X#1multi = {
   213          b: 〈2;a〉
   214          c: 1
   215        }
   216        v: (int){ 1 }
   217      }
   218    }
   219    t2: (struct){
   220      x: (struct){
   221        a: (struct){
   222        }
   223        y: (struct){
   224          let X#2 = (struct){
   225            b: (struct){
   226            }
   227            c: (int){ 1 }
   228          }
   229          v: (int){ 1 }
   230        }
   231      }
   232      x1: (struct){
   233        a: (struct){
   234          q: (int){ 1 }
   235        }
   236        y: (struct){
   237          let X#2 = (struct){
   238            b: (struct){
   239              q: (int){ 1 }
   240            }
   241            c: (int){ 1 }
   242          }
   243          v: (int){ 1 }
   244        }
   245      }
   246      x2: (struct){
   247        a: (struct){
   248          r: (int){ 2 }
   249        }
   250        y: (struct){
   251          let X#2 = (struct){
   252            b: (struct){
   253              r: (int){ 2 }
   254            }
   255            c: (int){ 1 }
   256          }
   257          v: (int){ 1 }
   258        }
   259      }
   260      xy: (struct){
   261        a: (struct){
   262          q: (int){ 1 }
   263          r: (int){ 2 }
   264        }
   265        y: (struct){
   266          let X#2multi = {
   267            b: 〈2;a〉
   268            c: 1
   269          }
   270          v: (int){ 1 }
   271        }
   272      }
   273    }
   274  }
   275  -- out/compile --
   276  --- in.cue
   277  {
   278    t1: {
   279      x: {
   280        a: int
   281        y: {
   282          let X#1 = {
   283            b: 〈2;a〉
   284            c: 1
   285          }
   286          v: 〈0;let X#1〉.c
   287        }
   288      }
   289      x1: 〈0;x〉
   290      x1: {
   291        a: 1
   292      }
   293      x2: 〈0;x〉
   294      x2: {
   295        a: 2
   296      }
   297      xy: (〈0;x1〉.y & 〈0;x2〉.y)
   298    }
   299    t2: {
   300      x: {
   301        a: {}
   302        y: {
   303          let X#2 = {
   304            b: 〈2;a〉
   305            c: 1
   306          }
   307          v: 〈0;let X#2〉.c
   308        }
   309      }
   310      x1: 〈0;x〉
   311      x1: {
   312        a: {
   313          q: 1
   314        }
   315      }
   316      x2: 〈0;x〉
   317      x2: {
   318        a: {
   319          r: 2
   320        }
   321      }
   322      xy: (〈0;x1〉 & 〈0;x2〉)
   323    }
   324  }