cuelang.org/go@v0.13.0/cue/testdata/cycle/023_reentrance.txtar (about)

     1  #name: reentrance
     2  #evalFull
     3  -- in.cue --
     4  // This indirection is needed to avoid binding references to fib
     5  // within fib to the instantiated version.
     6  fibRec: {nn: int, out: (fib & {n: nn}).out}
     7  fib: {
     8  	n: int
     9  
    10  	if n >= 2 {
    11  		out: (fibRec & {nn: n - 2}).out + (fibRec & {nn: n - 1}).out
    12  	}
    13  	if n < 2 {
    14  		out: n
    15  	}
    16  }
    17  fib1:  (fib & {n: 1}).out  // MAY NOT be an error
    18  fib2:  (fib & {n: 2}).out  // MAY be an error
    19  fib3:  (fib & {n: 3}).out  // SHOULD be an error
    20  fib7:  (fib & {n: 7}).out  // Error
    21  fib12: (fib & {n: 12}).out // Error
    22  
    23  -- out/legacy-debug --
    24  <0>{fibRec: <1>{nn: int, out: (<2>.fib & <3>{n: <4>.nn}).out}, fib: <5>{n: int if (<6>.n >= 2) yield <7>{out: ((<2>.fibRec & <8>{nn: (<6>.n - 2)}).out + (<2>.fibRec & <9>{nn: (<6>.n - 1)}).out)},  if (<6>.n < 2) yield <10>{out: <6>.n}}, fib2: 1, fib7: 13, fib12: 144}
    25  -- out/compile --
    26  --- in.cue
    27  {
    28    fibRec: {
    29      nn: int
    30      out: (〈1;fib〉 & {
    31        n: 〈1;nn〉
    32      }).out
    33    }
    34    fib: {
    35      n: int
    36      if (〈0;n〉 >= 2) {
    37        out: ((〈2;fibRec〉 & {
    38          nn: (〈2;n〉 - 2)
    39        }).out + (〈2;fibRec〉 & {
    40          nn: (〈2;n〉 - 1)
    41        }).out)
    42      }
    43      if (〈0;n〉 < 2) {
    44        out: 〈1;n〉
    45      }
    46    }
    47    fib1: (〈0;fib〉 & {
    48      n: 1
    49    }).out
    50    fib2: (〈0;fib〉 & {
    51      n: 2
    52    }).out
    53    fib3: (〈0;fib〉 & {
    54      n: 3
    55    }).out
    56    fib7: (〈0;fib〉 & {
    57      n: 7
    58    }).out
    59    fib12: (〈0;fib〉 & {
    60      n: 12
    61    }).out
    62  }
    63  -- out/evalalpha/stats --
    64  Leaks:  78
    65  Freed:  0
    66  Reused: 0
    67  Allocs: 78
    68  Retain: 0
    69  
    70  Unifications: 62
    71  Conjuncts:    140
    72  Disjuncts:    0
    73  
    74  CloseIDElems: 0
    75  NumCloseIDs: 41
    76  -- out/evalalpha --
    77  Errors:
    78  structural cycle:
    79      ./in.cue:8:9
    80  structural cycle:
    81      ./in.cue:8:38
    82  
    83  Result:
    84  (_|_){
    85    // [structural cycle]
    86    fibRec: (struct){
    87      nn: (int){ int }
    88      out: (_|_){
    89        // [incomplete] non-concrete value int in operand to >=:
    90        //     ./in.cue:7:5
    91        //     ./in.cue:3:35
    92        //     ./in.cue:5:5
    93        // non-concrete value int in operand to <:
    94        //     ./in.cue:10:5
    95        //     ./in.cue:3:35
    96        //     ./in.cue:5:5
    97      }
    98    }
    99    fib: (_|_){
   100      // [incomplete] fib: non-concrete value int in operand to >=:
   101      //     ./in.cue:7:5
   102      //     ./in.cue:5:5
   103      // fib: non-concrete value int in operand to <:
   104      //     ./in.cue:10:5
   105      //     ./in.cue:5:5
   106      n: (int){ int }
   107    }
   108    fib1: (int){ 1 }
   109    fib2: (int){ 1 }
   110    fib3: (_|_){
   111      // [structural cycle] structural cycle:
   112      //     ./in.cue:8:9
   113      // structural cycle:
   114      //     ./in.cue:8:38
   115    }
   116    fib7: (_|_){
   117      // [structural cycle] structural cycle:
   118      //     ./in.cue:8:9
   119      // structural cycle:
   120      //     ./in.cue:8:38
   121    }
   122    fib12: (_|_){
   123      // [structural cycle] structural cycle:
   124      //     ./in.cue:8:9
   125      // structural cycle:
   126      //     ./in.cue:8:38
   127    }
   128  }
   129  -- diff/-out/evalalpha/stats<==>+out/eval/stats --
   130  diff old new
   131  --- old
   132  +++ new
   133  @@ -1,9 +1,12 @@
   134  -Leaks:  16
   135  -Freed:  180
   136  -Reused: 170
   137  -Allocs: 26
   138  -Retain: 148
   139  -
   140  -Unifications: 196
   141  -Conjuncts:    464
   142  -Disjuncts:    268
   143  +Leaks:  78
   144  +Freed:  0
   145  +Reused: 0
   146  +Allocs: 78
   147  +Retain: 0
   148  +
   149  +Unifications: 62
   150  +Conjuncts:    140
   151  +Disjuncts:    0
   152  +
   153  +CloseIDElems: 0
   154  +NumCloseIDs: 41
   155  -- diff/-out/evalalpha<==>+out/eval --
   156  diff old new
   157  --- old
   158  +++ new
   159  @@ -1,7 +1,5 @@
   160   Errors:
   161   structural cycle:
   162  -    ./in.cue:3:25
   163  -structural cycle:
   164       ./in.cue:8:9
   165   structural cycle:
   166       ./in.cue:8:38
   167  @@ -35,14 +33,12 @@
   168     fib2: (int){ 1 }
   169     fib3: (_|_){
   170       // [structural cycle] structural cycle:
   171  -    //     ./in.cue:3:25
   172  +    //     ./in.cue:8:9
   173       // structural cycle:
   174       //     ./in.cue:8:38
   175     }
   176     fib7: (_|_){
   177       // [structural cycle] structural cycle:
   178  -    //     ./in.cue:3:25
   179  -    // structural cycle:
   180       //     ./in.cue:8:9
   181       // structural cycle:
   182       //     ./in.cue:8:38
   183  @@ -49,8 +45,6 @@
   184     }
   185     fib12: (_|_){
   186       // [structural cycle] structural cycle:
   187  -    //     ./in.cue:3:25
   188  -    // structural cycle:
   189       //     ./in.cue:8:9
   190       // structural cycle:
   191       //     ./in.cue:8:38
   192  -- diff/todo/p3 --
   193  Note that it is okay for fib2 to fail.
   194  -- out/eval/stats --
   195  Leaks:  16
   196  Freed:  180
   197  Reused: 170
   198  Allocs: 26
   199  Retain: 148
   200  
   201  Unifications: 196
   202  Conjuncts:    464
   203  Disjuncts:    268
   204  -- out/eval --
   205  Errors:
   206  structural cycle:
   207      ./in.cue:3:25
   208  structural cycle:
   209      ./in.cue:8:9
   210  structural cycle:
   211      ./in.cue:8:38
   212  
   213  Result:
   214  (_|_){
   215    // [structural cycle]
   216    fibRec: (struct){
   217      nn: (int){ int }
   218      out: (_|_){
   219        // [incomplete] non-concrete value int in operand to >=:
   220        //     ./in.cue:7:5
   221        //     ./in.cue:3:35
   222        //     ./in.cue:5:5
   223        // non-concrete value int in operand to <:
   224        //     ./in.cue:10:5
   225        //     ./in.cue:3:35
   226        //     ./in.cue:5:5
   227      }
   228    }
   229    fib: (_|_){
   230      // [incomplete] fib: non-concrete value int in operand to >=:
   231      //     ./in.cue:7:5
   232      //     ./in.cue:5:5
   233      // fib: non-concrete value int in operand to <:
   234      //     ./in.cue:10:5
   235      //     ./in.cue:5:5
   236      n: (int){ int }
   237    }
   238    fib1: (int){ 1 }
   239    fib2: (int){ 1 }
   240    fib3: (_|_){
   241      // [structural cycle] structural cycle:
   242      //     ./in.cue:3:25
   243      // structural cycle:
   244      //     ./in.cue:8:38
   245    }
   246    fib7: (_|_){
   247      // [structural cycle] structural cycle:
   248      //     ./in.cue:3:25
   249      // structural cycle:
   250      //     ./in.cue:8:9
   251      // structural cycle:
   252      //     ./in.cue:8:38
   253    }
   254    fib12: (_|_){
   255      // [structural cycle] structural cycle:
   256      //     ./in.cue:3:25
   257      // structural cycle:
   258      //     ./in.cue:8:9
   259      // structural cycle:
   260      //     ./in.cue:8:38
   261    }
   262  }
   263  -- diff/todo/p2 --
   264  Elimination of unnecessary, but potentially useful, errors.