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))
}
}
}