mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +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) {
|
TraversalCode ProfileFunc::PreID(const ID* id) {
|
||||||
TrackID(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.
|
// There's no need for any further analysis of this ID.
|
||||||
return TC_ABORTSTMT;
|
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) {
|
void ProfileFunc::TrackType(const Type* t) {
|
||||||
if ( ! t )
|
if ( ! t )
|
||||||
return;
|
return;
|
||||||
|
@ -514,6 +533,11 @@ void ProfileFunc::TrackID(const ID* id) {
|
||||||
// Already tracked.
|
// Already tracked.
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if ( id->IsGlobal() ) {
|
||||||
|
globals.insert(id);
|
||||||
|
all_globals.insert(id);
|
||||||
|
}
|
||||||
|
|
||||||
ordered_ids.push_back(id);
|
ordered_ids.push_back(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -607,17 +607,23 @@ void analyze_scripts(bool no_unused_warnings) {
|
||||||
if ( analysis_options.use_CPP )
|
if ( analysis_options.use_CPP )
|
||||||
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 ( generating_CPP ) {
|
||||||
if ( analysis_options.gen_ZAM )
|
if ( analysis_options.gen_ZAM )
|
||||||
reporter->FatalError("-O ZAM and -O gen-C++ conflict");
|
reporter->FatalError("-O ZAM and -O gen-C++ conflict");
|
||||||
|
|
||||||
generate_CPP();
|
generate_CPP(pfs);
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// At this point we're done with C++ considerations, so instead
|
analyze_scripts_for_ZAM(pfs);
|
||||||
// are compiling to ZAM.
|
|
||||||
analyze_scripts_for_ZAM();
|
|
||||||
|
|
||||||
if ( reporter->Errors() > 0 )
|
if ( reporter->Errors() > 0 )
|
||||||
reporter->FatalError("Optimized script execution aborted due to errors");
|
reporter->FatalError("Optimized script execution aborted due to errors");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue