Messages in this thread Patch in this message | ![/](/images/icornerl.gif) | | From | "Qingsong Chen" <> | Subject | [PATCH 1/1] rust: macros: fix redefine const_name in `vtable` | Date | Mon, 26 Jun 2023 15:42:42 +0800 |
| |
If the trait has same function name, the `vtable` macro will redefine its `gen_const_name`, e.g.: ```rust #[vtable] pub trait Foo { #[cfg(CONFIG_X)] fn bar();
#[cfg(not(CONFIG_X))] fn bar(x: usize); } ``` Use `HashSet` to avoid this.
Signed-off-by: Qingsong Chen <changxian.cqs@antgroup.com> --- rust/macros/vtable.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/rust/macros/vtable.rs b/rust/macros/vtable.rs index 34d5e7fb5768..08eb0355f99b 100644 --- a/rust/macros/vtable.rs +++ b/rust/macros/vtable.rs @@ -27,7 +27,7 @@ pub(crate) fn vtable(_attr: TokenStream, ts: TokenStream) -> TokenStream { }; let mut body_it = body.stream().into_iter(); - let mut functions = Vec::new(); + let mut functions = HashSet::new(); let mut consts = HashSet::new(); while let Some(token) = body_it.next() { match token { @@ -37,7 +37,7 @@ pub(crate) fn vtable(_attr: TokenStream, ts: TokenStream) -> TokenStream { // Possibly we've encountered a fn pointer type instead. _ => continue, }; - functions.push(fn_name); + functions.insert(fn_name); } TokenTree::Ident(ident) if ident.to_string() == "const" => { let const_name = match body_it.next() { -- 2.40.1
| ![\](/images/icornerr.gif) |