def defnDef()

in rsc/src/main/scala/rsc/parse/scala/Defns.scala [23:79]


  def defnDef(mods: Mods): Stat = {
    val start = mods.pos.start
    if (in.token == THIS) {
      in.nextToken()
      val id = atPos(start)(CtorId())
      val paramss = this.paramss(CtorContext)
      newLineOptWhenFollowedBy(LBRACE)
      if (in.token == EQUALS) {
        in.nextToken()
      }
      val rhs = term()
      atPos(start)(DefnCtor(mods, id, paramss, rhs))
    } else {
      val id = termId()
      val tparams = typeParams(DefnDefContext)
      val paramss = this.paramss(DefnDefContext)
      newLineOptWhenFollowedBy(LBRACE)
      if (in.token == COLON) {
        in.nextToken()
        val ret = Some(tpt())
        if (in.token == EQUALS) {
          in.nextToken()
          if (in.token == ID && in.idValue == "macro") {
            in.nextToken()
            val rhs = term()
            atPos(start)(DefnMacro(mods, id, tparams, paramss, ret, rhs))
          } else {
            val rhs = Some(term())
            atPos(start)(DefnMethod(mods, id, tparams, paramss, ret, rhs))
          }
        } else {
          atPos(start)(DefnMethod(mods, id, tparams, paramss, ret, None))
        }
      } else if (in.token == LBRACE) {
        val rhs = Some(term())
        atPos(start)(DefnProcedure(mods, id, tparams, paramss, rhs))
      } else if (in.token == EQUALS) {
        val ret = None
        in.nextToken()
        if (in.token == ID && in.idValue == "macro") {
          in.nextToken()
          val rhs = term()
          atPos(start)(DefnMacro(mods, id, tparams, paramss, ret, rhs))
        } else {
          val rhs = Some(term())
          atPos(start)(DefnMethod(mods, id, tparams, paramss, ret, rhs))
        }
      } else if (in.token.isStatSep || in.token == RBRACE) {
        atPos(start)(DefnProcedure(mods, id, tparams, paramss, None))
      } else {
        val errOffset = in.offset
        accept(EQUALS)
        val rhs = Some(atPos(errOffset)(errorTerm()))
        atPos(errOffset)(DefnMethod(mods, id, tparams, paramss, None, rhs))
      }
    }
  }