From 6471a7bf7b65f193a4c57633e6dbfd6e56f21039 Mon Sep 17 00:00:00 2001 From: Vern Paxson Date: Tue, 30 Sep 2025 11:11:50 -0700 Subject: [PATCH] Fix for standalone initializations that require BiFs, and streamlining of standalone BiF-tracking --- src/script_opt/CPP/Inits.cc | 2 ++ src/script_opt/ProfileFunc.cc | 5 ++++- src/script_opt/ProfileFunc.h | 3 ++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/script_opt/CPP/Inits.cc b/src/script_opt/CPP/Inits.cc index e828986beb..920403b3fe 100644 --- a/src/script_opt/CPP/Inits.cc +++ b/src/script_opt/CPP/Inits.cc @@ -322,7 +322,9 @@ void CPPCompile::GenStandaloneActivation() { Emit("void standalone_init__CPP()"); StartBlock(); Emit("init__CPP();"); + Emit("load_BiFs__CPP(); // support initializations that call BiFs ..."); Emit("standalone_activation__CPP();"); + Emit("// ... and later use of BiFs from plugins not initially available"); Emit("standalone_finalizations.push_back(load_BiFs__CPP);"); EndBlock(); } diff --git a/src/script_opt/ProfileFunc.cc b/src/script_opt/ProfileFunc.cc index 0bf0d7ff96..02f674793e 100644 --- a/src/script_opt/ProfileFunc.cc +++ b/src/script_opt/ProfileFunc.cc @@ -388,7 +388,10 @@ TraversalCode ProfileFunc::PreExpr(const Expr* e) { auto sf = static_cast(func_vf); script_calls.insert(sf); } - else + + // Track the BiF, though not if we know we're not going to + // compile the call to it. + else if ( obj_matches_opt_files(e) != AnalyzeDecision::SHOULD_NOT ) BiF_globals.insert(func); } else { diff --git a/src/script_opt/ProfileFunc.h b/src/script_opt/ProfileFunc.h index 7b6186eb06..766b8790cd 100644 --- a/src/script_opt/ProfileFunc.h +++ b/src/script_opt/ProfileFunc.h @@ -256,7 +256,8 @@ protected: std::unordered_set script_calls; // Same for BiF's, though for them we record the corresponding global - // rather than the BuiltinFunc*. + // rather than the BuiltinFunc*. In addition, we only track BiFs germane + // to code we're compiling. IDSet BiF_globals; // Script functions appearing in "when" clauses.