#name: recursive closing starting at non-definition
#evalPartial
-- in.cue --
z: a: {
	#B: {
		c: d: 1
		c: f: 1
	}
}
A: z & {a: {#B: {c: e: 2}}}
-- out/def --
z: {
	a: {
		#B: {
			c: {
				d: 1
				f: 1
			}
		}
	}
}
A: z & {
	a: {
		#B: {
			c: {
				e: 2
			}
		}
	}
}
-- out/export --
z: {
	a: {}
}
A: {
	a: {}
}
-- out/yaml --
z:
  a: {}
A:
  a: {}
-- out/json --
{"z":{"a":{}},"A":{"a":{}}}
-- out/legacy-debug --
<0>{z: <1>{a: <2>{#B: <3>C{c: <4>C{d: 1, f: 1}}}}, A: <5>{a: <6>{#B: <7>C{c: _|_(2:field "e" not allowed in closed struct)}}}}
-- out/compile --
--- in.cue
{
  z: {
    a: {
      #B: {
        c: {
          d: 1
        }
        c: {
          f: 1
        }
      }
    }
  }
  A: (〈0;z〉 & {
    a: {
      #B: {
        c: {
          e: 2
        }
      }
    }
  })
}
-- out/eval/stats --
Leaks:  0
Freed:  14
Reused: 8
Allocs: 6
Retain: 0

Unifications: 14
Conjuncts:    21
Disjuncts:    14
-- out/evalalpha --
(struct){
  z: (struct){
    a: (struct){
      #B: (#struct){
        c: (#struct){
          d: (int){ 1 }
          f: (int){ 1 }
        }
      }
    }
  }
  A: (struct){
    a: (struct){
      #B: (#struct){
        c: (#struct){
          e: (int){ 2 }
          d: (int){ 1 }
          f: (int){ 1 }
        }
      }
    }
  }
}
-- diff/-out/evalalpha<==>+out/eval --
diff old new
--- old
+++ new
@@ -13,9 +13,9 @@
     a: (struct){
       #B: (#struct){
         c: (#struct){
-          d: (int){ 1 }
-          f: (int){ 1 }
           e: (int){ 2 }
+          d: (int){ 1 }
+          f: (int){ 1 }
         }
       }
     }
-- diff/explanation --
reordering
-- out/eval --
(struct){
  z: (struct){
    a: (struct){
      #B: (#struct){
        c: (#struct){
          d: (int){ 1 }
          f: (int){ 1 }
        }
      }
    }
  }
  A: (struct){
    a: (struct){
      #B: (#struct){
        c: (#struct){
          d: (int){ 1 }
          f: (int){ 1 }
          e: (int){ 2 }
        }
      }
    }
  }
}
