diff --git a/src/BifReturnVal.cc b/src/BifReturnVal.cc new file mode 100644 index 0000000000..8a8444161b --- /dev/null +++ b/src/BifReturnVal.cc @@ -0,0 +1,11 @@ +// See the file "COPYING" in the main distribution directory for copyright. + +#include "BifReturnVal.h" +#include "Val.h" + +BifReturnVal::BifReturnVal(std::nullptr_t) noexcept + {} + +BifReturnVal::BifReturnVal(Val* v) noexcept + : rval(AdoptRef{}, v) + {} diff --git a/src/BifReturnVal.h b/src/BifReturnVal.h new file mode 100644 index 0000000000..2f6293cdf8 --- /dev/null +++ b/src/BifReturnVal.h @@ -0,0 +1,28 @@ +// See the file "COPYING" in the main distribution directory for copyright. + +#pragma once + +#include "IntrusivePtr.h" + +class Val; + +/** + * A simple wrapper class to use for the return value of BIFs so that + * they may return either a Val* or IntrusivePtr (the former could + * potentially be deprecated). + */ +class BifReturnVal { +public: + + template + BifReturnVal(IntrusivePtr v) noexcept + : rval(AdoptRef{}, v.release()) + { } + + BifReturnVal(std::nullptr_t) noexcept; + + [[deprecated("Remove in v4.1. Return an IntrusivePtr instead.")]] + BifReturnVal(Val* v) noexcept; + + IntrusivePtr rval; +}; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e8ccafb544..d19badde10 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -218,6 +218,7 @@ set(MAIN_SRCS Anon.cc Attr.cc Base64.cc + BifReturnVal.cc Brofiler.cc BroString.cc CCL.cc diff --git a/src/CompHash.cc b/src/CompHash.cc index e8d2c5a681..5243e4241e 100644 --- a/src/CompHash.cc +++ b/src/CompHash.cc @@ -2,6 +2,7 @@ #include "zeek-config.h" +#include #include #include diff --git a/src/EventHandler.cc b/src/EventHandler.cc index 68673801d1..890bda3a4d 100644 --- a/src/EventHandler.cc +++ b/src/EventHandler.cc @@ -44,6 +44,12 @@ const IntrusivePtr& EventHandler::GetType(bool check_export) return type; } +void EventHandler::SetFunc(IntrusivePtr f) + { local = std::move(f); } + +void EventHandler::SetLocalHandler(Func* f) + { SetFunc({NewRef{}, f}); } + void EventHandler::Call(zeek::Args* vl, bool no_remote) { #ifdef PROFILE_BRO_FUNCTIONS diff --git a/src/EventHandler.h b/src/EventHandler.h index c2a053cac8..056165271b 100644 --- a/src/EventHandler.h +++ b/src/EventHandler.h @@ -5,11 +5,12 @@ #include "BroList.h" #include "ZeekArgs.h" #include "Type.h" -#include "Func.h" #include #include +class Func; + class EventHandler { public: explicit EventHandler(std::string name); @@ -28,12 +29,10 @@ public: FuncType* FType(bool check_export = true) { return GetType().get(); } - void SetFunc(IntrusivePtr f) - { local = std::move(f); } + void SetFunc(IntrusivePtr f); [[deprecated("Remove in v4.1. Use SetFunc().")]] - void SetLocalHandler(Func* f) - { SetFunc({NewRef{}, f}); } + void SetLocalHandler(Func* f); void AutoPublish(std::string topic) { diff --git a/src/EventRegistry.cc b/src/EventRegistry.cc index 7cf05a7042..29c06dc26f 100644 --- a/src/EventRegistry.cc +++ b/src/EventRegistry.cc @@ -1,5 +1,6 @@ #include "EventRegistry.h" #include "EventHandler.h" +#include "Func.h" #include "RE.h" #include "Reporter.h" diff --git a/src/Func.cc b/src/Func.cc index f0cb8e693a..38ec25b137 100644 --- a/src/Func.cc +++ b/src/Func.cc @@ -892,10 +892,3 @@ function_ingredients::function_ingredients(IntrusivePtr scope, IntrusiveP priority = (attrs ? get_func_priority(*attrs) : 0); this->body = std::move(body); } - -BifReturnVal::BifReturnVal(std::nullptr_t) noexcept - { } - -BifReturnVal::BifReturnVal(Val* v) noexcept - : rval(AdoptRef{}, v) - { } diff --git a/src/Func.h b/src/Func.h index 5b2ee5eebc..c8a284e3bd 100644 --- a/src/Func.h +++ b/src/Func.h @@ -9,15 +9,13 @@ #include #include -#include -#include - #include "BroList.h" #include "Obj.h" #include "IntrusivePtr.h" #include "Type.h" /* for function_flavor */ #include "TraverseTypes.h" #include "ZeekArgs.h" +#include "BifReturnVal.h" class Val; class ListExpr; @@ -28,6 +26,16 @@ class ID; class CallExpr; class Scope; +namespace caf { +template class expected; +} + +namespace broker { +class data; +using vector = std::vector; +using caf::expected; +} + class Func : public BroObj { public: static inline const IntrusivePtr nil; @@ -205,27 +213,6 @@ private: bool weak_closure_ref = false; }; -/** - * A simple wrapper class to use for the return value of BIFs so that - * they may return either a Val* or IntrusivePtr (the former could - * potentially be deprecated). - */ -class BifReturnVal { -public: - - template - BifReturnVal(IntrusivePtr v) noexcept - : rval(AdoptRef{}, v.release()) - { } - - BifReturnVal(std::nullptr_t) noexcept; - - [[deprecated("Remove in v4.1. Return an IntrusivePtr instead.")]] - BifReturnVal(Val* v) noexcept; - - IntrusivePtr rval; -}; - using built_in_func = BifReturnVal (*)(Frame* frame, const zeek::Args* args); class BuiltinFunc final : public Func { diff --git a/src/bro-bif.h b/src/bro-bif.h index b72d676312..7af9c1a6d3 100644 --- a/src/bro-bif.h +++ b/src/bro-bif.h @@ -7,3 +7,4 @@ #include "Reporter.h" #include "ID.h" #include "EventRegistry.h" +#include "BifReturnVal.h" diff --git a/src/file_analysis/analyzer/x509/X509.cc b/src/file_analysis/analyzer/x509/X509.cc index 9da3adc349..dc48b0a6d3 100644 --- a/src/file_analysis/analyzer/x509/X509.cc +++ b/src/file_analysis/analyzer/x509/X509.cc @@ -12,6 +12,8 @@ #include "file_analysis/Manager.h" #include +#include +#include #include #include