...

Text file src/cuelang.org/go/cue/testdata/cycle/comprehension.txtar

Documentation: cuelang.org/go/cue/testdata/cycle

     1-- in.cue --
     2// Allow lookup in partially evaluated struct as long as the end result is
     3// concrete.
     4A: {
     5	a: {
     6		parent: ""
     7		children: [for k, v in A if v.parent == k {k}]
     8	}
     9	b: {
    10		parent: "a"
    11		children: [for k, v in A if v.parent == k {k}]
    12	}
    13}
    14
    15// This should result in an incomplete error (a reference cycle error classifies
    16// as incomplete).
    17B: {
    18	a: {
    19		parent: ""
    20		children: [for k, v in B for _, w in v.children {k}]
    21	}
    22}
    23
    24// Issue #486
    25Issue486: {
    26	A: {
    27		a: {
    28			parent: ""
    29			children: [...string]
    30		}
    31		b: {
    32			parent: "a"
    33			children: [...string]
    34		}
    35		c: {
    36			parent: "b"
    37			children: [...string]
    38		}
    39	}
    40
    41	A: [Name=string]: {
    42		children: [
    43			for k, v in A
    44			if v.parent == Name {
    45				k
    46			},
    47		]
    48	}
    49}
    50
    51// Issue #1666
    52issue1666: {
    53	#E: {
    54		f1: [string]: #E | [...#E]
    55		f2: [string]: t: #E
    56	}
    57
    58	_e: #E
    59	_e: f2: a: _
    60
    61	e: _e & {
    62		f1: {
    63			for fk, s in _e.f2 {
    64				(fk): s.t
    65			}
    66		}
    67	}
    68}
    69
    70// Issue #779: bidirectional projection
    71// Should be allowed as long as the set of fields is not modified as a result
    72// of a comprehension.
    73issue779: {
    74	X: Y.message
    75	STATE: {
    76		for k, v in Y {
    77			if k != "message" {
    78				"\(k)": v
    79			}
    80		}
    81	}
    82	Y: STATE & { message: X }
    83	X: "test"
    84	STATE: { code: 101 }
    85}
    86
    87// Comprehension ends up inserting in the same arcs over which it
    88// is iterating. This is fine as long as the set is not altered.
    89// Issue #1934
    90selfReferential: T1: {
    91	S: d: "bar"
    92
    93	T: e: S: a: "foo"
    94
    95	for s, v in S for t, _ in T {
    96		T: (t): S: (s): v
    97	}
    98}
    99
   100// selfReferential comprehenion for list.
   101// Issue #1934
   102selfReferential: list: {
   103	panels: [
   104		for i, _ in panels {
   105			id: i
   106		}
   107	]
   108	panels: [{}, {}, {}]
   109}
   110
   111selfReferential: insertionError: {
   112	A: {
   113		foo: 1
   114		for x in A {
   115			// May not insert foo3. Use dynamic references to force the
   116			// comprehension to be evaluated in the struct in which it is
   117			// defined.
   118			("foo3"): 1
   119		}
   120	}
   121}
   122
   123// A comprehension should not recursively evaluated arcs, so that a
   124// structural cycle can be avoided when unnecessary.
   125selfReferential: acrossOr: t1: p1: {
   126	o: #Output & { retry: reject: "ok" }
   127
   128	#AllOutputs: {
   129		reject:   string
   130		resource: string
   131		retry: #Output
   132	}
   133
   134	#Output: or([for name, config in #AllOutputs {
   135		(name): config
   136	}])
   137}
   138
   139selfReferential: acrossOr: t1: p2: {
   140	#Output: or([for name, config in #AllOutputs {
   141		(name): config
   142	}])
   143
   144	o: #Output & { retry: reject: "ok" }
   145
   146	#AllOutputs: {
   147		reject:   string
   148		resource: string
   149		retry: #Output
   150	}
   151}
   152
   153selfReferential: acrossOr: t1: p3: {
   154	#Output: or([for name, config in #AllOutputs {
   155		(name): config
   156	}])
   157
   158	#AllOutputs: {
   159		reject:   string
   160		resource: string
   161		retry: #Output
   162	}
   163
   164	o: #Output & { retry: reject: "ok" }
   165}
   166
   167selfReferential: acrossOr: t2: p1: {
   168	d: or([for x, y in #A { y }])
   169	o: d & { b: 2 }
   170	#A: {
   171		d1: int
   172		d2: string
   173		d3: b: d
   174	}
   175}
   176
   177selfReferential: acrossOr: t2: p2: {
   178	o: d & { b: 2 }
   179	d: or([for x, y in #A { y }])
   180	#A: {
   181		d1: int
   182		d2: string
   183		d3: b: d
   184	}
   185}
   186
   187selfReferential: acrossOr: t2: p3: {
   188	o: d & { b: 2 }
   189	#A: {
   190		d1: int
   191		d2: string
   192		d3: b: d
   193	}
   194	d: or([for x, y in #A { y }])
   195}
   196
   197issue1881: p1: {
   198	o: #Output & { retry: output: reject: "ok" }
   199
   200	#AllOutputs: {
   201		reject:   string
   202		resource: string
   203		retry: output: #Output
   204	}
   205
   206	#Output: or([for name, config in #AllOutputs {
   207		(name): config
   208	}])
   209}
   210
   211issue1881: p2: {
   212	#AllOutputs: {
   213		reject:   string
   214		resource: string
   215		retry: output: #Output
   216	}
   217
   218	o: #Output & { retry: output: reject: "ok" }
   219
   220	#Output: or([for name, config in #AllOutputs {
   221		(name): config
   222	}])
   223}
   224
   225issue1881: p3: {
   226	#AllOutputs: {
   227		reject:   string
   228		resource: string
   229		retry: output: #Output
   230	}
   231
   232	#Output: or([for name, config in #AllOutputs {
   233		(name): config
   234	}])
   235
   236	o: #Output & { retry: output: reject: "ok" }
   237}
   238
   239siblingInsertion: t1: p1: {
   240	D: "logging": _
   241	deployment: _
   242
   243	for k, v in deployment
   244	for k1, v2 in v.env2 {
   245		deployment: (k): env: (k1): v2
   246	}
   247
   248	for id, v in D {
   249		deployment: (id): env2: ENV: "True"
   250	}
   251}
   252
   253siblingInsertion: t1: p2: {
   254	D: "logging": _
   255	deployment: _
   256
   257	for id, v in D {
   258		deployment: (id): env2: ENV: "True"
   259	}
   260
   261	for k, v in deployment
   262	for k1, v2 in v.env2 {
   263		deployment: (k): env: (k1): v2
   264	}
   265}
   266
   267siblingInsertion: t2: p1: {
   268	D: "logging": _
   269	deployment: _
   270
   271	for k, v in deployment {
   272		for k1, v2 in v.env2 {
   273			deployment: (k): env: (k1): v2
   274		}
   275	}
   276
   277	for id, v in D {
   278		deployment: (id): env2: ENV: "True"
   279	}
   280}
   281
   282siblingInsertion: t2: p2: {
   283	D: "logging": _
   284	deployment: _
   285
   286	for k, v in deployment {
   287		for k1, v2 in v.env2 {
   288			deployment: (k): env: (k1): v2
   289		}
   290	}
   291
   292	for id, v in D {
   293		deployment: (id): env2: ENV: "True"
   294	}
   295}
   296
   297// Issue #1407
   298// Ensure there is a useful error message.
   299selfReferential: fail: {
   300	a: {}
   301	b: a.x != ""
   302	if b {
   303	}
   304}
   305
   306// avoid infinite recursion
   307issue2367: {
   308	a: _
   309	for x in [a] {a: x}
   310}
   311
   312-- out/eval/stats --
   313Leaks:  50
   314Freed:  1270
   315Reused: 1260
   316Allocs: 60
   317Retain: 145
   318
   319Unifications: 832
   320Conjuncts:    2525
   321Disjuncts:    1404
   322-- out/eval --
   323Errors:
   324selfReferential.insertionError.A: field foo3 not allowed by earlier comprehension or reference cycle
   325
   326Result:
   327(_|_){
   328  // [eval]
   329  A: (struct){
   330    a: (struct){
   331      parent: (string){ "" }
   332      children: (#list){
   333      }
   334    }
   335    b: (struct){
   336      parent: (string){ "a" }
   337      children: (#list){
   338      }
   339    }
   340  }
   341  B: (struct){
   342    a: (struct){
   343      parent: (string){ "" }
   344      children: (#list){
   345      }
   346    }
   347  }
   348  Issue486: (struct){
   349    A: (struct){
   350      a: (struct){
   351        parent: (string){ "" }
   352        children: (#list){
   353          0: (string){ "b" }
   354        }
   355      }
   356      b: (struct){
   357        parent: (string){ "a" }
   358        children: (#list){
   359          0: (string){ "c" }
   360        }
   361      }
   362      c: (struct){
   363        parent: (string){ "b" }
   364        children: (#list){
   365        }
   366      }
   367    }
   368  }
   369  issue1666: (struct){
   370    #E: (#struct){
   371      f1: (#struct){
   372      }
   373      f2: (#struct){
   374      }
   375    }
   376    _e: (#struct){
   377      f1: (#struct){
   378      }
   379      f2: (#struct){
   380        a: (#struct){
   381          t: (#struct){
   382            f1: (#struct){
   383            }
   384            f2: (#struct){
   385            }
   386          }
   387        }
   388      }
   389    }
   390    e: (#struct){
   391      f1: (#struct){
   392        a: (#struct){
   393          f1: (#struct){
   394          }
   395          f2: (#struct){
   396          }
   397        }
   398      }
   399      f2: (#struct){
   400        a: (#struct){
   401          t: (#struct){
   402            f1: (#struct){
   403            }
   404            f2: (#struct){
   405            }
   406          }
   407        }
   408      }
   409    }
   410  }
   411  issue779: (struct){
   412    X: (string){ "test" }
   413    STATE: (struct){
   414      code: (int){ 101 }
   415    }
   416    Y: (struct){
   417      message: (string){ "test" }
   418      code: (int){ 101 }
   419    }
   420  }
   421  selfReferential: (_|_){
   422    // [eval]
   423    T1: (struct){
   424      S: (struct){
   425        d: (string){ "bar" }
   426      }
   427      T: (struct){
   428        e: (struct){
   429          S: (struct){
   430            a: (string){ "foo" }
   431            d: (string){ "bar" }
   432          }
   433        }
   434      }
   435    }
   436    list: (struct){
   437      panels: (#list){
   438        0: (struct){
   439          id: (int){ 0 }
   440        }
   441        1: (struct){
   442          id: (int){ 1 }
   443        }
   444        2: (struct){
   445          id: (int){ 2 }
   446        }
   447      }
   448    }
   449    insertionError: (_|_){
   450      // [eval]
   451      A: (_|_){
   452        // [eval] selfReferential.insertionError.A: field foo3 not allowed by earlier comprehension or reference cycle
   453        foo: (int){ 1 }
   454        foo3: (int){ 1 }
   455      }
   456    }
   457    acrossOr: (struct){
   458      t1: (struct){
   459        p1: (struct){
   460          o: (#struct){
   461            retry: (#struct){
   462              reject: (string){ "ok" }
   463            }
   464          }
   465          #AllOutputs: (#struct){
   466            reject: (string){ string }
   467            resource: (string){ string }
   468            retry: (#struct){ |((#struct){
   469                reject: (string){ string }
   470              }, (#struct){
   471                resource: (string){ string }
   472              }) }
   473          }
   474          #Output: (#struct){ |((#struct){
   475              reject: (string){ string }
   476            }, (#struct){
   477              resource: (string){ string }
   478            }) }
   479        }
   480        p2: (struct){
   481          #Output: (#struct){ |((#struct){
   482              reject: (string){ string }
   483            }, (#struct){
   484              resource: (string){ string }
   485            }) }
   486          o: (#struct){
   487            retry: (#struct){
   488              reject: (string){ "ok" }
   489            }
   490          }
   491          #AllOutputs: (#struct){
   492            reject: (string){ string }
   493            resource: (string){ string }
   494            retry: (#struct){ |((#struct){
   495                reject: (string){ string }
   496              }, (#struct){
   497                resource: (string){ string }
   498              }) }
   499          }
   500        }
   501        p3: (struct){
   502          #Output: (#struct){ |((#struct){
   503              reject: (string){ string }
   504            }, (#struct){
   505              resource: (string){ string }
   506            }) }
   507          #AllOutputs: (#struct){
   508            reject: (string){ string }
   509            resource: (string){ string }
   510            retry: (#struct){ |((#struct){
   511                reject: (string){ string }
   512              }, (#struct){
   513                resource: (string){ string }
   514              }) }
   515          }
   516          o: (#struct){
   517            retry: (#struct){
   518              reject: (string){ "ok" }
   519            }
   520          }
   521        }
   522      }
   523      t2: (struct){
   524        p1: (struct){
   525          d: ((int|string)){ |((int){ int }, (string){ string }) }
   526          o: (struct){
   527            b: (int){ 2 }
   528          }
   529          #A: (#struct){
   530            d1: (int){ int }
   531            d2: (string){ string }
   532            d3: (#struct){
   533              b: ((int|string)){ |((int){ int }, (string){ string }) }
   534            }
   535          }
   536        }
   537        p2: (struct){
   538          o: (struct){
   539            b: (int){ 2 }
   540          }
   541          d: ((int|string)){ |((int){ int }, (string){ string }) }
   542          #A: (#struct){
   543            d1: (int){ int }
   544            d2: (string){ string }
   545            d3: (#struct){
   546              b: ((int|string)){ |((int){ int }, (string){ string }) }
   547            }
   548          }
   549        }
   550        p3: (struct){
   551          o: (struct){
   552            b: (int){ 2 }
   553          }
   554          #A: (#struct){
   555            d1: (int){ int }
   556            d2: (string){ string }
   557            d3: (#struct){
   558              b: ((int|string)){ |((int){ int }, (string){ string }) }
   559            }
   560          }
   561          d: ((int|string)){ |((int){ int }, (string){ string }) }
   562        }
   563      }
   564    }
   565    fail: (_|_){
   566      // [incomplete] selfReferential.fail.b: undefined field: x:
   567      //     ./in.cue:300:7
   568      a: (struct){
   569      }
   570      b: (_|_){
   571        // [incomplete] selfReferential.fail.b: undefined field: x:
   572        //     ./in.cue:300:7
   573      }
   574    }
   575  }
   576  issue1881: (struct){
   577    p1: (struct){
   578      o: (#struct){
   579        retry: (#struct){
   580          output: (#struct){
   581            reject: (string){ "ok" }
   582          }
   583        }
   584      }
   585      #AllOutputs: (#struct){
   586        reject: (string){ string }
   587        resource: (string){ string }
   588        retry: (#struct){
   589          output: (#struct){ |((#struct){
   590              reject: (string){ string }
   591            }, (#struct){
   592              resource: (string){ string }
   593            }) }
   594        }
   595      }
   596      #Output: (#struct){ |((#struct){
   597          reject: (string){ string }
   598        }, (#struct){
   599          resource: (string){ string }
   600        }) }
   601    }
   602    p2: (struct){
   603      #AllOutputs: (#struct){
   604        reject: (string){ string }
   605        resource: (string){ string }
   606        retry: (#struct){
   607          output: (#struct){ |((#struct){
   608              reject: (string){ string }
   609            }, (#struct){
   610              resource: (string){ string }
   611            }) }
   612        }
   613      }
   614      o: (#struct){
   615        retry: (#struct){
   616          output: (#struct){
   617            reject: (string){ "ok" }
   618          }
   619        }
   620      }
   621      #Output: (#struct){ |((#struct){
   622          reject: (string){ string }
   623        }, (#struct){
   624          resource: (string){ string }
   625        }) }
   626    }
   627    p3: (struct){
   628      #AllOutputs: (#struct){
   629        reject: (string){ string }
   630        resource: (string){ string }
   631        retry: (#struct){
   632          output: (#struct){ |((#struct){
   633              reject: (string){ string }
   634            }, (#struct){
   635              resource: (string){ string }
   636            }) }
   637        }
   638      }
   639      #Output: (#struct){ |((#struct){
   640          reject: (string){ string }
   641        }, (#struct){
   642          resource: (string){ string }
   643        }) }
   644      o: (#struct){
   645        retry: (#struct){
   646          output: (#struct){
   647            reject: (string){ "ok" }
   648          }
   649        }
   650      }
   651    }
   652  }
   653  siblingInsertion: (struct){
   654    t1: (struct){
   655      p1: (struct){
   656        D: (struct){
   657          logging: (_){ _ }
   658        }
   659        deployment: (struct){
   660          logging: (struct){
   661            env2: (struct){
   662              ENV: (string){ "True" }
   663            }
   664            env: (struct){
   665              ENV: (string){ "True" }
   666            }
   667          }
   668        }
   669      }
   670      p2: (struct){
   671        D: (struct){
   672          logging: (_){ _ }
   673        }
   674        deployment: (struct){
   675          logging: (struct){
   676            env2: (struct){
   677              ENV: (string){ "True" }
   678            }
   679            env: (struct){
   680              ENV: (string){ "True" }
   681            }
   682          }
   683        }
   684      }
   685    }
   686    t2: (struct){
   687      p1: (struct){
   688        D: (struct){
   689          logging: (_){ _ }
   690        }
   691        deployment: (struct){
   692          logging: (struct){
   693            env2: (struct){
   694              ENV: (string){ "True" }
   695            }
   696            env: (struct){
   697              ENV: (string){ "True" }
   698            }
   699          }
   700        }
   701      }
   702      p2: (struct){
   703        D: (struct){
   704          logging: (_){ _ }
   705        }
   706        deployment: (struct){
   707          logging: (struct){
   708            env2: (struct){
   709              ENV: (string){ "True" }
   710            }
   711            env: (struct){
   712              ENV: (string){ "True" }
   713            }
   714          }
   715        }
   716      }
   717    }
   718  }
   719  issue2367: (struct){
   720    a: (_){ _ }
   721  }
   722}
   723-- out/compile --
   724--- in.cue
   725{
   726  A: {
   727    a: {
   728      parent: ""
   729      children: [
   730        for k, v in 〈3;A〉 if (〈0;v〉.parent == 〈0;k〉) {
   731          〈1;k〉
   732        },
   733      ]
   734    }
   735    b: {
   736      parent: "a"
   737      children: [
   738        for k, v in 〈3;A〉 if (〈0;v〉.parent == 〈0;k〉) {
   739          〈1;k〉
   740        },
   741      ]
   742    }
   743  }
   744  B: {
   745    a: {
   746      parent: ""
   747      children: [
   748        for k, v in 〈3;B〉 for _, w in 〈0;v〉.children {
   749          〈2;k〉
   750        },
   751      ]
   752    }
   753  }
   754  Issue486: {
   755    A: {
   756      a: {
   757        parent: ""
   758        children: [
   759          ...string,
   760        ]
   761      }
   762      b: {
   763        parent: "a"
   764        children: [
   765          ...string,
   766        ]
   767      }
   768      c: {
   769        parent: "b"
   770        children: [
   771          ...string,
   772        ]
   773      }
   774    }
   775    A: {
   776      [string]: {
   777        children: [
   778          for k, v in 〈3;A〉 if (〈0;v〉.parent == 〈3;-〉) {
   779            〈1;k〉
   780          },
   781        ]
   782      }
   783    }
   784  }
   785  issue1666: {
   786    #E: {
   787      f1: {
   788        [string]: (〈2;#E〉|[
   789          ...〈3;#E〉,
   790        ])
   791      }
   792      f2: {
   793        [string]: {
   794          t: 〈3;#E〉
   795        }
   796      }
   797    }
   798    _e: 〈0;#E〉
   799    _e: {
   800      f2: {
   801        a: _
   802      }
   803    }
   804    e: (〈0;_e〉 & {
   805      f1: {
   806        for fk, s in 〈2;_e〉.f2 {
   807          〈1;fk〉: 〈1;s〉.t
   808        }
   809      }
   810    })
   811  }
   812  issue779: {
   813    X: 〈0;Y〉.message
   814    STATE: {
   815      for k, v in 〈1;Y〉 {
   816        if (〈1;k〉 != "message") {
   817          "\(〈2;k〉)": 〈2;v〉
   818        }
   819      }
   820    }
   821    Y: (〈0;STATE〉 & {
   822      message: 〈1;X〉
   823    })
   824    X: "test"
   825    STATE: {
   826      code: 101
   827    }
   828  }
   829  selfReferential: {
   830    T1: {
   831      S: {
   832        d: "bar"
   833      }
   834      T: {
   835        e: {
   836          S: {
   837            a: "foo"
   838          }
   839        }
   840      }
   841      for s, v in 〈0;S〉 for t, _ in 〈1;T〉 {
   842        T: {
   843          〈2;t〉: {
   844            S: {
   845              〈5;s〉: 〈5;v〉
   846            }
   847          }
   848        }
   849      }
   850    }
   851  }
   852  selfReferential: {
   853    list: {
   854      panels: [
   855        for i, _ in 〈1;panels〉 {
   856          id: 〈1;i〉
   857        },
   858      ]
   859      panels: [
   860        {},
   861        {},
   862        {},
   863      ]
   864    }
   865  }
   866  selfReferential: {
   867    insertionError: {
   868      A: {
   869        foo: 1
   870        for _, x in 〈1;A〉 {
   871          "foo3": 1
   872        }
   873      }
   874    }
   875  }
   876  selfReferential: {
   877    acrossOr: {
   878      t1: {
   879        p1: {
   880          o: (〈0;#Output〉 & {
   881            retry: {
   882              reject: "ok"
   883            }
   884          })
   885          #AllOutputs: {
   886            reject: string
   887            resource: string
   888            retry: 〈1;#Output〉
   889          }
   890          #Output: or([
   891            for name, config in 〈1;#AllOutputs〉 {
   892              〈1;name〉: 〈1;config〉
   893            },
   894          ])
   895        }
   896      }
   897    }
   898  }
   899  selfReferential: {
   900    acrossOr: {
   901      t1: {
   902        p2: {
   903          #Output: or([
   904            for name, config in 〈1;#AllOutputs〉 {
   905              〈1;name〉: 〈1;config〉
   906            },
   907          ])
   908          o: (〈0;#Output〉 & {
   909            retry: {
   910              reject: "ok"
   911            }
   912          })
   913          #AllOutputs: {
   914            reject: string
   915            resource: string
   916            retry: 〈1;#Output〉
   917          }
   918        }
   919      }
   920    }
   921  }
   922  selfReferential: {
   923    acrossOr: {
   924      t1: {
   925        p3: {
   926          #Output: or([
   927            for name, config in 〈1;#AllOutputs〉 {
   928              〈1;name〉: 〈1;config〉
   929            },
   930          ])
   931          #AllOutputs: {
   932            reject: string
   933            resource: string
   934            retry: 〈1;#Output〉
   935          }
   936          o: (〈0;#Output〉 & {
   937            retry: {
   938              reject: "ok"
   939            }
   940          })
   941        }
   942      }
   943    }
   944  }
   945  selfReferential: {
   946    acrossOr: {
   947      t2: {
   948        p1: {
   949          d: or([
   950            for x, y in 〈1;#A〉 {
   951              〈1;y〉
   952            },
   953          ])
   954          o: (〈0;d〉 & {
   955            b: 2
   956          })
   957          #A: {
   958            d1: int
   959            d2: string
   960            d3: {
   961              b: 〈2;d〉
   962            }
   963          }
   964        }
   965      }
   966    }
   967  }
   968  selfReferential: {
   969    acrossOr: {
   970      t2: {
   971        p2: {
   972          o: (〈0;d〉 & {
   973            b: 2
   974          })
   975          d: or([
   976            for x, y in 〈1;#A〉 {
   977              〈1;y〉
   978            },
   979          ])
   980          #A: {
   981            d1: int
   982            d2: string
   983            d3: {
   984              b: 〈2;d〉
   985            }
   986          }
   987        }
   988      }
   989    }
   990  }
   991  selfReferential: {
   992    acrossOr: {
   993      t2: {
   994        p3: {
   995          o: (〈0;d〉 & {
   996            b: 2
   997          })
   998          #A: {
   999            d1: int
  1000            d2: string
  1001            d3: {
  1002              b: 〈2;d〉
  1003            }
  1004          }
  1005          d: or([
  1006            for x, y in 〈1;#A〉 {
  1007              〈1;y〉
  1008            },
  1009          ])
  1010        }
  1011      }
  1012    }
  1013  }
  1014  issue1881: {
  1015    p1: {
  1016      o: (〈0;#Output〉 & {
  1017        retry: {
  1018          output: {
  1019            reject: "ok"
  1020          }
  1021        }
  1022      })
  1023      #AllOutputs: {
  1024        reject: string
  1025        resource: string
  1026        retry: {
  1027          output: 〈2;#Output〉
  1028        }
  1029      }
  1030      #Output: or([
  1031        for name, config in 〈1;#AllOutputs〉 {
  1032          〈1;name〉: 〈1;config〉
  1033        },
  1034      ])
  1035    }
  1036  }
  1037  issue1881: {
  1038    p2: {
  1039      #AllOutputs: {
  1040        reject: string
  1041        resource: string
  1042        retry: {
  1043          output: 〈2;#Output〉
  1044        }
  1045      }
  1046      o: (〈0;#Output〉 & {
  1047        retry: {
  1048          output: {
  1049            reject: "ok"
  1050          }
  1051        }
  1052      })
  1053      #Output: or([
  1054        for name, config in 〈1;#AllOutputs〉 {
  1055          〈1;name〉: 〈1;config〉
  1056        },
  1057      ])
  1058    }
  1059  }
  1060  issue1881: {
  1061    p3: {
  1062      #AllOutputs: {
  1063        reject: string
  1064        resource: string
  1065        retry: {
  1066          output: 〈2;#Output〉
  1067        }
  1068      }
  1069      #Output: or([
  1070        for name, config in 〈1;#AllOutputs〉 {
  1071          〈1;name〉: 〈1;config〉
  1072        },
  1073      ])
  1074      o: (〈0;#Output〉 & {
  1075        retry: {
  1076          output: {
  1077            reject: "ok"
  1078          }
  1079        }
  1080      })
  1081    }
  1082  }
  1083  siblingInsertion: {
  1084    t1: {
  1085      p1: {
  1086        D: {
  1087          logging: _
  1088        }
  1089        deployment: _
  1090        for k, v in 〈0;deployment〉 for k1, v2 in 〈0;v〉.env2 {
  1091          deployment: {
  1092            〈3;k〉: {
  1093              env: {
  1094                〈4;k1〉: 〈4;v2〉
  1095              }
  1096            }
  1097          }
  1098        }
  1099        for id, v in 〈0;D〉 {
  1100          deployment: {
  1101            〈2;id〉: {
  1102              env2: {
  1103                ENV: "True"
  1104              }
  1105            }
  1106          }
  1107        }
  1108      }
  1109    }
  1110  }
  1111  siblingInsertion: {
  1112    t1: {
  1113      p2: {
  1114        D: {
  1115          logging: _
  1116        }
  1117        deployment: _
  1118        for id, v in 〈0;D〉 {
  1119          deployment: {
  1120            〈2;id〉: {
  1121              env2: {
  1122                ENV: "True"
  1123              }
  1124            }
  1125          }
  1126        }
  1127        for k, v in 〈0;deployment〉 for k1, v2 in 〈0;v〉.env2 {
  1128          deployment: {
  1129            〈3;k〉: {
  1130              env: {
  1131                〈4;k1〉: 〈4;v2〉
  1132              }
  1133            }
  1134          }
  1135        }
  1136      }
  1137    }
  1138  }
  1139  siblingInsertion: {
  1140    t2: {
  1141      p1: {
  1142        D: {
  1143          logging: _
  1144        }
  1145        deployment: _
  1146        for k, v in 〈0;deployment〉 {
  1147          for k1, v2 in 〈1;v〉.env2 {
  1148            deployment: {
  1149              〈4;k〉: {
  1150                env: {
  1151                  〈4;k1〉: 〈4;v2〉
  1152                }
  1153              }
  1154            }
  1155          }
  1156        }
  1157        for id, v in 〈0;D〉 {
  1158          deployment: {
  1159            〈2;id〉: {
  1160              env2: {
  1161                ENV: "True"
  1162              }
  1163            }
  1164          }
  1165        }
  1166      }
  1167    }
  1168  }
  1169  siblingInsertion: {
  1170    t2: {
  1171      p2: {
  1172        D: {
  1173          logging: _
  1174        }
  1175        deployment: _
  1176        for k, v in 〈0;deployment〉 {
  1177          for k1, v2 in 〈1;v〉.env2 {
  1178            deployment: {
  1179              〈4;k〉: {
  1180                env: {
  1181                  〈4;k1〉: 〈4;v2〉
  1182                }
  1183              }
  1184            }
  1185          }
  1186        }
  1187        for id, v in 〈0;D〉 {
  1188          deployment: {
  1189            〈2;id〉: {
  1190              env2: {
  1191                ENV: "True"
  1192              }
  1193            }
  1194          }
  1195        }
  1196      }
  1197    }
  1198  }
  1199  selfReferential: {
  1200    fail: {
  1201      a: {}
  1202      b: (〈0;a〉.x != "")
  1203      if 〈0;b〉 {}
  1204    }
  1205  }
  1206  issue2367: {
  1207    a: _
  1208    for _, x in [
  1209      〈1;a〉,
  1210    ] {
  1211      a: 〈1;x〉
  1212    }
  1213  }
  1214}

View as plain text