// Issues: #667, #695, #622
-- in.cue --
import (
	"strconv"
	"regexp"
)

// In these test, it is impossible to determine the existence of some arcs due
// to mutual dependence on becoming concrete.
//
// This tests shows the essences of when an existence check cannot be resolved.
minimal: {
    a: {
        if b.port == _|_ {
            port: ""
        }
    }

    b: {
        if a.port == _|_ {
            port: ""
        }
    }
}

small: {
    #userHostPort: 	#"^(:(?P<port>\d+))?$"#

    p1: {
		#Y: regexp.FindNamedSubmatch(#userHostPort, #X.port)

        #X: {
            if #Y.port == _|_ {
                port: ""
            }
            if #Y.port != _|_ {
                port: ":" + strconv.FormatInt(#Y.port, 10)
            }
        }
	}

    p2: {
        #X: {
            if #Y.port == _|_ {
                port: ""
            }
            if #Y.port != _|_ {
                port: ":" + strconv.FormatInt(#Y.port, 10)
            }
        }

		#Y: regexp.FindNamedSubmatch(#userHostPort, #X.port)
	}
}

medium: {
    #userHostPort: 	#"^(:(?P<port>\d+))?$"#

    p1: {
        #Y: regexp.FindNamedSubmatch(#userHostPort, #X.port)

        Y: {
            if #Y.port != _|_ {
                port: strconv.Atoi(#Y.port)
            }
        }

        #X: {
            // Can never determine whether Y.port exists as its resolution
            // depends on #Y becoming finalized, which, in turn, depends on #X
            // becoming finalized.
            if Y.port == _|_ {
                port: ""
            }
            if Y.port != _|_ {
                port: ":" + strconv.FormatInt(Y.port, 10)
            }
        }
    }

    p2: {
        #Y: regexp.FindNamedSubmatch(#userHostPort, #X.port)

        #X: {
            // Can never determine whether Y.port exists as its resolution
            // depends on #Y becoming finalized, which, in turn, depends on #X
            // becoming finalized.
            if Y.port == _|_ {
                port: ""
            }
            if Y.port != _|_ {
                port: ":" + strconv.FormatInt(Y.port, 10)
            }
        }

        Y: {
            if #Y.port != _|_ {
              port: strconv.Atoi(#Y.port)
            }
        }
	}

    p3: {
         Y: {
            if #Y.port != _|_ {
                port: strconv.Atoi(#Y.port)
            }
        }

        #Y: regexp.FindNamedSubmatch(#userHostPort, #X.port)

        #X: {
            // Can never determine whether Y.port exists as its resolution
            // depends on #Y becoming finalized, which, in turn, depends on #X
            // becoming finalized.
            if Y.port == _|_ {
                port: ""
            }
            if Y.port != _|_ {
                port: ":" + strconv.FormatInt(Y.port, 10)
            }
        }
    }

    p4: {
        Y: {
            if #Y.port != _|_ {
                port: strconv.Atoi(#Y.port)
            }
        }

        #X: {
            // Can never determine whether Y.port exists as its resolution
            // depends on #Y becoming finalized, which, in turn, depends on #X
            // becoming finalized.
            if Y.port == _|_ {
                port: ""
            }
            if Y.port != _|_ {
                port: ":" + strconv.FormatInt(Y.port, 10)
            }
        }

        #Y: regexp.FindNamedSubmatch(#userHostPort, #X.port)
    }

    p5: {
        #X: {
            // Can never determine whether Y.port exists as its resolution
            // depends on #Y becoming finalized, which, in turn, depends on #X
            // becoming finalized.
            if Y.port == _|_ {
                port: ""
            }
            if Y.port != _|_ {
                port: ":" + strconv.FormatInt(Y.port, 10)
            }
        }

        #Y: regexp.FindNamedSubmatch(#userHostPort, #X.port)

        Y: {
            if #Y.port != _|_ {
                port: strconv.Atoi(#Y.port)
            }
        }
    }

    p6: {
        #X: {
            // Can never determine whether Y.port exists as its resolution
            // depends on #Y becoming finalized, which, in turn, depends on #X
            // becoming finalized.
            if Y.port == _|_ {
                port: ""
            }
            if Y.port != _|_ {
                port: ":" + strconv.FormatInt(Y.port, 10)
            }
        }

        Y: {
            if #Y.port != _|_ {
                port: strconv.Atoi(#Y.port)
            }
        }

        #Y: regexp.FindNamedSubmatch(#userHostPort, #X.port)
    }
}


