cuelang.org/go@v0.13.0/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  -- issue3590.cue --
    47  issue3590: reduced: {
    48  	result: [_]: [string]: string
    49  
    50  	_input: {
    51  		A: p: "A"
    52  		B: p: "B"
    53  	}
    54  
    55  	for _, v in _input {
    56  		let Var1 = v.p
    57  
    58  		// Second let variable required here; just using Var1 with Items not
    59  		// sufficient
    60  		let Var2 = Var1
    61  
    62  		let Items = {
    63  			item: Var2
    64  		}
    65  
    66  		result: "conflicting-\(v.p)": Items
    67  	}
    68  }
    69  issue3590: full: {
    70  	#Result: [_]: {[string]: string}
    71  
    72  	result: #Result
    73  
    74  	#Input: {
    75  		p: "A" | "B"
    76  	}
    77  
    78  	_input: [Parm=_]: #Input & {
    79  		p: Parm
    80  	}
    81  
    82  	_input: {
    83  		A: {}
    84  		B: {}
    85  	}
    86  
    87  	for _, v in _input {
    88  		let Var1 = v.p
    89  		let Var2 = Var1
    90  
    91  		let Items = {
    92  			"item": Var2
    93  		}
    94  
    95  		result: "conflicting-\(v.p)": Items
    96  	}
    97  }
    98  // Issue #3591 is related
    99  issue3591: missing: {
   100  	#Result: [_]: {[string]: string}
   101  
   102  	result: #Result
   103  	
   104  	#Input: {
   105  		p: "A" | "B"
   106  	}
   107  	
   108  	_input: [Parm=_]: #Input & {
   109  		p: Parm
   110  	}
   111  	
   112  	_input: {
   113  		A: {}
   114  		B: {}
   115  	}
   116  	
   117  	for _, v in _input {
   118  		let Var1 = v.p
   119  		let Var2 = Var1
   120  	
   121  		let Items = {
   122  			"item": {
   123  				key1: Var2
   124  			}
   125  		}
   126  	
   127  		result: "missing-items-\(v.p)": {
   128  			for s, attr in Items {
   129  				if attr.key1 != _|_ {(s): attr.key1}
   130  			}
   131  		}
   132  	}
   133  }
   134  -- out/evalalpha/stats --
   135  Leaks:  212
   136  Freed:  0
   137  Reused: 0
   138  Allocs: 212
   139  Retain: 0
   140  
   141  Unifications: 139
   142  Conjuncts:    353
   143  Disjuncts:    36
   144  
   145  CloseIDElems: 14
   146  NumCloseIDs: 86
   147  -- diff/-out/evalalpha/stats<==>+out/eval/stats --
   148  diff old new
   149  --- old
   150  +++ new
   151  @@ -1,9 +1,12 @@
   152  -Leaks:  28
   153  -Freed:  215
   154  -Reused: 203
   155  -Allocs: 40
   156  -Retain: 160
   157  -
   158  -Unifications: 167
   159  -Conjuncts:    486
   160  -Disjuncts:    325
   161  +Leaks:  212
   162  +Freed:  0
   163  +Reused: 0
   164  +Allocs: 212
   165  +Retain: 0
   166  +
   167  +Unifications: 139
   168  +Conjuncts:    353
   169  +Disjuncts:    36
   170  +
   171  +CloseIDElems: 14
   172  +NumCloseIDs: 86
   173  -- out/eval/stats --
   174  Leaks:  28
   175  Freed:  215
   176  Reused: 203
   177  Allocs: 40
   178  Retain: 160
   179  
   180  Unifications: 167
   181  Conjuncts:    486
   182  Disjuncts:    325
   183  -- out/evalalpha --
   184  (struct){
   185    t1: (struct){
   186      x: (struct){
   187        a: (int){ int }
   188        y: (struct){
   189          let X#1 = (struct){
   190            b: (int){ int }
   191            c: (int){ 1 }
   192          }
   193          v: (int){ 1 }
   194        }
   195      }
   196      x1: (struct){
   197        a: (int){ 1 }
   198        y: (struct){
   199          let X#1 = (struct){
   200            b: (int){ 1 }
   201            c: (int){ 1 }
   202          }
   203          v: (int){ 1 }
   204        }
   205      }
   206      x2: (struct){
   207        a: (int){ 2 }
   208        y: (struct){
   209          let X#1 = (struct){
   210            b: (int){ 2 }
   211            c: (int){ 1 }
   212          }
   213          v: (int){ 1 }
   214        }
   215      }
   216      xy: (struct){
   217        let X#1multi = {
   218          b: 〈2;a〉
   219          c: 1
   220        }
   221        v: (int){ 1 }
   222      }
   223    }
   224    t2: (struct){
   225      x: (struct){
   226        a: (struct){
   227        }
   228        y: (struct){
   229          let X#2 = (struct){
   230            b: (struct){
   231            }
   232            c: (int){ 1 }
   233          }
   234          v: (int){ 1 }
   235        }
   236      }
   237      x1: (struct){
   238        a: (struct){
   239          q: (int){ 1 }
   240        }
   241        y: (struct){
   242          let X#2 = (struct){
   243            b: ~(t2.x1.a)
   244            c: (int){ 1 }
   245          }
   246          v: (int){ 1 }
   247        }
   248      }
   249      x2: (struct){
   250        a: (struct){
   251          r: (int){ 2 }
   252        }
   253        y: (struct){
   254          let X#2 = (struct){
   255            b: ~(t2.x2.a)
   256            c: (int){ 1 }
   257          }
   258          v: (int){ 1 }
   259        }
   260      }
   261      xy: (struct){
   262        a: (struct){
   263          q: (int){ 1 }
   264          r: (int){ 2 }
   265        }
   266        y: (struct){
   267          let X#2 = (struct){
   268            b: ~(t2.xy.a)
   269            c: (int){ 1 }
   270          }
   271          v: (int){ 1 }
   272        }
   273      }
   274    }
   275    issue3590: (struct){
   276      reduced: (struct){
   277        result: (struct){
   278          "conflicting-A": (struct){
   279            item: (string){ "A" }
   280          }
   281          "conflicting-B": (struct){
   282            item: (string){ "B" }
   283          }
   284        }
   285        _input: (struct){
   286          A: (struct){
   287            p: (string){ "A" }
   288          }
   289          B: (struct){
   290            p: (string){ "B" }
   291          }
   292        }
   293        let Var1#3multi = 〈1;v〉.p
   294        let Var2#4multi = 〈0;let Var1#3〉
   295        let Items#5multi = {
   296          item: 〈1;let Var2#4〉
   297        }
   298      }
   299      full: (struct){
   300        #Result: (#struct){
   301        }
   302        result: (#struct){
   303          "conflicting-A": (#struct){
   304            item: (string){ "A" }
   305          }
   306          "conflicting-B": (#struct){
   307            item: (string){ "B" }
   308          }
   309        }
   310        #Input: (#struct){
   311          p: (string){ |((string){ "A" }, (string){ "B" }) }
   312        }
   313        _input: (struct){
   314          A: (#struct){
   315            p: (string){ "A" }
   316          }
   317          B: (#struct){
   318            p: (string){ "B" }
   319          }
   320        }
   321        let Var1#6multi = 〈1;v〉.p
   322        let Var2#7multi = 〈0;let Var1#6〉
   323        let Items#8multi = {
   324          item: 〈1;let Var2#7〉
   325        }
   326      }
   327    }
   328    issue3591: (struct){
   329      missing: (struct){
   330        #Result: (#struct){
   331        }
   332        result: (#struct){
   333          "missing-items-A": (#struct){
   334            item: (string){ "A" }
   335          }
   336          "missing-items-B": (#struct){
   337            item: (string){ "B" }
   338          }
   339        }
   340        #Input: (#struct){
   341          p: (string){ |((string){ "A" }, (string){ "B" }) }
   342        }
   343        _input: (struct){
   344          A: (#struct){
   345            p: (string){ "A" }
   346          }
   347          B: (#struct){
   348            p: (string){ "B" }
   349          }
   350        }
   351        let Var1#9multi = 〈1;v〉.p
   352        let Var2#Amulti = 〈0;let Var1#9〉
   353        let Items#Bmulti = {
   354          item: {
   355            key1: 〈2;let Var2#A〉
   356          }
   357        }
   358      }
   359    }
   360  }
   361  -- diff/-out/evalalpha<==>+out/eval --
   362  diff old new
   363  --- old
   364  +++ new
   365  @@ -57,37 +57,33 @@
   366         }
   367         y: (struct){
   368           let X#2 = (struct){
   369  -          b: (struct){
   370  -            q: (int){ 1 }
   371  -          }
   372  -          c: (int){ 1 }
   373  -        }
   374  -        v: (int){ 1 }
   375  -      }
   376  -    }
   377  -    x2: (struct){
   378  -      a: (struct){
   379  -        r: (int){ 2 }
   380  -      }
   381  -      y: (struct){
   382  -        let X#2 = (struct){
   383  -          b: (struct){
   384  -            r: (int){ 2 }
   385  -          }
   386  -          c: (int){ 1 }
   387  -        }
   388  -        v: (int){ 1 }
   389  -      }
   390  -    }
   391  -    xy: (struct){
   392  -      a: (struct){
   393  -        q: (int){ 1 }
   394  -        r: (int){ 2 }
   395  -      }
   396  -      y: (struct){
   397  -        let X#2multi = {
   398  -          b: 〈2;a〉
   399  -          c: 1
   400  +          b: ~(t2.x1.a)
   401  +          c: (int){ 1 }
   402  +        }
   403  +        v: (int){ 1 }
   404  +      }
   405  +    }
   406  +    x2: (struct){
   407  +      a: (struct){
   408  +        r: (int){ 2 }
   409  +      }
   410  +      y: (struct){
   411  +        let X#2 = (struct){
   412  +          b: ~(t2.x2.a)
   413  +          c: (int){ 1 }
   414  +        }
   415  +        v: (int){ 1 }
   416  +      }
   417  +    }
   418  +    xy: (struct){
   419  +      a: (struct){
   420  +        q: (int){ 1 }
   421  +        r: (int){ 2 }
   422  +      }
   423  +      y: (struct){
   424  +        let X#2 = (struct){
   425  +          b: ~(t2.xy.a)
   426  +          c: (int){ 1 }
   427           }
   428           v: (int){ 1 }
   429         }
   430  @@ -113,17 +109,8 @@
   431         }
   432         let Var1#3multi = 〈1;v〉.p
   433         let Var2#4multi = 〈0;let Var1#3〉
   434  -      let Items#5 = (_|_){
   435  -        // [eval]
   436  -        item: (_|_){
   437  -          // [eval] issue3590.reduced.Items.item: conflicting values "B" and "A":
   438  -          //     ./issue3590.cue:5:9
   439  -          //     ./issue3590.cue:6:9
   440  -          //     ./issue3590.cue:9:2
   441  -          //     ./issue3590.cue:10:14
   442  -          //     ./issue3590.cue:14:14
   443  -          //     ./issue3590.cue:17:10
   444  -        }
   445  +      let Items#5multi = {
   446  +        item: 〈1;let Var2#4〉
   447         }
   448       }
   449       full: (struct){
   450  @@ -150,16 +137,8 @@
   451         }
   452         let Var1#6multi = 〈1;v〉.p
   453         let Var2#7multi = 〈0;let Var1#6〉
   454  -      let Items#8 = (_|_){
   455  -        // [eval]
   456  -        item: (_|_){
   457  -          // [eval] issue3590.full.Items.item: conflicting values "B" and "A":
   458  -          //     ./issue3590.cue:33:6
   459  -          //     ./issue3590.cue:41:2
   460  -          //     ./issue3590.cue:42:14
   461  -          //     ./issue3590.cue:43:14
   462  -          //     ./issue3590.cue:46:12
   463  -        }
   464  +      let Items#8multi = {
   465  +        item: 〈1;let Var2#7〉
   466         }
   467       }
   468     }
   469  @@ -188,18 +167,9 @@
   470         }
   471         let Var1#9multi = 〈1;v〉.p
   472         let Var2#Amulti = 〈0;let Var1#9〉
   473  -      let Items#B = (_|_){
   474  -        // [eval]
   475  -        item: (_|_){
   476  -          // [eval]
   477  -          key1: (_|_){
   478  -            // [eval] issue3591.missing.Items.item.key1: conflicting values "B" and "A":
   479  -            //     ./issue3590.cue:63:6
   480  -            //     ./issue3590.cue:71:2
   481  -            //     ./issue3590.cue:72:14
   482  -            //     ./issue3590.cue:73:14
   483  -            //     ./issue3590.cue:77:11
   484  -          }
   485  +      let Items#Bmulti = {
   486  +        item: {
   487  +          key1: 〈2;let Var2#A〉
   488           }
   489         }
   490       }
   491  -- diff/todo/p4 --
   492  Reduce conjunct group size. Semantically correct, though.
   493  -- out/eval --
   494  (struct){
   495    t1: (struct){
   496      x: (struct){
   497        a: (int){ int }
   498        y: (struct){
   499          let X#1 = (struct){
   500            b: (int){ int }
   501            c: (int){ 1 }
   502          }
   503          v: (int){ 1 }
   504        }
   505      }
   506      x1: (struct){
   507        a: (int){ 1 }
   508        y: (struct){
   509          let X#1 = (struct){
   510            b: (int){ 1 }
   511            c: (int){ 1 }
   512          }
   513          v: (int){ 1 }
   514        }
   515      }
   516      x2: (struct){
   517        a: (int){ 2 }
   518        y: (struct){
   519          let X#1 = (struct){
   520            b: (int){ 2 }
   521            c: (int){ 1 }
   522          }
   523          v: (int){ 1 }
   524        }
   525      }
   526      xy: (struct){
   527        let X#1multi = {
   528          b: 〈2;a〉
   529          c: 1
   530        }
   531        v: (int){ 1 }
   532      }
   533    }
   534    t2: (struct){
   535      x: (struct){
   536        a: (struct){
   537        }
   538        y: (struct){
   539          let X#2 = (struct){
   540            b: (struct){
   541            }
   542            c: (int){ 1 }
   543          }
   544          v: (int){ 1 }
   545        }
   546      }
   547      x1: (struct){
   548        a: (struct){
   549          q: (int){ 1 }
   550        }
   551        y: (struct){
   552          let X#2 = (struct){
   553            b: (struct){
   554              q: (int){ 1 }
   555            }
   556            c: (int){ 1 }
   557          }
   558          v: (int){ 1 }
   559        }
   560      }
   561      x2: (struct){
   562        a: (struct){
   563          r: (int){ 2 }
   564        }
   565        y: (struct){
   566          let X#2 = (struct){
   567            b: (struct){
   568              r: (int){ 2 }
   569            }
   570            c: (int){ 1 }
   571          }
   572          v: (int){ 1 }
   573        }
   574      }
   575      xy: (struct){
   576        a: (struct){
   577          q: (int){ 1 }
   578          r: (int){ 2 }
   579        }
   580        y: (struct){
   581          let X#2multi = {
   582            b: 〈2;a〉
   583            c: 1
   584          }
   585          v: (int){ 1 }
   586        }
   587      }
   588    }
   589    issue3590: (struct){
   590      reduced: (struct){
   591        result: (struct){
   592          "conflicting-A": (struct){
   593            item: (string){ "A" }
   594          }
   595          "conflicting-B": (struct){
   596            item: (string){ "B" }
   597          }
   598        }
   599        _input: (struct){
   600          A: (struct){
   601            p: (string){ "A" }
   602          }
   603          B: (struct){
   604            p: (string){ "B" }
   605          }
   606        }
   607        let Var1#3multi = 〈1;v〉.p
   608        let Var2#4multi = 〈0;let Var1#3〉
   609        let Items#5 = (_|_){
   610          // [eval]
   611          item: (_|_){
   612            // [eval] issue3590.reduced.Items.item: conflicting values "B" and "A":
   613            //     ./issue3590.cue:5:9
   614            //     ./issue3590.cue:6:9
   615            //     ./issue3590.cue:9:2
   616            //     ./issue3590.cue:10:14
   617            //     ./issue3590.cue:14:14
   618            //     ./issue3590.cue:17:10
   619          }
   620        }
   621      }
   622      full: (struct){
   623        #Result: (#struct){
   624        }
   625        result: (#struct){
   626          "conflicting-A": (#struct){
   627            item: (string){ "A" }
   628          }
   629          "conflicting-B": (#struct){
   630            item: (string){ "B" }
   631          }
   632        }
   633        #Input: (#struct){
   634          p: (string){ |((string){ "A" }, (string){ "B" }) }
   635        }
   636        _input: (struct){
   637          A: (#struct){
   638            p: (string){ "A" }
   639          }
   640          B: (#struct){
   641            p: (string){ "B" }
   642          }
   643        }
   644        let Var1#6multi = 〈1;v〉.p
   645        let Var2#7multi = 〈0;let Var1#6〉
   646        let Items#8 = (_|_){
   647          // [eval]
   648          item: (_|_){
   649            // [eval] issue3590.full.Items.item: conflicting values "B" and "A":
   650            //     ./issue3590.cue:33:6
   651            //     ./issue3590.cue:41:2
   652            //     ./issue3590.cue:42:14
   653            //     ./issue3590.cue:43:14
   654            //     ./issue3590.cue:46:12
   655          }
   656        }
   657      }
   658    }
   659    issue3591: (struct){
   660      missing: (struct){
   661        #Result: (#struct){
   662        }
   663        result: (#struct){
   664          "missing-items-A": (#struct){
   665            item: (string){ "A" }
   666          }
   667          "missing-items-B": (#struct){
   668            item: (string){ "B" }
   669          }
   670        }
   671        #Input: (#struct){
   672          p: (string){ |((string){ "A" }, (string){ "B" }) }
   673        }
   674        _input: (struct){
   675          A: (#struct){
   676            p: (string){ "A" }
   677          }
   678          B: (#struct){
   679            p: (string){ "B" }
   680          }
   681        }
   682        let Var1#9multi = 〈1;v〉.p
   683        let Var2#Amulti = 〈0;let Var1#9〉
   684        let Items#B = (_|_){
   685          // [eval]
   686          item: (_|_){
   687            // [eval]
   688            key1: (_|_){
   689              // [eval] issue3591.missing.Items.item.key1: conflicting values "B" and "A":
   690              //     ./issue3590.cue:63:6
   691              //     ./issue3590.cue:71:2
   692              //     ./issue3590.cue:72:14
   693              //     ./issue3590.cue:73:14
   694              //     ./issue3590.cue:77:11
   695            }
   696          }
   697        }
   698      }
   699    }
   700  }
   701  -- out/compile --
   702  --- in.cue
   703  {
   704    t1: {
   705      x: {
   706        a: int
   707        y: {
   708          let X#1 = {
   709            b: 〈2;a〉
   710            c: 1
   711          }
   712          v: 〈0;let X#1〉.c
   713        }
   714      }
   715      x1: 〈0;x〉
   716      x1: {
   717        a: 1
   718      }
   719      x2: 〈0;x〉
   720      x2: {
   721        a: 2
   722      }
   723      xy: (〈0;x1〉.y & 〈0;x2〉.y)
   724    }
   725    t2: {
   726      x: {
   727        a: {}
   728        y: {
   729          let X#2 = {
   730            b: 〈2;a〉
   731            c: 1
   732          }
   733          v: 〈0;let X#2〉.c
   734        }
   735      }
   736      x1: 〈0;x〉
   737      x1: {
   738        a: {
   739          q: 1
   740        }
   741      }
   742      x2: 〈0;x〉
   743      x2: {
   744        a: {
   745          r: 2
   746        }
   747      }
   748      xy: (〈0;x1〉 & 〈0;x2〉)
   749    }
   750  }
   751  --- issue3590.cue
   752  {
   753    issue3590: {
   754      reduced: {
   755        result: {
   756          [_]: {
   757            [string]: string
   758          }
   759        }
   760        _input: {
   761          A: {
   762            p: "A"
   763          }
   764          B: {
   765            p: "B"
   766          }
   767        }
   768        for _, v in 〈0;_input〉 {
   769          let Var1#3multi = 〈1;v〉.p
   770          let Var2#4multi = 〈0;let Var1#3〉
   771          let Items#5 = {
   772            item: 〈1;let Var2#4〉
   773          }
   774          result: {
   775            "conflicting-\(〈2;v〉.p)": 〈1;let Items#5〉
   776          }
   777        }
   778      }
   779    }
   780    issue3590: {
   781      full: {
   782        #Result: {
   783          [_]: {
   784            [string]: string
   785          }
   786        }
   787        result: 〈0;#Result〉
   788        #Input: {
   789          p: ("A"|"B")
   790        }
   791        _input: {
   792          [_]: (〈1;#Input〉 & {
   793            p: 〈1;-〉
   794          })
   795        }
   796        _input: {
   797          A: {}
   798          B: {}
   799        }
   800        for _, v in 〈0;_input〉 {
   801          let Var1#6multi = 〈1;v〉.p
   802          let Var2#7multi = 〈0;let Var1#6〉
   803          let Items#8 = {
   804            item: 〈1;let Var2#7〉
   805          }
   806          result: {
   807            "conflicting-\(〈2;v〉.p)": 〈1;let Items#8〉
   808          }
   809        }
   810      }
   811    }
   812    issue3591: {
   813      missing: {
   814        #Result: {
   815          [_]: {
   816            [string]: string
   817          }
   818        }
   819        result: 〈0;#Result〉
   820        #Input: {
   821          p: ("A"|"B")
   822        }
   823        _input: {
   824          [_]: (〈1;#Input〉 & {
   825            p: 〈1;-〉
   826          })
   827        }
   828        _input: {
   829          A: {}
   830          B: {}
   831        }
   832        for _, v in 〈0;_input〉 {
   833          let Var1#9multi = 〈1;v〉.p
   834          let Var2#Amulti = 〈0;let Var1#9〉
   835          let Items#B = {
   836            item: {
   837              key1: 〈2;let Var2#A〉
   838            }
   839          }
   840          result: {
   841            "missing-items-\(〈2;v〉.p)": {
   842              for s, attr in 〈2;let Items#B〉 {
   843                if (〈1;attr〉.key1 != _|_(explicit error (_|_ literal) in source)) {
   844                  〈2;s〉: 〈2;attr〉.key1
   845                }
   846              }
   847            }
   848          }
   849        }
   850      }
   851    }
   852  }