@@ -1863,6 +1863,7 @@ object Parsers {
1863
1863
* Ascription ::= `:' InfixType
1864
1864
* | `:' Annotation {Annotation}
1865
1865
* | `:' `_' `*'
1866
+ * Catches ::= ‘catch’ (Expr | ExprCaseClause)
1866
1867
*/
1867
1868
val exprInParens : () => Tree = () => expr(Location .InParens )
1868
1869
@@ -1946,7 +1947,7 @@ object Parsers {
1946
1947
if in.token == CATCH then
1947
1948
val span = in.offset
1948
1949
in.nextToken()
1949
- (if in.token == CASE then Match (EmptyTree , caseClause() :: Nil )
1950
+ (if in.token == CASE then Match (EmptyTree , caseClause(exprOnly = true ) :: Nil )
1950
1951
else subExpr(),
1951
1952
span)
1952
1953
else (EmptyTree , - 1 )
@@ -2072,7 +2073,7 @@ object Parsers {
2072
2073
def matchClause (t : Tree ): Match =
2073
2074
in.endMarkerScope(MATCH ) {
2074
2075
atSpan(t.span.start, in.skipToken()) {
2075
- Match (t, inBracesOrIndented(caseClauses(caseClause)))
2076
+ Match (t, inBracesOrIndented(caseClauses(() => caseClause() )))
2076
2077
}
2077
2078
}
2078
2079
@@ -2366,7 +2367,7 @@ object Parsers {
2366
2367
def blockExpr (): Tree = atSpan(in.offset) {
2367
2368
val simplify = in.token == INDENT
2368
2369
inDefScopeBraces {
2369
- if (in.token == CASE ) Match (EmptyTree , caseClauses(caseClause))
2370
+ if (in.token == CASE ) Match (EmptyTree , caseClauses(() => caseClause() ))
2370
2371
else block(simplify)
2371
2372
}
2372
2373
}
@@ -2537,18 +2538,21 @@ object Parsers {
2537
2538
}
2538
2539
2539
2540
/** CaseClause ::= ‘case’ Pattern [Guard] `=>' Block
2541
+ * ExprCaseClause ::= ‘case’ Pattern [Guard] ‘=>’ Expr
2540
2542
*/
2541
- val caseClause : () => CaseDef = () => atSpan(in.offset) {
2543
+ def caseClause ( exprOnly : Boolean = false ) : CaseDef = atSpan(in.offset) {
2542
2544
val (pat, grd) = inSepRegion(LPAREN , RPAREN ) {
2543
2545
accept(CASE )
2544
2546
(pattern(), guard())
2545
2547
}
2546
- CaseDef (pat, grd, atSpan(accept(ARROW )) { block() })
2548
+ CaseDef (pat, grd, atSpan(accept(ARROW )) {
2549
+ if exprOnly then expr() else block()
2550
+ })
2547
2551
}
2548
2552
2549
2553
/** TypeCaseClause ::= ‘case’ InfixType ‘=>’ Type [nl]
2550
2554
*/
2551
- val typeCaseClause : () => CaseDef = () => atSpan(in.offset) {
2555
+ def typeCaseClause () : CaseDef = atSpan(in.offset) {
2552
2556
val pat = inSepRegion(LPAREN , RPAREN ) {
2553
2557
accept(CASE )
2554
2558
infixType()
0 commit comments