From 510d16cc5f3e6bda02c0cec92cf4a73027671927 Mon Sep 17 00:00:00 2001 From: Jake Fecher Date: Wed, 17 Jul 2024 15:14:47 -0500 Subject: [PATCH 1/2] Fix interpreter panic --- .../noirc_frontend/src/elaborator/expressions.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/compiler/noirc_frontend/src/elaborator/expressions.rs b/compiler/noirc_frontend/src/elaborator/expressions.rs index 6eed2c16e6b..5228eddbdde 100644 --- a/compiler/noirc_frontend/src/elaborator/expressions.rs +++ b/compiler/noirc_frontend/src/elaborator/expressions.rs @@ -753,13 +753,16 @@ impl<'context> Elaborator<'context> { ) -> Result { match self.interner.expression(&func) { HirExpression::Ident(ident, _generics) => { - let definition = self.interner.definition(ident.id); - if let DefinitionKind::Function(function) = definition.kind { - let meta = self.interner.function_modifiers(&function); - if meta.is_comptime { - Ok(function) + if let Some(definition) = self.interner.try_definition(ident.id) { + if let DefinitionKind::Function(function) = definition.kind { + let meta = self.interner.function_modifiers(&function); + if meta.is_comptime { + Ok(function) + } else { + Err(ResolverError::MacroIsNotComptime { span: location.span }) + } } else { - Err(ResolverError::MacroIsNotComptime { span: location.span }) + Err(ResolverError::InvalidSyntaxInMacroCall { span: location.span }) } } else { Err(ResolverError::InvalidSyntaxInMacroCall { span: location.span }) From 79611dc44e44e972418df051ab9efa99a36e5cd7 Mon Sep 17 00:00:00 2001 From: Jake Fecher Date: Wed, 17 Jul 2024 15:37:25 -0500 Subject: [PATCH 2/2] Avoid issuing an extra error --- compiler/noirc_frontend/src/elaborator/expressions.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/compiler/noirc_frontend/src/elaborator/expressions.rs b/compiler/noirc_frontend/src/elaborator/expressions.rs index 5228eddbdde..1b7bc094058 100644 --- a/compiler/noirc_frontend/src/elaborator/expressions.rs +++ b/compiler/noirc_frontend/src/elaborator/expressions.rs @@ -750,14 +750,14 @@ impl<'context> Elaborator<'context> { &mut self, func: ExprId, location: Location, - ) -> Result { + ) -> Result, ResolverError> { match self.interner.expression(&func) { HirExpression::Ident(ident, _generics) => { if let Some(definition) = self.interner.try_definition(ident.id) { if let DefinitionKind::Function(function) = definition.kind { let meta = self.interner.function_modifiers(&function); if meta.is_comptime { - Ok(function) + Ok(Some(function)) } else { Err(ResolverError::MacroIsNotComptime { span: location.span }) } @@ -765,7 +765,8 @@ impl<'context> Elaborator<'context> { Err(ResolverError::InvalidSyntaxInMacroCall { span: location.span }) } } else { - Err(ResolverError::InvalidSyntaxInMacroCall { span: location.span }) + // Assume a name resolution error has already been issued + Ok(None) } } _ => Err(ResolverError::InvalidSyntaxInMacroCall { span: location.span }), @@ -786,7 +787,7 @@ impl<'context> Elaborator<'context> { }); let function = match self.try_get_comptime_function(func, location) { - Ok(function) => function, + Ok(function) => function?, Err(error) => { self.push_err(error); return None;