Skip to content
Merged
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion noir/noir-repo/aztec_macros/src/transforms/functions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use noirc_frontend::ast::{
BlockExpression, ConstrainKind, ConstrainStatement, Expression, ExpressionKind,
ForLoopStatement, ForRange, FunctionReturnType, Ident, Literal, NoirFunction, NoirStruct,
Param, PathKind, Pattern, Signedness, Statement, StatementKind, UnresolvedType,
UnresolvedTypeData, Visibility,
UnresolvedTypeData, Visibility, FunctionKind
};

use noirc_frontend::{macros_api::FieldElement, parse_program};
Expand Down Expand Up @@ -38,6 +38,7 @@ pub fn transform_function(
let inputs_name = format!("{}ContextInputs", ty);
let return_type_name = format!("{}CircuitPublicInputs", ty);
let is_avm = ty == "Avm";
let is_private = ty == "Private";

// Add check that msg sender equals this address and flag function as internal
if is_internal {
Expand Down Expand Up @@ -107,6 +108,11 @@ pub fn transform_function(
// Public functions should have unconstrained auto-inferred
func.def.is_unconstrained = matches!(ty, "Public" | "Avm");

// Private functions need to be recursive
if is_private {
func.kind = FunctionKind::Recursive;
}

Ok(())
}

Expand Down