cuelang.org/go@v0.13.0/cue/testdata/definitions/036_closing_with_failed_optional.txtar (about) 1 #name: closing with failed optional 2 #evalPartial 3 -- in.cue -- 4 #k1: {a: int, b?: int} & #A // closed({a: int}) 5 6 #k2: #A & {a: int, b?: int} // closed({a: int}) 7 8 o1: {a?: 3} & {a?: 4} // {a?: _|_} 9 10 // Optional fields with error values can be elimintated when closing 11 #o2: {a?: 3} & {a?: 4} // close({}) 12 13 #d1: {a?: 2, b: 4} | {a?: 3, c: 5} 14 15 v1: #d1 & {a?: 3, b: 4} // close({b: 4}) 16 17 #A: {a: int} 18 -- out/def -- 19 #k1: { 20 a: int 21 b?: int 22 } & #A 23 #A: { 24 a: int 25 } 26 #k2: #A & { 27 a: int 28 b?: int 29 } 30 o1: { 31 a?: _|_ // conflicting values 3 and 4 32 } 33 34 // Optional fields with error values can be elimintated when closing 35 #o2: { 36 a?: _|_ // conflicting values 3 and 4 37 } 38 #d1: { 39 a?: 2 40 b: 4 41 } | { 42 a?: 3 43 c: 5 44 } 45 v1: #d1 & { 46 a?: 3 47 b: 4 48 } 49 -- out/export -- 50 o1: {} 51 v1: { 52 b: 4 53 } 54 -- out/yaml -- 55 o1: {} 56 v1: 57 b: 4 58 -- out/json -- 59 {"o1":{},"v1":{"b":4}} 60 -- out/legacy-debug -- 61 <0>{#k1: <1>C{a: int}, #A: <2>C{a: int}, #k2: <3>C{a: int}, o1: <4>{a?: _|_((3 & 4):conflicting values 3 and 4)}, #o2: <5>C{a?: _|_((3 & 4):conflicting values 3 and 4)}, #d1: (<6>C{a?: 2, b: 4} | <7>C{a?: 3, c: 5}), v1: <8>C{a?: _|_((2 & 3):conflicting values 2 and 3), b: 4}} 62 -- out/compile -- 63 --- in.cue 64 { 65 #k1: ({ 66 a: int 67 b?: int 68 } & 〈0;#A〉) 69 #k2: (〈0;#A〉 & { 70 a: int 71 b?: int 72 }) 73 o1: ({ 74 a?: 3 75 } & { 76 a?: 4 77 }) 78 #o2: ({ 79 a?: 3 80 } & { 81 a?: 4 82 }) 83 #d1: ({ 84 a?: 2 85 b: 4 86 }|{ 87 a?: 3 88 c: 5 89 }) 90 v1: (〈0;#d1〉 & { 91 a?: 3 92 b: 4 93 }) 94 #A: { 95 a: int 96 } 97 } 98 -- out/eval/stats -- 99 Leaks: 0 100 Freed: 28 101 Reused: 23 102 Allocs: 5 103 Retain: 1 104 105 Unifications: 24 106 Conjuncts: 43 107 Disjuncts: 29 108 -- out/evalalpha -- 109 (struct){ 110 #k1: (#struct){ 111 a: (int){ int } 112 b?: (_|_){ 113 // [eval] #k1.b: field not allowed: 114 // ./in.cue:1:15 115 } 116 } 117 #k2: (#struct){ 118 a: (int){ int } 119 b?: (_|_){ 120 // [eval] #k2.b: field not allowed: 121 // ./in.cue:3:20 122 } 123 } 124 o1: (struct){ 125 a?: (_|_){ 126 // [eval] o1.a: conflicting values 4 and 3: 127 // ./in.cue:5:10 128 // ./in.cue:5:20 129 } 130 } 131 #o2: (#struct){ 132 a?: (_|_){ 133 // [eval] #o2.a: conflicting values 4 and 3: 134 // ./in.cue:8:11 135 // ./in.cue:8:21 136 } 137 } 138 #d1: (#struct){ |((#struct){ 139 a?: (int){ 2 } 140 b: (int){ 4 } 141 }, (#struct){ 142 a?: (int){ 3 } 143 c: (int){ 5 } 144 }) } 145 v1: (#struct){ 146 a?: (_|_){ 147 // [eval] v1.a: conflicting values 2 and 3: 148 // ./in.cue:10:11 149 // ./in.cue:12:16 150 } 151 b: (int){ 4 } 152 } 153 #A: (#struct){ 154 a: (int){ int } 155 } 156 } 157 -- diff/-out/evalalpha<==>+out/eval -- 158 diff old new 159 --- old 160 +++ new 161 @@ -1,11 +1,17 @@ 162 (struct){ 163 #k1: (#struct){ 164 a: (int){ int } 165 - b?: (int){ int } 166 + b?: (_|_){ 167 + // [eval] #k1.b: field not allowed: 168 + // ./in.cue:1:15 169 + } 170 } 171 #k2: (#struct){ 172 a: (int){ int } 173 - b?: (int){ int } 174 + b?: (_|_){ 175 + // [eval] #k2.b: field not allowed: 176 + // ./in.cue:3:20 177 + } 178 } 179 o1: (struct){ 180 a?: (_|_){ 181 @@ -32,7 +38,6 @@ 182 a?: (_|_){ 183 // [eval] v1.a: conflicting values 2 and 3: 184 // ./in.cue:10:11 185 - // ./in.cue:12:5 186 // ./in.cue:12:16 187 } 188 b: (int){ 4 } 189 -- diff/todo/p2 -- 190 v1.a: Incorrect path in error message. 191 -- diff/todo/p3 -- 192 Missing error position. 193 -- out/eval -- 194 (struct){ 195 #k1: (#struct){ 196 a: (int){ int } 197 b?: (int){ int } 198 } 199 #k2: (#struct){ 200 a: (int){ int } 201 b?: (int){ int } 202 } 203 o1: (struct){ 204 a?: (_|_){ 205 // [eval] o1.a: conflicting values 4 and 3: 206 // ./in.cue:5:10 207 // ./in.cue:5:20 208 } 209 } 210 #o2: (#struct){ 211 a?: (_|_){ 212 // [eval] #o2.a: conflicting values 4 and 3: 213 // ./in.cue:8:11 214 // ./in.cue:8:21 215 } 216 } 217 #d1: (#struct){ |((#struct){ 218 a?: (int){ 2 } 219 b: (int){ 4 } 220 }, (#struct){ 221 a?: (int){ 3 } 222 c: (int){ 5 } 223 }) } 224 v1: (#struct){ 225 a?: (_|_){ 226 // [eval] v1.a: conflicting values 2 and 3: 227 // ./in.cue:10:11 228 // ./in.cue:12:5 229 // ./in.cue:12:16 230 } 231 b: (int){ 4 } 232 } 233 #A: (#struct){ 234 a: (int){ int } 235 } 236 }