From 82df123ceeb06f33b474c8e898ee2c4fa1d067fe Mon Sep 17 00:00:00 2001 From: DaniPopes <57450786+DaniPopes@users.noreply.github.com> Date: Tue, 1 Aug 2023 16:29:30 +0200 Subject: [PATCH] fix(sol-macro): don't panic when encountering functions without names --- crates/sol-macro/src/expand/function.rs | 8 +++++++- crates/sol-macro/src/expand/mod.rs | 12 +++++++----- crates/syn-solidity/src/item/function.rs | 6 ++++++ 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/crates/sol-macro/src/expand/function.rs b/crates/sol-macro/src/expand/function.rs index e09c8466a..366dae9c7 100644 --- a/crates/sol-macro/src/expand/function.rs +++ b/crates/sol-macro/src/expand/function.rs @@ -30,8 +30,14 @@ pub(super) fn expand(cx: &ExpCtxt<'_>, function: &ItemFunction) -> Result { .functions .values() .flatten() - .map(|f| f.name().clone()) + .flat_map(|f| f.name.clone()) .collect(); let mut overloads_map = std::mem::take(&mut self.function_overloads); @@ -236,10 +236,12 @@ impl<'ast> Visit<'ast> for ExpCtxt<'ast> { } fn visit_item_function(&mut self, function: &'ast ItemFunction) { - self.functions - .entry(function.name().as_string()) - .or_default() - .push(function); + if let Some(name) = &function.name { + self.functions + .entry(name.as_string()) + .or_default() + .push(function); + } ast::visit::visit_item_function(self, function); } } diff --git a/crates/syn-solidity/src/item/function.rs b/crates/syn-solidity/src/item/function.rs index a8e6de42b..79ef24b54 100644 --- a/crates/syn-solidity/src/item/function.rs +++ b/crates/syn-solidity/src/item/function.rs @@ -76,6 +76,12 @@ impl ItemFunction { } } + /// Returns the name of the function. + /// + /// # Panics + /// + /// Panics if the function has no name. This is the case when `kind` is not + /// `Function`. pub fn name(&self) -> &SolIdent { match &self.name { Some(name) => name,