##! Definitions of built-in functions related to loading compiled-to-C++
##! scripts.


%%{ // C segment

#include <cinttypes>
#
#include "zeek/Reporter.h"
#include "zeek/script_opt/ScriptOpt.h"
#include "zeek/script_opt/CPP/Func.h"

%%}

## Activates the compile-to-C++ scripts associated with the given hash.
##
## h: Hash of the set of C++ scripts.
##
## Returns: True if it was present and loaded, false if not.
##
function load_CPP%(h: count%): bool
	%{
	auto cb = detail::standalone_callbacks.find(h);

	if ( cb == detail::standalone_callbacks.end() ||
	     ! detail::CPP_init_hook )
		{
		reporter->Error("load of non-existing C++ code (%" PRIu64 ")", h);
		return zeek::val_mgr->False();
		}

	// Ensure that any compiled scripts are used.  If instead
	// the AST is used, then when we activate the standalone
	// scripts, they won't be able to avoid installing redundant
	// event handlers.
	detail::analysis_options.use_CPP = true;

	// Mark this script as one we should activate after loading
	// compiled scripts.
	detail::standalone_activations.push_back(cb->second);

	return zeek::val_mgr->True();
	%}
