@@ -156,10 +156,18 @@ impl<'a, 'd, D: DiagnosticSink> Parser<'a, 'd, D> {
156156 }
157157
158158 fn expect_terminator ( & mut self ) -> Option < Token > {
159+ let save = self . stream . get_position ( ) ;
160+ self . skip_newlines ( ) ;
159161 match self . peek_token ( ) {
160- Token { kind : TokenKind :: Semicolon | TokenKind :: Newline , .. } => self . stream . next ( ) ,
162+ Token { kind : TokenKind :: Semicolon , .. } => self . stream . next ( ) ,
161163 Token { kind : TokenKind :: RBrace | TokenKind :: EOF , .. } => None ,
162164 other => {
165+ // skipped at least one newline
166+ if save != self . stream . get_position ( ) {
167+ self . stream . set_position ( save) ;
168+ return self . stream . next ( ) ;
169+ }
170+
163171 self . diags . emit (
164172 Diagnostic :: error ( "missing statement terminator" )
165173 . with_span ( other. span )
@@ -343,7 +351,7 @@ impl<'a, 'd, D: DiagnosticSink> Parser<'a, 'd, D> {
343351 let span = closing_tok. map ( |t| t. span . concat ( & tok. span ) ) . unwrap_or ( tok. span ) ;
344352
345353 let tail_expr = match stmts. pop ( ) {
346- Some ( Stmt { kind : StmtKind :: Expr ( expr) , span } ) if expr. span ! = span => Some ( Box :: new ( expr) ) ,
354+ Some ( Stmt { kind : StmtKind :: Expr ( expr) , span } ) if expr. span = = span => Some ( Box :: new ( expr) ) ,
347355 Some ( other) => { stmts. push ( other) ; None }
348356 _ => None ,
349357 } ;
0 commit comments