mirror of
https://github.com/alexgo-io/stacks-puppet-node.git
synced 2026-01-12 16:53:21 +08:00
Merge pull request #4500 from jbencin/chore/optimize-traits-resolver
chore: Optimize`TraitsResolver`
This commit is contained in:
@@ -50,7 +50,7 @@ impl TraitsResolver {
|
||||
|
||||
for exp in contract_ast.pre_expressions.iter() {
|
||||
// Top-level comment nodes have been filtered from `args` by `try_parse_pre_expr`.
|
||||
let Some((define_type, args)) = self.try_parse_pre_expr(exp) else {
|
||||
let Some((define_type, args)) = self.try_parse_pre_expr(&exp) else {
|
||||
continue;
|
||||
};
|
||||
|
||||
@@ -71,7 +71,7 @@ impl TraitsResolver {
|
||||
|
||||
// Traverse and probe for generics nested in the trait definition
|
||||
self.probe_for_generics(
|
||||
trait_definition.iter().collect(),
|
||||
trait_definition.iter(),
|
||||
&mut referenced_traits,
|
||||
true,
|
||||
)?;
|
||||
@@ -144,7 +144,7 @@ impl TraitsResolver {
|
||||
| DefineFunctions::PrivateFunction
|
||||
| DefineFunctions::ReadOnlyFunction => {
|
||||
// Traverse and probe for generics in functions type definitions
|
||||
self.probe_for_generics(args, &mut referenced_traits, true)?;
|
||||
self.probe_for_generics(args.into_iter(), &mut referenced_traits, true)?;
|
||||
}
|
||||
DefineFunctions::Constant
|
||||
| DefineFunctions::Map
|
||||
@@ -152,7 +152,11 @@ impl TraitsResolver {
|
||||
| DefineFunctions::FungibleToken
|
||||
| DefineFunctions::NonFungibleToken => {
|
||||
if !args.is_empty() {
|
||||
self.probe_for_generics(args[1..].to_vec(), &mut referenced_traits, false)?;
|
||||
self.probe_for_generics(
|
||||
args[1..].to_vec().into_iter(),
|
||||
&mut referenced_traits,
|
||||
false,
|
||||
)?;
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -180,31 +184,25 @@ impl TraitsResolver {
|
||||
) -> Option<(DefineFunctions, Vec<&'a PreSymbolicExpression>)> {
|
||||
let expressions = expression.match_list()?;
|
||||
// Filter comment nodes out of the list of expressions.
|
||||
let filtered_expressions: Vec<&PreSymbolicExpression> = expressions
|
||||
let mut filtered_expressions = expressions
|
||||
.iter()
|
||||
.filter(|expr| expr.match_comment().is_none())
|
||||
.collect();
|
||||
let (function_name, args) = filtered_expressions.split_first()?;
|
||||
let function_name = function_name.match_atom()?;
|
||||
.filter(|expr| expr.match_comment().is_none());
|
||||
let function_name = filtered_expressions.next()?.match_atom()?;
|
||||
let define_type = DefineFunctions::lookup_by_name(function_name)?;
|
||||
Some((define_type, args.to_vec()))
|
||||
Some((define_type, filtered_expressions.collect()))
|
||||
}
|
||||
|
||||
#[allow(clippy::only_used_in_recursion)]
|
||||
fn probe_for_generics(
|
||||
fn probe_for_generics<'a>(
|
||||
&mut self,
|
||||
exprs: Vec<&PreSymbolicExpression>,
|
||||
exprs: impl Iterator<Item = &'a PreSymbolicExpression>,
|
||||
referenced_traits: &mut HashMap<ClarityName, PreSymbolicExpression>,
|
||||
should_reference: bool,
|
||||
) -> ParseResult<()> {
|
||||
for &expression in exprs.iter() {
|
||||
for expression in exprs {
|
||||
match &expression.pre_expr {
|
||||
List(list) => {
|
||||
self.probe_for_generics(
|
||||
list.iter().collect(),
|
||||
referenced_traits,
|
||||
should_reference,
|
||||
)?;
|
||||
self.probe_for_generics(list.iter(), referenced_traits, should_reference)?;
|
||||
}
|
||||
TraitReference(trait_name) => {
|
||||
if should_reference {
|
||||
@@ -214,11 +212,7 @@ impl TraitsResolver {
|
||||
}
|
||||
}
|
||||
Tuple(atoms) => {
|
||||
self.probe_for_generics(
|
||||
atoms.iter().collect(),
|
||||
referenced_traits,
|
||||
should_reference,
|
||||
)?;
|
||||
self.probe_for_generics(atoms.iter(), referenced_traits, should_reference)?;
|
||||
}
|
||||
_ => { /* no-op */ }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user