@@ -21,7 +21,6 @@ use rustc_ast::tokenstream::{DelimSpan, TokenStream};
21
21
use rustc_ast:: { AttrItem , Attribute , MetaItemInner , token} ;
22
22
use rustc_ast_pretty:: pprust;
23
23
use rustc_errors:: { Diag , EmissionGuarantee , FatalError , PResult , pluralize} ;
24
- use rustc_lexer:: FrontmatterAllowed ;
25
24
use rustc_session:: parse:: ParseSess ;
26
25
use rustc_span:: source_map:: SourceMap ;
27
26
use rustc_span:: { FileName , SourceFile , Span } ;
@@ -34,6 +33,8 @@ pub mod parser;
34
33
use parser:: Parser ;
35
34
use rustc_ast:: token:: Delimiter ;
36
35
36
+ use crate :: lexer:: StripTokens ;
37
+
37
38
pub mod lexer;
38
39
39
40
mod errors;
@@ -62,10 +63,10 @@ pub fn new_parser_from_source_str(
62
63
source : String ,
63
64
) -> Result < Parser < ' _ > , Vec < Diag < ' _ > > > {
64
65
let source_file = psess. source_map ( ) . new_source_file ( name, source) ;
65
- new_parser_from_source_file ( psess, source_file, FrontmatterAllowed :: Yes )
66
+ new_parser_from_source_file ( psess, source_file, StripTokens :: ShebangAndFrontmatter )
66
67
}
67
68
68
- /// Creates a new parser from a simple (no frontmatter) source string.
69
+ /// Creates a new parser from a simple (no shebang, no frontmatter) source string.
69
70
///
70
71
/// On failure, the errors must be consumed via `unwrap_or_emit_fatal`, `emit`, `cancel`,
71
72
/// etc., otherwise a panic will occur when they are dropped.
@@ -75,7 +76,7 @@ pub fn new_parser_from_simple_source_str(
75
76
source : String ,
76
77
) -> Result < Parser < ' _ > , Vec < Diag < ' _ > > > {
77
78
let source_file = psess. source_map ( ) . new_source_file ( name, source) ;
78
- new_parser_from_source_file ( psess, source_file, FrontmatterAllowed :: No )
79
+ new_parser_from_source_file ( psess, source_file, StripTokens :: Nothing )
79
80
}
80
81
81
82
/// Creates a new parser from a filename. On failure, the errors must be consumed via
@@ -109,7 +110,7 @@ pub fn new_parser_from_file<'a>(
109
110
}
110
111
err. emit ( ) ;
111
112
} ) ;
112
- new_parser_from_source_file ( psess, source_file, FrontmatterAllowed :: Yes )
113
+ new_parser_from_source_file ( psess, source_file, StripTokens :: ShebangAndFrontmatter )
113
114
}
114
115
115
116
pub fn utf8_error < E : EmissionGuarantee > (
@@ -160,10 +161,10 @@ pub fn utf8_error<E: EmissionGuarantee>(
160
161
fn new_parser_from_source_file (
161
162
psess : & ParseSess ,
162
163
source_file : Arc < SourceFile > ,
163
- frontmatter_allowed : FrontmatterAllowed ,
164
+ strip_tokens : StripTokens ,
164
165
) -> Result < Parser < ' _ > , Vec < Diag < ' _ > > > {
165
166
let end_pos = source_file. end_position ( ) ;
166
- let stream = source_file_to_stream ( psess, source_file, None , frontmatter_allowed ) ?;
167
+ let stream = source_file_to_stream ( psess, source_file, None , strip_tokens ) ?;
167
168
let mut parser = Parser :: new ( psess, stream, None ) ;
168
169
if parser. token == token:: Eof {
169
170
parser. token . span = Span :: new ( end_pos, end_pos, parser. token . span . ctxt ( ) , None ) ;
@@ -179,8 +180,8 @@ pub fn source_str_to_stream(
179
180
) -> Result < TokenStream , Vec < Diag < ' _ > > > {
180
181
let source_file = psess. source_map ( ) . new_source_file ( name, source) ;
181
182
// used mainly for `proc_macro` and the likes, not for our parsing purposes, so don't parse
182
- // frontmatters as frontmatters.
183
- source_file_to_stream ( psess, source_file, override_span, FrontmatterAllowed :: No )
183
+ // frontmatters as frontmatters, but for compatibility reason still strip the shebang
184
+ source_file_to_stream ( psess, source_file, override_span, StripTokens :: Shebang )
184
185
}
185
186
186
187
/// Given a source file, produces a sequence of token trees. Returns any buffered errors from
@@ -189,7 +190,7 @@ fn source_file_to_stream<'psess>(
189
190
psess : & ' psess ParseSess ,
190
191
source_file : Arc < SourceFile > ,
191
192
override_span : Option < Span > ,
192
- frontmatter_allowed : FrontmatterAllowed ,
193
+ strip_tokens : StripTokens ,
193
194
) -> Result < TokenStream , Vec < Diag < ' psess > > > {
194
195
let src = source_file. src . as_ref ( ) . unwrap_or_else ( || {
195
196
psess. dcx ( ) . bug ( format ! (
@@ -198,13 +199,7 @@ fn source_file_to_stream<'psess>(
198
199
) ) ;
199
200
} ) ;
200
201
201
- lexer:: lex_token_trees (
202
- psess,
203
- src. as_str ( ) ,
204
- source_file. start_pos ,
205
- override_span,
206
- frontmatter_allowed,
207
- )
202
+ lexer:: lex_token_trees ( psess, src. as_str ( ) , source_file. start_pos , override_span, strip_tokens)
208
203
}
209
204
210
205
/// Runs the given subparser `f` on the tokens of the given `attr`'s item.
0 commit comments