blob: 3a986524433db94aff78ff83f7dbdedae08ab699 [file] [log] [blame]
-- 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))))
}
}