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