From 4fa314c0bd0a7f314809e180f196d0974535b0f5 Mon Sep 17 00:00:00 2001 From: Claire Xenia Wolf Date: Tue, 30 Jan 2024 16:41:28 +0100 Subject: [PATCH] Add API to overwrite existing pass from plugin Signed-off-by: Claire Xenia Wolf --- kernel/register.cc | 8 +++----- kernel/register.h | 1 + passes/cmds/plugin.cc | 1 - 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/kernel/register.cc b/kernel/register.cc index 9ffb17c1a..1853e94d5 100644 --- a/kernel/register.cc +++ b/kernel/register.cc @@ -108,9 +108,8 @@ Pass::Pass(std::string name, std::string short_help) : pass_name(name), short_he void Pass::run_register() { - if (pass_register.count(pass_name)) + if (pass_register.count(pass_name) && !replace_existing_pass()) log_error("Unable to register pass '%s', pass already exists!\n", pass_name.c_str()); - pass_register[pass_name] = this; } @@ -447,13 +446,12 @@ Frontend::Frontend(std::string name, std::string short_help) : void Frontend::run_register() { - if (pass_register.count(pass_name)) + if (pass_register.count(pass_name) && !replace_existing_pass()) log_error("Unable to register pass '%s', pass already exists!\n", pass_name.c_str()); pass_register[pass_name] = this; - if (frontend_register.count(frontend_name)) + if (frontend_register.count(frontend_name) && !replace_existing_pass()) log_error("Unable to register frontend '%s', frontend already exists!\n", frontend_name.c_str()); - frontend_register[frontend_name] = this; } diff --git a/kernel/register.h b/kernel/register.h index 15750af2a..08ce4b287 100644 --- a/kernel/register.h +++ b/kernel/register.h @@ -70,6 +70,7 @@ struct Pass virtual void on_register(); virtual void on_shutdown(); + virtual bool replace_existing_pass() const { return false; } }; struct ScriptPass : Pass diff --git a/passes/cmds/plugin.cc b/passes/cmds/plugin.cc index 08b4aa8c4..4ad7c165b 100644 --- a/passes/cmds/plugin.cc +++ b/passes/cmds/plugin.cc @@ -103,7 +103,6 @@ void load_plugin(std::string filename, std::vector aliases) loaded_plugins[orig_filename] = hdl; Pass::init_register(); - } }