diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-06-07 15:20:25 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-06-07 15:20:25 +0300 |
commit | a3ccfd8ea8814b809856ca5ac8799775c25eff49 (patch) | |
tree | 8f48f4a4e62317a05e11fa9e084a24db8742a717 /src/plugin.cpp | |
parent | fc20459eaecf66ff6c6631b4b012de69860c4a65 (diff) | |
download | paranucker-a3ccfd8ea8814b809856ca5ac8799775c25eff49.tar.gz paranucker-a3ccfd8ea8814b809856ca5ac8799775c25eff49.tar.bz2 paranucker-a3ccfd8ea8814b809856ca5ac8799775c25eff49.tar.xz paranucker-a3ccfd8ea8814b809856ca5ac8799775c25eff49.zip |
Add support for plugin arguments.
Add argument command.
Diffstat (limited to 'src/plugin.cpp')
-rw-r--r-- | src/plugin.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/plugin.cpp b/src/plugin.cpp index 121457c..78f3ee1 100644 --- a/src/plugin.cpp +++ b/src/plugin.cpp @@ -19,12 +19,20 @@ #include "includes.h" +#include "plugin-version.h" +#include "diagnostic.h" +#include "intl.h" + +#include "command.h" + #include "parsers/generic.h" #include "localconsts.h" int plugin_is_GPL_compatible = 1; +Command command = Command::Dump; + static void pre_generic(void *gcc_data, void *user_data A_UNUSED) { @@ -34,6 +42,32 @@ static void pre_generic(void *gcc_data, int plugin_init (struct plugin_name_args *plugin_info, struct plugin_gcc_version *version A_UNUSED) { + const char *const plugin_name = plugin_info->base_name; + const int argc = plugin_info->argc; + struct plugin_argument *argv = plugin_info->argv; + for (int f = 0; f < argc; f ++) + { + if (!strcmp (argv[f].key, "command")) + { + const std::string cmd = argv[f].value; + if (cmd == "parse") + { + command = Command::Parse; + } + else if (cmd == "dump") + { + command = Command::Dump; + } + else + { + error("Plugin %s. Unknown command: %s", + plugin_name, + cmd.c_str()); + return 0; + } + } + } + register_callback(plugin_info->base_name, PLUGIN_PRE_GENERICIZE, &pre_generic, |