cuelang.org/go@v0.13.0/cue/testdata/eval/bulk.txtar (about)

     1  -- in.cue --
     2  a: {
     3  	foo: a: 1
     4  	[X = =~"foo"]: {
     5  		b:    1
     6  		name: X
     7  	}
     8  }
     9  d: a & {
    10  	"foobar": {
    11  		c: 2
    12  	}
    13  }
    14  
    15  t1: {
    16  	#a: {
    17  		[>"e" & <"z"]: int
    18  	}
    19  	b: #a & {f: 4}
    20  	c: #a & {z: 4}
    21  }
    22  
    23  t2: {
    24  	#a: {
    25  		["x" | "y"]: int
    26  	}
    27  	b: #a & {x: 4}
    28  	c: #a & {z: 4}
    29  }
    30  
    31  -- issue2109.cue --
    32  // Detect cycle:
    33  // The pattern constraint of FlagsURLS is applied to countries (because
    34  // FlagsURLs  is embedded. But the pattern constraint itself refers to
    35  // countries. So countries -> or(countries) -> countries.
    36  //
    37  // Theoretically, or(countries) can be resolved without a cycle. And then we
    38  // could see it does not apply to countries. For now we stick with this
    39  // approach understanding that it is easier to relax later.
    40  patternCycle: issue2109: p1: {
    41  	countries: ["US", "GB", "AU"]
    42  	FlagsURLs: {[or(countries)]: string}
    43  	FlagsURLs
    44  }
    45  patternCycle: issue2109: p2: {
    46  	FlagsURLs: {[or(countries)]: string}
    47  	FlagsURLs
    48  	countries: ["US", "GB", "AU"]
    49  }
    50  patternCycle: issue2109: p3: {
    51  	FlagsURLs
    52  	FlagsURLs: {[or(countries)]: string}
    53  	countries: ["US", "GB", "AU"]
    54  }
    55  
    56  patternCycle: t1: p1: {
    57  	countries: "US" | "GB" | "AU"
    58  	FlagsURLs: {[countries]: string}
    59  	FlagsURLs
    60  }
    61  patternCycle: t1: p2: {
    62  	FlagsURLs
    63  	countries: "US" | "GB" | "AU"
    64  	FlagsURLs: {[countries]: string}
    65  }
    66  patternCycle: t1: p3: {
    67  	FlagsURLs
    68  	FlagsURLs: {[countries]: string}
    69  	countries: "US" | "GB" | "AU"
    70  }
    71  
    72  -- intpattern.cue --
    73  issue3670: {
    74  	#X: [int]: string
    75  	a: #X
    76  	a: "not_int": "c"
    77  }
    78  dual: {
    79  	_
    80  	// As long as it is undecided whether this is a struct or list, this should
    81  	// not be a conflict. Note that the spec does not allow int patterns, but
    82  	// both v2 and v3 allow it, and we soon will, so it seems gratuitous to
    83  	// break it now.
    84  	[string]: _
    85  	[int]: _
    86  }
    87  -- multi.cue --
    88  // Ensure that if the same pattern is added multiple times in different
    89  // contexts, it is added to all contexts to preserve closedness information.
    90  issue3638: full: {
    91  	routes: default: {}
    92  	routes: [string]: spec: [{
    93  		refs: [{"default"}]
    94  	}]
    95  	#Fields: {
    96  		input: _
    97  		output: [for x in input { x }]
    98  		...
    99  	}
   100  	#Kubernetes: {
   101  		#Fields & {
   102  			Routes: route: [_]: spec!: HTTPROUTESPEC.#x
   103  		}
   104  		#Fields // Commenting out this line also fixes evalv3.
   105  		Routes: _
   106  		input: res1: Routes
   107  	}
   108  	let HTTPROUTESPEC = {
   109  		#x: [...{
   110  			refs: [...{string}]
   111  		}] | *[{
   112  			other: []
   113  		}]
   114  	}
   115  
   116  	// Order dependent! Breaks if the lines below are moved to the top of the file.
   117  	entrypoint: used.output
   118  	used: #Kubernetes & {
   119  		Routes: route: routes
   120  	}
   121  }
   122  issue3638: reduced: {
   123  	input: k1: [string]: a: 1
   124  	input: k1: foo: #x
   125  	out: {
   126  		for x in input { x }
   127  		for x in input { x }
   128  	}
   129  	#x: { a: int } | *{ b: 2 }
   130  }
   131  // We expect that changing the pattern constraint into a field should give
   132  // not materially change the outcome.
   133  issue3638: compare: {
   134  	input: k1: foo: a: 1
   135  	input: k1: foo: #x
   136  	out: {
   137  		for x in input { x }
   138  		for x in input { x }
   139  	}
   140  	#x: { a: int } | *{ b: 2 }
   141  }
   142  -- out/evalalpha/stats --
   143  Leaks:  302
   144  Freed:  0
   145  Reused: 0
   146  Allocs: 302
   147  Retain: 0
   148  
   149  Unifications: 229
   150  Conjuncts:    453
   151  Disjuncts:    53
   152  
   153  CloseIDElems: 121
   154  NumCloseIDs: 125
   155  -- diff/-out/evalalpha/stats<==>+out/eval/stats --
   156  diff old new
   157  --- old
   158  +++ new
   159  @@ -1,9 +1,12 @@
   160  -Leaks:  4
   161  -Freed:  269
   162  -Reused: 250
   163  -Allocs: 23
   164  -Retain: 30
   165  -
   166  -Unifications: 214
   167  -Conjuncts:    639
   168  -Disjuncts:    297
   169  +Leaks:  302
   170  +Freed:  0
   171  +Reused: 0
   172  +Allocs: 302
   173  +Retain: 0
   174  +
   175  +Unifications: 229
   176  +Conjuncts:    453
   177  +Disjuncts:    53
   178  +
   179  +CloseIDElems: 121
   180  +NumCloseIDs: 125
   181  -- out/eval/stats --
   182  Leaks:  4
   183  Freed:  269
   184  Reused: 250
   185  Allocs: 23
   186  Retain: 30
   187  
   188  Unifications: 214
   189  Conjuncts:    639
   190  Disjuncts:    297
   191  -- out/evalalpha --
   192  Errors:
   193  issue3670.a.not_int: field not allowed:
   194      ./intpattern.cue:4:5
   195  t1.c.z: field not allowed:
   196      ./in.cue:19:11
   197  t2.c.z: field not allowed:
   198      ./in.cue:27:11
   199  
   200  Result:
   201  (_|_){
   202    // [eval]
   203    a: (struct){
   204      foo: (struct){
   205        a: (int){ 1 }
   206        b: (int){ 1 }
   207        name: (string){ "foo" }
   208      }
   209    }
   210    d: (struct){
   211      foobar: (struct){
   212        c: (int){ 2 }
   213        b: (int){ 1 }
   214        name: (string){ "foobar" }
   215      }
   216      foo: (struct){
   217        a: (int){ 1 }
   218        b: (int){ 1 }
   219        name: (string){ "foo" }
   220      }
   221    }
   222    t1: (_|_){
   223      // [eval]
   224      #a: (#struct){
   225      }
   226      b: (#struct){
   227        f: (int){ 4 }
   228      }
   229      c: (_|_){
   230        // [eval]
   231        z: (_|_){
   232          // [eval] t1.c.z: field not allowed:
   233          //     ./in.cue:19:11
   234        }
   235      }
   236    }
   237    t2: (_|_){
   238      // [eval]
   239      #a: (#struct){
   240      }
   241      b: (#struct){
   242        x: (int){ 4 }
   243      }
   244      c: (_|_){
   245        // [eval]
   246        z: (_|_){
   247          // [eval] t2.c.z: field not allowed:
   248          //     ./in.cue:27:11
   249        }
   250      }
   251    }
   252    issue3670: (_|_){
   253      // [eval]
   254      #X: (#struct){
   255      }
   256      a: (_|_){
   257        // [eval]
   258        not_int: (_|_){
   259          // [eval] issue3670.a.not_int: field not allowed:
   260          //     ./intpattern.cue:4:5
   261        }
   262      }
   263    }
   264    dual: (_){ _ }
   265    patternCycle: (struct){
   266      issue2109: (struct){
   267        p1: (struct){
   268          countries: (#list){
   269            0: (string){ "US" }
   270            1: (string){ "GB" }
   271            2: (string){ "AU" }
   272          }
   273          FlagsURLs: (struct){
   274          }
   275        }
   276        p2: (struct){
   277          FlagsURLs: (struct){
   278          }
   279          countries: (#list){
   280            0: (string){ "US" }
   281            1: (string){ "GB" }
   282            2: (string){ "AU" }
   283          }
   284        }
   285        p3: (struct){
   286          FlagsURLs: (struct){
   287          }
   288          countries: (#list){
   289            0: (string){ "US" }
   290            1: (string){ "GB" }
   291            2: (string){ "AU" }
   292          }
   293        }
   294      }
   295      t1: (struct){
   296        p1: (struct){
   297          countries: (string){ |((string){ "US" }, (string){ "GB" }, (string){ "AU" }) }
   298          FlagsURLs: (struct){
   299          }
   300        }
   301        p2: (struct){
   302          countries: (string){ |((string){ "US" }, (string){ "GB" }, (string){ "AU" }) }
   303          FlagsURLs: (struct){
   304          }
   305        }
   306        p3: (struct){
   307          FlagsURLs: (struct){
   308          }
   309          countries: (string){ |((string){ "US" }, (string){ "GB" }, (string){ "AU" }) }
   310        }
   311      }
   312    }
   313    issue3638: (struct){
   314      full: (struct){
   315        routes: (struct){
   316          default: (struct){
   317            spec: (#list){
   318              0: (struct){
   319                refs: (#list){
   320                  0: (string){ "default" }
   321                }
   322              }
   323            }
   324          }
   325        }
   326        #Fields: (#struct){
   327          input: (_){ _ }
   328          output: (_|_){
   329            // [incomplete] issue3638.full.#Fields.output: cannot range over input (incomplete type _):
   330            //     ./multi.cue:10:21
   331          }
   332        }
   333        #Kubernetes: (#struct){
   334          Routes: (#struct){
   335            route: (#struct){
   336            }
   337          }
   338          input: (#struct){
   339            res1: ~(issue3638.full.#Kubernetes.Routes)
   340          }
   341          output: (#list){
   342            0: (#struct){
   343              route: (#struct){
   344              }
   345            }
   346          }
   347        }
   348        let HTTPROUTESPEC#1 = (struct){
   349          #x: (#list){ |(*(#list){
   350              0: (#struct){
   351                other: (#list){
   352                }
   353              }
   354            }, (list){
   355            }) }
   356        }
   357        entrypoint: ~(issue3638.full.used.output)
   358        used: (#struct){
   359          Routes: (#struct){
   360            route: (#struct){
   361              default: (#struct){
   362                spec: (#list){
   363                  0: (#struct){
   364                    refs: (#list){
   365                      0: (string){ "default" }
   366                    }
   367                  }
   368                }
   369              }
   370            }
   371          }
   372          input: (#struct){
   373            res1: (#struct){
   374              route: (#struct){
   375                default: (#struct){
   376                  spec: (#list){
   377                    0: (#struct){
   378                      refs: (#list){
   379                        0: (string){ "default" }
   380                      }
   381                    }
   382                  }
   383                }
   384              }
   385            }
   386          }
   387          output: (#list){
   388            0: (#struct){
   389              route: (#struct){
   390                default: (#struct){
   391                  spec: (#list){
   392                    0: (#struct){
   393                      refs: (#list){
   394                        0: (string){ "default" }
   395                      }
   396                    }
   397                  }
   398                }
   399              }
   400            }
   401          }
   402        }
   403      }
   404      reduced: (struct){
   405        input: (struct){
   406          k1: (struct){
   407            foo: (#struct){
   408              a: (int){ 1 }
   409            }
   410          }
   411        }
   412        out: (struct){
   413          foo: (#struct){
   414            a: (int){ 1 }
   415          }
   416        }
   417        #x: (#struct){ |(*(#struct){
   418            b: (int){ 2 }
   419          }, (#struct){
   420            a: (int){ int }
   421          }) }
   422      }
   423      compare: (struct){
   424        input: (struct){
   425          k1: (struct){
   426            foo: (#struct){
   427              a: (int){ 1 }
   428            }
   429          }
   430        }
   431        out: (struct){
   432          foo: (#struct){
   433            a: (int){ 1 }
   434          }
   435        }
   436        #x: (#struct){ |(*(#struct){
   437            b: (int){ 2 }
   438          }, (#struct){
   439            a: (int){ int }
   440          }) }
   441      }
   442    }
   443  }
   444  -- diff/-out/evalalpha<==>+out/eval --
   445  diff old new
   446  --- old
   447  +++ new
   448  @@ -1,34 +1,10 @@
   449   Errors:
   450   issue3670.a.not_int: field not allowed:
   451  -    ./intpattern.cue:2:6
   452  -    ./intpattern.cue:3:5
   453       ./intpattern.cue:4:5
   454   t1.c.z: field not allowed:
   455  -    ./in.cue:15:6
   456  -    ./in.cue:19:5
   457       ./in.cue:19:11
   458   t2.c.z: field not allowed:
   459  -    ./in.cue:23:6
   460  -    ./in.cue:27:5
   461       ./in.cue:27:11
   462  -patternCycle.issue2109.p1.countries: cyclic pattern constraint:
   463  -    ./issue2109.cue:11:15
   464  -    ./issue2109.cue:10:13
   465  -patternCycle.issue2109.p2.countries: cyclic pattern constraint:
   466  -    ./issue2109.cue:15:15
   467  -    ./issue2109.cue:17:13
   468  -patternCycle.issue2109.p3.countries: cyclic pattern constraint:
   469  -    ./issue2109.cue:21:15
   470  -    ./issue2109.cue:22:13
   471  -patternCycle.t1.p1.countries: cyclic pattern constraint:
   472  -    ./issue2109.cue:27:15
   473  -    ./issue2109.cue:26:13
   474  -patternCycle.t1.p2.countries: cyclic pattern constraint:
   475  -    ./issue2109.cue:33:15
   476  -    ./issue2109.cue:32:13
   477  -patternCycle.t1.p3.countries: cyclic pattern constraint:
   478  -    ./issue2109.cue:37:15
   479  -    ./issue2109.cue:38:13
   480   
   481   Result:
   482   (_|_){
   483  @@ -41,16 +17,16 @@
   484       }
   485     }
   486     d: (struct){
   487  -    foo: (struct){
   488  -      a: (int){ 1 }
   489  -      b: (int){ 1 }
   490  -      name: (string){ "foo" }
   491  -    }
   492       foobar: (struct){
   493         c: (int){ 2 }
   494         b: (int){ 1 }
   495         name: (string){ "foobar" }
   496       }
   497  +    foo: (struct){
   498  +      a: (int){ 1 }
   499  +      b: (int){ 1 }
   500  +      name: (string){ "foo" }
   501  +    }
   502     }
   503     t1: (_|_){
   504       // [eval]
   505  @@ -63,8 +39,6 @@
   506         // [eval]
   507         z: (_|_){
   508           // [eval] t1.c.z: field not allowed:
   509  -        //     ./in.cue:15:6
   510  -        //     ./in.cue:19:5
   511           //     ./in.cue:19:11
   512         }
   513       }
   514  @@ -80,8 +54,6 @@
   515         // [eval]
   516         z: (_|_){
   517           // [eval] t2.c.z: field not allowed:
   518  -        //     ./in.cue:23:6
   519  -        //     ./in.cue:27:5
   520           //     ./in.cue:27:11
   521         }
   522       }
   523  @@ -94,94 +66,56 @@
   524         // [eval]
   525         not_int: (_|_){
   526           // [eval] issue3670.a.not_int: field not allowed:
   527  -        //     ./intpattern.cue:2:6
   528  -        //     ./intpattern.cue:3:5
   529           //     ./intpattern.cue:4:5
   530         }
   531       }
   532     }
   533     dual: (_){ _ }
   534  -  patternCycle: (_|_){
   535  -    // [eval]
   536  -    issue2109: (_|_){
   537  -      // [eval]
   538  -      p1: (_|_){
   539  -        // [eval]
   540  -        countries: (_|_){
   541  -          // [eval] patternCycle.issue2109.p1.countries: cyclic pattern constraint:
   542  -          //     ./issue2109.cue:11:15
   543  -          //     ./issue2109.cue:10:13
   544  -          0: (string){ "US" }
   545  -          1: (string){ "GB" }
   546  -          2: (string){ "AU" }
   547  -        }
   548  -        FlagsURLs: (struct){
   549  -        }
   550  -      }
   551  -      p2: (_|_){
   552  -        // [eval]
   553  -        FlagsURLs: (struct){
   554  -        }
   555  -        countries: (_|_){
   556  -          // [eval] patternCycle.issue2109.p2.countries: cyclic pattern constraint:
   557  -          //     ./issue2109.cue:15:15
   558  -          //     ./issue2109.cue:17:13
   559  -          0: (_|_){// "US"
   560  -          }
   561  -          1: (_|_){// "GB"
   562  -          }
   563  -          2: (_|_){// "AU"
   564  -          }
   565  -        }
   566  -      }
   567  -      p3: (_|_){
   568  -        // [eval]
   569  -        FlagsURLs: (struct){
   570  -        }
   571  -        countries: (_|_){
   572  -          // [eval] patternCycle.issue2109.p3.countries: cyclic pattern constraint:
   573  -          //     ./issue2109.cue:21:15
   574  -          //     ./issue2109.cue:22:13
   575  -          0: (_|_){// "US"
   576  -          }
   577  -          1: (_|_){// "GB"
   578  -          }
   579  -          2: (_|_){// "AU"
   580  -          }
   581  -        }
   582  -      }
   583  -    }
   584  -    t1: (_|_){
   585  -      // [eval]
   586  -      p1: (_|_){
   587  -        // [eval]
   588  -        countries: (_|_){
   589  -          // [eval] patternCycle.t1.p1.countries: cyclic pattern constraint:
   590  -          //     ./issue2109.cue:27:15
   591  -          //     ./issue2109.cue:26:13
   592  -        }
   593  -        FlagsURLs: (struct){
   594  -        }
   595  -      }
   596  -      p2: (_|_){
   597  -        // [eval]
   598  -        countries: (_|_){
   599  -          // [eval] patternCycle.t1.p2.countries: cyclic pattern constraint:
   600  -          //     ./issue2109.cue:33:15
   601  -          //     ./issue2109.cue:32:13
   602  -        }
   603  -        FlagsURLs: (struct){
   604  -        }
   605  -      }
   606  -      p3: (_|_){
   607  -        // [eval]
   608  -        FlagsURLs: (struct){
   609  -        }
   610  -        countries: (_|_){
   611  -          // [eval] patternCycle.t1.p3.countries: cyclic pattern constraint:
   612  -          //     ./issue2109.cue:37:15
   613  -          //     ./issue2109.cue:38:13
   614  -        }
   615  +  patternCycle: (struct){
   616  +    issue2109: (struct){
   617  +      p1: (struct){
   618  +        countries: (#list){
   619  +          0: (string){ "US" }
   620  +          1: (string){ "GB" }
   621  +          2: (string){ "AU" }
   622  +        }
   623  +        FlagsURLs: (struct){
   624  +        }
   625  +      }
   626  +      p2: (struct){
   627  +        FlagsURLs: (struct){
   628  +        }
   629  +        countries: (#list){
   630  +          0: (string){ "US" }
   631  +          1: (string){ "GB" }
   632  +          2: (string){ "AU" }
   633  +        }
   634  +      }
   635  +      p3: (struct){
   636  +        FlagsURLs: (struct){
   637  +        }
   638  +        countries: (#list){
   639  +          0: (string){ "US" }
   640  +          1: (string){ "GB" }
   641  +          2: (string){ "AU" }
   642  +        }
   643  +      }
   644  +    }
   645  +    t1: (struct){
   646  +      p1: (struct){
   647  +        countries: (string){ |((string){ "US" }, (string){ "GB" }, (string){ "AU" }) }
   648  +        FlagsURLs: (struct){
   649  +        }
   650  +      }
   651  +      p2: (struct){
   652  +        countries: (string){ |((string){ "US" }, (string){ "GB" }, (string){ "AU" }) }
   653  +        FlagsURLs: (struct){
   654  +        }
   655  +      }
   656  +      p3: (struct){
   657  +        FlagsURLs: (struct){
   658  +        }
   659  +        countries: (string){ |((string){ "US" }, (string){ "GB" }, (string){ "AU" }) }
   660         }
   661       }
   662     }
   663  @@ -206,20 +140,17 @@
   664           }
   665         }
   666         #Kubernetes: (#struct){
   667  -        input: (#struct){
   668  -          res1: (#struct){
   669  -            route: (#struct){
   670  -            }
   671  -          }
   672  -        }
   673  -        output: (#list){
   674  -          0: (#struct){
   675  -            route: (#struct){
   676  -            }
   677  -          }
   678  -        }
   679  -        Routes: (#struct){
   680  -          route: (#struct){
   681  +        Routes: (#struct){
   682  +          route: (#struct){
   683  +          }
   684  +        }
   685  +        input: (#struct){
   686  +          res1: ~(issue3638.full.#Kubernetes.Routes)
   687  +        }
   688  +        output: (#list){
   689  +          0: (#struct){
   690  +            route: (#struct){
   691  +            }
   692             }
   693           }
   694         }
   695  @@ -232,60 +163,8 @@
   696             }, (list){
   697             }) }
   698         }
   699  -      entrypoint: (#list){
   700  -        0: (struct){
   701  -          route: (struct){
   702  -            default: (struct){
   703  -              spec: (#list){
   704  -                0: (#struct){
   705  -                  refs: (#list){
   706  -                    0: (string){ "default" }
   707  -                  }
   708  -                }
   709  -              }
   710  -            }
   711  -          }
   712  -        }
   713  -      }
   714  +      entrypoint: ~(issue3638.full.used.output)
   715         used: (#struct){
   716  -        input: (#struct){
   717  -          res1: (#struct){
   718  -            route: (#struct){
   719  -              default: (#struct){
   720  -                spec: (#list){
   721  -                  0: (#struct){
   722  -                    refs: (#list){
   723  -                      0: (string){ "default" }
   724  -                    }
   725  -                  }
   726  -                }
   727  -              }
   728  -            }
   729  -          }
   730  -        }
   731  -        output: (#list){
   732  -          0: (#struct){
   733  -            route: (#struct){
   734  -              default: (#struct){
   735  -                spec: (list){ |(*(#list){
   736  -                    0: (#struct){
   737  -                      refs: (#list){
   738  -                        0: (string){ "default" }
   739  -                      }
   740  -                      other: (#list){
   741  -                      }
   742  -                    }
   743  -                  }, (#list){
   744  -                    0: (#struct){
   745  -                      refs: (#list){
   746  -                        0: (string){ "default" }
   747  -                      }
   748  -                    }
   749  -                  }) }
   750  -              }
   751  -            }
   752  -          }
   753  -        }
   754           Routes: (#struct){
   755             route: (#struct){
   756               default: (#struct){
   757  @@ -299,6 +178,36 @@
   758               }
   759             }
   760           }
   761  +        input: (#struct){
   762  +          res1: (#struct){
   763  +            route: (#struct){
   764  +              default: (#struct){
   765  +                spec: (#list){
   766  +                  0: (#struct){
   767  +                    refs: (#list){
   768  +                      0: (string){ "default" }
   769  +                    }
   770  +                  }
   771  +                }
   772  +              }
   773  +            }
   774  +          }
   775  +        }
   776  +        output: (#list){
   777  +          0: (#struct){
   778  +            route: (#struct){
   779  +              default: (#struct){
   780  +                spec: (#list){
   781  +                  0: (#struct){
   782  +                    refs: (#list){
   783  +                      0: (string){ "default" }
   784  +                    }
   785  +                  }
   786  +                }
   787  +              }
   788  +            }
   789  +          }
   790  +        }
   791         }
   792       }
   793       reduced: (struct){
   794  @@ -310,12 +219,9 @@
   795           }
   796         }
   797         out: (struct){
   798  -        foo: (#struct){ |(*(#struct){
   799  -            a: (int){ 1 }
   800  -            b: (int){ 2 }
   801  -          }, (#struct){
   802  -            a: (int){ 1 }
   803  -          }) }
   804  +        foo: (#struct){
   805  +          a: (int){ 1 }
   806  +        }
   807         }
   808         #x: (#struct){ |(*(#struct){
   809             b: (int){ 2 }
   810  @@ -332,12 +238,9 @@
   811           }
   812         }
   813         out: (struct){
   814  -        foo: (#struct){ |(*(#struct){
   815  -            a: (int){ 1 }
   816  -            b: (int){ 2 }
   817  -          }, (#struct){
   818  -            a: (int){ 1 }
   819  -          }) }
   820  +        foo: (#struct){
   821  +          a: (int){ 1 }
   822  +        }
   823         }
   824         #x: (#struct){ |(*(#struct){
   825             b: (int){ 2 }
   826  -- diff/todo/p3 --
   827  Reordering of error messages.
   828  -- diff/explanation --
   829  Overall, the previous errors now passing is acceptable and consistent with
   830  the behavior of the new evaluator.
   831  issue3638: in V2, there was a spurious default marker to disambiguate
   832  a disjunction that should have already been disambiguated.
   833  In V3, the disjunction is properly disambiguated.
   834  -- out/eval --
   835  Errors:
   836  issue3670.a.not_int: field not allowed:
   837      ./intpattern.cue:2:6
   838      ./intpattern.cue:3:5
   839      ./intpattern.cue:4:5
   840  t1.c.z: field not allowed:
   841      ./in.cue:15:6
   842      ./in.cue:19:5
   843      ./in.cue:19:11
   844  t2.c.z: field not allowed:
   845      ./in.cue:23:6
   846      ./in.cue:27:5
   847      ./in.cue:27:11
   848  patternCycle.issue2109.p1.countries: cyclic pattern constraint:
   849      ./issue2109.cue:11:15
   850      ./issue2109.cue:10:13
   851  patternCycle.issue2109.p2.countries: cyclic pattern constraint:
   852      ./issue2109.cue:15:15
   853      ./issue2109.cue:17:13
   854  patternCycle.issue2109.p3.countries: cyclic pattern constraint:
   855      ./issue2109.cue:21:15
   856      ./issue2109.cue:22:13
   857  patternCycle.t1.p1.countries: cyclic pattern constraint:
   858      ./issue2109.cue:27:15
   859      ./issue2109.cue:26:13
   860  patternCycle.t1.p2.countries: cyclic pattern constraint:
   861      ./issue2109.cue:33:15
   862      ./issue2109.cue:32:13
   863  patternCycle.t1.p3.countries: cyclic pattern constraint:
   864      ./issue2109.cue:37:15
   865      ./issue2109.cue:38:13
   866  
   867  Result:
   868  (_|_){
   869    // [eval]
   870    a: (struct){
   871      foo: (struct){
   872        a: (int){ 1 }
   873        b: (int){ 1 }
   874        name: (string){ "foo" }
   875      }
   876    }
   877    d: (struct){
   878      foo: (struct){
   879        a: (int){ 1 }
   880        b: (int){ 1 }
   881        name: (string){ "foo" }
   882      }
   883      foobar: (struct){
   884        c: (int){ 2 }
   885        b: (int){ 1 }
   886        name: (string){ "foobar" }
   887      }
   888    }
   889    t1: (_|_){
   890      // [eval]
   891      #a: (#struct){
   892      }
   893      b: (#struct){
   894        f: (int){ 4 }
   895      }
   896      c: (_|_){
   897        // [eval]
   898        z: (_|_){
   899          // [eval] t1.c.z: field not allowed:
   900          //     ./in.cue:15:6
   901          //     ./in.cue:19:5
   902          //     ./in.cue:19:11
   903        }
   904      }
   905    }
   906    t2: (_|_){
   907      // [eval]
   908      #a: (#struct){
   909      }
   910      b: (#struct){
   911        x: (int){ 4 }
   912      }
   913      c: (_|_){
   914        // [eval]
   915        z: (_|_){
   916          // [eval] t2.c.z: field not allowed:
   917          //     ./in.cue:23:6
   918          //     ./in.cue:27:5
   919          //     ./in.cue:27:11
   920        }
   921      }
   922    }
   923    issue3670: (_|_){
   924      // [eval]
   925      #X: (#struct){
   926      }
   927      a: (_|_){
   928        // [eval]
   929        not_int: (_|_){
   930          // [eval] issue3670.a.not_int: field not allowed:
   931          //     ./intpattern.cue:2:6
   932          //     ./intpattern.cue:3:5
   933          //     ./intpattern.cue:4:5
   934        }
   935      }
   936    }
   937    dual: (_){ _ }
   938    patternCycle: (_|_){
   939      // [eval]
   940      issue2109: (_|_){
   941        // [eval]
   942        p1: (_|_){
   943          // [eval]
   944          countries: (_|_){
   945            // [eval] patternCycle.issue2109.p1.countries: cyclic pattern constraint:
   946            //     ./issue2109.cue:11:15
   947            //     ./issue2109.cue:10:13
   948            0: (string){ "US" }
   949            1: (string){ "GB" }
   950            2: (string){ "AU" }
   951          }
   952          FlagsURLs: (struct){
   953          }
   954        }
   955        p2: (_|_){
   956          // [eval]
   957          FlagsURLs: (struct){
   958          }
   959          countries: (_|_){
   960            // [eval] patternCycle.issue2109.p2.countries: cyclic pattern constraint:
   961            //     ./issue2109.cue:15:15
   962            //     ./issue2109.cue:17:13
   963            0: (_|_){// "US"
   964            }
   965            1: (_|_){// "GB"
   966            }
   967            2: (_|_){// "AU"
   968            }
   969          }
   970        }
   971        p3: (_|_){
   972          // [eval]
   973          FlagsURLs: (struct){
   974          }
   975          countries: (_|_){
   976            // [eval] patternCycle.issue2109.p3.countries: cyclic pattern constraint:
   977            //     ./issue2109.cue:21:15
   978            //     ./issue2109.cue:22:13
   979            0: (_|_){// "US"
   980            }
   981            1: (_|_){// "GB"
   982            }
   983            2: (_|_){// "AU"
   984            }
   985          }
   986        }
   987      }
   988      t1: (_|_){
   989        // [eval]
   990        p1: (_|_){
   991          // [eval]
   992          countries: (_|_){
   993            // [eval] patternCycle.t1.p1.countries: cyclic pattern constraint:
   994            //     ./issue2109.cue:27:15
   995            //     ./issue2109.cue:26:13
   996          }
   997          FlagsURLs: (struct){
   998          }
   999        }
  1000        p2: (_|_){
  1001          // [eval]
  1002          countries: (_|_){
  1003            // [eval] patternCycle.t1.p2.countries: cyclic pattern constraint:
  1004            //     ./issue2109.cue:33:15
  1005            //     ./issue2109.cue:32:13
  1006          }
  1007          FlagsURLs: (struct){
  1008          }
  1009        }
  1010        p3: (_|_){
  1011          // [eval]
  1012          FlagsURLs: (struct){
  1013          }
  1014          countries: (_|_){
  1015            // [eval] patternCycle.t1.p3.countries: cyclic pattern constraint:
  1016            //     ./issue2109.cue:37:15
  1017            //     ./issue2109.cue:38:13
  1018          }
  1019        }
  1020      }
  1021    }
  1022    issue3638: (struct){
  1023      full: (struct){
  1024        routes: (struct){
  1025          default: (struct){
  1026            spec: (#list){
  1027              0: (struct){
  1028                refs: (#list){
  1029                  0: (string){ "default" }
  1030                }
  1031              }
  1032            }
  1033          }
  1034        }
  1035        #Fields: (#struct){
  1036          input: (_){ _ }
  1037          output: (_|_){
  1038            // [incomplete] issue3638.full.#Fields.output: cannot range over input (incomplete type _):
  1039            //     ./multi.cue:10:21
  1040          }
  1041        }
  1042        #Kubernetes: (#struct){
  1043          input: (#struct){
  1044            res1: (#struct){
  1045              route: (#struct){
  1046              }
  1047            }
  1048          }
  1049          output: (#list){
  1050            0: (#struct){
  1051              route: (#struct){
  1052              }
  1053            }
  1054          }
  1055          Routes: (#struct){
  1056            route: (#struct){
  1057            }
  1058          }
  1059        }
  1060        let HTTPROUTESPEC#1 = (struct){
  1061          #x: (#list){ |(*(#list){
  1062              0: (#struct){
  1063                other: (#list){
  1064                }
  1065              }
  1066            }, (list){
  1067            }) }
  1068        }
  1069        entrypoint: (#list){
  1070          0: (struct){
  1071            route: (struct){
  1072              default: (struct){
  1073                spec: (#list){
  1074                  0: (#struct){
  1075                    refs: (#list){
  1076                      0: (string){ "default" }
  1077                    }
  1078                  }
  1079                }
  1080              }
  1081            }
  1082          }
  1083        }
  1084        used: (#struct){
  1085          input: (#struct){
  1086            res1: (#struct){
  1087              route: (#struct){
  1088                default: (#struct){
  1089                  spec: (#list){
  1090                    0: (#struct){
  1091                      refs: (#list){
  1092                        0: (string){ "default" }
  1093                      }
  1094                    }
  1095                  }
  1096                }
  1097              }
  1098            }
  1099          }
  1100          output: (#list){
  1101            0: (#struct){
  1102              route: (#struct){
  1103                default: (#struct){
  1104                  spec: (list){ |(*(#list){
  1105                      0: (#struct){
  1106                        refs: (#list){
  1107                          0: (string){ "default" }
  1108                        }
  1109                        other: (#list){
  1110                        }
  1111                      }
  1112                    }, (#list){
  1113                      0: (#struct){
  1114                        refs: (#list){
  1115                          0: (string){ "default" }
  1116                        }
  1117                      }
  1118                    }) }
  1119                }
  1120              }
  1121            }
  1122          }
  1123          Routes: (#struct){
  1124            route: (#struct){
  1125              default: (#struct){
  1126                spec: (#list){
  1127                  0: (#struct){
  1128                    refs: (#list){
  1129                      0: (string){ "default" }
  1130                    }
  1131                  }
  1132                }
  1133              }
  1134            }
  1135          }
  1136        }
  1137      }
  1138      reduced: (struct){
  1139        input: (struct){
  1140          k1: (struct){
  1141            foo: (#struct){
  1142              a: (int){ 1 }
  1143            }
  1144          }
  1145        }
  1146        out: (struct){
  1147          foo: (#struct){ |(*(#struct){
  1148              a: (int){ 1 }
  1149              b: (int){ 2 }
  1150            }, (#struct){
  1151              a: (int){ 1 }
  1152            }) }
  1153        }
  1154        #x: (#struct){ |(*(#struct){
  1155            b: (int){ 2 }
  1156          }, (#struct){
  1157            a: (int){ int }
  1158          }) }
  1159      }
  1160      compare: (struct){
  1161        input: (struct){
  1162          k1: (struct){
  1163            foo: (#struct){
  1164              a: (int){ 1 }
  1165            }
  1166          }
  1167        }
  1168        out: (struct){
  1169          foo: (#struct){ |(*(#struct){
  1170              a: (int){ 1 }
  1171              b: (int){ 2 }
  1172            }, (#struct){
  1173              a: (int){ 1 }
  1174            }) }
  1175        }
  1176        #x: (#struct){ |(*(#struct){
  1177            b: (int){ 2 }
  1178          }, (#struct){
  1179            a: (int){ int }
  1180          }) }
  1181      }
  1182    }
  1183  }
  1184  -- out/compile --
  1185  --- in.cue
  1186  {
  1187    a: {
  1188      foo: {
  1189        a: 1
  1190      }
  1191      [=~"foo"]: {
  1192        b: 1
  1193        name: 〈1;-〉
  1194      }
  1195    }
  1196    d: (〈0;a〉 & {
  1197      foobar: {
  1198        c: 2
  1199      }
  1200    })
  1201    t1: {
  1202      #a: {
  1203        [(>"e" & <"z")]: int
  1204      }
  1205      b: (〈0;#a〉 & {
  1206        f: 4
  1207      })
  1208      c: (〈0;#a〉 & {
  1209        z: 4
  1210      })
  1211    }
  1212    t2: {
  1213      #a: {
  1214        [("x"|"y")]: int
  1215      }
  1216      b: (〈0;#a〉 & {
  1217        x: 4
  1218      })
  1219      c: (〈0;#a〉 & {
  1220        z: 4
  1221      })
  1222    }
  1223  }
  1224  --- intpattern.cue
  1225  {
  1226    issue3670: {
  1227      #X: {
  1228        [int]: string
  1229      }
  1230      a: 〈0;#X〉
  1231      a: {
  1232        not_int: "c"
  1233      }
  1234    }
  1235    dual: {
  1236      _
  1237      [string]: _
  1238      [int]: _
  1239    }
  1240  }
  1241  --- issue2109.cue
  1242  {
  1243    patternCycle: {
  1244      issue2109: {
  1245        p1: {
  1246          countries: [
  1247            "US",
  1248            "GB",
  1249            "AU",
  1250          ]
  1251          FlagsURLs: {
  1252            [or(〈1;countries〉)]: string
  1253          }
  1254          〈0;FlagsURLs〉
  1255        }
  1256      }
  1257    }
  1258    patternCycle: {
  1259      issue2109: {
  1260        p2: {
  1261          FlagsURLs: {
  1262            [or(〈1;countries〉)]: string
  1263          }
  1264          〈0;FlagsURLs〉
  1265          countries: [
  1266            "US",
  1267            "GB",
  1268            "AU",
  1269          ]
  1270        }
  1271      }
  1272    }
  1273    patternCycle: {
  1274      issue2109: {
  1275        p3: {
  1276          〈0;FlagsURLs〉
  1277          FlagsURLs: {
  1278            [or(〈1;countries〉)]: string
  1279          }
  1280          countries: [
  1281            "US",
  1282            "GB",
  1283            "AU",
  1284          ]
  1285        }
  1286      }
  1287    }
  1288    patternCycle: {
  1289      t1: {
  1290        p1: {
  1291          countries: ("US"|"GB"|"AU")
  1292          FlagsURLs: {
  1293            [〈1;countries〉]: string
  1294          }
  1295          〈0;FlagsURLs〉
  1296        }
  1297      }
  1298    }
  1299    patternCycle: {
  1300      t1: {
  1301        p2: {
  1302          〈0;FlagsURLs〉
  1303          countries: ("US"|"GB"|"AU")
  1304          FlagsURLs: {
  1305            [〈1;countries〉]: string
  1306          }
  1307        }
  1308      }
  1309    }
  1310    patternCycle: {
  1311      t1: {
  1312        p3: {
  1313          〈0;FlagsURLs〉
  1314          FlagsURLs: {
  1315            [〈1;countries〉]: string
  1316          }
  1317          countries: ("US"|"GB"|"AU")
  1318        }
  1319      }
  1320    }
  1321  }
  1322  --- multi.cue
  1323  {
  1324    issue3638: {
  1325      full: {
  1326        routes: {
  1327          default: {}
  1328        }
  1329        routes: {
  1330          [string]: {
  1331            spec: [
  1332              {
  1333                refs: [
  1334                  {
  1335                    "default"
  1336                  },
  1337                ]
  1338              },
  1339            ]
  1340          }
  1341        }
  1342        #Fields: {
  1343          input: _
  1344          output: [
  1345            for _, x in 〈1;input〉 {
  1346              〈1;x〉
  1347            },
  1348          ]
  1349          ...
  1350        }
  1351        #Kubernetes: {
  1352          (〈1;#Fields〉 & {
  1353            Routes: {
  1354              route: {
  1355                [_]: {
  1356                  spec!: 〈5;let HTTPROUTESPEC#1〉.#x
  1357                }
  1358              }
  1359            }
  1360          })
  1361          〈1;#Fields〉
  1362          Routes: _
  1363          input: {
  1364            res1: 〈1;Routes〉
  1365          }
  1366        }
  1367        let HTTPROUTESPEC#1 = {
  1368          #x: ([
  1369            ...{
  1370              refs: [
  1371                ...{
  1372                  string
  1373                },
  1374              ]
  1375            },
  1376          ]|*[
  1377            {
  1378              other: []
  1379            },
  1380          ])
  1381        }
  1382        entrypoint: 〈0;used〉.output
  1383        used: (〈0;#Kubernetes〉 & {
  1384          Routes: {
  1385            route: 〈2;routes〉
  1386          }
  1387        })
  1388      }
  1389    }
  1390    issue3638: {
  1391      reduced: {
  1392        input: {
  1393          k1: {
  1394            [string]: {
  1395              a: 1
  1396            }
  1397          }
  1398        }
  1399        input: {
  1400          k1: {
  1401            foo: 〈2;#x〉
  1402          }
  1403        }
  1404        out: {
  1405          for _, x in 〈1;input〉 {
  1406            〈1;x〉
  1407          }
  1408          for _, x in 〈1;input〉 {
  1409            〈1;x〉
  1410          }
  1411        }
  1412        #x: ({
  1413          a: int
  1414        }|*{
  1415          b: 2
  1416        })
  1417      }
  1418    }
  1419    issue3638: {
  1420      compare: {
  1421        input: {
  1422          k1: {
  1423            foo: {
  1424              a: 1
  1425            }
  1426          }
  1427        }
  1428        input: {
  1429          k1: {
  1430            foo: 〈2;#x〉
  1431          }
  1432        }
  1433        out: {
  1434          for _, x in 〈1;input〉 {
  1435            〈1;x〉
  1436          }
  1437          for _, x in 〈1;input〉 {
  1438            〈1;x〉
  1439          }
  1440        }
  1441        #x: ({
  1442          a: int
  1443        }|*{
  1444          b: 2
  1445        })
  1446      }
  1447    }
  1448  }