From 838990ae15f04bac183efc164de74cd65ffd9ee0 Mon Sep 17 00:00:00 2001 From: Dimitris Fasarakis Hilliard Date: Sun, 29 Jan 2023 20:08:21 +0200 Subject: [PATCH] Don't call is_emoji_presentation for each invocation of consume_normal --- parser/src/lexer.rs | 48 ++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/parser/src/lexer.rs b/parser/src/lexer.rs index 981115d..3cb2820 100644 --- a/parser/src/lexer.rs +++ b/parser/src/lexer.rs @@ -689,24 +689,12 @@ where fn consume_normal(&mut self) -> Result<(), LexicalError> { // Check if we have some character: if let Some(c) = self.window[0] { - // First check identifier: - if self.is_identifier_start(c) { - let identifier = self.lex_identifier()?; - self.emit(identifier); - } else if is_emoji_presentation(c) { - let tok_start = self.get_pos(); - self.next_char(); - let tok_end = self.get_pos(); - self.emit(( - tok_start, - Tok::Name { - name: c.to_string(), - }, - tok_end, - )); - } else { - self.consume_character(c)?; - } + if self.is_identifier_start(c) { + let identifier = self.lex_identifier()?; + self.emit(identifier); + } else { + self.consume_character(c)?; + } } else { // We reached end of file. let tok_pos = self.get_pos(); @@ -1112,13 +1100,25 @@ where }); } } - _ => { - let c = self.next_char(); - return Err(LexicalError { - error: LexicalErrorType::UnrecognizedToken { tok: c.unwrap() }, - location: self.get_pos(), - }); + if is_emoji_presentation(c) { + let tok_start = self.get_pos(); + self.next_char(); + let tok_end = self.get_pos(); + self.emit(( + tok_start, + Tok::Name { + name: c.to_string(), + }, + tok_end, + )); + } else { + let c = self.next_char(); + return Err(LexicalError { + error: LexicalErrorType::UnrecognizedToken { tok: c.unwrap() }, + location: self.get_pos(), + }); + } } // Ignore all the rest.. }