@@ -15,8 +15,8 @@ use crate::{Directory, DirectoryOwnership};
1515use crate :: lexer:: UnmatchedBrace ;
1616
1717use syntax:: ast:: {
18- self , DUMMY_NODE_ID , AttrStyle , Attribute , CrateSugar , Extern , Ident ,
19- IsAsync , MacDelimiter , Mutability , StrStyle , Visibility , VisibilityKind , Unsafety ,
18+ self , DUMMY_NODE_ID , AttrStyle , Attribute , CrateSugar , Extern , Ident , StrLit ,
19+ IsAsync , MacDelimiter , Mutability , Visibility , VisibilityKind , Unsafety ,
2020} ;
2121
2222use syntax:: print:: pprust;
@@ -1214,34 +1214,32 @@ impl<'a> Parser<'a> {
12141214 /// Parses `extern string_literal?`.
12151215 fn parse_extern ( & mut self ) -> PResult < ' a , Extern > {
12161216 Ok ( if self . eat_keyword ( kw:: Extern ) {
1217- Extern :: from_abi ( self . parse_opt_abi ( ) )
1217+ Extern :: from_abi ( self . parse_abi ( ) )
12181218 } else {
12191219 Extern :: None
12201220 } )
12211221 }
12221222
12231223 /// Parses a string literal as an ABI spec.
1224- fn parse_opt_abi ( & mut self ) -> Option < StrLit > {
1225- if let Some ( ast:: Lit { token : token:: Lit { symbol, suffix, .. } , span, kind } )
1226- = self . parse_opt_lit ( ) {
1227- match kind {
1228- ast:: LitKind :: Str ( symbol_unescaped, style) => return Some ( StrLit {
1229- style, symbol, suffix, span, symbol_unescaped,
1230- } ) ,
1231- ast:: LitKind :: Err ( _) => { }
1224+ fn parse_abi ( & mut self ) -> Option < StrLit > {
1225+ match self . parse_str_lit ( ) {
1226+ Ok ( str_lit) => Some ( str_lit) ,
1227+ Err ( Some ( lit) ) => match lit. kind {
1228+ ast:: LitKind :: Err ( _) => None ,
12321229 _ => {
1233- self . struct_span_err ( span, "non-string ABI literal" )
1230+ self . struct_span_err ( lit . span , "non-string ABI literal" )
12341231 . span_suggestion (
1235- span,
1232+ lit . span ,
12361233 "specify the ABI with a string literal" ,
12371234 "\" C\" " . to_string ( ) ,
12381235 Applicability :: MaybeIncorrect ,
12391236 )
12401237 . emit ( ) ;
1238+ None
12411239 }
12421240 }
1241+ Err ( None ) => None ,
12431242 }
1244- None
12451243 }
12461244
12471245 /// We are parsing `async fn`. If we are on Rust 2015, emit an error.
@@ -1333,34 +1331,6 @@ impl<'a> Parser<'a> {
13331331 self . look_ahead ( 1 , |t| * t == token:: OpenDelim ( token:: Brace ) ||
13341332 * t == token:: BinOp ( token:: Star ) )
13351333 }
1336-
1337- fn parse_optional_str ( & mut self ) -> Option < ( Symbol , ast:: StrStyle , Option < ast:: Name > ) > {
1338- let ret = match self . token . kind {
1339- token:: Literal ( token:: Lit { kind : token:: Str , symbol, suffix } ) =>
1340- ( symbol, ast:: StrStyle :: Cooked , suffix) ,
1341- token:: Literal ( token:: Lit { kind : token:: StrRaw ( n) , symbol, suffix } ) =>
1342- ( symbol, ast:: StrStyle :: Raw ( n) , suffix) ,
1343- _ => return None
1344- } ;
1345- self . bump ( ) ;
1346- Some ( ret)
1347- }
1348-
1349- pub fn parse_str ( & mut self ) -> PResult < ' a , ( Symbol , StrStyle ) > {
1350- match self . parse_optional_str ( ) {
1351- Some ( ( s, style, suf) ) => {
1352- let sp = self . prev_span ;
1353- self . expect_no_suffix ( sp, "a string literal" , suf) ;
1354- Ok ( ( s, style) )
1355- }
1356- _ => {
1357- let msg = "expected string literal" ;
1358- let mut err = self . fatal ( msg) ;
1359- err. span_label ( self . token . span , msg) ;
1360- Err ( err)
1361- }
1362- }
1363- }
13641334}
13651335
13661336crate fn make_unclosed_delims_error (
0 commit comments