private def rawPath()

in rsc/src/main/scala/rsc/parse/scala/Paths.scala [111:172]


  private def rawPath(): RawPath = {
    val start = in.offset
    def loop(qual: TermPath): RawPath = {
      if (in.token == DOT) {
        in.nextToken()
        if (in.token == ID) {
          val nextId = termId()
          loop(atPos(start)(TermSelect(qual, nextId)))
        } else {
          UnfinishedPath(qual)
        }
      } else {
        FinishedPath(qual)
      }
    }
    if (in.token == ID) {
      val firstId = termId()
      if (in.token == DOT) {
        in.nextToken()
        if (in.token == ID) {
          val nextId = termId()
          loop(atPos(start)(TermSelect(firstId, nextId)))
        } else if (in.token == THIS) {
          in.nextToken()
          val qual = atPos(firstId.pos)(AmbigId(firstId.value))
          loop(atPos(start)(TermThis(qual)))
        } else if (in.token == SUPER) {
          in.nextToken()
          val qual = atPos(firstId.pos)(AmbigId(firstId.value))
          val mix = {
            if (in.token == LBRACKET) {
              inBrackets(atPos(in.offset)(ambigId()))
            } else {
              anonId()
            }
          }
          loop(atPos(start)(TermSuper(qual, mix)))
        } else {
          UnfinishedPath(firstId)
        }
      } else {
        FinishedPath(firstId)
      }
    } else if (in.token == THIS) {
      in.nextToken()
      val qual = anonId()
      loop(atPos(start)(TermThis(qual)))
    } else if (in.token == SUPER) {
      in.nextToken()
      val qual = anonId()
      val mix = {
        if (in.token == LBRACKET) {
          inBrackets(atPos(in.offset)(ambigId()))
        } else {
          anonId()
        }
      }
      loop(atPos(start)(TermSuper(qual, mix)))
    } else {
      UnstartedPath
    }
  }