* @file
*
* This file implements the FrontendOptions.
*/
#include "cangjie/Frontend/FrontendOptions.h"
#define OPTION_TRUE_ACTION(EXPR) [](FrontendOptions& opts, OptionArgInstance&) { (EXPR); return true; }
using namespace Cangjie;
namespace {
std::unordered_map<Options::ID, std::function<bool(FrontendOptions&, OptionArgInstance&)>> g_actions = {
{Options::ID::DUMP_TOKENS, OPTION_TRUE_ACTION(opts.dumpAction = FrontendOptions::DumpAction::DUMP_TOKENS)},
{Options::ID::DUMP_SYMBOLS, OPTION_TRUE_ACTION(opts.dumpAction = FrontendOptions::DumpAction::DUMP_SYMBOLS)},
{Options::ID::TYPE_CHECK, OPTION_TRUE_ACTION(opts.dumpAction = FrontendOptions::DumpAction::TYPE_CHECK)},
{Options::ID::DUMP_DEPENDENT_PACKAGE,
[](FrontendOptions& opts, OptionArgInstance& ) {
opts.scanDepPkg = true;
opts.dumpAction = FrontendOptions::DumpAction::DUMP_DEP_PKG;
return true;
}},
{Options::ID::DESERIALIZE_CHIR_AND_DUMP,
[](FrontendOptions& opts, [[maybe_unused]] const OptionArgInstance& arg) {
opts.chirDeserialize = true;
opts.dumpCHIR = true;
opts.chirDeserializePath = arg.value;
opts.dumpAction = FrontendOptions::DumpAction::DESERIALIZE_CHIR;
return true;
}},
{Options::ID::COMPILE_CJD, OPTION_TRUE_ACTION(opts.compileCjd = true)},
};
}
std::optional<bool> FrontendOptions::ParseOption(OptionArgInstance& arg)
{
if (g_actions.find(arg.info.GetID()) == g_actions.end()) {
return GlobalOptions::ParseOption(arg);
}
return {g_actions[arg.info.GetID()](*this, arg)};
}