support for rewriting script function bodies

This commit is contained in:
Vern Paxson 2021-01-10 13:25:01 -08:00
parent 63502e655f
commit 8f001062bf
2 changed files with 20 additions and 0 deletions

View file

@ -503,6 +503,21 @@ void ScriptFunc::AddBody(StmtPtr new_body,
sort(bodies.begin(), bodies.end()); sort(bodies.begin(), bodies.end());
} }
void ScriptFunc::ReplaceBody(const StmtPtr& old_body, StmtPtr new_body)
{
bool found_it = false;
for ( auto& body : bodies )
if ( body.stmts.get() == old_body.get() )
{
body.stmts = new_body;
found_it = true;
}
ASSERT(found_it);
current_body = new_body;
}
void ScriptFunc::AddClosure(IDPList ids, Frame* f) void ScriptFunc::AddClosure(IDPList ids, Frame* f)
{ {
if ( ! f ) if ( ! f )

View file

@ -196,6 +196,11 @@ public:
const std::vector<IDPtr>& new_inits, const std::vector<IDPtr>& new_inits,
size_t new_frame_size, int priority) override; size_t new_frame_size, int priority) override;
// Replace the given current instance of a function body with
// a new one.
void ReplaceBody(const detail::StmtPtr& old_body,
detail::StmtPtr new_body);
StmtPtr CurrentBody() const { return current_body; } StmtPtr CurrentBody() const { return current_body; }
/** /**