From c2cac5af925d49eaf23338aec9976c7ed91f59ae Mon Sep 17 00:00:00 2001 From: Jason Dellaluce Date: Wed, 6 Apr 2022 13:00:26 +0000 Subject: [PATCH] refactor(userspace/engine): add run() overload in filter_macro_resolver to support shared_ptrs This change allows working with safety with AST nodes wrapped into shared pointers. Signed-off-by: Jason Dellaluce --- userspace/engine/filter_macro_resolver.cpp | 14 ++++++++++++++ userspace/engine/filter_macro_resolver.h | 5 +++++ 2 files changed, 19 insertions(+) diff --git a/userspace/engine/filter_macro_resolver.cpp b/userspace/engine/filter_macro_resolver.cpp index 74dd9277..3374bbc1 100644 --- a/userspace/engine/filter_macro_resolver.cpp +++ b/userspace/engine/filter_macro_resolver.cpp @@ -34,6 +34,20 @@ bool filter_macro_resolver::run(libsinsp::filter::ast::expr*& filter) return !m_resolved_macros.empty(); } +bool filter_macro_resolver::run(std::shared_ptr& filter) +{ + m_unknown_macros.clear(); + m_resolved_macros.clear(); + m_last_node_changed = false; + m_last_node = filter.get(); + filter->accept(this); + if (m_last_node_changed) + { + filter.reset(m_last_node); + } + return !m_resolved_macros.empty(); +} + void filter_macro_resolver::set_macro( string name, shared_ptr macro) diff --git a/userspace/engine/filter_macro_resolver.h b/userspace/engine/filter_macro_resolver.h index e220f945..41e59de2 100644 --- a/userspace/engine/filter_macro_resolver.h +++ b/userspace/engine/filter_macro_resolver.h @@ -40,6 +40,11 @@ class filter_macro_resolver: private libsinsp::filter::ast::expr_visitor \return true if at least one of the defined macros is resolved */ bool run(libsinsp::filter::ast::expr*& filter); + + /*! + \brief Version of run() that works with shared pointers + */ + bool run(std::shared_ptr& filter); /*! \brief Defines a new macro to be substituted in filters. If called