#name: continue recursive closing for optionals
#evalFull
-- in.cue --
#S: {
	[string]: {a: int}
}
a: #S & {
	v: {b: int}
}
-- out/def --
#S: {
	[string]: {
		a: int
	}
}
a: #S & {
	v: {
		b: int
	}
}
-- out/legacy-debug --
<0>{#S: <1>{[]: <2>(_: string)-><3>C{a: int}, }, a: <4>{[]: <5>(_: string)-><6>C{a: int}, v: _|_(int:field "b" not allowed in closed struct)}}
-- out/compile --
--- in.cue
{
  #S: {
    [string]: {
      a: int
    }
  }
  a: (〈0;#S〉 & {
    v: {
      b: int
    }
  })
}
-- out/eval/stats --
Leaks:  0
Freed:  6
Reused: 2
Allocs: 4
Retain: 0

Unifications: 6
Conjuncts:    9
Disjuncts:    6
-- out/evalalpha --
Errors:
a.v.b: field not allowed:
    ./in.cue:5:6

Result:
(_|_){
  // [eval]
  #S: (#struct){
  }
  a: (_|_){
    // [eval]
    v: (_|_){
      // [eval]
      b: (_|_){
        // [eval] a.v.b: field not allowed:
        //     ./in.cue:5:6
      }
      a: (int){ int }
    }
  }
}
-- diff/-out/evalalpha<==>+out/eval --
diff old new
--- old
+++ new
@@ -1,7 +1,5 @@
 Errors:
 a.v.b: field not allowed:
-    ./in.cue:2:12
-    ./in.cue:4:4
     ./in.cue:5:6
 
 Result:
@@ -15,8 +13,6 @@
       // [eval]
       b: (_|_){
         // [eval] a.v.b: field not allowed:
-        //     ./in.cue:2:12
-        //     ./in.cue:4:4
         //     ./in.cue:5:6
       }
       a: (int){ int }
-- diff/todo/p2 --
Missing positions.
-- out/eval --
Errors:
a.v.b: field not allowed:
    ./in.cue:2:12
    ./in.cue:4:4
    ./in.cue:5:6

Result:
(_|_){
  // [eval]
  #S: (#struct){
  }
  a: (_|_){
    // [eval]
    v: (_|_){
      // [eval]
      b: (_|_){
        // [eval] a.v.b: field not allowed:
        //     ./in.cue:2:12
        //     ./in.cue:4:4
        //     ./in.cue:5:6
      }
      a: (int){ int }
    }
  }
}
