Skip to content

Commit a81db5d

Browse files
chore: aac fix ParseError::CircularReference indeterminism, #6627
1 parent 730fc6d commit a81db5d

File tree

2 files changed

+6
-3
lines changed

2 files changed

+6
-3
lines changed

clarity/src/vm/ast/definition_sorter/mod.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ impl DefinitionSorter {
9090
let sorted_indexes = walker.get_sorted_dependencies(&self.graph);
9191

9292
if let Some(deps) = walker.get_cycling_dependencies(&self.graph, &sorted_indexes) {
93-
let functions_names = deps
93+
let mut function_names = deps
9494
.into_iter()
9595
.filter_map(|i| {
9696
let exp = &contract_ast.pre_expressions[i];
@@ -99,7 +99,10 @@ impl DefinitionSorter {
9999
.map(|i| i.0.to_string())
100100
.collect::<Vec<_>>();
101101

102-
let error = ParseError::new(ParseErrors::CircularReference(functions_names));
102+
// Sorting function names to make the error contents deterministic
103+
function_names.sort();
104+
105+
let error = ParseError::new(ParseErrors::CircularReference(function_names));
103106
return Err(error);
104107
}
105108

stackslib/src/chainstate/tests/parse_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
use clarity::vm::ast::parser::v2::MAX_CONTRACT_NAME_LEN;
1818
use clarity::vm::ast::stack_depth_checker::AST_CALL_STACK_DEPTH_BUFFER;
1919
use clarity::vm::MAX_CALL_STACK_DEPTH;
20-
2120
#[allow(unused_imports)] // Just used for documentation purpose
2221
use clarity::vm::{ast::errors::ParseErrors, representations::ContractName};
22+
2323
use crate::chainstate::tests::consensus::contract_deploy_consensus_test;
2424

2525
/// ParserError: [`ParseErrors::ExpressionStackDepthTooDeep`]

0 commit comments

Comments
 (0)