@@ -94,7 +94,7 @@ impl Parser {
9494 // Literal
9595 TokenTree :: Literal ( literal) => {
9696 self . advance ( ) ;
97- self . literal ( literal)
97+ self . literal ( literal, false )
9898 }
9999 // Special form
100100 TokenTree :: Punct ( ref punct) if punct. as_char ( ) == '@' => {
@@ -194,7 +194,10 @@ impl Parser {
194194 }
195195
196196 /// Parses a literal string.
197- fn literal ( & mut self , literal : Literal ) -> ast:: Markup {
197+ ///
198+ /// If `allow_int_literal` is `true`, then integer literals (like `123`) will be accepted and
199+ /// returned.
200+ fn literal ( & mut self , literal : Literal , allow_int_literal : bool ) -> ast:: Markup {
198201 match Lit :: new ( literal. clone ( ) ) {
199202 Lit :: Str ( lit_str) => {
200203 return ast:: Markup :: Literal {
@@ -204,13 +207,13 @@ impl Parser {
204207 }
205208 // Boolean literals are idents, so `Lit::Bool` is handled in
206209 // `markup`, not here.
207- Lit :: Int ( lit_int) => {
210+ Lit :: Int ( lit_int) if allow_int_literal => {
208211 return ast:: Markup :: Literal {
209212 content : lit_int. to_string ( ) ,
210213 span : SpanRange :: single_span ( literal. span ( ) ) ,
211214 } ;
212215 }
213- Lit :: Float ( ..) => {
216+ Lit :: Int ( .. ) | Lit :: Float ( ..) => {
214217 emit_error ! ( literal, r#"literal must be double-quoted: `"{}"`"# , literal) ;
215218 }
216219 Lit :: Char ( lit_char) => {
@@ -722,7 +725,7 @@ impl Parser {
722725 false
723726 }
724727 Some ( TokenTree :: Literal ( ref literal) ) if expect_ident_or_literal => {
725- self . literal ( literal. clone ( ) ) ;
728+ self . literal ( literal. clone ( ) , true ) ;
726729 self . advance ( ) ;
727730 result. push ( TokenTree :: Literal ( literal. clone ( ) ) ) ;
728731 false
0 commit comments