large: {
    #userHostPort: 	#"^((?P<userinfo>[[:alnum:]]*)@)?(?P<host>[[:alnum:].]+)(:(?P<port>\d+))?$"#

    p1: {
        Y: {
            userinfo: "user"
            host:     "example.com"
        }

        X: #X.userinfo + #X.host + #X.port

        #X: {
            if Y.userinfo == _|_ {
                userinfo: ""
            }
            if Y.userinfo != _|_ {
                userinfo: Y.userinfo + "@"
            }

            host: Y.host

            if Y.port == _|_ {
                port: ""
            }
            if Y.port != _|_ {
                port: ":" + strconv.FormatInt(Y.port, 10)
            }
        }

        Y: {
            if #Y.userinfo != _|_ {
                userinfo: #Y.userinfo
            }
            
            host: #Y.host

            if #Y.port != _|_ {
                port: strconv.Atoi(#Y.port)
            }
        }

        #Y: regexp.FindNamedSubmatch(#userHostPort, X)
    }

    p2: {
        X: #X.userinfo + #X.host + #X.port

        Y: {
            userinfo: "user"
            host:     "example.com"
        }

        #X: {
            if Y.userinfo == _|_ {
                userinfo: ""
            }
            if Y.userinfo != _|_ {
                userinfo: Y.userinfo + "@"
            }

            host: Y.host

            if Y.port == _|_ {
                port: ""
            }
            if Y.port != _|_ {
                port: ":" + strconv.FormatInt(Y.port, 10)
            }
        }

        Y: {
            if #Y.userinfo != _|_ {
                userinfo: #Y.userinfo
            }
            
            host: #Y.host

            if #Y.port != _|_ {
                port: strconv.Atoi(#Y.port)
            }
        }

        #Y: regexp.FindNamedSubmatch(#userHostPort, X)
    }

    p3: {
        X: #X.userinfo + #X.host + #X.port

        #X: {
            if Y.userinfo == _|_ {
                userinfo: ""
            }
            if Y.userinfo != _|_ {
                userinfo: Y.userinfo + "@"
            }

            host: Y.host

            if Y.port == _|_ {
                port: ""
            }
            if Y.port != _|_ {
                port: ":" + strconv.FormatInt(Y.port, 10)
            }
        }

        Y: {
            userinfo: "user"
            host:     "example.com"
        }

        Y: {
            if #Y.userinfo != _|_ {
                userinfo: #Y.userinfo
            }
            
            host: #Y.host

            if #Y.port != _|_ {
                port: strconv.Atoi(#Y.port)
            }
        }

        #Y: regexp.FindNamedSubmatch(#userHostPort, X)
    }

    p4: {
        X: #X.userinfo + #X.host + #X.port

        #X: {
            if Y.userinfo == _|_ {
                userinfo: ""
            }
            if Y.userinfo != _|_ {
                userinfo: Y.userinfo + "@"
            }

            host: Y.host

            if Y.port == _|_ {
                port: ""
            }
            if Y.port != _|_ {
                port: ":" + strconv.FormatInt(Y.port, 10)
            }
        }

        #Y: regexp.FindNamedSubmatch(#userHostPort, X)

        Y: {
            userinfo: "user"
            host:     "example.com"
        }

        Y: {
            if #Y.userinfo != _|_ {
                userinfo: #Y.userinfo
            }

            host: #Y.host

            if #Y.port != _|_ {
                port: strconv.Atoi(#Y.port)
            }
        }
    }
}
-- out/eval --
Errors:
large.p1.Y: cycle: new field port inserted by if clause that was previously evaluated by another if clause
large.p2.#Y: cycle: field userinfo was added after an if clause evaluated it
large.p2.Y: cycle: new field port inserted by if clause that was previously evaluated by another if clause
large.p3.#Y: cycle: field userinfo was added after an if clause evaluated it
large.p3.Y: cycle: new field port inserted by if clause that was previously evaluated by another if clause
large.p4.#Y: cycle: field userinfo was added after an if clause evaluated it
medium.p1.#Y: cycle: field port was added after an if clause evaluated it
medium.p2.#Y: cycle: field port was added after an if clause evaluated it
medium.p3.Y: cycle: new field port inserted by if clause that was previously evaluated by another if clause
medium.p4.Y: cycle: new field port inserted by if clause that was previously evaluated by another if clause
minimal.b: cycle: new field port inserted by if clause that was previously evaluated by another if clause
small.p1.#Y: cycle: field port was added after an if clause evaluated it
error in call to strconv.Atoi: strconv.Atoi: parsing "": invalid syntax:
    ./in.cue:104:23
