Rollup merge of #42005 - jseyfried:fix_macro_regression, r=nrc
Fix regression in `macro_rules!` name matching Fixes #41803. r? @nrc
This commit is contained in:
commit
6b4f3a73d2
@ -267,11 +267,12 @@ pub fn parse_failure_msg(tok: Token) -> String {
|
||||
|
||||
/// Perform a token equality check, ignoring syntax context (that is, an unhygienic comparison)
|
||||
fn token_name_eq(t1 : &Token, t2 : &Token) -> bool {
|
||||
match (t1,t2) {
|
||||
(&token::Ident(id1),&token::Ident(id2))
|
||||
| (&token::Lifetime(id1),&token::Lifetime(id2)) =>
|
||||
id1.name == id2.name,
|
||||
_ => *t1 == *t2
|
||||
if let (Some(id1), Some(id2)) = (t1.ident(), t2.ident()) {
|
||||
id1.name == id2.name
|
||||
} else if let (&token::Lifetime(id1), &token::Lifetime(id2)) = (t1, t2) {
|
||||
id1.name == id2.name
|
||||
} else {
|
||||
*t1 == *t2
|
||||
}
|
||||
}
|
||||
|
||||
|
30
src/test/run-pass/issue-41803.rs
Normal file
30
src/test/run-pass/issue-41803.rs
Normal file
@ -0,0 +1,30 @@
|
||||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
/// A compile-time map from identifiers to arbitrary (heterogeneous) expressions
|
||||
macro_rules! ident_map {
|
||||
( $name:ident = { $($key:ident => $e:expr,)* } ) => {
|
||||
macro_rules! $name {
|
||||
$(
|
||||
( $key ) => { $e };
|
||||
)*
|
||||
// Empty invocation expands to nothing. Needed when the map is empty.
|
||||
() => {};
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
ident_map!(my_map = {
|
||||
main => 0,
|
||||
});
|
||||
|
||||
fn main() {
|
||||
my_map!(main);
|
||||
}
|
Loading…
Reference in New Issue
Block a user