Skip to content

Commit a54111a

Browse files
committed
mbe: metavar expressions: Use symbols rather than ident.as_str()
Identify metavariable functions by using named symbols rather than string comparisons.
1 parent fc41c38 commit a54111a

File tree

1 file changed

+12
-13
lines changed

1 file changed

+12
-13
lines changed

compiler/rustc_expand/src/mbe/metavar_expr.rs

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use rustc_ast_pretty::pprust;
55
use rustc_errors::{Applicability, PResult};
66
use rustc_macros::{Decodable, Encodable};
77
use rustc_session::parse::ParseSess;
8-
use rustc_span::{Ident, Span, Symbol};
8+
use rustc_span::{Ident, Span, Symbol, sym};
99

1010
use crate::errors;
1111

@@ -69,15 +69,15 @@ impl MetaVarExpr {
6969
}
7070

7171
let mut iter = args.iter();
72-
let rslt = match ident.as_str() {
73-
"concat" => parse_concat(&mut iter, psess, outer_span, ident.span)?,
74-
"count" => parse_count(&mut iter, psess, ident.span)?,
75-
"ignore" => {
72+
let rslt = match ident.name {
73+
sym::concat => parse_concat(&mut iter, psess, outer_span, ident.span)?,
74+
sym::count => parse_count(&mut iter, psess, ident.span)?,
75+
sym::ignore => {
7676
eat_dollar(&mut iter, psess, ident.span)?;
7777
MetaVarExpr::Ignore(parse_ident(&mut iter, psess, ident.span)?)
7878
}
79-
"index" => MetaVarExpr::Index(parse_depth(&mut iter, psess, ident.span)?),
80-
"len" => MetaVarExpr::Len(parse_depth(&mut iter, psess, ident.span)?),
79+
sym::index => MetaVarExpr::Index(parse_depth(&mut iter, psess, ident.span)?),
80+
sym::len => MetaVarExpr::Len(parse_depth(&mut iter, psess, ident.span)?),
8181
_ => {
8282
let err = errors::MveUnrecognizedExpr {
8383
span: ident.span,
@@ -119,14 +119,13 @@ fn check_trailing_tokens<'psess>(
119119
}
120120

121121
// `None` for max indicates the arg count must be exact, `Some` indicates a range is accepted.
122-
let (min_or_exact_args, max_args) = match ident.as_str() {
123-
"concat" => panic!("concat takes unlimited tokens but didn't eat them all"),
124-
"ignore" => (1, None),
122+
let (min_or_exact_args, max_args) = match ident.name {
123+
sym::concat => panic!("concat takes unlimited tokens but didn't eat them all"),
124+
sym::ignore => (1, None),
125125
// 1 or 2 args
126-
"count" => (1, Some(2)),
126+
sym::count => (1, Some(2)),
127127
// 0 or 1 arg
128-
"index" => (0, Some(1)),
129-
"len" => (0, Some(1)),
128+
sym::index | sym::len => (0, Some(1)),
130129
other => unreachable!("unknown MVEs should be rejected earlier (got `{other}`)"),
131130
};
132131

0 commit comments

Comments
 (0)