error in call to strconv.Atoi: strconv.Atoi: parsing "": invalid syntax:
    ./in.cue:126:23
error in call to strconv.Atoi: strconv.Atoi: parsing "": invalid syntax:
    ./in.cue:228:23
error in call to strconv.Atoi: strconv.Atoi: parsing "": invalid syntax:
    ./in.cue:269:23
error in call to strconv.Atoi: strconv.Atoi: parsing "": invalid syntax:
    ./in.cue:310:23

Result:
(_|_){
  // [eval]
  minimal: (_|_){
    // [eval]
    a: (struct){
    }
    b: (_|_){
      // [eval] minimal.b: cycle: new field port inserted by if clause that was previously evaluated by another if clause
      port: (string){ "" }
    }
  }
  small: (_|_){
    // [eval]
    #userHostPort: (string){ "^(:(?P<port>\\d+))?$" }
    p1: (_|_){
      // [eval]
      #Y: (_|_){
        // [eval] small.p1.#Y: cycle: field port was added after an if clause evaluated it
        port: (string){ "" }
      }
      #X: (#struct){
        port: (string){ "" }
      }
    }
    p2: (struct){
      #X: (#struct){
        port: (string){ "" }
      }
      #Y: (_|_){
        // [incomplete] small.p2.#Y: undefined field port:
        //     ./in.cue:50:50
        port: (string){ "" }
      }
    }
  }
  medium: (_|_){
    // [eval]
    #userHostPort: (string){ "^(:(?P<port>\\d+))?$" }
    p1: (_|_){
      // [eval]
      #Y: (_|_){
        // [eval] medium.p1.#Y: cycle: field port was added after an if clause evaluated it
        port: (string){ "" }
      }
      Y: (struct){
      }
      #X: (#struct){
        port: (string){ "" }
      }
    }
    p2: (_|_){
      // [eval]
      #Y: (_|_){
        // [eval] medium.p2.#Y: cycle: field port was added after an if clause evaluated it
        port: (string){ "" }
      }
      #X: (#struct){
        port: (string){ "" }
      }
      Y: (struct){
      }
    }
    p3: (_|_){
      // [eval]
      Y: (_|_){
        // [eval] medium.p3.Y: cycle: new field port inserted by if clause that was previously evaluated by another if clause
        port: (_|_){
          // [eval] error in call to strconv.Atoi: strconv.Atoi: parsing "": invalid syntax:
          //     ./in.cue:104:23
        }
      }
      #Y: (#struct){
        port: (string){ "" }
      }
      #X: (#struct){
        port: (string){ "" }
      }
    }
    p4: (_|_){
      // [eval]
      Y: (_|_){
        // [eval] medium.p4.Y: cycle: new field port inserted by if clause that was previously evaluated by another if clause
        port: (_|_){
          // [eval] error in call to strconv.Atoi: strconv.Atoi: parsing "": invalid syntax:
          //     ./in.cue:126:23
        }
      }
      #X: (#struct){
        port: (string){ "" }
      }
      #Y: (#struct){
        port: (string){ "" }
      }
    }
    p5: (struct){
      #X: (#struct){
        port: (string){ "" }
      }
      #Y: (_|_){
        // [incomplete] medium.p5.#Y: undefined field port:
        //     ./in.cue:158:56
        port: (string){ "" }
      }
      Y: (struct){
      }
    }
    p6: (struct){
      #X: (#struct){
        port: (string){ "" }
      }
      Y: (struct){
      }
      #Y: (_|_){
        // [incomplete] medium.p6.#Y: undefined field port:
        //     ./in.cue:186:56
        port: (string){ "" }
      }
    }
  }
  large: (_|_){
    // [eval]
    #userHostPort: (string){ "^((?P<userinfo>[[:alnum:]]*)@)?(?P<host>[[:alnum:].]+)(:(?P<port>\\d+))?$" }
    p1: (_|_){
      // [eval]
      Y: (_|_){
        // [eval] large.p1.Y: cycle: new field port inserted by if clause that was previously evaluated by another if clause
        userinfo: (string){ "user" }
        host: (string){ "example.com" }
        port: (_|_){
          // [eval] error in call to strconv.Atoi: strconv.Atoi: parsing "": invalid syntax:
          //     ./in.cue:228:23
        }
      }
      X: (string){ "user@example.com" }
      #X: (#struct){
        host: (string){ "example.com" }
        userinfo: (string){ "user@" }
        port: (string){ "" }
      }
      #Y: (#struct){
        host: (string){ "example.com" }
        port: (string){ "" }
        userinfo: (string){ "user" }
      }
    }
    p2: (_|_){
      // [eval]
      X: (string){ "user@example.com" }
      Y: (_|_){
        // [eval] large.p2.Y: cycle: new field port inserted by if clause that was previously evaluated by another if clause
        userinfo: (string){ "user" }
        host: (string){ "example.com" }
        port: (_|_){
          // [eval] error in call to strconv.Atoi: strconv.Atoi: parsing "": invalid syntax:
          //     ./in.cue:269:23
        }
      }
      #X: (#struct){
        host: (string){ "example.com" }
        userinfo: (string){ "user@" }
        port: (string){ "" }
      }
      #Y: (_|_){
        // [eval] large.p2.#Y: cycle: field userinfo was added after an if clause evaluated it
        host: (string){ "example.com" }
        port: (string){ "" }
        userinfo: (string){ "user" }
      }
    }
    p3: (_|_){
      // [eval]
      X: (string){ "user@example.com" }
      #X: (#struct){
        host: (string){ "example.com" }
        userinfo: (string){ "user@" }
        port: (string){ "" }
      }
      Y: (_|_){
        // [eval] large.p3.Y: cycle: new field port inserted by if clause that was previously evaluated by another if clause
        userinfo: (string){ "user" }
        host: (string){ "example.com" }
        port: (_|_){
          // [eval] error in call to strconv.Atoi: strconv.Atoi: parsing "": invalid syntax:
          //     ./in.cue:310:23
        }
      }
      #Y: (_|_){
        // [eval] large.p3.#Y: cycle: field userinfo was added after an if clause evaluated it
        host: (string){ "example.com" }
        port: (string){ "" }
        userinfo: (string){ "user" }
      }
    }
    p4: (_|_){
      // [eval]
      X: (string){ "user@example.com" }
      #X: (#struct){
        host: (string){ "example.com" }
        userinfo: (string){ "user@" }
        port: (string){ "" }
      }
      #Y: (_|_){
        // [eval] large.p4.#Y: cycle: field userinfo was added after an if clause evaluated it
        host: (string){ "example.com" }
        port: (string){ "" }
        userinfo: (string){ "user" }
      }
      Y: (_|_){
        // [eval]
        userinfo: (string){ "user" }
        host: (_|_){
          // [eval] large.p4.#Y: cycle: field userinfo was added after an if clause evaluated it
        }
      }
    }
  }
}
-- out/compile --
--- in.cue
{
  minimal: {
    a: {
      if (〈1;b〉.port == _|_(explicit error (_|_ literal) in source)) {
        port: ""
      }
    }
    b: {
      if (〈1;a〉.port == _|_(explicit error (_|_ literal) in source)) {
        port: ""
      }
    }
  }
  small: {
    #userHostPort: "^(:(?P<port>\\d+))?$"
    p1: {
      #Y: 〈import;regexp〉.FindNamedSubmatch(〈1;#userHostPort〉, 〈0;#X〉.port)
      #X: {
        if (〈1;#Y〉.port == _|_(explicit error (_|_ literal) in source)) {
          port: ""
        }
        if (〈1;#Y〉.port != _|_(explicit error (_|_ literal) in source)) {
          port: (":" + 〈import;strconv〉.FormatInt(〈2;#Y〉.port, 10))
        }
      }
    }
    p2: {
      #X: {
        if (〈1;#Y〉.port == _|_(explicit error (_|_ literal) in source)) {
          port: ""
        }
        if (〈1;#Y〉.port != _|_(explicit error (_|_ literal) in source)) {
          port: (":" + 〈import;strconv〉.FormatInt(〈2;#Y〉.port, 10))
        }
      }
      #Y: 〈import;regexp〉.FindNamedSubmatch(〈1;#userHostPort〉, 〈0;#X〉.port)
    }
  }
  medium: {
    #userHostPort: "^(:(?P<port>\\d+))?$"
    p1: {
      #Y: 〈import;regexp〉.FindNamedSubmatch(〈1;#userHostPort〉, 〈0;#X〉.port)
      Y: {
        if (〈1;#Y〉.port != _|_(explicit error (_|_ literal) in source)) {
          port: 〈import;strconv〉.Atoi(〈2;#Y〉.port)
        }
      }
      #X: {
        if (〈1;Y〉.port == _|_(explicit error (_|_ literal) in source)) {
          port: ""
        }
        if (〈1;Y〉.port != _|_(explicit error (_|_ literal) in source)) {
          port: (":" + 〈import;strconv〉.FormatInt(〈2;Y〉.port, 10))
        }
      }
    }
    p2: {
      #Y: 〈import;regexp〉.FindNamedSubmatch(〈1;#userHostPort〉, 〈0;#X〉.port)
      #X: {
        if (〈1;Y〉.port == _|_(explicit error (_|_ literal) in source)) {
          port: ""
        }
        if (〈1;Y〉.port != _|_(explicit error (_|_ literal) in source)) {
          port: (":" + 〈import;strconv〉.FormatInt(〈2;Y〉.port, 10))
        }
      }
      Y: {
        if (〈1;#Y〉.port != _|_(explicit error (_|_ literal) in source)) {
          port: 〈import;strconv〉.Atoi(〈2;#Y〉.port)
        }
      }
    }
    p3: {
      Y: {
        if (〈1;#Y〉.port != _|_(explicit error (_|_ literal) in source)) {
          port: 〈import;strconv〉.Atoi(〈2;#Y〉.port)
        }
      }
      #Y: 〈import;regexp〉.FindNamedSubmatch(〈1;#userHostPort〉, 〈0;#X〉.port)
      #X: {
        if (〈1;Y〉.port == _|_(explicit error (_|_ literal) in source)) {
          port: ""
        }
        if (〈1;Y〉.port != _|_(explicit error (_|_ literal) in source)) {
          port: (":" + 〈import;strconv〉.FormatInt(〈2;Y〉.port, 10))
        }
      }
    }
    p4: {
      Y: {
        if (〈1;#Y〉.port != _|_(explicit error (_|_ literal) in source)) {
          port: 〈import;strconv〉.Atoi(〈2;#Y〉.port)
        }
      }
      #X: {
        if (〈1;Y〉.port == _|_(explicit error (_|_ literal) in source)) {
          port: ""
        }
        if (〈1;Y〉.port != _|_(explicit error (_|_ literal) in source)) {
          port: (":" + 〈import;strconv〉.FormatInt(〈2;Y〉.port, 10))
        }
      }
      #Y: 〈import;regexp〉.FindNamedSubmatch(〈1;#userHostPort〉, 〈0;#X〉.port)
    }
    p5: {
      #X: {
        if (〈1;Y〉.port == _|_(explicit error (_|_ literal) in source)) {
          port: ""
        }
        if (〈1;Y〉.port != _|_(explicit error (_|_ literal) in source)) {
          port: (":" + 〈import;strconv〉.FormatInt(〈2;Y〉.port, 10))
        }
      }
      #Y: 〈import;regexp〉.FindNamedSubmatch(〈1;#userHostPort〉, 〈0;#X〉.port)
      Y: {
        if (〈1;#Y〉.port != _|_(explicit error (_|_ literal) in source)) {
          port: 〈import;strconv〉.Atoi(〈2;#Y〉.port)
        }
      }
    }
    p6: {
      #X: {
        if (〈1;Y〉.port == _|_(explicit error (_|_ literal) in source)) {
          port: ""
        }
        if (〈1;Y〉.port != _|_(explicit error (_|_ literal) in source)) {
          port: (":" + 〈import;strconv〉.FormatInt(〈2;Y〉.port, 10))
        }
      }
      Y: {
        if (〈1;#Y〉.port != _|_(explicit error (_|_ literal) in source)) {
          port: 〈import;strconv〉.Atoi(〈2;#Y〉.port)
        }
      }
      #Y: 〈import;regexp〉.FindNamedSubmatch(〈1;#userHostPort〉, 〈0;#X〉.port)
    }
  }
  large: {
    #userHostPort: "^((?P<userinfo>[[:alnum:]]*)@)?(?P<host>[[:alnum:].]+)(:(?P<port>\\d+))?$"
    p1: {
      Y: {
        userinfo: "user"
        host: "example.com"
      }
      X: ((〈0;#X〉.userinfo + 〈0;#X〉.host) + 〈0;#X〉.port)
      #X: {
        if (〈1;Y〉.userinfo == _|_(explicit error (_|_ literal) in source)) {
          userinfo: ""
        }
        if (〈1;Y〉.userinfo != _|_(explicit error (_|_ literal) in source)) {
          userinfo: (〈2;Y〉.userinfo + "@")
        }
        host: 〈1;Y〉.host
        if (〈1;Y〉.port == _|_(explicit error (_|_ literal) in source)) {
          port: ""
        }
        if (〈1;Y〉.port != _|_(explicit error (_|_ literal) in source)) {
          port: (":" + 〈import;strconv〉.FormatInt(〈2;Y〉.port, 10))
        }
      }
      Y: {
        if (〈1;#Y〉.userinfo != _|_(explicit error (_|_ literal) in source)) {
          userinfo: 〈2;#Y〉.userinfo
        }
        host: 〈1;#Y〉.host
        if (〈1;#Y〉.port != _|_(explicit error (_|_ literal) in source)) {
          port: 〈import;strconv〉.Atoi(〈2;#Y〉.port)
        }
      }
      #Y: 〈import;regexp〉.FindNamedSubmatch(〈1;#userHostPort〉, 〈0;X〉)
    }
    p2: {
      X: ((〈0;#X〉.userinfo + 〈0;#X〉.host) + 〈0;#X〉.port)
      Y: {
        userinfo: "user"
        host: "example.com"
      }
      #X: {
        if (〈1;Y〉.userinfo == _|_(explicit error (_|_ literal) in source)) {
          userinfo: ""
        }
        if (〈1;Y〉.userinfo != _|_(explicit error (_|_ literal) in source)) {
          userinfo: (〈2;Y〉.userinfo + "@")
        }
        host: 〈1;Y〉.host
        if (〈1;Y〉.port == _|_(explicit error (_|_ literal) in source)) {
          port: ""
        }
        if (〈1;Y〉.port != _|_(explicit error (_|_ literal) in source)) {
          port: (":" + 〈import;strconv〉.FormatInt(〈2;Y〉.port, 10))
        }
      }
      Y: {
        if (〈1;#Y〉.userinfo != _|_(explicit error (_|_ literal) in source)) {
          userinfo: 〈2;#Y〉.userinfo
        }
        host: 〈1;#Y〉.host
        if (〈1;#Y〉.port != _|_(explicit error (_|_ literal) in source)) {
          port: 〈import;strconv〉.Atoi(〈2;#Y〉.port)
        }
      }
      #Y: 〈import;regexp〉.FindNamedSubmatch(〈1;#userHostPort〉, 〈0;X〉)
    }
    p3: {
      X: ((〈0;#X〉.userinfo + 〈0;#X〉.host) + 〈0;#X〉.port)
      #X: {
        if (〈1;Y〉.userinfo == _|_(explicit error (_|_ literal) in source)) {
          userinfo: ""
        }
        if (〈1;Y〉.userinfo != _|_(explicit error (_|_ literal) in source)) {
          userinfo: (〈2;Y〉.userinfo + "@")
        }
        host: 〈1;Y〉.host
        if (〈1;Y〉.port == _|_(explicit error (_|_ literal) in source)) {
          port: ""
        }
        if (〈1;Y〉.port != _|_(explicit error (_|_ literal) in source)) {
          port: (":" + 〈import;strconv〉.FormatInt(〈2;Y〉.port, 10))
        }
      }
      Y: {
        userinfo: "user"
        host: "example.com"
      }
      Y: {
        if (〈1;#Y〉.userinfo != _|_(explicit error (_|_ literal) in source)) {
          userinfo: 〈2;#Y〉.userinfo
        }
        host: 〈1;#Y〉.host
        if (〈1;#Y〉.port != _|_(explicit error (_|_ literal) in source)) {
          port: 〈import;strconv〉.Atoi(〈2;#Y〉.port)
        }
      }
      #Y: 〈import;regexp〉.FindNamedSubmatch(〈1;#userHostPort〉, 〈0;X〉)
    }
    p4: {
      X: ((〈0;#X〉.userinfo + 〈0;#X〉.host) + 〈0;#X〉.port)
      #X: {
        if (〈1;Y〉.userinfo == _|_(explicit error (_|_ literal) in source)) {
          userinfo: ""
        }
        if (〈1;Y〉.userinfo != _|_(explicit error (_|_ literal) in source)) {
          userinfo: (〈2;Y〉.userinfo + "@")
        }
        host: 〈1;Y〉.host
        if (〈1;Y〉.port == _|_(explicit error (_|_ literal) in source)) {
          port: ""
        }
        if (〈1;Y〉.port != _|_(explicit error (_|_ literal) in source)) {
          port: (":" + 〈import;strconv〉.FormatInt(〈2;Y〉.port, 10))
        }
      }
      #Y: 〈import;regexp〉.FindNamedSubmatch(〈1;#userHostPort〉, 〈0;X〉)
      Y: {
        userinfo: "user"
        host: "example.com"
      }
      Y: {
        if (〈1;#Y〉.userinfo != _|_(explicit error (_|_ literal) in source)) {
          userinfo: 〈2;#Y〉.userinfo
        }
        host: 〈1;#Y〉.host
        if (〈1;#Y〉.port != _|_(explicit error (_|_ literal) in source)) {
          port: 〈import;strconv〉.Atoi(〈2;#Y〉.port)
        }
      }
    }
  }
}
