cuelang.org/go@v0.13.0/cue/testdata/export/issue2244.txtar (about)

     1  -- in.cue --
     2  package x
     3  
     4  import (
     5  	"strings"
     6  )
     7  
     8  _#matchPattern: {
     9  	#pattern: string
    10  	[
    11  		// can't remove this builtin call
    12  		if strings.HasSuffix(#pattern, "*") {
    13  
    14  			// this let is required _within_ the if block
    15  			// i.e. it can't be "inlined" with the if that
    16  			// currently contains it
    17  			let prefix = strings.TrimSuffix(#pattern, "*")
    18  
    19  			prefix
    20  		},
    21  		"'\(#pattern)'",
    22  	][0]
    23  }
    24  
    25  _#isReleaseTag: _#matchPattern & {#pattern: "refs/tags/v*", _}
    26  
    27  #step: {
    28  	if: number | string
    29  }
    30  
    31  m: #step & {
    32  	if: _#isReleaseTag
    33  }
    34  -- out/eval/stats --
    35  Leaks:  18
    36  Freed:  17
    37  Reused: 13
    38  Allocs: 22
    39  Retain: 34
    40  
    41  Unifications: 26
    42  Conjuncts:    60
    43  Disjuncts:    42
    44  -- diff/explanation --
    45  New evaluator should ultimately disallow new definitions in closed structs
    46  and not allow #pattern in #step
    47  -- out/evalalpha --
    48  (struct){
    49    _#matchPattern(:x): (_|_){
    50      // [incomplete] error in call to strings.HasSuffix: non-concrete value string:
    51      //     ./in.cue:11:6
    52      //     ./in.cue:8:12
    53      #pattern: (string){ string }
    54    }
    55    _#isReleaseTag(:x): (string){
    56      "refs/tags/v"
    57      #pattern: (string){ "refs/tags/v*" }
    58      let prefix#1 = (string){ "refs/tags/v" }
    59    }
    60    #step: (#struct){
    61      if: ((string|number)){ |((number){ number }, (string){ string }) }
    62    }
    63    m: (#struct){
    64      if: (string){
    65        "refs/tags/v"
    66        #pattern: (string){ "refs/tags/v*" }
    67        let prefix#1 = (string){ "refs/tags/v" }
    68      }
    69    }
    70  }
    71  -- diff/-out/evalalpha<==>+out/eval --
    72  diff old new
    73  --- old
    74  +++ new
    75  @@ -1,6 +1,6 @@
    76   (struct){
    77     _#matchPattern(:x): (_|_){
    78  -    // [incomplete] _#matchPattern: error in call to strings.HasSuffix: non-concrete value string:
    79  +    // [incomplete] error in call to strings.HasSuffix: non-concrete value string:
    80       //     ./in.cue:11:6
    81       //     ./in.cue:8:12
    82       #pattern: (string){ string }
    83  -- out/eval --
    84  (struct){
    85    _#matchPattern(:x): (_|_){
    86      // [incomplete] _#matchPattern: error in call to strings.HasSuffix: non-concrete value string:
    87      //     ./in.cue:11:6
    88      //     ./in.cue:8:12
    89      #pattern: (string){ string }
    90    }
    91    _#isReleaseTag(:x): (string){
    92      "refs/tags/v"
    93      #pattern: (string){ "refs/tags/v*" }
    94      let prefix#1 = (string){ "refs/tags/v" }
    95    }
    96    #step: (#struct){
    97      if: ((string|number)){ |((number){ number }, (string){ string }) }
    98    }
    99    m: (#struct){
   100      if: (string){
   101        "refs/tags/v"
   102        #pattern: (string){ "refs/tags/v*" }
   103        let prefix#1 = (string){ "refs/tags/v" }
   104      }
   105    }
   106  }
   107  -- out/compile --
   108  --- in.cue
   109  {
   110    _#matchPattern: {
   111      #pattern: string
   112      [
   113        if 〈import;strings〉.HasSuffix(〈1;#pattern〉, "*") {
   114          let prefix#1 = 〈import;strings〉.TrimSuffix(〈2;#pattern〉, "*")
   115          〈0;let prefix#1〉
   116        },
   117        "'\(〈1;#pattern〉)'",
   118      ][0]
   119    }
   120    _#isReleaseTag: (〈0;_#matchPattern〉 & {
   121      #pattern: "refs/tags/v*"
   122      _
   123    })
   124    #step: {
   125      if: (number|string)
   126    }
   127    m: (〈0;#step〉 & {
   128      if: 〈1;_#isReleaseTag〉
   129    })
   130  }