# DO NOT EDIT; generated by go run testdata/gen.go
#
#name: closing with comprehensions
#evalPartial
-- in.cue --
#A: {f1: int, f2: int}

for k, v in {f3: int} {
	a: #A & {"\(k)": v}
}

#B: {
	for k, v in {f1: int} {
		"\(k)": v
	}
}

#C: {
	f1: _
	for k, v in {f1: int} {
		"\(k)": v
	}
}

#D: {
	for k, v in {f1: int} {
		"\(k)": v
	}
	...
}

#E: #A & {
	for k, v in {f3: int} {
		"\(k)": v
	}
}
-- out/def --
#A: {
	f1: int
	f2: int
}
a: _|_ // field "f3" not allowed in closed struct
#B: {
	f1: v
}
#C: {
	f1: {
		_
		v
		...
	}
}
#D: {
	f1: v
	...
}
#E: _|_ // field "f3" not allowed in closed struct
-- out/legacy-debug --
<0>{#A: <1>C{f1: int, f2: int}, a: _|_(<2>.v:field "f3" not allowed in closed struct), #B: <3>C{f1: int}, #C: <4>C{f1: int}, #D: <5>{f1: int, ...}, #E: _|_(<6>.v:field "f3" not allowed in closed struct)}
-- out/compile --
--- in.cue
{
  #A: {
    f1: int
    f2: int
  }
  for k, v in {
    f3: int
  } {
    a: (〈2;#A〉 & {
      "\(〈2;k〉)": 〈2;v〉
    })
  }
  #B: {
    for k, v in {
      f1: int
    } {
      "\(〈1;k〉)": 〈1;v〉
    }
  }
  #C: {
    f1: _
    for k, v in {
      f1: int
    } {
      "\(〈1;k〉)": 〈1;v〉
    }
  }
  #D: {
    for k, v in {
      f1: int
    } {
      "\(〈1;k〉)": 〈1;v〉
    }
    ...
  }
  #E: (〈0;#A〉 & {
    for k, v in {
      f3: int
    } {
      "\(〈1;k〉)": 〈1;v〉
    }
  })
}
-- out/eval --
Errors:
#D: cannot mix bulk optional fields with dynamic fields, embeddings, or comprehensions within the same struct
#E: field `f3` not allowed:
    ./in.cue:1:5
    ./in.cue:27:5
    ./in.cue:29:3
a: field `f3` not allowed:
    ./in.cue:1:5
    ./in.cue:4:5
    ./in.cue:4:11

Result:
(_|_){
  // [eval]
  #A: (#struct){
    f1: (int){ int }
    f2: (int){ int }
  }
  #B: (#struct){
    f1: (int){ int }
  }
  #C: (#struct){
    f1: (int){ int }
  }
  #D: (_|_){
    // [eval] #D: cannot mix bulk optional fields with dynamic fields, embeddings, or comprehensions within the same struct
    f1: (int){ int }
  }
  #E: (_|_){
    // [eval]
    f1: (int){ int }
    f2: (int){ int }
    f3: (_|_){
      // [eval] #E: field `f3` not allowed:
      //     ./in.cue:1:5
      //     ./in.cue:27:5
      //     ./in.cue:29:3
    }
  }
  a: (_|_){
    // [eval]
    f1: (int){ int }
    f2: (int){ int }
    f3: (_|_){
      // [eval] a: field `f3` not allowed:
      //     ./in.cue:1:5
      //     ./in.cue:4:5
      //     ./in.cue:4:11
    }
  }
}
