From 6496178296e8201460e9c833528ce1ae1949d268 Mon Sep 17 00:00:00 2001 From: Tom French Date: Wed, 7 Feb 2024 00:30:58 +0000 Subject: [PATCH 1/6] fix: simplify constant assert messages into `ConstrainError::Static` --- compiler/noirc_evaluator/src/ssa/ssa_gen/mod.rs | 7 ++++++- compiler/noirc_frontend/src/hir/resolution/resolver.rs | 9 +++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/compiler/noirc_evaluator/src/ssa/ssa_gen/mod.rs b/compiler/noirc_evaluator/src/ssa/ssa_gen/mod.rs index 1758e1785d3..1f33da04f2b 100644 --- a/compiler/noirc_evaluator/src/ssa/ssa_gen/mod.rs +++ b/compiler/noirc_evaluator/src/ssa/ssa_gen/mod.rs @@ -8,7 +8,7 @@ use context::SharedContext; use iter_extended::{try_vecmap, vecmap}; use noirc_errors::Location; use noirc_frontend::{ - monomorphization::ast::{self, Expression, Program}, + monomorphization::ast::{self, Expression, Literal, Program}, Visibility, }; @@ -700,6 +700,11 @@ impl<'a> FunctionContext<'a> { return Ok(None) }; + if let ast::Expression::Literal(Literal::Str(assert_message)) = assert_message_expr.as_ref() + { + return Ok(Some(Box::new(ConstrainError::Static(assert_message.to_string())))); + } + let ast::Expression::Call(call) = assert_message_expr.as_ref() else { return Err(InternalError::Unexpected { expected: "Expected a call expression".to_owned(), diff --git a/compiler/noirc_frontend/src/hir/resolution/resolver.rs b/compiler/noirc_frontend/src/hir/resolution/resolver.rs index b899a5a325a..587c7fbc7fc 100644 --- a/compiler/noirc_frontend/src/hir/resolution/resolver.rs +++ b/compiler/noirc_frontend/src/hir/resolution/resolver.rs @@ -1211,6 +1211,15 @@ impl<'a> Resolver<'a> { span: Span, condition: Expression, ) -> Option { + if let Some( + assert_message_expr @ Expression { + kind: ExpressionKind::Literal(Literal::Str(..)), .. + }, + ) = assert_message_expr + { + return Some(self.resolve_expression(assert_message_expr)); + } + let mut assert_msg_call_args = if let Some(assert_message_expr) = assert_message_expr { vec![assert_message_expr.clone()] } else { From 0a31e08a47ac1e0ac979391eedf0f5d4de1f2d0c Mon Sep 17 00:00:00 2001 From: Tom French <15848336+TomAFrench@users.noreply.github.com> Date: Wed, 7 Feb 2024 00:34:14 +0000 Subject: [PATCH 2/6] Apply suggestions from code review --- compiler/noirc_evaluator/src/ssa/ssa_gen/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/noirc_evaluator/src/ssa/ssa_gen/mod.rs b/compiler/noirc_evaluator/src/ssa/ssa_gen/mod.rs index 1f33da04f2b..76b82a48e8a 100644 --- a/compiler/noirc_evaluator/src/ssa/ssa_gen/mod.rs +++ b/compiler/noirc_evaluator/src/ssa/ssa_gen/mod.rs @@ -8,7 +8,7 @@ use context::SharedContext; use iter_extended::{try_vecmap, vecmap}; use noirc_errors::Location; use noirc_frontend::{ - monomorphization::ast::{self, Expression, Literal, Program}, + monomorphization::ast::{self, Expression, Program}, Visibility, }; @@ -700,7 +700,7 @@ impl<'a> FunctionContext<'a> { return Ok(None) }; - if let ast::Expression::Literal(Literal::Str(assert_message)) = assert_message_expr.as_ref() + if let ast::Expression::Literal(ast::Literal::Str(assert_message)) = assert_message_expr.as_ref() { return Ok(Some(Box::new(ConstrainError::Static(assert_message.to_string())))); } From c2156210dbd62fe03ba9955305744d7d921c7f4c Mon Sep 17 00:00:00 2001 From: Tom French Date: Wed, 7 Feb 2024 00:45:11 +0000 Subject: [PATCH 3/6] chore: fix formatting --- compiler/noirc_evaluator/src/ssa/ssa_gen/mod.rs | 3 ++- tooling/debugger/src/context.rs | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/compiler/noirc_evaluator/src/ssa/ssa_gen/mod.rs b/compiler/noirc_evaluator/src/ssa/ssa_gen/mod.rs index 76b82a48e8a..bac9fcaeda3 100644 --- a/compiler/noirc_evaluator/src/ssa/ssa_gen/mod.rs +++ b/compiler/noirc_evaluator/src/ssa/ssa_gen/mod.rs @@ -700,7 +700,8 @@ impl<'a> FunctionContext<'a> { return Ok(None) }; - if let ast::Expression::Literal(ast::Literal::Str(assert_message)) = assert_message_expr.as_ref() + if let ast::Expression::Literal(ast::Literal::Str(assert_message)) = + assert_message_expr.as_ref() { return Ok(Some(Box::new(ConstrainError::Static(assert_message.to_string())))); } diff --git a/tooling/debugger/src/context.rs b/tooling/debugger/src/context.rs index 3cababe7605..618f00b5ce1 100644 --- a/tooling/debugger/src/context.rs +++ b/tooling/debugger/src/context.rs @@ -530,7 +530,7 @@ mod tests { let initial_witness = BTreeMap::from([(Witness(1), fe_1)]).into(); let foreign_call_executor = - Box::new(DefaultDebugForeignCallExecutor::from_artifact(true, &debug_artifact)); + Box::new(DefaultDebugForeignCallExecutor::from_artifact(true, debug_artifact)); let mut context = DebugContext::new( &StubbedBlackBoxSolver, circuit, @@ -624,7 +624,7 @@ mod tests { let initial_witness = BTreeMap::from([(Witness(1), fe_1), (Witness(2), fe_1)]).into(); let foreign_call_executor = - Box::new(DefaultDebugForeignCallExecutor::from_artifact(true, &debug_artifact)); + Box::new(DefaultDebugForeignCallExecutor::from_artifact(true, debug_artifact)); let mut context = DebugContext::new( &StubbedBlackBoxSolver, circuit, From 0444a3e7883408f792f534031ab685b9d5ef5acf Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Wed, 7 Feb 2024 15:09:44 +0000 Subject: [PATCH 4/6] chore: address review comment --- .../src/hir/resolution/resolver.rs | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/compiler/noirc_frontend/src/hir/resolution/resolver.rs b/compiler/noirc_frontend/src/hir/resolution/resolver.rs index 587c7fbc7fc..affd04310f9 100644 --- a/compiler/noirc_frontend/src/hir/resolution/resolver.rs +++ b/compiler/noirc_frontend/src/hir/resolution/resolver.rs @@ -1211,21 +1211,13 @@ impl<'a> Resolver<'a> { span: Span, condition: Expression, ) -> Option { - if let Some( - assert_message_expr @ Expression { - kind: ExpressionKind::Literal(Literal::Str(..)), .. - }, - ) = assert_message_expr - { - return Some(self.resolve_expression(assert_message_expr)); - } - - let mut assert_msg_call_args = if let Some(assert_message_expr) = assert_message_expr { - vec![assert_message_expr.clone()] - } else { + let Some(assert_message_expr) = assert_message_expr else { return None; }; - assert_msg_call_args.push(condition); + + if matches!(assert_message_expr, Expression {kind: ExpressionKind::Literal(Literal::Str(..)), ..}){ + return Some(self.resolve_expression(assert_message_expr)); + } let is_in_stdlib = self.path_resolver.module_id().krate.is_stdlib(); let assert_msg_call_path = if is_in_stdlib { @@ -1241,6 +1233,7 @@ impl<'a> Resolver<'a> { span, }) }; + let assert_msg_call_args = vec![assert_message_expr.clone(), condition]; let assert_msg_call_expr = Expression::call( Expression { kind: assert_msg_call_path, span }, assert_msg_call_args, From b6a23f88864142382941647e8cb0a5f5c1b6057a Mon Sep 17 00:00:00 2001 From: Tom French <15848336+TomAFrench@users.noreply.github.com> Date: Wed, 7 Feb 2024 15:19:44 +0000 Subject: [PATCH 5/6] Update compiler/noirc_frontend/src/hir/resolution/resolver.rs --- compiler/noirc_frontend/src/hir/resolution/resolver.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/compiler/noirc_frontend/src/hir/resolution/resolver.rs b/compiler/noirc_frontend/src/hir/resolution/resolver.rs index affd04310f9..b188fe2c4c1 100644 --- a/compiler/noirc_frontend/src/hir/resolution/resolver.rs +++ b/compiler/noirc_frontend/src/hir/resolution/resolver.rs @@ -1211,9 +1211,7 @@ impl<'a> Resolver<'a> { span: Span, condition: Expression, ) -> Option { - let Some(assert_message_expr) = assert_message_expr else { - return None; - }; + let assert_message_expr = assert_message_expr?; if matches!(assert_message_expr, Expression {kind: ExpressionKind::Literal(Literal::Str(..)), ..}){ return Some(self.resolve_expression(assert_message_expr)); From ef3d9bd272a66fefd318ff1ce1e93c9c9f7f67e5 Mon Sep 17 00:00:00 2001 From: Tom French <15848336+TomAFrench@users.noreply.github.com> Date: Wed, 7 Feb 2024 15:40:51 +0000 Subject: [PATCH 6/6] Update compiler/noirc_frontend/src/hir/resolution/resolver.rs --- compiler/noirc_frontend/src/hir/resolution/resolver.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/compiler/noirc_frontend/src/hir/resolution/resolver.rs b/compiler/noirc_frontend/src/hir/resolution/resolver.rs index b188fe2c4c1..347bf9451f6 100644 --- a/compiler/noirc_frontend/src/hir/resolution/resolver.rs +++ b/compiler/noirc_frontend/src/hir/resolution/resolver.rs @@ -1213,7 +1213,10 @@ impl<'a> Resolver<'a> { ) -> Option { let assert_message_expr = assert_message_expr?; - if matches!(assert_message_expr, Expression {kind: ExpressionKind::Literal(Literal::Str(..)), ..}){ + if matches!( + assert_message_expr, + Expression { kind: ExpressionKind::Literal(Literal::Str(..)), .. } + ) { return Some(self.resolve_expression(assert_message_expr)); }