private def defnFlags()

in rsc/src/main/scala/rsc/parse/scala/Modifiers.scala [81:151]


  private def defnFlags(modTokens: BitSet): List[Mod] = {
    def addFlag(flags: List[Mod], flag: Mod): List[Mod] = {
      val isRepeated = flags.exists(_.productPrefix == flag.productPrefix)
      if (isRepeated) reportOffset(in.offset, RepeatedModifier)
      flags :+ flag
    }
    def loop(flags: List[Mod]): List[Mod] = {
      if (modTokens.contains(NEWLINE)) {
        newLineOpt()
      }
      if (modTokens.contains(in.token)) {
        val start = in.offset
        val flag = {
          in.token match {
            case ABSTRACT =>
              in.nextToken()
              atPos(start)(ModAbstract())
            case FINAL =>
              in.nextToken()
              atPos(start)(ModFinal())
            case LAZY =>
              in.nextToken()
              atPos(start)(ModLazy())
            case IMPLICIT =>
              in.nextToken()
              atPos(start)(ModImplicit())
            case OVERRIDE =>
              in.nextToken()
              atPos(start)(ModOverride())
            case PRIVATE =>
              in.nextToken()
              if (in.token == LBRACKET) {
                inBrackets {
                  if (in.token == THIS) {
                    in.nextToken()
                    atPos(start)(ModPrivateThis())
                  } else {
                    atPos(start)(ModPrivateWithin(ambigId()))
                  }
                }
              } else {
                atPos(start)(ModPrivate())
              }
            case PROTECTED =>
              in.nextToken()
              if (in.token == LBRACKET) {
                inBrackets {
                  if (in.token == THIS) {
                    in.nextToken()
                    atPos(start)(ModProtectedThis())
                  } else {
                    atPos(start)(ModProtectedWithin(ambigId()))
                  }
                }
              } else {
                atPos(start)(ModProtected())
              }
            case SEALED =>
              in.nextToken()
              atPos(start)(ModSealed())
            case _ =>
              crash(tokenRepl(in.token))
          }
        }
        loop(addFlag(flags, flag))
      } else {
        flags
      }
    }
    loop(Nil)
  }