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 | |
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.
-rw-r--r-- | src/command.h | 31 | ||||
-rw-r--r-- | src/plugin.cpp | 34 |
2 files changed, 65 insertions, 0 deletions
diff --git a/src/command.h b/src/command.h new file mode 100644 index 0000000..c2f129c --- /dev/null +++ b/src/command.h @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2015 Andrei Karas + * + * This file is part of AstDumper. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef COMMAND_H +#define COMMAND_H + +enum Command : int +{ + Parse = 0, + Dump +}; + +extern Command command; + +#endif // COMMAND_H 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, |