@@ -850,7 +850,7 @@ impl<'a> Parser<'a> {
850
850
-> PResult < ' a , Vec < T > > where
851
851
F : FnMut ( & mut Parser < ' a > ) -> PResult < ' a , T > ,
852
852
{
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) ;
854
854
self . bump ( ) ;
855
855
Ok ( val)
856
856
}
@@ -862,23 +862,37 @@ impl<'a> Parser<'a> {
862
862
ket : & token:: Token ,
863
863
sep : SeqSep ,
864
864
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 > ,
867
867
{
868
868
let mut first: bool = true ;
869
869
let mut v = vec ! ( ) ;
870
870
while self . token != * ket {
871
871
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
+ _ => ( )
877
883
}
878
884
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
+ }
880
893
}
881
- return Ok ( v) ;
894
+
895
+ v
882
896
}
883
897
884
898
/// Parse a sequence, including the closing delimiter. The function
@@ -893,7 +907,7 @@ impl<'a> Parser<'a> {
893
907
F : FnMut ( & mut Parser < ' a > ) -> PResult < ' a , T > ,
894
908
{
895
909
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) ;
897
911
self . bump ( ) ;
898
912
Ok ( result)
899
913
}
@@ -929,7 +943,7 @@ impl<'a> Parser<'a> {
929
943
{
930
944
let lo = self . span . lo ;
931
945
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) ;
933
947
let hi = self . span . hi ;
934
948
self . bump ( ) ;
935
949
Ok ( spanned ( lo, hi, result) )
@@ -2643,13 +2657,14 @@ impl<'a> Parser<'a> {
2643
2657
2644
2658
match self . token {
2645
2659
token:: Eof => {
2646
- let open_braces = self . open_braces . clone ( ) ;
2647
2660
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 {
2650
2664
err. span_help ( * sp, "did you mean to close this delimiter?" ) ;
2651
2665
}
2652
- return Err ( err) ;
2666
+
2667
+ Err ( err)
2653
2668
} ,
2654
2669
token:: OpenDelim ( delim) => {
2655
2670
// The span for beginning of the delimited section
@@ -2661,11 +2676,9 @@ impl<'a> Parser<'a> {
2661
2676
self . bump ( ) ;
2662
2677
2663
2678
// 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 ( ) ) ;
2669
2682
2670
2683
// Parse the close delimiter.
2671
2684
let close_span = self . span ;
@@ -2691,7 +2704,7 @@ impl<'a> Parser<'a> {
2691
2704
match self . token {
2692
2705
token:: CloseDelim ( _) => {
2693
2706
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 ,
2695
2708
& format ! ( "incorrect close delimiter: `{}`" , token_str) ) ;
2696
2709
// This is a conservative error: only report the last unclosed delimiter.
2697
2710
// The previous unclosed delimiters could actually be closed! The parser
@@ -4516,11 +4529,11 @@ impl<'a> Parser<'a> {
4516
4529
token:: Comma => {
4517
4530
self . bump( ) ;
4518
4531
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(
4520
4533
& token:: CloseDelim ( token:: Paren ) ,
4521
4534
sep,
4522
4535
parse_arg_fn
4523
- ) ) ;
4536
+ ) ;
4524
4537
fn_inputs. insert( 0 , Arg :: new_self( explicit_self_sp, mutbl_self, $self_id) ) ;
4525
4538
fn_inputs
4526
4539
}
@@ -4539,8 +4552,7 @@ impl<'a> Parser<'a> {
4539
4552
let fn_inputs = match explicit_self {
4540
4553
SelfKind :: Static => {
4541
4554
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)
4544
4556
}
4545
4557
SelfKind :: Value ( id) => parse_remaining_arguments ! ( id) ,
4546
4558
SelfKind :: Region ( _, _, id) => parse_remaining_arguments ! ( id) ,
@@ -4571,11 +4583,11 @@ impl<'a> Parser<'a> {
4571
4583
} else {
4572
4584
try!( self . expect ( & token:: BinOp ( token:: Or ) ) ) ;
4573
4585
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 (
4575
4587
& token:: BinOp ( token:: Or ) ,
4576
4588
seq_sep_trailing_allowed ( token:: Comma ) ,
4577
4589
|p| p. parse_fn_block_arg ( )
4578
- ) ) ;
4590
+ ) ;
4579
4591
self . bump ( ) ;
4580
4592
args
4581
4593
}
0 commit comments