@@ -83,12 +83,13 @@ object Parsers {
83
83
def atPos [T <: Positioned ](start : Offset )(t : T ): T =
84
84
atPos(start, start)(t)
85
85
86
- /** Defensive version of Position#start */
87
- def startPos (t : Positioned ): Int =
86
+ def startOffset (t : Positioned ): Int =
88
87
if (t.pos.exists) t.pos.start else in.offset
89
88
90
- /** Defensive version of Position#end */
91
- def endPos (t : Positioned ): Int =
89
+ def pointOffset (t : Positioned ): Int =
90
+ if (t.pos.exists) t.pos.point else in.offset
91
+
92
+ def endOffset (t : Positioned ): Int =
92
93
if (t.pos.exists) t.pos.end else in.lastOffset
93
94
94
95
def nameStart : Offset =
@@ -456,7 +457,7 @@ object Parsers {
456
457
val topInfo = opStack.head
457
458
opStack = opStack.tail
458
459
val od = reduceStack(base, topInfo.operand, 0 , true )
459
- return atPos(startPos (od), topInfo.offset) {
460
+ return atPos(startOffset (od), topInfo.offset) {
460
461
PostfixOp (od, topInfo.operator)
461
462
}
462
463
}
@@ -500,7 +501,7 @@ object Parsers {
500
501
501
502
/** Accept identifier acting as a selector on given tree `t`. */
502
503
def selector (t : Tree ): Tree =
503
- atPos(startPos (t), in.offset) { Select (t, ident()) }
504
+ atPos(startOffset (t), in.offset) { Select (t, ident()) }
504
505
505
506
/** Selectors ::= ident { `.' ident()
506
507
*
@@ -735,7 +736,7 @@ object Parsers {
735
736
736
737
def refinedTypeRest (t : Tree ): Tree = {
737
738
newLineOptWhenFollowedBy(LBRACE )
738
- if (in.token == LBRACE ) refinedTypeRest(atPos(startPos (t)) { RefinedTypeTree (t, refinement()) })
739
+ if (in.token == LBRACE ) refinedTypeRest(atPos(startOffset (t)) { RefinedTypeTree (t, refinement()) })
739
740
else t
740
741
}
741
742
@@ -756,7 +757,7 @@ object Parsers {
756
757
def annotType (): Tree = annotTypeRest(simpleType())
757
758
758
759
def annotTypeRest (t : Tree ): Tree =
759
- if (in.token == AT ) annotTypeRest(atPos(startPos (t)) { Annotated (t, annot()) })
760
+ if (in.token == AT ) annotTypeRest(atPos(startOffset (t)) { Annotated (t, annot()) })
760
761
else t
761
762
762
763
/** SimpleType ::= SimpleType TypeArgs
@@ -787,19 +788,19 @@ object Parsers {
787
788
val handleSingletonType : Tree => Tree = t =>
788
789
if (in.token == TYPE ) {
789
790
in.nextToken()
790
- atPos(startPos (t)) { SingletonTypeTree (t) }
791
+ atPos(startOffset (t)) { SingletonTypeTree (t) }
791
792
} else t
792
793
793
794
private def simpleTypeRest (t : Tree ): Tree = in.token match {
794
795
case HASH => simpleTypeRest(typeProjection(t))
795
- case LBRACKET => simpleTypeRest(atPos(startPos (t)) { AppliedTypeTree (t, typeArgs(namedOK = true )) })
796
+ case LBRACKET => simpleTypeRest(atPos(startOffset (t)) { AppliedTypeTree (t, typeArgs(namedOK = true )) })
796
797
case _ => t
797
798
}
798
799
799
800
private def typeProjection (t : Tree ): Tree = {
800
801
accept(HASH )
801
802
val id = typeIdent()
802
- atPos(startPos (t), startPos (id)) { Select (t, id.name) }
803
+ atPos(startOffset (t), startOffset (id)) { Select (t, id.name) }
803
804
}
804
805
805
806
/** NamedTypeArg ::= id `=' Type
@@ -853,7 +854,7 @@ object Parsers {
853
854
val t = toplevelTyp()
854
855
if (isIdent(nme.raw.STAR )) {
855
856
in.nextToken()
856
- atPos(startPos (t)) { PostfixOp (t, nme.raw.STAR ) }
857
+ atPos(startOffset (t)) { PostfixOp (t, nme.raw.STAR ) }
857
858
} else t
858
859
}
859
860
@@ -978,7 +979,7 @@ object Parsers {
978
979
val t = expr1(location)
979
980
if (in.token == ARROW ) {
980
981
placeholderParams = saved
981
- closureRest(startPos (t), location, convertToParams(t))
982
+ closureRest(startOffset (t), location, convertToParams(t))
982
983
}
983
984
else if (isWildcard(t)) {
984
985
placeholderParams = placeholderParams ::: saved
@@ -1032,7 +1033,7 @@ object Parsers {
1032
1033
assert(handlerStart != - 1 )
1033
1034
syntaxError(
1034
1035
new EmptyCatchBlock (body),
1035
- Position (handlerStart, endPos (handler))
1036
+ Position (handlerStart, endOffset (handler))
1036
1037
)
1037
1038
case _ =>
1038
1039
}
@@ -1042,7 +1043,7 @@ object Parsers {
1042
1043
else {
1043
1044
if (handler.isEmpty) warning(
1044
1045
EmptyCatchAndFinallyBlock (body),
1045
- source atPos Position (tryOffset, endPos (body))
1046
+ source atPos Position (tryOffset, endOffset (body))
1046
1047
)
1047
1048
EmptyTree
1048
1049
}
@@ -1064,21 +1065,21 @@ object Parsers {
1064
1065
case EQUALS =>
1065
1066
t match {
1066
1067
case Ident (_) | Select (_, _) | Apply (_, _) =>
1067
- atPos(startPos (t), in.skipToken()) { Assign (t, expr()) }
1068
+ atPos(startOffset (t), in.skipToken()) { Assign (t, expr()) }
1068
1069
case _ =>
1069
1070
t
1070
1071
}
1071
1072
case COLON =>
1072
1073
ascription(t, location)
1073
1074
case MATCH =>
1074
- atPos(startPos (t), in.skipToken()) {
1075
+ atPos(startOffset (t), in.skipToken()) {
1075
1076
inBraces(Match (t, caseClauses()))
1076
1077
}
1077
1078
case _ =>
1078
1079
t
1079
1080
}
1080
1081
1081
- def ascription (t : Tree , location : Location .Value ) = atPos(startPos (t), in.skipToken()) {
1082
+ def ascription (t : Tree , location : Location .Value ) = atPos(startOffset (t), in.skipToken()) {
1082
1083
in.token match {
1083
1084
case USCORE =>
1084
1085
val uscoreStart = in.skipToken()
@@ -1112,7 +1113,7 @@ object Parsers {
1112
1113
val id = termIdent()
1113
1114
val paramExpr =
1114
1115
if (location == Location .InBlock && in.token == COLON )
1115
- atPos(startPos (id), in.skipToken()) { Typed (id, infixType()) }
1116
+ atPos(startOffset (id), in.skipToken()) { Typed (id, infixType()) }
1116
1117
else
1117
1118
id
1118
1119
closureRest(start, location, convertToParam(paramExpr, mods) :: Nil )
@@ -1201,13 +1202,13 @@ object Parsers {
1201
1202
in.nextToken()
1202
1203
simpleExprRest(selector(t), canApply = true )
1203
1204
case LBRACKET =>
1204
- val tapp = atPos(startPos (t), in.offset) { TypeApply (t, typeArgs(namedOK = true )) }
1205
+ val tapp = atPos(startOffset (t), in.offset) { TypeApply (t, typeArgs(namedOK = true )) }
1205
1206
simpleExprRest(tapp, canApply = true )
1206
1207
case LPAREN | LBRACE if canApply =>
1207
- val app = atPos(startPos (t), in.offset) { Apply (t, argumentExprs()) }
1208
+ val app = atPos(startOffset (t), in.offset) { Apply (t, argumentExprs()) }
1208
1209
simpleExprRest(app, canApply = true )
1209
1210
case USCORE =>
1210
- atPos(startPos (t), in.skipToken()) { PostfixOp (t, nme.WILDCARD ) }
1211
+ atPos(startOffset (t), in.skipToken()) { PostfixOp (t, nme.WILDCARD ) }
1211
1212
case _ =>
1212
1213
t
1213
1214
}
@@ -1291,7 +1292,7 @@ object Parsers {
1291
1292
if (in.token == IF ) guard()
1292
1293
else {
1293
1294
val pat = pattern1()
1294
- if (in.token == EQUALS ) atPos(startPos (pat), in.skipToken()) { GenAlias (pat, expr()) }
1295
+ if (in.token == EQUALS ) atPos(startOffset (pat), in.skipToken()) { GenAlias (pat, expr()) }
1295
1296
else generatorRest(pat)
1296
1297
}
1297
1298
@@ -1300,7 +1301,7 @@ object Parsers {
1300
1301
def generator (): Tree = generatorRest(pattern1())
1301
1302
1302
1303
def generatorRest (pat : Tree ) =
1303
- atPos(startPos (pat), accept(LARROW )) { GenFrom (pat, expr()) }
1304
+ atPos(startOffset (pat), accept(LARROW )) { GenFrom (pat, expr()) }
1304
1305
1305
1306
/** ForExpr ::= `for' (`(' Enumerators `)' | `{' Enumerators `}')
1306
1307
* {nl} [`yield'] Expr
@@ -1364,7 +1365,7 @@ object Parsers {
1364
1365
val pattern = () => {
1365
1366
val pat = pattern1()
1366
1367
if (isIdent(nme.raw.BAR ))
1367
- atPos(startPos (pat)) { Alternative (pat :: patternAlts()) }
1368
+ atPos(startOffset (pat)) { Alternative (pat :: patternAlts()) }
1368
1369
else pat
1369
1370
}
1370
1371
@@ -1390,15 +1391,15 @@ object Parsers {
1390
1391
// compatibility for Scala2 `x @ _*` syntax
1391
1392
infixPattern() match {
1392
1393
case pt @ Ident (tpnme.WILDCARD_STAR ) =>
1393
- migrationWarningOrError(" The syntax `x @ _*' is no longer supported; use `x : _*' instead" , startPos (p))
1394
- atPos(startPos (p), offset) { Typed (p, pt) }
1394
+ migrationWarningOrError(" The syntax `x @ _*' is no longer supported; use `x : _*' instead" , startOffset (p))
1395
+ atPos(startOffset (p), offset) { Typed (p, pt) }
1395
1396
case p =>
1396
- atPos(startPos (p), offset) { Bind (name, p) }
1397
+ atPos(startOffset (p), offset) { Bind (name, p) }
1397
1398
}
1398
1399
case p @ Ident (tpnme.WILDCARD_STAR ) =>
1399
1400
// compatibility for Scala2 `_*` syntax
1400
- migrationWarningOrError(" The syntax `_*' is no longer supported; use `x : _*' instead" , startPos (p))
1401
- atPos(startPos (p)) { Typed (Ident (nme.WILDCARD ), p) }
1401
+ migrationWarningOrError(" The syntax `_*' is no longer supported; use `x : _*' instead" , startOffset (p))
1402
+ atPos(startOffset (p)) { Typed (Ident (nme.WILDCARD ), p) }
1402
1403
case p =>
1403
1404
p
1404
1405
}
@@ -1422,7 +1423,7 @@ object Parsers {
1422
1423
val simplePattern = () => in.token match {
1423
1424
case IDENTIFIER | BACKQUOTED_IDENT | THIS =>
1424
1425
path(thisOK = true ) match {
1425
- case id @ Ident (nme.raw.MINUS ) if isNumericLit => literal(startPos (id))
1426
+ case id @ Ident (nme.raw.MINUS ) if isNumericLit => literal(startOffset (id))
1426
1427
case t => simplePatternRest(t)
1427
1428
}
1428
1429
case USCORE =>
@@ -1452,9 +1453,9 @@ object Parsers {
1452
1453
def simplePatternRest (t : Tree ): Tree = {
1453
1454
var p = t
1454
1455
if (in.token == LBRACKET )
1455
- p = atPos(startPos (t), in.offset) { TypeApply (p, typeArgs()) }
1456
+ p = atPos(startOffset (t), in.offset) { TypeApply (p, typeArgs()) }
1456
1457
if (in.token == LPAREN )
1457
- p = atPos(startPos (t), in.offset) { Apply (p, argumentPatterns()) }
1458
+ p = atPos(startOffset (t), in.offset) { Apply (p, argumentPatterns()) }
1458
1459
p
1459
1460
}
1460
1461
@@ -1779,7 +1780,7 @@ object Parsers {
1779
1780
case imp : Import =>
1780
1781
imp
1781
1782
case sel @ Select (qual, name) =>
1782
- val selector = atPos(sel.pos.point ) { Ident (name) }
1783
+ val selector = atPos(pointOffset( sel) ) { Ident (name) }
1783
1784
cpy.Import (sel)(qual, selector :: Nil )
1784
1785
case t =>
1785
1786
accept(DOT )
@@ -1812,7 +1813,7 @@ object Parsers {
1812
1813
def importSelector (): Tree = {
1813
1814
val from = termIdentOrWildcard()
1814
1815
if (from.name != nme.WILDCARD && in.token == ARROW )
1815
- atPos(startPos (from), in.skipToken()) {
1816
+ atPos(startOffset (from), in.skipToken()) {
1816
1817
Thicket (from, termIdentOrWildcard())
1817
1818
}
1818
1819
else from
@@ -2093,7 +2094,7 @@ object Parsers {
2093
2094
2094
2095
/** Create a tree representing a packaging */
2095
2096
def makePackaging (start : Int , pkg : Tree , stats : List [Tree ]): PackageDef = pkg match {
2096
- case x : RefTree => atPos(start, pkg.pos.point )(PackageDef (x, stats))
2097
+ case x : RefTree => atPos(start, pointOffset( pkg) )(PackageDef (x, stats))
2097
2098
}
2098
2099
2099
2100
/** Packaging ::= package QualId [nl] `{' TopStatSeq `}'
0 commit comments