factoring of generating C++ initializations, no semantic changes

This commit is contained in:
Vern Paxson 2021-12-12 12:41:16 -08:00
parent 2f7137999f
commit 86288426fb
2 changed files with 104 additions and 48 deletions

View file

@ -306,9 +306,65 @@ void CPPCompile::GenEpilog()
GenInitExpr(ii.second);
NL();
Emit("ValPtr CPPDynStmt::Exec(Frame* f, StmtFlowType& flow)");
GenCPPDynStmt();
NL();
for ( auto gi : all_global_info )
gi->GenerateInitializers(this);
NL();
InitializeEnumMappings();
NL();
InitializeFieldMappings();
NL();
InitializeBiFs();
NL();
indices_mgr.Generate(this);
NL();
InitializeStrings();
NL();
InitializeHashes();
NL();
InitializeConsts();
NL();
GenLoadBiFs();
NL();
GenFinishInit();
NL();
GenRegisterBodies();
NL();
Emit("void init__CPP()");
StartBlock();
Emit("register_bodies__CPP();");
EndBlock();
if ( standalone )
GenStandaloneActivation();
GenInitHook();
Emit("} // %s\n\n", scope_prefix(addl_tag));
Emit("} // zeek::detail");
}
void CPPCompile::GenCPPDynStmt()
{
Emit("ValPtr CPPDynStmt::Exec(Frame* f, StmtFlowType& flow)");
StartBlock();
Emit("flow = FLOW_RETURN;");
Emit("switch ( type_signature )");
StartBlock();
for ( auto i = 0U; i < func_casting_glue.size(); ++i )
@ -343,41 +399,29 @@ void CPPCompile::GenEpilog()
EndBlock();
EndBlock();
}
NL();
void CPPCompile::GenLoadBiFs()
{
Emit("void load_BiFs__CPP()");
StartBlock();
Emit("for ( auto& b : CPP__BiF_lookups__ )");
Emit("\tb.ResolveBiF();");
EndBlock();
}
for ( auto gi : all_global_info )
gi->GenerateInitializers(this);
if ( standalone )
GenStandaloneActivation();
NL();
InitializeEnumMappings();
NL();
InitializeFieldMappings();
NL();
InitializeBiFs();
NL();
indices_mgr.Generate(this);
NL();
InitializeStrings();
NL();
InitializeHashes();
NL();
InitializeConsts();
NL();
Emit("void init__CPP()");
void CPPCompile::GenFinishInit()
{
Emit("void finish_init__CPP()");
StartBlock();
Emit("static bool did_init = false;");
Emit("if ( did_init )");
Emit("\treturn;");
Emit("did_init = true;");
NL();
Emit("std::vector<std::vector<int>> InitIndices;");
Emit("generate_indices_set(CPP__Indices__init, InitIndices);");
@ -394,13 +438,6 @@ void CPPCompile::GenEpilog()
Emit("InitsManager im(CPP__ConstVals, InitConsts, InitIndices, CPP__Strings, CPP__Hashes, "
"CPP__Type__, CPP__Attributes__, CPP__Attr__, CPP__CallExpr__);");
NL();
Emit("for ( auto& b : CPP__bodies_to_register )");
StartBlock();
Emit("auto f = make_intrusive<CPPDynStmt>(b.func_name.c_str(), b.func, b.type_signature);");
Emit("register_body__CPP(f, b.priority, b.h, b.events);");
EndBlock();
NL();
int max_cohort = 0;
for ( auto gi : all_global_info )
@ -411,10 +448,6 @@ void CPPCompile::GenEpilog()
if ( gi->CohortSize(c) > 0 )
Emit("%s.InitializeCohort(&im, %s);", gi->InitializersName(), Fmt(c));
NL();
Emit("for ( auto& b : CPP__BiF_lookups__ )");
Emit("\tb.ResolveBiF();");
// Populate mappings for dynamic offsets.
NL();
Emit("for ( auto& em : CPP__enum_mappings__ )");
@ -423,15 +456,24 @@ void CPPCompile::GenEpilog()
Emit("for ( auto& fm : CPP__field_mappings__ )");
Emit("\tfield_mapping.push_back(fm.ComputeOffset(&im));");
if ( standalone )
Emit("standalone_init__CPP();");
NL();
Emit("load_BiFs__CPP();");
EndBlock(true);
EndBlock();
}
GenInitHook();
void CPPCompile::GenRegisterBodies()
{
Emit("void register_bodies__CPP()");
StartBlock();
Emit("} // %s\n\n", scope_prefix(addl_tag));
Emit("} // zeek::detail");
Emit("for ( auto& b : CPP__bodies_to_register )");
StartBlock();
Emit("auto f = make_intrusive<CPPDynStmt>(b.func_name.c_str(), b.func, b.type_signature);");
Emit("register_body__CPP(f, b.priority, b.h, b.events, finish_init__CPP);");
EndBlock();
EndBlock();
}
bool CPPCompile::IsCompilable(const FuncInfo& func, const char** reason)