@@ -1566,33 +1566,32 @@ object Parsers {
15661566 def infixTypeRest (t : Tree ): Tree =
15671567 infixOps(t, canStartTypeTokens, refinedType, isType = true , isOperator = ! isPostfixStar)
15681568
1569- /** RefinedType ::= WithType {[nl] Refinement}
1569+ /** RefinedType ::= WithType {[nl | ‘with’ ] Refinement}
15701570 */
15711571 val refinedType : () => Tree = () => refinedTypeRest(withType())
15721572
1573- def refinedTypeRest (t : Tree ): Tree = {
1573+ def refinedTypeRest (t : Tree ): Tree =
15741574 argumentStart()
1575- if (in.isNestedStart)
1575+ if isTemplateBodyStart then
1576+ if in.token == WITH then in.nextToken()
15761577 refinedTypeRest(atSpan(startOffset(t)) {
15771578 RefinedTypeTree (rejectWildcardType(t), refinement(indentOK = true ))
15781579 })
15791580 else t
1580- }
15811581
15821582 /** WithType ::= AnnotType {`with' AnnotType} (deprecated)
15831583 */
15841584 def withType (): Tree = withTypeRest(annotType())
15851585
15861586 def withTypeRest (t : Tree ): Tree =
1587- if in.token == WITH then
1588- val withOffset = in.offset
1587+ def isRefinementStart =
1588+ val la = in.lookahead
1589+ la.isAfterLineEnd || la.token == LBRACE
1590+ if in.token == WITH && ! isRefinementStart then
15891591 in.nextToken()
1590- if in.token == LBRACE || in.token == INDENT then
1591- t
1592- else
1593- if sourceVersion.isAtLeast(`3.1`) then
1594- deprecationWarning(DeprecatedWithOperator (), withOffset)
1595- atSpan(startOffset(t)) { makeAndType(t, withType()) }
1592+ if sourceVersion.isAtLeast(`3.1`) then
1593+ deprecationWarning(DeprecatedWithOperator ())
1594+ atSpan(startOffset(t)) { makeAndType(t, withType()) }
15961595 else t
15971596
15981597 /** AnnotType ::= SimpleType {Annotation}
0 commit comments