| // Issue #852 |
| |
| -- in.cue -- |
| #E: { |
| c: int |
| } |
| #A: { |
| b: int |
| q: { |
| #E |
| d: int |
| } |
| } |
| a: #A & { |
| b: 3 |
| q: { |
| c: 2 |
| e: 43 |
| } |
| } |
| |
| // `a` is evaluated through the comprehension first. Ensure that |
| // this does not bypass closedness checks. |
| issue852: { |
| #A: { |
| [=~"^a-z$"]: string |
| } |
| |
| a: #A |
| |
| a: Foo: "foo" |
| |
| for k, v in a { |
| b: "\(k)": v |
| } |
| } |
| |
| -- out/eval -- |
| Errors: |
| a.q: field e not allowed: |
| ./in.cue:1:5 |
| ./in.cue:6:8 |
| ./in.cue:7:9 |
| ./in.cue:11:4 |
| ./in.cue:15:9 |
| issue852.a: field Foo not allowed: |
| ./in.cue:22:7 |
| ./in.cue:26:6 |
| ./in.cue:28:6 |
| |
| Result: |
| (_|_){ |
| // [eval] |
| #E: (#struct){ |
| c: (int){ int } |
| } |
| #A: (#struct){ |
| b: (int){ int } |
| q: (#struct){ |
| c: (int){ int } |
| d: (int){ int } |
| } |
| } |
| a: (_|_){ |
| // [eval] |
| b: (int){ 3 } |
| q: (_|_){ |
| // [eval] |
| c: (int){ 2 } |
| d: (int){ int } |
| e: (_|_){ |
| // [eval] a.q: field e not allowed: |
| // ./in.cue:1:5 |
| // ./in.cue:6:8 |
| // ./in.cue:7:9 |
| // ./in.cue:11:4 |
| // ./in.cue:15:9 |
| } |
| } |
| } |
| issue852: (_|_){ |
| // [eval] |
| #A: (#struct){ |
| } |
| a: (_|_){ |
| // [eval] |
| Foo: (_|_){ |
| // [eval] issue852.a: field Foo not allowed: |
| // ./in.cue:22:7 |
| // ./in.cue:26:6 |
| // ./in.cue:28:6 |
| } |
| } |
| b: (struct){ |
| Foo: (string){ "foo" } |
| } |
| } |
| } |
| -- out/compile -- |
| --- in.cue |
| { |
| #E: { |
| c: int |
| } |
| #A: { |
| b: int |
| q: { |
| 〈2;#E〉 |
| d: int |
| } |
| } |
| a: (〈0;#A〉 & { |
| b: 3 |
| q: { |
| c: 2 |
| e: 43 |
| } |
| }) |
| issue852: { |
| #A: { |
| [=~"^a-z$"]: string |
| } |
| a: 〈0;#A〉 |
| a: { |
| Foo: "foo" |
| } |
| for k, v in 〈0;a〉 { |
| b: { |
| "\(〈2;k〉)": 〈2;v〉 |
| } |
| } |
| } |
| } |