...

Text file src/cuelang.org/go/cue/testdata/comprehensions/issue837.txtar

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

     1-- in.cue --
     2#DeploymentManifest: #Manifest & {ref: kind: "deployment"}
     3
     4#Manifest: {
     5	ref:         #ManifestRef
     6	description: #KumoriKinds[ref.kind]
     7}
     8
     9#ManifestRef: kind: #KindsNames
    10
    11#KindsNames: "service" | "deployment"
    12
    13#KumoriKinds: deployment: #Deployment
    14#KumoriKinds: [string]: {...}
    15
    16#DoDeploy: {
    17	_params: manifest: #DeploymentManifest
    18	deployment: {
    19		description: {
    20			let dep = _params.manifest.description
    21			service: (#Configure & {
    22				_params: hsize: dep.hsize
    23			}).service
    24		}
    25	}
    26}
    27
    28#Configure: {
    29	$p=_params: {
    30		hsize: [string]: #RoleSize
    31	}
    32	service: {
    33		description: {
    34			let configed = (#RelabelService & {
    35				_params: {
    36					hsize: $p.hsize
    37				}
    38				role: "admin"
    39			}).out
    40
    41			role: configed.role
    42		}
    43	}
    44}
    45
    46#RelabelService: {
    47	$p=_params: {
    48		hsize: #RoleSize
    49	}
    50
    51	out: {
    52		labstr: $p.label
    53	}
    54}
    55
    56#RoleSize: {
    57	$_instances: >=0 | *1
    58}
    59
    60#Deployment: {
    61	service: #ServiceManifest
    62	hsize: [service.description.#roles]: #RoleSize
    63}
    64
    65#ServiceManifest: #Manifest & {ref: kind: "service"}
    66-- out/eval/stats --
    67Leaks:  16
    68Freed:  117
    69Reused: 108
    70Allocs: 25
    71Retain: 123
    72
    73Unifications: 107
    74Conjuncts:    295
    75Disjuncts:    240
    76-- out/eval --
    77Errors:
    78#Configure.service.description.role: undefined field: role:
    79    ./in.cue:40:19
    80#DoDeploy.deployment.description.service.description.role: undefined field: role:
    81    ./in.cue:40:19
    82#RelabelService.out.labstr: undefined field: label:
    83    ./in.cue:51:14
    84
    85Result:
    86(_|_){
    87  // [eval]
    88  #DeploymentManifest: (#struct){
    89    ref: (#struct){
    90      kind: (string){ "deployment" }
    91    }
    92    description: (#struct){
    93      service: (#struct){
    94        ref: (#struct){
    95          kind: (string){ "service" }
    96        }
    97        description: (_|_){
    98          // [incomplete] #DeploymentManifest.description.service.description: undefined field: service:
    99          //     ./in.cue:5:28
   100        }
   101      }
   102      hsize: (#struct){
   103      }
   104    }
   105  }
   106  #Manifest: (#struct){
   107    ref: (#struct){
   108      kind: (string){ |((string){ "service" }, (string){ "deployment" }) }
   109    }
   110    description: (_|_){
   111      // [incomplete] #Manifest.description: unresolved disjunction "service" | "deployment" (type string):
   112      //     ./in.cue:5:15
   113    }
   114  }
   115  #ManifestRef: (#struct){
   116    kind: (string){ |((string){ "service" }, (string){ "deployment" }) }
   117  }
   118  #KindsNames: (string){ |((string){ "service" }, (string){ "deployment" }) }
   119  #KumoriKinds: (#struct){
   120    deployment: (#struct){
   121      service: (#struct){
   122        ref: (#struct){
   123          kind: (string){ "service" }
   124        }
   125        description: (_|_){
   126          // [incomplete] #KumoriKinds.deployment.service.description: undefined field: service:
   127          //     ./in.cue:5:28
   128        }
   129      }
   130      hsize: (#struct){
   131      }
   132    }
   133  }
   134  #DoDeploy: (_|_){
   135    // [eval]
   136    _params: (#struct){
   137      manifest: (#struct){
   138        ref: (#struct){
   139          kind: (string){ "deployment" }
   140        }
   141        description: (#struct){
   142          service: (#struct){
   143            ref: (#struct){
   144              kind: (string){ "service" }
   145            }
   146            description: (_|_){
   147              // [incomplete] #DoDeploy._params.manifest.description.service.description: undefined field: service:
   148              //     ./in.cue:5:28
   149            }
   150          }
   151          hsize: (#struct){
   152          }
   153        }
   154      }
   155    }
   156    deployment: (_|_){
   157      // [eval]
   158      description: (_|_){
   159        // [eval]
   160        let dep#1 = (#struct){
   161          service: (#struct){
   162            ref: (#struct){
   163              kind: (string){ "service" }
   164            }
   165            description: (_|_){
   166              // [incomplete] #DoDeploy.deployment.description.dep.service.description: undefined field: service:
   167              //     ./in.cue:5:28
   168            }
   169          }
   170          hsize: (#struct){
   171          }
   172        }
   173        service: (_|_){
   174          // [eval]
   175          description: (_|_){
   176            // [eval]
   177            let configed#2 = (_|_){
   178              // [eval]
   179              labstr: (_|_){
   180                // [eval] #DoDeploy.deployment.description.service.description.configed.labstr: undefined field: label:
   181                //     ./in.cue:51:14
   182              }
   183            }
   184            role: (_|_){
   185              // [eval] #DoDeploy.deployment.description.service.description.role: undefined field: role:
   186              //     ./in.cue:40:19
   187            }
   188          }
   189        }
   190      }
   191    }
   192  }
   193  #Configure: (_|_){
   194    // [eval]
   195    _params: (#struct){
   196      hsize: (#struct){
   197      }
   198    }
   199    service: (_|_){
   200      // [eval]
   201      description: (_|_){
   202        // [eval]
   203        let configed#2 = (_|_){
   204          // [eval]
   205          labstr: (_|_){
   206            // [eval] #Configure.service.description.configed.labstr: undefined field: label:
   207            //     ./in.cue:51:14
   208          }
   209        }
   210        role: (_|_){
   211          // [eval] #Configure.service.description.role: undefined field: role:
   212          //     ./in.cue:40:19
   213        }
   214      }
   215    }
   216  }
   217  #RelabelService: (_|_){
   218    // [eval]
   219    _params: (#struct){
   220      hsize: (#struct){
   221        $_instances: (number){ |(*(int){ 1 }, (number){ >=0 }) }
   222      }
   223    }
   224    out: (_|_){
   225      // [eval]
   226      labstr: (_|_){
   227        // [eval] #RelabelService.out.labstr: undefined field: label:
   228        //     ./in.cue:51:14
   229      }
   230    }
   231  }
   232  #RoleSize: (#struct){
   233    $_instances: (number){ |(*(int){ 1 }, (number){ >=0 }) }
   234  }
   235  #Deployment: (#struct){
   236    service: (#struct){
   237      ref: (#struct){
   238        kind: (string){ "service" }
   239      }
   240      description: (_|_){
   241        // [incomplete] #Deployment.service.description: undefined field: service:
   242        //     ./in.cue:5:28
   243      }
   244    }
   245    hsize: (#struct){
   246    }
   247  }
   248  #ServiceManifest: (#struct){
   249    ref: (#struct){
   250      kind: (string){ "service" }
   251    }
   252    description: (_|_){
   253      // [incomplete] #ServiceManifest.description: undefined field: service:
   254      //     ./in.cue:5:28
   255    }
   256  }
   257}
   258-- out/compile --
   259--- in.cue
   260{
   261  #DeploymentManifest: (〈0;#Manifest〉 & {
   262    ref: {
   263      kind: "deployment"
   264    }
   265  })
   266  #Manifest: {
   267    ref: 〈1;#ManifestRef〉
   268    description: 〈1;#KumoriKinds〉[〈0;ref〉.kind]
   269  }
   270  #ManifestRef: {
   271    kind: 〈1;#KindsNames〉
   272  }
   273  #KindsNames: ("service"|"deployment")
   274  #KumoriKinds: {
   275    deployment: 〈1;#Deployment〉
   276  }
   277  #KumoriKinds: {
   278    [string]: {
   279      ...
   280    }
   281  }
   282  #DoDeploy: {
   283    _params: {
   284      manifest: 〈2;#DeploymentManifest〉
   285    }
   286    deployment: {
   287      description: {
   288        let dep#1 = 〈2;_params〉.manifest.description
   289        service: (〈3;#Configure〉 & {
   290          _params: {
   291            hsize: 〈2;let dep#1〉.hsize
   292          }
   293        }).service
   294      }
   295    }
   296  }
   297  #Configure: {
   298    _params: {
   299      hsize: {
   300        [string]: 〈3;#RoleSize〉
   301      }
   302    }
   303    service: {
   304      description: {
   305        let configed#2 = (〈3;#RelabelService〉 & {
   306          _params: {
   307            hsize: 〈4;_params〉.hsize
   308          }
   309          role: "admin"
   310        }).out
   311        role: 〈0;let configed#2〉.role
   312      }
   313    }
   314  }
   315  #RelabelService: {
   316    _params: {
   317      hsize: 〈2;#RoleSize〉
   318    }
   319    out: {
   320      labstr: 〈1;_params〉.label
   321    }
   322  }
   323  #RoleSize: {
   324    $_instances: (>=0|*1)
   325  }
   326  #Deployment: {
   327    service: 〈1;#ServiceManifest〉
   328    hsize: {
   329      [〈1;service〉.description.#roles]: 〈2;#RoleSize〉
   330    }
   331  }
   332  #ServiceManifest: (〈0;#Manifest〉 & {
   333    ref: {
   334      kind: "service"
   335    }
   336  })
   337}

View as plain text