From b3efb8b2649bc420d37c871fcdb554e3bf531f06 Mon Sep 17 00:00:00 2001 From: Stephen Chung Date: Wed, 18 Mar 2020 23:09:53 +0800 Subject: [PATCH] Disallow variable names starting with _ + digit. --- src/parser.rs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/parser.rs b/src/parser.rs index c23c65a3..0f62ee1e 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -991,9 +991,18 @@ impl<'a> TokenIterator<'a> { } } - let has_letter = result.iter().any(char::is_ascii_alphabetic); + let is_valid_identifier = result + .iter() + .find(|&ch| char::is_ascii_alphanumeric(ch)) // first alpha-numeric character + .map(char::is_ascii_alphabetic) // is a letter + .unwrap_or(false); // if no alpha-numeric at all - syntax error + let identifier: String = result.iter().collect(); + if !is_valid_identifier { + return Some((Token::LexError(LERR::MalformedIdentifier(identifier)), pos)); + } + return Some(( match identifier.as_str() { "true" => Token::True, @@ -1013,9 +1022,7 @@ impl<'a> TokenIterator<'a> { #[cfg(not(feature = "no_function"))] "fn" => Token::Fn, - _ if has_letter => Token::Identifier(identifier), - - _ => Token::LexError(LERR::MalformedIdentifier(identifier)), + _ => Token::Identifier(identifier), }, pos, ));