@@ -34,7 +34,7 @@ mod errors;
34
34
rustc_fluent_macro:: fluent_messages! { "../messages.ftl" }
35
35
36
36
// Unwrap the result if `Ok`, otherwise emit the diagnostics and abort.
37
- fn unwrap_or_emit_fatal < T > ( expr : Result < T , Vec < Diag < ' _ > > > ) -> T {
37
+ pub fn unwrap_or_emit_fatal < T > ( expr : Result < T , Vec < Diag < ' _ > > > ) -> T {
38
38
match expr {
39
39
Ok ( expr) => expr,
40
40
Err ( errs) => {
@@ -46,25 +46,28 @@ fn unwrap_or_emit_fatal<T>(expr: Result<T, Vec<Diag<'_>>>) -> T {
46
46
}
47
47
}
48
48
49
- /// Creates a new parser from a source string.
50
- pub fn new_parser_from_source_str ( psess : & ParseSess , name : FileName , source : String ) -> Parser < ' _ > {
51
- unwrap_or_emit_fatal ( maybe_new_parser_from_source_str ( psess, name, source) )
52
- }
53
-
54
- /// Creates a new parser from a source string. Returns any buffered errors from lexing the initial
55
- /// token stream; these must be consumed via `emit`, `cancel`, etc., otherwise a panic will occur
56
- /// when they are dropped.
57
- pub fn maybe_new_parser_from_source_str (
49
+ /// Creates a new parser from a source string. On failure, the errors must be consumed via
50
+ /// `unwrap_or_emit_fatal`, `emit`, `cancel`, etc., otherwise a panic will occur when they are
51
+ /// dropped.
52
+ pub fn new_parser_from_source_str (
58
53
psess : & ParseSess ,
59
54
name : FileName ,
60
55
source : String ,
61
56
) -> Result < Parser < ' _ > , Vec < Diag < ' _ > > > {
62
- maybe_new_parser_from_source_file ( psess, psess. source_map ( ) . new_source_file ( name, source) )
57
+ let source_file = psess. source_map ( ) . new_source_file ( name, source) ;
58
+ new_parser_from_source_file ( psess, source_file)
63
59
}
64
60
65
- /// Creates a new parser, aborting if the file doesn't exist. If a span is given, that is used on
66
- /// an error as the source of the problem.
67
- pub fn new_parser_from_file < ' a > ( psess : & ' a ParseSess , path : & Path , sp : Option < Span > ) -> Parser < ' a > {
61
+ /// Creates a new parser from a filename. On failure, the errors must be consumed via
62
+ /// `unwrap_or_emit_fatal`, `emit`, `cancel`, etc., otherwise a panic will occur when they are
63
+ /// dropped.
64
+ ///
65
+ /// If a span is given, that is used on an error as the source of the problem.
66
+ pub fn new_parser_from_file < ' a > (
67
+ psess : & ' a ParseSess ,
68
+ path : & Path ,
69
+ sp : Option < Span > ,
70
+ ) -> Result < Parser < ' a > , Vec < Diag < ' a > > > {
68
71
let source_file = psess. source_map ( ) . load_file ( path) . unwrap_or_else ( |e| {
69
72
let msg = format ! ( "couldn't read {}: {}" , path. display( ) , e) ;
70
73
let mut err = psess. dcx . struct_fatal ( msg) ;
@@ -73,23 +76,21 @@ pub fn new_parser_from_file<'a>(psess: &'a ParseSess, path: &Path, sp: Option<Sp
73
76
}
74
77
err. emit ( ) ;
75
78
} ) ;
76
-
77
- unwrap_or_emit_fatal ( maybe_new_parser_from_source_file ( psess, source_file) )
79
+ new_parser_from_source_file ( psess, source_file)
78
80
}
79
81
80
82
/// Given a session and a `source_file`, return a parser. Returns any buffered errors from lexing
81
83
/// the initial token stream.
82
- fn maybe_new_parser_from_source_file (
84
+ fn new_parser_from_source_file (
83
85
psess : & ParseSess ,
84
86
source_file : Lrc < SourceFile > ,
85
87
) -> Result < Parser < ' _ > , Vec < Diag < ' _ > > > {
86
88
let end_pos = source_file. end_position ( ) ;
87
- let stream = maybe_source_file_to_stream ( psess, source_file, None ) ?;
89
+ let stream = source_file_to_stream ( psess, source_file, None ) ?;
88
90
let mut parser = Parser :: new ( psess, stream, None ) ;
89
91
if parser. token == token:: Eof {
90
92
parser. token . span = Span :: new ( end_pos, end_pos, parser. token . span . ctxt ( ) , None ) ;
91
93
}
92
-
93
94
Ok ( parser)
94
95
}
95
96
@@ -98,14 +99,14 @@ pub fn source_str_to_stream(
98
99
name : FileName ,
99
100
source : String ,
100
101
override_span : Option < Span > ,
101
- ) -> TokenStream {
102
+ ) -> Result < TokenStream , Vec < Diag < ' _ > > > {
102
103
let source_file = psess. source_map ( ) . new_source_file ( name, source) ;
103
- unwrap_or_emit_fatal ( maybe_source_file_to_stream ( psess, source_file, override_span) )
104
+ source_file_to_stream ( psess, source_file, override_span)
104
105
}
105
106
106
107
/// Given a source file, produces a sequence of token trees. Returns any buffered errors from
107
108
/// parsing the token stream.
108
- fn maybe_source_file_to_stream < ' psess > (
109
+ fn source_file_to_stream < ' psess > (
109
110
psess : & ' psess ParseSess ,
110
111
source_file : Lrc < SourceFile > ,
111
112
override_span : Option < Span > ,
@@ -138,13 +139,18 @@ pub fn parse_in<'a, T>(
138
139
pub fn fake_token_stream_for_item ( psess : & ParseSess , item : & ast:: Item ) -> TokenStream {
139
140
let source = pprust:: item_to_string ( item) ;
140
141
let filename = FileName :: macro_expansion_source_code ( & source) ;
141
- source_str_to_stream ( psess, filename, source, Some ( item. span ) )
142
+ unwrap_or_emit_fatal ( source_str_to_stream ( psess, filename, source, Some ( item. span ) ) )
142
143
}
143
144
144
145
pub fn fake_token_stream_for_crate ( psess : & ParseSess , krate : & ast:: Crate ) -> TokenStream {
145
146
let source = pprust:: crate_to_string_for_macros ( krate) ;
146
147
let filename = FileName :: macro_expansion_source_code ( & source) ;
147
- source_str_to_stream ( psess, filename, source, Some ( krate. spans . inner_span ) )
148
+ unwrap_or_emit_fatal ( source_str_to_stream (
149
+ psess,
150
+ filename,
151
+ source,
152
+ Some ( krate. spans . inner_span ) ,
153
+ ) )
148
154
}
149
155
150
156
pub fn parse_cfg_attr (
0 commit comments