# TODO(fmt): first line indented when it should not be: cuelang.org/issue/722 -- in.cue -- // cycle is a structural cycle cycle: a: cycle // reference to outside structural cycle r1a: cycle | int r1b: int | cycle r2a: cycle | 1 r2b: 1 | cycle r3a: cycle | null r3b: null | cycle r4a: cycle | {} r4b: {} | cycle r5a: cycle | [] r5b: [] | cycle // reference to ancestor node s1a: x: s1a | int s1b: x: int | s1b s2a: x: s2a | 1 s2b: x: 1 | s2b s3a: x: s3a | null s3b: x: null | s3b s4a: x: s4a | {} s4b: x: {} | s4b s5a: x: s5a | [] s5b: x: [] | s5b -- out/eval/stats -- Leaks: 0 Freed: 73 Reused: 68 Allocs: 5 Retain: 0 Unifications: 33 Conjuncts: 73 Disjuncts: 73 -- out/eval -- Errors: cycle.a: structural cycle Result: (_|_){ // [structural cycle] cycle: (_|_){ // [structural cycle] a: (_|_){ // [structural cycle] cycle.a: structural cycle } } r1a: (int){ int } r1b: (int){ int } r2a: (int){ 1 } r2b: (int){ 1 } r3a: (null){ null } r3b: (null){ null } r4a: (struct){ } r4b: (struct){ } r5a: (#list){ } r5b: (#list){ } s1a: (struct){ x: (int){ int } } s1b: (struct){ x: (int){ int } } s2a: (struct){ x: (int){ 1 } } s2b: (struct){ x: (int){ 1 } } s3a: (struct){ x: (null){ null } } s3b: (struct){ x: (null){ null } } s4a: (struct){ x: (struct){ } } s4b: (struct){ x: (struct){ } } s5a: (struct){ x: (#list){ } } s5b: (struct){ x: (#list){ } } } -- out/compile -- --- in.cue { cycle: { a: 〈1;cycle〉 } r1a: (〈0;cycle〉|int) r1b: (int|〈0;cycle〉) r2a: (〈0;cycle〉|1) r2b: (1|〈0;cycle〉) r3a: (〈0;cycle〉|null) r3b: (null|〈0;cycle〉) r4a: (〈0;cycle〉|{}) r4b: ({}|〈0;cycle〉) r5a: (〈0;cycle〉|[]) r5b: ([]|〈0;cycle〉) s1a: { x: (〈1;s1a〉|int) } s1b: { x: (int|〈1;s1b〉) } s2a: { x: (〈1;s2a〉|1) } s2b: { x: (1|〈1;s2b〉) } s3a: { x: (〈1;s3a〉|null) } s3b: { x: (null|〈1;s3b〉) } s4a: { x: (〈1;s4a〉|{}) } s4b: { x: ({}|〈1;s4b〉) } s5a: { x: (〈1;s5a〉|[]) } s5b: { x: ([]|〈1;s5b〉) } }