Skip to content

Commit 43dd710

Browse files
perf(token): return static str from DelimTokenType avoiding alloc
Changed `DelimTokenType::string()` to `DelimTokenType::as_str()`, returning `&'static str` instead of allocating a new `String` object. Updated dependent calls across the crate. Co-authored-by: ashyanSpada <22587148+ashyanSpada@users.noreply.github.com>
1 parent 9a4a6cc commit 43dd710

2 files changed

Lines changed: 12 additions & 12 deletions

File tree

src/token.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -52,16 +52,16 @@ impl From<&str> for DelimTokenType {
5252
}
5353

5454
impl DelimTokenType {
55-
pub fn string(&self) -> String {
55+
pub fn as_str(&self) -> &'static str {
5656
use DelimTokenType::*;
5757
match self {
58-
OpenParen => "(".to_string(),
59-
CloseParen => ")".to_string(),
60-
OpenBracket => "[".to_string(),
61-
CloseBracket => "]".to_string(),
62-
OpenBrace => "{".to_string(),
63-
CloseBrace => "}".to_string(),
64-
Unknown => "??".to_string(),
58+
OpenParen => "(",
59+
CloseParen => ")",
60+
OpenBracket => "[",
61+
CloseBracket => "]",
62+
OpenBrace => "{",
63+
CloseBrace => "}",
64+
Unknown => "??",
6565
}
6666
}
6767
}
@@ -86,7 +86,7 @@ pub enum Token<'input> {
8686
pub fn check_op(token: Token, expected: &str) -> bool {
8787
match token {
8888
Token::Delim(op, _) => {
89-
if op.string() == expected {
89+
if op.as_str() == expected {
9090
return true;
9191
}
9292
}
@@ -187,7 +187,7 @@ impl<'input> Token<'input> {
187187
Reference(val, _) => val.to_string(),
188188
Function(val, _) => val.to_string(),
189189
Semicolon(val, _) => val.to_string(),
190-
Delim(ty, _) => ty.string(),
190+
Delim(ty, _) => ty.as_str().to_string(),
191191
EOF => "EOF".to_string(),
192192
}
193193
}
@@ -213,7 +213,7 @@ impl<'input> fmt::Display for Token<'input> {
213213
Function(val, span) => write!(f, "Function Token: {}, {}", val, span),
214214
String(val, span) => write!(f, "String Token: {}, {}", val, span),
215215
Semicolon(val, span) => write!(f, "Semicolon Token: {}, {}", val, span),
216-
Delim(ty, span) => write!(f, "Delim Token: {}, {}", ty.string(), span),
216+
Delim(ty, span) => write!(f, "Delim Token: {}, {}", ty.as_str(), span),
217217
EOF => write!(f, "EOF"),
218218
}
219219
}

src/tokenizer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ impl<'a> Tokenizer<'a> {
145145
self.next()?;
146146
match token {
147147
Token::Delim(bracket, _) => {
148-
if bracket.string() == op {
148+
if bracket.as_str() == op {
149149
return Ok(());
150150
}
151151
}

0 commit comments

Comments
 (0)