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