cuelang.org/go@v0.10.1/cue/testdata/comprehensions/issue293.txtar (about)

     1  
     2  -- in.cue --
     3  #T: {
     4  	if true {
     5  		// We'd like to restrict the possible members of x in this case,
     6  		// but this doesn't work.
     7  		x: close({
     8  			f1: int
     9  		})
    10  	}
    11  	x: _
    12  }
    13  z: #T & {
    14  	x: {
    15  		f1: 99
    16  		f2: "i want to disallow this"
    17  	}
    18  }
    19  
    20  t: #C
    21  #C: {
    22  	if true {
    23  		p: _
    24  	}
    25  }
    26  t: p: "foo"
    27  
    28  -- variant1.cue --
    29  #V1: {
    30  	x: close({ f1: int })
    31  	x: f2: 2
    32  }
    33  -- out/eval/stats --
    34  Leaks:  3
    35  Freed:  16
    36  Reused: 12
    37  Allocs: 7
    38  Retain: 4
    39  
    40  Unifications: 19
    41  Conjuncts:    33
    42  Disjuncts:    20
    43  -- out/evalalpha --
    44  Errors:
    45  z.x.f2: field not allowed:
    46      ./in.cue:5:6
    47      ./in.cue:14:3
    48  #V1.x.f2: field not allowed:
    49      ./variant1.cue:2:5
    50      ./variant1.cue:3:5
    51  
    52  Result:
    53  (_|_){
    54    // [eval]
    55    #T: (#struct){
    56      x: (#struct){
    57        f1: (int){ int }
    58      }
    59    }
    60    z: (_|_){
    61      // [eval]
    62      x: (_|_){
    63        // [eval]
    64        f1: (int){ 99 }
    65        f2: (_|_){
    66          // [eval] z.x.f2: field not allowed:
    67          //     ./in.cue:5:6
    68          //     ./in.cue:14:3
    69        }
    70      }
    71    }
    72    t: (#struct){
    73      p: (string){ "foo" }
    74    }
    75    #C: (#struct){
    76      p: (_){ _ }
    77    }
    78    #V1: (_|_){
    79      // [eval]
    80      x: (_|_){
    81        // [eval]
    82        f2: (_|_){
    83          // [eval] #V1.x.f2: field not allowed:
    84          //     ./variant1.cue:2:5
    85          //     ./variant1.cue:3:5
    86        }
    87        f1: (int){ int }
    88      }
    89    }
    90  }
    91  -- diff/-out/evalalpha<==>+out/eval --
    92  diff old new
    93  --- old
    94  +++ new
    95  @@ -1,12 +1,10 @@
    96   Errors:
    97  -#V1.x.f2: field not allowed:
    98  -    ./variant1.cue:2:11
    99  -    ./variant1.cue:3:5
   100   z.x.f2: field not allowed:
   101  -    ./in.cue:2:2
   102  -    ./in.cue:5:12
   103  -    ./in.cue:11:4
   104  +    ./in.cue:5:6
   105       ./in.cue:14:3
   106  +#V1.x.f2: field not allowed:
   107  +    ./variant1.cue:2:5
   108  +    ./variant1.cue:3:5
   109   
   110   Result:
   111   (_|_){
   112  @@ -23,9 +21,7 @@
   113         f1: (int){ 99 }
   114         f2: (_|_){
   115           // [eval] z.x.f2: field not allowed:
   116  -        //     ./in.cue:2:2
   117  -        //     ./in.cue:5:12
   118  -        //     ./in.cue:11:4
   119  +        //     ./in.cue:5:6
   120           //     ./in.cue:14:3
   121         }
   122       }
   123  @@ -40,12 +36,12 @@
   124       // [eval]
   125       x: (_|_){
   126         // [eval]
   127  -      f1: (int){ int }
   128         f2: (_|_){
   129           // [eval] #V1.x.f2: field not allowed:
   130  -        //     ./variant1.cue:2:11
   131  +        //     ./variant1.cue:2:5
   132           //     ./variant1.cue:3:5
   133         }
   134  +      f1: (int){ int }
   135       }
   136     }
   137   }
   138  -- diff/todo/p2 --
   139  Missing positions
   140  -- diff/todo/p3 --
   141  Reordering
   142  -- out/eval --
   143  Errors:
   144  #V1.x.f2: field not allowed:
   145      ./variant1.cue:2:11
   146      ./variant1.cue:3:5
   147  z.x.f2: field not allowed:
   148      ./in.cue:2:2
   149      ./in.cue:5:12
   150      ./in.cue:11:4
   151      ./in.cue:14:3
   152  
   153  Result:
   154  (_|_){
   155    // [eval]
   156    #T: (#struct){
   157      x: (#struct){
   158        f1: (int){ int }
   159      }
   160    }
   161    z: (_|_){
   162      // [eval]
   163      x: (_|_){
   164        // [eval]
   165        f1: (int){ 99 }
   166        f2: (_|_){
   167          // [eval] z.x.f2: field not allowed:
   168          //     ./in.cue:2:2
   169          //     ./in.cue:5:12
   170          //     ./in.cue:11:4
   171          //     ./in.cue:14:3
   172        }
   173      }
   174    }
   175    t: (#struct){
   176      p: (string){ "foo" }
   177    }
   178    #C: (#struct){
   179      p: (_){ _ }
   180    }
   181    #V1: (_|_){
   182      // [eval]
   183      x: (_|_){
   184        // [eval]
   185        f1: (int){ int }
   186        f2: (_|_){
   187          // [eval] #V1.x.f2: field not allowed:
   188          //     ./variant1.cue:2:11
   189          //     ./variant1.cue:3:5
   190        }
   191      }
   192    }
   193  }
   194  -- out/compile --
   195  --- in.cue
   196  {
   197    #T: {
   198      if true {
   199        x: close({
   200          f1: int
   201        })
   202      }
   203      x: _
   204    }
   205    z: (〈0;#T〉 & {
   206      x: {
   207        f1: 99
   208        f2: "i want to disallow this"
   209      }
   210    })
   211    t: 〈0;#C〉
   212    #C: {
   213      if true {
   214        p: _
   215      }
   216    }
   217    t: {
   218      p: "foo"
   219    }
   220  }
   221  --- variant1.cue
   222  {
   223    #V1: {
   224      x: close({
   225        f1: int
   226      })
   227      x: {
   228        f2: 2
   229      }
   230    }
   231  }