| -- 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 |
| {} |
| } |
| |
| defaultsMulti: { |
| a: { |
| #def: { |
| *{} | {a: string} | {b: string} |
| *{} | {c: string} | {d: string} |
| } |
| |
| a: #def & {a: "foo"} |
| } |
| |
| b: { |
| #def: { |
| *{} | {a: string} | {b: string} |
| *{} | {c: string} | {d: string} |
| *{} | {d: string} | {e: string} |
| } |
| |
| a: #def & {a: "foo", e: "bar"} |
| } |
| } |
| |
| nested: { |
| a: 1 | 2 | *( |
| (3 | 4 | *( 5 | 6 | *7)) & ( 3 | 4 | ( *7 | 8 ))) |
| } |
| |
| -- 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 } |
| } |
| defaultsMulti: (struct){ |
| a: (struct){ |
| #def: (#struct){ |(*(#struct){ |
| }, (#struct){ |
| c: (string){ string } |
| }, (#struct){ |
| d: (string){ string } |
| }, (#struct){ |
| a: (string){ string } |
| }, (#struct){ |
| a: (string){ string } |
| c: (string){ string } |
| }, (#struct){ |
| a: (string){ string } |
| d: (string){ string } |
| }, (#struct){ |
| b: (string){ string } |
| }, (#struct){ |
| b: (string){ string } |
| c: (string){ string } |
| }, (#struct){ |
| b: (string){ string } |
| d: (string){ string } |
| }) } |
| a: (#struct){ |(*(#struct){ |
| a: (string){ "foo" } |
| }, (#struct){ |
| a: (string){ "foo" } |
| c: (string){ string } |
| }, (#struct){ |
| a: (string){ "foo" } |
| d: (string){ string } |
| }) } |
| } |
| b: (struct){ |
| #def: (#struct){ |(*(#struct){ |
| }, (#struct){ |
| d: (string){ string } |
| }, (#struct){ |
| e: (string){ string } |
| }, (#struct){ |
| c: (string){ string } |
| }, (#struct){ |
| c: (string){ string } |
| d: (string){ string } |
| }, (#struct){ |
| c: (string){ string } |
| e: (string){ string } |
| }, (#struct){ |
| d: (string){ string } |
| e: (string){ string } |
| }, (#struct){ |
| a: (string){ string } |
| }, (#struct){ |
| a: (string){ string } |
| d: (string){ string } |
| }, (#struct){ |
| a: (string){ string } |
| e: (string){ string } |
| }, (#struct){ |
| a: (string){ string } |
| c: (string){ string } |
| }, (#struct){ |
| a: (string){ string } |
| c: (string){ string } |
| d: (string){ string } |
| }, (#struct){ |
| a: (string){ string } |
| c: (string){ string } |
| e: (string){ string } |
| }, (#struct){ |
| a: (string){ string } |
| d: (string){ string } |
| e: (string){ string } |
| }, (#struct){ |
| b: (string){ string } |
| }, (#struct){ |
| b: (string){ string } |
| d: (string){ string } |
| }, (#struct){ |
| b: (string){ string } |
| e: (string){ string } |
| }, (#struct){ |
| b: (string){ string } |
| c: (string){ string } |
| }, (#struct){ |
| b: (string){ string } |
| c: (string){ string } |
| d: (string){ string } |
| }, (#struct){ |
| b: (string){ string } |
| c: (string){ string } |
| e: (string){ string } |
| }, (#struct){ |
| b: (string){ string } |
| d: (string){ string } |
| e: (string){ string } |
| }) } |
| a: (#struct){ |(*(#struct){ |
| a: (string){ "foo" } |
| e: (string){ "bar" } |
| }, (#struct){ |
| a: (string){ "foo" } |
| e: (string){ "bar" } |
| c: (string){ string } |
| }, (#struct){ |
| a: (string){ "foo" } |
| e: (string){ "bar" } |
| d: (string){ string } |
| }) } |
| } |
| } |
| nested: (struct){ |
| a: (int){ |(*(int){ 7 }, (int){ 2 }, (int){ 3 }, (int){ 4 }, (int){ 1 }) } |
| } |
| } |
| -- 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〉 |
| {} |
| } |
| defaultsMulti: { |
| a: { |
| #def: { |
| (*{}|{ |
| a: string |
| }|{ |
| b: string |
| }) |
| (*{}|{ |
| c: string |
| }|{ |
| d: string |
| }) |
| } |
| a: (〈0;#def〉 & { |
| a: "foo" |
| }) |
| } |
| b: { |
| #def: { |
| (*{}|{ |
| a: string |
| }|{ |
| b: string |
| }) |
| (*{}|{ |
| c: string |
| }|{ |
| d: string |
| }) |
| (*{}|{ |
| d: string |
| }|{ |
| e: string |
| }) |
| } |
| a: (〈0;#def〉 & { |
| a: "foo" |
| e: "bar" |
| }) |
| } |
| } |
| nested: { |
| a: (1|2|*((3|4|*(5|6|*7)) & (3|4|(*7|8)))) |
| } |
| } |