2525
2626package jdk .jshell ;
2727
28+ import com .sun .tools .javac .code .Source ;
2829import com .sun .tools .javac .code .Source .Feature ;
2930import com .sun .tools .javac .code .TypeTag ;
3031import com .sun .tools .javac .parser .JavacParser ;
31- import com .sun .tools .javac .parser .ParserFactory ;
3232import com .sun .tools .javac .parser .Tokens .Comment ;
3333import com .sun .tools .javac .parser .Tokens .Comment .CommentStyle ;
3434import com .sun .tools .javac .parser .Tokens .Token ;
35- import com .sun .tools .javac .resources .CompilerProperties ;
3635import com .sun .tools .javac .resources .CompilerProperties .Errors ;
3736import static com .sun .tools .javac .parser .Tokens .TokenKind .CLASS ;
3837import static com .sun .tools .javac .parser .Tokens .TokenKind .COLON ;
4342import static com .sun .tools .javac .parser .Tokens .TokenKind .LPAREN ;
4443import static com .sun .tools .javac .parser .Tokens .TokenKind .MONKEYS_AT ;
4544import static com .sun .tools .javac .parser .Tokens .TokenKind .SEMI ;
45+ import static com .sun .tools .javac .parser .Tokens .TokenKind .SWITCH ;
4646import static com .sun .tools .javac .parser .Tokens .TokenKind .VOID ;
4747import com .sun .tools .javac .tree .JCTree ;
4848import com .sun .tools .javac .tree .JCTree .JCAnnotation ;
5959import com .sun .tools .javac .util .Name ;
6060import com .sun .tools .javac .util .Position ;
6161
62- import static com .sun .tools .javac .parser .Tokens .TokenKind .IDENTIFIER ;
6362/**
6463 * This is a subclass of JavacParser which overrides one method with a modified
6564 * verson of that method designed to allow parsing of one "snippet" of Java
@@ -71,15 +70,17 @@ class ReplParser extends JavacParser {
7170
7271 // force starting in expression mode
7372 private final boolean forceExpression ;
73+ private final Source source ;
7474
75- public ReplParser (ParserFactory fac ,
75+ public ReplParser (ReplParserFactory fac ,
7676 com .sun .tools .javac .parser .Lexer S ,
7777 boolean keepDocComments ,
7878 boolean keepLineMap ,
7979 boolean keepEndPositions ,
8080 boolean forceExpression ) {
8181 super (fac , S , keepDocComments , keepLineMap , keepEndPositions );
8282 this .forceExpression = forceExpression ;
83+ this .source = fac .source ;
8384 }
8485
8586 /**
@@ -176,6 +177,11 @@ List<? extends JCTree> replUnit(JCModifiers pmods, Comment dc) {
176177 return List .<JCTree >of (parseStatement ());
177178 }
178179 //fall-through
180+ case SWITCH :
181+ if (token .kind == SWITCH && !Feature .SWITCH_EXPRESSION .allowedInSource (source )) {
182+ return List .<JCTree >of (parseStatement ());
183+ }
184+ //fall-through
179185 default :
180186 JCModifiers mods = modifiersOpt (pmods );
181187 if (token .kind == CLASS
0 commit comments