1-- in.cue --
2// Given the existence of this field, embedDefault is a struct. This
3// means that embedding this conjunction into `embedDefault` itself should
4// make it resolve to `{a: 2}`.
5
6default: {
7 y: *1 | {a: 2}
8 y
9}
10
11unambiguous: {
12 y: 1 | {a: 2}
13 y
14}
15
16forDefault: {
17 y: *1 | {a: 2}
18 for x in [1] {y}
19}
20
21// Carry over default to first disjunct.
22openDefault: {
23 #y: *1 | {a: 2}
24 #y
25}
26
27openAmbiguous: {
28 #y: 1 | {a: 2}
29 #y
30}
31
32forceStruct: {
33 #y: 1 | {a: 2}
34 #y
35 {}
36}
37
38defaultsMulti: {
39 a: {
40 #def: {
41 *{} | {a: string} | {b: string}
42 *{} | {c: string} | {d: string}
43 }
44
45 a: #def & {a: "foo"}
46 }
47
48 b: {
49 #def: {
50 *{} | {a: string} | {b: string}
51 *{} | {c: string} | {d: string}
52 *{} | {d: string} | {e: string}
53 }
54
55 a: #def & {a: "foo", e: "bar"}
56 }
57}
58
59nested: {
60 a: 1 | 2 | *(
61 (3 | 4 | *( 5 | 6 | *7)) & ( 3 | 4 | ( *7 | 8 )))
62}
63-- out/eval/stats --
64Leaks: 1
65Freed: 416
66Reused: 381
67Allocs: 36
68Retain: 1
69
70Unifications: 257
71Conjuncts: 478
72Disjuncts: 417
73-- out/eval --
74(struct){
75 default: (struct){
76 y: ((int|struct)){ |(*(int){ 1 }, (struct){
77 a: (int){ 2 }
78 }) }
79 a: (int){ 2 }
80 }
81 unambiguous: (struct){
82 y: ((int|struct)){ |((int){ 1 }, (struct){
83 a: (int){ 2 }
84 }) }
85 a: (int){ 2 }
86 }
87 forDefault: (struct){
88 y: ((int|struct)){ |(*(int){ 1 }, (struct){
89 a: (int){ 2 }
90 }) }
91 a: (int){ 2 }
92 }
93 openDefault: ((int|struct)){ |(*(int){
94 1
95 #y: ((int|struct)){ |(*(int){ 1 }, (#struct){
96 a: (int){ 2 }
97 }) }
98 }, (#struct){
99 #y: ((int|struct)){ |(*(int){ 1 }, (#struct){
100 a: (int){ 2 }
101 }) }
102 a: (int){ 2 }
103 }) }
104 openAmbiguous: ((int|struct)){ |((int){
105 1
106 #y: ((int|struct)){ |((int){ 1 }, (#struct){
107 a: (int){ 2 }
108 }) }
109 }, (#struct){
110 #y: ((int|struct)){ |((int){ 1 }, (#struct){
111 a: (int){ 2 }
112 }) }
113 a: (int){ 2 }
114 }) }
115 forceStruct: (#struct){
116 #y: ((int|struct)){ |((int){ 1 }, (#struct){
117 a: (int){ 2 }
118 }) }
119 a: (int){ 2 }
120 }
121 defaultsMulti: (struct){
122 a: (struct){
123 #def: (#struct){ |(*(#struct){
124 }, (#struct){
125 c: (string){ string }
126 }, (#struct){
127 d: (string){ string }
128 }, (#struct){
129 a: (string){ string }
130 }, (#struct){
131 a: (string){ string }
132 c: (string){ string }
133 }, (#struct){
134 a: (string){ string }
135 d: (string){ string }
136 }, (#struct){
137 b: (string){ string }
138 }, (#struct){
139 b: (string){ string }
140 c: (string){ string }
141 }, (#struct){
142 b: (string){ string }
143 d: (string){ string }
144 }) }
145 a: (#struct){ |(*(#struct){
146 a: (string){ "foo" }
147 }, (#struct){
148 a: (string){ "foo" }
149 c: (string){ string }
150 }, (#struct){
151 a: (string){ "foo" }
152 d: (string){ string }
153 }) }
154 }
155 b: (struct){
156 #def: (#struct){ |(*(#struct){
157 }, (#struct){
158 d: (string){ string }
159 }, (#struct){
160 e: (string){ string }
161 }, (#struct){
162 c: (string){ string }
163 }, (#struct){
164 c: (string){ string }
165 d: (string){ string }
166 }, (#struct){
167 c: (string){ string }
168 e: (string){ string }
169 }, (#struct){
170 d: (string){ string }
171 e: (string){ string }
172 }, (#struct){
173 a: (string){ string }
174 }, (#struct){
175 a: (string){ string }
176 d: (string){ string }
177 }, (#struct){
178 a: (string){ string }
179 e: (string){ string }
180 }, (#struct){
181 a: (string){ string }
182 c: (string){ string }
183 }, (#struct){
184 a: (string){ string }
185 c: (string){ string }
186 d: (string){ string }
187 }, (#struct){
188 a: (string){ string }
189 c: (string){ string }
190 e: (string){ string }
191 }, (#struct){
192 a: (string){ string }
193 d: (string){ string }
194 e: (string){ string }
195 }, (#struct){
196 b: (string){ string }
197 }, (#struct){
198 b: (string){ string }
199 d: (string){ string }
200 }, (#struct){
201 b: (string){ string }
202 e: (string){ string }
203 }, (#struct){
204 b: (string){ string }
205 c: (string){ string }
206 }, (#struct){
207 b: (string){ string }
208 c: (string){ string }
209 d: (string){ string }
210 }, (#struct){
211 b: (string){ string }
212 c: (string){ string }
213 e: (string){ string }
214 }, (#struct){
215 b: (string){ string }
216 d: (string){ string }
217 e: (string){ string }
218 }) }
219 a: (#struct){ |(*(#struct){
220 a: (string){ "foo" }
221 e: (string){ "bar" }
222 }, (#struct){
223 a: (string){ "foo" }
224 e: (string){ "bar" }
225 c: (string){ string }
226 }, (#struct){
227 a: (string){ "foo" }
228 e: (string){ "bar" }
229 d: (string){ string }
230 }) }
231 }
232 }
233 nested: (struct){
234 a: (int){ |(*(int){ 7 }, (int){ 2 }, (int){ 3 }, (int){ 4 }, (int){ 1 }) }
235 }
236}
237-- out/compile --
238--- in.cue
239{
240 default: {
241 y: (*1|{
242 a: 2
243 })
244 〈0;y〉
245 }
246 unambiguous: {
247 y: (1|{
248 a: 2
249 })
250 〈0;y〉
251 }
252 forDefault: {
253 y: (*1|{
254 a: 2
255 })
256 for _, x in [
257 1,
258 ] {
259 〈2;y〉
260 }
261 }
262 openDefault: {
263 #y: (*1|{
264 a: 2
265 })
266 〈0;#y〉
267 }
268 openAmbiguous: {
269 #y: (1|{
270 a: 2
271 })
272 〈0;#y〉
273 }
274 forceStruct: {
275 #y: (1|{
276 a: 2
277 })
278 〈0;#y〉
279 {}
280 }
281 defaultsMulti: {
282 a: {
283 #def: {
284 (*{}|{
285 a: string
286 }|{
287 b: string
288 })
289 (*{}|{
290 c: string
291 }|{
292 d: string
293 })
294 }
295 a: (〈0;#def〉 & {
296 a: "foo"
297 })
298 }
299 b: {
300 #def: {
301 (*{}|{
302 a: string
303 }|{
304 b: string
305 })
306 (*{}|{
307 c: string
308 }|{
309 d: string
310 })
311 (*{}|{
312 d: string
313 }|{
314 e: string
315 })
316 }
317 a: (〈0;#def〉 & {
318 a: "foo"
319 e: "bar"
320 })
321 }
322 }
323 nested: {
324 a: (1|2|*((3|4|*(5|6|*7)) & (3|4|(*7|8))))
325 }
326}
View as plain text