@@ -850,7 +850,7 @@ impl<'a> Parser<'a> {
850850 -> PResult < ' a , Vec < T > > where
851851 F : FnMut ( & mut Parser < ' a > ) -> PResult < ' a , T > ,
852852 {
853- let val = try! ( self . parse_seq_to_before_end ( ket, sep, f) ) ;
853+ let val = self . parse_seq_to_before_end ( ket, sep, f) ;
854854 self . bump ( ) ;
855855 Ok ( val)
856856 }
@@ -862,23 +862,37 @@ impl<'a> Parser<'a> {
862862 ket : & token:: Token ,
863863 sep : SeqSep ,
864864 mut f : F )
865- -> PResult < ' a , Vec < T > > where
866- F : FnMut ( & mut Parser < ' a > ) -> PResult < ' a , T > ,
865+ -> Vec < T >
866+ where F : FnMut ( & mut Parser < ' a > ) -> PResult < ' a , T > ,
867867 {
868868 let mut first: bool = true ;
869869 let mut v = vec ! ( ) ;
870870 while self . token != * ket {
871871 match sep. sep {
872- Some ( ref t) => {
873- if first { first = false ; }
874- else { try!( self . expect ( t) ) ; }
875- }
876- _ => ( )
872+ Some ( ref t) => {
873+ if first {
874+ first = false ;
875+ } else {
876+ if let Err ( mut e) = self . expect ( t) {
877+ e. emit ( ) ;
878+ break ;
879+ }
880+ }
881+ }
882+ _ => ( )
877883 }
878884 if sep. trailing_sep_allowed && self . check ( ket) { break ; }
879- v. push ( try!( f ( self ) ) ) ;
885+
886+ match f ( self ) {
887+ Ok ( t) => v. push ( t) ,
888+ Err ( mut e) => {
889+ e. emit ( ) ;
890+ break ;
891+ }
892+ }
880893 }
881- return Ok ( v) ;
894+
895+ v
882896 }
883897
884898 /// Parse a sequence, including the closing delimiter. The function
@@ -893,7 +907,7 @@ impl<'a> Parser<'a> {
893907 F : FnMut ( & mut Parser < ' a > ) -> PResult < ' a , T > ,
894908 {
895909 try!( self . expect ( bra) ) ;
896- let result = try! ( self . parse_seq_to_before_end ( ket, sep, f) ) ;
910+ let result = self . parse_seq_to_before_end ( ket, sep, f) ;
897911 self . bump ( ) ;
898912 Ok ( result)
899913 }
@@ -929,7 +943,7 @@ impl<'a> Parser<'a> {
929943 {
930944 let lo = self . span . lo ;
931945 try!( self . expect ( bra) ) ;
932- let result = try! ( self . parse_seq_to_before_end ( ket, sep, f) ) ;
946+ let result = self . parse_seq_to_before_end ( ket, sep, f) ;
933947 let hi = self . span . hi ;
934948 self . bump ( ) ;
935949 Ok ( spanned ( lo, hi, result) )
@@ -2643,13 +2657,14 @@ impl<'a> Parser<'a> {
26432657
26442658 match self . token {
26452659 token:: Eof => {
2646- let open_braces = self . open_braces . clone ( ) ;
26472660 let mut err: DiagnosticBuilder < ' a > =
2648- self . fatal ( "this file contains an un-closed delimiter" ) ;
2649- for sp in & open_braces {
2661+ self . diagnostic ( ) . struct_span_err ( self . span ,
2662+ "this file contains an un-closed delimiter" ) ;
2663+ for sp in & self . open_braces {
26502664 err. span_help ( * sp, "did you mean to close this delimiter?" ) ;
26512665 }
2652- return Err ( err) ;
2666+
2667+ Err ( err)
26532668 } ,
26542669 token:: OpenDelim ( delim) => {
26552670 // The span for beginning of the delimited section
@@ -2661,11 +2676,9 @@ impl<'a> Parser<'a> {
26612676 self . bump ( ) ;
26622677
26632678 // Parse the token trees within the delimiters
2664- let tts = try!( self . parse_seq_to_before_end (
2665- & token:: CloseDelim ( delim) ,
2666- seq_sep_none ( ) ,
2667- |p| p. parse_token_tree ( )
2668- ) ) ;
2679+ let tts = self . parse_seq_to_before_end ( & token:: CloseDelim ( delim) ,
2680+ seq_sep_none ( ) ,
2681+ |p| p. parse_token_tree ( ) ) ;
26692682
26702683 // Parse the close delimiter.
26712684 let close_span = self . span ;
@@ -2691,7 +2704,7 @@ impl<'a> Parser<'a> {
26912704 match self . token {
26922705 token:: CloseDelim ( _) => {
26932706 let token_str = self . this_token_to_string ( ) ;
2694- let mut err = self . fatal (
2707+ let mut err = self . diagnostic ( ) . struct_span_err ( self . span ,
26952708 & format ! ( "incorrect close delimiter: `{}`" , token_str) ) ;
26962709 // This is a conservative error: only report the last unclosed delimiter.
26972710 // The previous unclosed delimiters could actually be closed! The parser
@@ -4516,11 +4529,11 @@ impl<'a> Parser<'a> {
45164529 token:: Comma => {
45174530 self . bump( ) ;
45184531 let sep = seq_sep_trailing_allowed( token:: Comma ) ;
4519- let mut fn_inputs = try! ( self . parse_seq_to_before_end(
4532+ let mut fn_inputs = self . parse_seq_to_before_end(
45204533 & token:: CloseDelim ( token:: Paren ) ,
45214534 sep,
45224535 parse_arg_fn
4523- ) ) ;
4536+ ) ;
45244537 fn_inputs. insert( 0 , Arg :: new_self( explicit_self_sp, mutbl_self, $self_id) ) ;
45254538 fn_inputs
45264539 }
@@ -4539,8 +4552,7 @@ impl<'a> Parser<'a> {
45394552 let fn_inputs = match explicit_self {
45404553 SelfKind :: Static => {
45414554 let sep = seq_sep_trailing_allowed ( token:: Comma ) ;
4542- try!( self . parse_seq_to_before_end ( & token:: CloseDelim ( token:: Paren ) ,
4543- sep, parse_arg_fn) )
4555+ self . parse_seq_to_before_end ( & token:: CloseDelim ( token:: Paren ) , sep, parse_arg_fn)
45444556 }
45454557 SelfKind :: Value ( id) => parse_remaining_arguments ! ( id) ,
45464558 SelfKind :: Region ( _, _, id) => parse_remaining_arguments ! ( id) ,
@@ -4571,11 +4583,11 @@ impl<'a> Parser<'a> {
45714583 } else {
45724584 try!( self . expect ( & token:: BinOp ( token:: Or ) ) ) ;
45734585 try!( self . parse_obsolete_closure_kind ( ) ) ;
4574- let args = try! ( self . parse_seq_to_before_end (
4586+ let args = self . parse_seq_to_before_end (
45754587 & token:: BinOp ( token:: Or ) ,
45764588 seq_sep_trailing_allowed ( token:: Comma ) ,
45774589 |p| p. parse_fn_block_arg ( )
4578- ) ) ;
4590+ ) ;
45794591 self . bump ( ) ;
45804592 args
45814593 }
0 commit comments