mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00
support for more in-depth AST profiling
This commit is contained in:
parent
d2c6208421
commit
857df9f063
2 changed files with 34 additions and 4 deletions
|
@ -487,10 +487,29 @@ TraversalCode ProfileFunc::PreExpr(const Expr* e) {
|
|||
TraversalCode ProfileFunc::PreID(const ID* id) {
|
||||
TrackID(id);
|
||||
|
||||
if ( id->IsGlobal() ) {
|
||||
globals.insert(id);
|
||||
all_globals.insert(id);
|
||||
|
||||
const auto& t = id->GetType();
|
||||
TrackType(t);
|
||||
|
||||
if ( t->Tag() == TYPE_FUNC )
|
||||
if ( t->AsFuncType()->Flavor() == FUNC_FLAVOR_EVENT )
|
||||
events.insert(id->Name());
|
||||
}
|
||||
|
||||
// There's no need for any further analysis of this ID.
|
||||
return TC_ABORTSTMT;
|
||||
}
|
||||
|
||||
TraversalCode ProfileFunc::PreType(const Type* t) {
|
||||
TrackType(t);
|
||||
|
||||
// There's no need for any further analysis of this type.
|
||||
return TC_ABORTSTMT;
|
||||
}
|
||||
|
||||
void ProfileFunc::TrackType(const Type* t) {
|
||||
if ( ! t )
|
||||
return;
|
||||
|
@ -514,6 +533,11 @@ void ProfileFunc::TrackID(const ID* id) {
|
|||
// Already tracked.
|
||||
return;
|
||||
|
||||
if ( id->IsGlobal() ) {
|
||||
globals.insert(id);
|
||||
all_globals.insert(id);
|
||||
}
|
||||
|
||||
ordered_ids.push_back(id);
|
||||
}
|
||||
|
||||
|
|
|
@ -607,17 +607,23 @@ void analyze_scripts(bool no_unused_warnings) {
|
|||
if ( analysis_options.use_CPP )
|
||||
use_CPP();
|
||||
|
||||
std::shared_ptr<ProfileFuncs> pfs;
|
||||
// Note, in the following it's not clear whether the final argument
|
||||
// for absolute/relative record fields matters any more ...
|
||||
if ( generating_CPP )
|
||||
pfs = std::make_shared<ProfileFuncs>(funcs, is_CPP_compilable, true, false);
|
||||
else
|
||||
pfs = std::make_shared<ProfileFuncs>(funcs, nullptr, true, true);
|
||||
|
||||
if ( generating_CPP ) {
|
||||
if ( analysis_options.gen_ZAM )
|
||||
reporter->FatalError("-O ZAM and -O gen-C++ conflict");
|
||||
|
||||
generate_CPP();
|
||||
generate_CPP(pfs);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
// At this point we're done with C++ considerations, so instead
|
||||
// are compiling to ZAM.
|
||||
analyze_scripts_for_ZAM();
|
||||
analyze_scripts_for_ZAM(pfs);
|
||||
|
||||
if ( reporter->Errors() > 0 )
|
||||
reporter->FatalError("Optimized script execution aborted due to errors");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue