Skip to content

Commit f00cf7b

Browse files
committed
Revert: Parsing and pretty-printing for "this as modifier" scheme
(reverted from commit dc36648)
1 parent cb7a9d8 commit f00cf7b

File tree

3 files changed

+16
-29
lines changed

3 files changed

+16
-29
lines changed

compiler/src/dotty/tools/dotc/parsing/Parsers.scala

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1964,19 +1964,15 @@ object Parsers {
19641964
* ClsParams ::= ClsParam {`' ClsParam}
19651965
* ClsParam ::= {Annotation} [{Modifier} (`val' | `var') | `inline'] Param
19661966
* DefParamClauses ::= {DefParamClause} [[nl] `(' [FunArgMods] DefParams `)']
1967-
* DefParamClause ::= [nl] `(' [DefParams] ')'
1968-
* ExtParamClause ::= [nl] ‘(’ ‘this’ DefParam ‘)’
1967+
* DefParamClause ::= [nl] `(' [`erased'] [DefParams] ')'
19691968
* DefParams ::= DefParam {`,' DefParam}
19701969
* DefParam ::= {Annotation} [`inline'] Param
19711970
* Param ::= id `:' ParamType [`=' Expr]
1972-
*
1973-
* @return The parameter definitions, and whether leading parameter is tagged `this`
19741971
*/
1975-
def paramClauses(owner: Name, ofCaseClass: Boolean = false): (List[List[ValDef]], Boolean) = {
1972+
def paramClauses(owner: Name, ofCaseClass: Boolean = false): List[List[ValDef]] = {
19761973
var imods: Modifiers = EmptyModifiers
19771974
var implicitOffset = -1 // use once
1978-
var firstClause = true
1979-
var isExtension = false
1975+
var firstClauseOfCaseClass = ofCaseClass
19801976
def param(): ValDef = {
19811977
val start = in.offset
19821978
var mods = annotsAsMods()
@@ -1995,7 +1991,7 @@ object Parsers {
19951991
else {
19961992
if (!(mods.flags &~ (ParamAccessor | Inline)).isEmpty)
19971993
syntaxError("`val' or `var' expected")
1998-
if (firstClause && ofCaseClass) mods
1994+
if (firstClauseOfCaseClass) mods
19991995
else mods | PrivateLocal
20001996
}
20011997
}
@@ -2024,11 +2020,6 @@ object Parsers {
20242020
}
20252021
def paramClause(): List[ValDef] = inParens {
20262022
if (in.token == RPAREN) Nil
2027-
else if (in.token == THIS && firstClause && !owner.isTypeName && owner != nme.CONSTRUCTOR) {
2028-
in.nextToken()
2029-
isExtension = true
2030-
param() :: Nil
2031-
}
20322023
else {
20332024
def funArgMods(): Unit = {
20342025
if (in.token == IMPLICIT) {
@@ -2050,7 +2041,7 @@ object Parsers {
20502041
if (in.token == LPAREN) {
20512042
imods = EmptyModifiers
20522043
paramClause() :: {
2053-
firstClause = false
2044+
firstClauseOfCaseClass = false
20542045
if (imods is Implicit) Nil else clauses()
20552046
}
20562047
} else Nil
@@ -2068,7 +2059,7 @@ object Parsers {
20682059
listOfErrors.foreach { vparam =>
20692060
syntaxError(VarArgsParamMustComeLast(), vparam.tpt.pos)
20702061
}
2071-
(result, isExtension)
2062+
result
20722063
}
20732064

20742065
/* -------- DEFS ------------------------------------------- */
@@ -2220,7 +2211,7 @@ object Parsers {
22202211
/** DefDef ::= DefSig [(‘:’ | ‘<:’) Type] ‘=’ Expr
22212212
* | this ParamClause ParamClauses `=' ConstrExpr
22222213
* DefDcl ::= DefSig `:' Type
2223-
* DefSig ::= id [DefTypeParamClause] [ExtParamClause] DefParamClauses
2214+
* DefSig ::= id [DefTypeParamClause] ParamClauses
22242215
*/
22252216
def defDefOrDcl(start: Offset, mods: Modifiers): Tree = atPos(start, nameStart) {
22262217
def scala2ProcedureSyntax(resultTypeStr: String) = {
@@ -2234,19 +2225,18 @@ object Parsers {
22342225
}
22352226
if (in.token == THIS) {
22362227
in.nextToken()
2237-
val (vparamss, _) = paramClauses(nme.CONSTRUCTOR)
2228+
val vparamss = paramClauses(nme.CONSTRUCTOR)
22382229
if (in.isScala2Mode) newLineOptWhenFollowedBy(LBRACE)
22392230
val rhs = {
22402231
if (!(in.token == LBRACE && scala2ProcedureSyntax(""))) accept(EQUALS)
22412232
atPos(in.offset) { constrExpr() }
22422233
}
22432234
makeConstructor(Nil, vparamss, rhs).withMods(mods).setComment(in.getDocComment(start))
22442235
} else {
2245-
var mods1 = addFlag(mods, Method)
2236+
val mods1 = addFlag(mods, Method)
22462237
val name = ident()
22472238
val tparams = typeParamClauseOpt(ParamOwner.Def)
2248-
val (vparamss, isExtension) = paramClauses(name)
2249-
if (isExtension) mods1 = mods1 | Extension
2239+
val vparamss = paramClauses(name)
22502240
var tpt = fromWithinReturnType {
22512241
if (in.token == SUBTYPE && mods.is(Inline)) {
22522242
in.nextToken()
@@ -2375,7 +2365,7 @@ object Parsers {
23752365
def classConstr(owner: TypeName, isCaseClass: Boolean = false): DefDef = atPos(in.lastOffset) {
23762366
val tparams = typeParamClauseOpt(ParamOwner.Class)
23772367
val cmods = fromWithinClassConstr(constrModsOpt(owner))
2378-
val (vparamss, _) = paramClauses(owner, isCaseClass)
2368+
val vparamss = paramClauses(owner, isCaseClass)
23792369
makeConstructor(tparams, vparamss).withMods(cmods)
23802370
}
23812371

compiler/src/dotty/tools/dotc/printing/RefinedPrinter.scala

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -663,13 +663,11 @@ class RefinedPrinter(_ctx: Context) extends PlainPrinter(_ctx) {
663663
"[" ~ toText(params, ", ") ~ "]" provided params.nonEmpty
664664

665665
def addVparamssText[T >: Untyped](txt: Text, vparamss: List[List[ValDef[T]]], isExtension: Boolean = false): Text = {
666-
var isExtensionParam = isExtension
667-
def paramsText(params: List[ValDef[T]]) = {
668-
val txt = "(" ~ (("this ": Text) provided isExtensionParam) ~ toText(params, ", ") ~ ")"
669-
isExtensionParam = false
670-
txt
671-
}
672-
(txt /: vparamss)((txt, vparams) => txt ~ paramsText(vparams))
666+
def paramsText(params: List[ValDef[T]]) = "(" ~ toText(params, ", ") ~ ")"
667+
val (leading, paramss) =
668+
if (isExtension && vparamss.nonEmpty) (paramsText(vparamss.head) ~ " " ~ txt, vparamss.tail)
669+
else (txt, vparamss)
670+
(txt /: paramss)((txt, params) => txt ~ paramsText(params))
673671
}
674672
protected def valDefToText[T >: Untyped](tree: ValDef[T]): Text = {
675673
import untpd.{modsDeco => _}

docs/docs/internals/syntax.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,6 @@ Param ::= id ‘:’ ParamType [‘=’ Expr]
277277
278278
DefParamClauses ::= {DefParamClause} [[nl] ‘(’ [FunArgMods] DefParams ‘)’]
279279
DefParamClause ::= [nl] ‘(’ [DefParams] ‘)’
280-
ExtParamClause ::= [nl] ‘(’ ‘this’ DefParam ‘)’
281280
DefParams ::= DefParam {‘,’ DefParam}
282281
DefParam ::= {Annotation} [‘transparent’] Param ValDef(mods, id, tpe, expr) -- point of mods at id.
283282
```

0 commit comments

Comments
 (0)