| -- in.cue -- |
| // Given the existence of this field, embedDefault is a struct. This |
| // means that embedding this conjunction into `embedDefault` itself should |
| // make it resolve to `{a: 2}`. |
| |
| default: { |
| y: *1 | {a: 2} |
| y |
| } |
| |
| unambiguous: { |
| y: 1 | {a: 2} |
| y |
| } |
| |
| forDefault: { |
| y: *1 | {a: 2} |
| for x in [1] {y} |
| } |
| |
| // Carry over default to first disjunct. |
| openDefault: { |
| #y: *1 | {a: 2} |
| #y |
| } |
| |
| openAmbiguous: { |
| #y: 1 | {a: 2} |
| #y |
| } |
| |
| forceStruct: { |
| #y: 1 | {a: 2} |
| #y |
| {} |
| } |
| |
| -- out/eval -- |
| (struct){ |
| default: (struct){ |
| y: ((int|struct)){ |(*(int){ 1 }, (struct){ |
| a: (int){ 2 } |
| }) } |
| a: (int){ 2 } |
| } |
| unambiguous: (struct){ |
| y: ((int|struct)){ |((int){ 1 }, (struct){ |
| a: (int){ 2 } |
| }) } |
| a: (int){ 2 } |
| } |
| forDefault: (struct){ |
| y: ((int|struct)){ |(*(int){ 1 }, (struct){ |
| a: (int){ 2 } |
| }) } |
| a: (int){ 2 } |
| } |
| openDefault: ((int|struct)){ |(*(int){ |
| 1 |
| #y: ((int|struct)){ |(*(int){ 1 }, (#struct){ |
| a: (int){ 2 } |
| }) } |
| }, (#struct){ |
| #y: ((int|struct)){ |(*(int){ 1 }, (#struct){ |
| a: (int){ 2 } |
| }) } |
| a: (int){ 2 } |
| }) } |
| openAmbiguous: ((int|struct)){ |((int){ |
| 1 |
| #y: ((int|struct)){ |((int){ 1 }, (#struct){ |
| a: (int){ 2 } |
| }) } |
| }, (#struct){ |
| #y: ((int|struct)){ |((int){ 1 }, (#struct){ |
| a: (int){ 2 } |
| }) } |
| a: (int){ 2 } |
| }) } |
| forceStruct: (#struct){ |
| #y: ((int|struct)){ |((int){ 1 }, (#struct){ |
| a: (int){ 2 } |
| }) } |
| a: (int){ 2 } |
| } |
| } |
| -- out/compile -- |
| --- in.cue |
| { |
| default: { |
| y: (*1|{ |
| a: 2 |
| }) |
| 〈0;y〉 |
| } |
| unambiguous: { |
| y: (1|{ |
| a: 2 |
| }) |
| 〈0;y〉 |
| } |
| forDefault: { |
| y: (*1|{ |
| a: 2 |
| }) |
| for _, x in [ |
| 1, |
| ] { |
| 〈2;y〉 |
| } |
| } |
| openDefault: { |
| #y: (*1|{ |
| a: 2 |
| }) |
| 〈0;#y〉 |
| } |
| openAmbiguous: { |
| #y: (1|{ |
| a: 2 |
| }) |
| 〈0;#y〉 |
| } |
| forceStruct: { |
| #y: (1|{ |
| a: 2 |
| }) |
| 〈0;#y〉 |
| {} |
| } |
| } |