mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-17 21:29:20 +00:00
Refactoring: remove code duplication introduced in the previous patch.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51757 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
09b51c348c
commit
2b7bcb4e8d
@ -520,6 +520,61 @@ void processOptionProperties (const DagInit* d, ToolProperties* t,
|
|||||||
std::for_each(B, d->arg_end(), CollectOptionProperties(t, o));
|
std::for_each(B, d->arg_end(), CollectOptionProperties(t, o));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// AddOption - A function object wrapper for
|
||||||
|
/// processOptionProperties. Used by CollectProperties and
|
||||||
|
/// CollectPropertiesFromOptionList.
|
||||||
|
class AddOption {
|
||||||
|
private:
|
||||||
|
GlobalOptionDescriptions& OptDescs_;
|
||||||
|
ToolProperties* ToolProps_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit AddOption(GlobalOptionDescriptions& OD, ToolProperties* TP = 0)
|
||||||
|
: OptDescs_(OD), ToolProps_(TP)
|
||||||
|
{}
|
||||||
|
|
||||||
|
void operator()(const Init* i) {
|
||||||
|
const DagInit& d = InitPtrToDag(i);
|
||||||
|
checkNumberOfArguments(&d, 2);
|
||||||
|
|
||||||
|
const OptionType::OptionType Type =
|
||||||
|
getOptionType(d.getOperator()->getAsString());
|
||||||
|
const std::string& Name = InitPtrToString(d.getArg(0));
|
||||||
|
|
||||||
|
GlobalOptionDescription OD(Type, Name);
|
||||||
|
if (Type != OptionType::Alias) {
|
||||||
|
processOptionProperties(&d, ToolProps_, OD);
|
||||||
|
if (ToolProps_) {
|
||||||
|
ToolProps_->OptDescs[Name].Type = Type;
|
||||||
|
ToolProps_->OptDescs[Name].Name = Name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
OD.Help = InitPtrToString(d.getArg(1));
|
||||||
|
}
|
||||||
|
OptDescs_.insertDescription(OD);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
OptionType::OptionType getOptionType(const std::string& T) const {
|
||||||
|
if (T == "alias_option")
|
||||||
|
return OptionType::Alias;
|
||||||
|
else if (T == "switch_option")
|
||||||
|
return OptionType::Switch;
|
||||||
|
else if (T == "parameter_option")
|
||||||
|
return OptionType::Parameter;
|
||||||
|
else if (T == "parameter_list_option")
|
||||||
|
return OptionType::ParameterList;
|
||||||
|
else if (T == "prefix_option")
|
||||||
|
return OptionType::Prefix;
|
||||||
|
else if (T == "prefix_list_option")
|
||||||
|
return OptionType::PrefixList;
|
||||||
|
else
|
||||||
|
throw "Unknown option type: " + T + '!';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/// CollectProperties - Function object for iterating over a list of
|
/// CollectProperties - Function object for iterating over a list of
|
||||||
/// tool property records.
|
/// tool property records.
|
||||||
class CollectProperties {
|
class CollectProperties {
|
||||||
@ -560,15 +615,15 @@ public:
|
|||||||
propertyHandlers_["out_language"] = &CollectProperties::onOutLanguage;
|
propertyHandlers_["out_language"] = &CollectProperties::onOutLanguage;
|
||||||
propertyHandlers_["output_suffix"] = &CollectProperties::onOutputSuffix;
|
propertyHandlers_["output_suffix"] = &CollectProperties::onOutputSuffix;
|
||||||
propertyHandlers_["parameter_option"]
|
propertyHandlers_["parameter_option"]
|
||||||
= &CollectProperties::onParameter;
|
= &CollectProperties::addOption;
|
||||||
propertyHandlers_["parameter_list_option"] =
|
propertyHandlers_["parameter_list_option"] =
|
||||||
&CollectProperties::onParameterList;
|
&CollectProperties::addOption;
|
||||||
propertyHandlers_["prefix_option"] = &CollectProperties::onPrefix;
|
propertyHandlers_["prefix_option"] = &CollectProperties::addOption;
|
||||||
propertyHandlers_["prefix_list_option"] =
|
propertyHandlers_["prefix_list_option"] =
|
||||||
&CollectProperties::onPrefixList;
|
&CollectProperties::addOption;
|
||||||
propertyHandlers_["sink"] = &CollectProperties::onSink;
|
propertyHandlers_["sink"] = &CollectProperties::onSink;
|
||||||
propertyHandlers_["switch_option"] = &CollectProperties::onSwitch;
|
propertyHandlers_["switch_option"] = &CollectProperties::addOption;
|
||||||
propertyHandlers_["alias_option"] = &CollectProperties::onAlias;
|
propertyHandlers_["alias_option"] = &CollectProperties::addOption;
|
||||||
|
|
||||||
staticMembersInitialized_ = true;
|
staticMembersInitialized_ = true;
|
||||||
}
|
}
|
||||||
@ -650,47 +705,11 @@ private:
|
|||||||
toolProps_.setSink();
|
toolProps_.setSink();
|
||||||
}
|
}
|
||||||
|
|
||||||
void onAlias (const DagInit* d) {
|
// Just forwards to the AddOption function object. Somewhat
|
||||||
|
// non-optimal, but avoids code duplication.
|
||||||
|
void addOption (const DagInit* d) {
|
||||||
checkNumberOfArguments(d, 2);
|
checkNumberOfArguments(d, 2);
|
||||||
// We just need a GlobalOptionDescription for the aliases.
|
AddOption(optDescs_, &toolProps_)(d);
|
||||||
optDescs_.insertDescription
|
|
||||||
(GlobalOptionDescription(OptionType::Alias,
|
|
||||||
InitPtrToString(d->getArg(0)),
|
|
||||||
InitPtrToString(d->getArg(1))));
|
|
||||||
}
|
|
||||||
|
|
||||||
void onSwitch (const DagInit* d) {
|
|
||||||
addOption(d, OptionType::Switch);
|
|
||||||
}
|
|
||||||
|
|
||||||
void onParameter (const DagInit* d) {
|
|
||||||
addOption(d, OptionType::Parameter);
|
|
||||||
}
|
|
||||||
|
|
||||||
void onParameterList (const DagInit* d) {
|
|
||||||
addOption(d, OptionType::ParameterList);
|
|
||||||
}
|
|
||||||
|
|
||||||
void onPrefix (const DagInit* d) {
|
|
||||||
addOption(d, OptionType::Prefix);
|
|
||||||
}
|
|
||||||
|
|
||||||
void onPrefixList (const DagInit* d) {
|
|
||||||
addOption(d, OptionType::PrefixList);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Helper functions
|
|
||||||
|
|
||||||
// Add an option of type t
|
|
||||||
void addOption (const DagInit* d, OptionType::OptionType t) {
|
|
||||||
checkNumberOfArguments(d, 2);
|
|
||||||
const std::string& Name = InitPtrToString(d->getArg(0));
|
|
||||||
GlobalOptionDescription OD(t, Name);
|
|
||||||
|
|
||||||
toolProps_.OptDescs[Name].Type = t;
|
|
||||||
toolProps_.OptDescs[Name].Name = Name;
|
|
||||||
processOptionProperties(d, &toolProps_, OD);
|
|
||||||
optDescs_.insertDescription(OD);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
@ -723,46 +742,6 @@ void CollectToolProperties (RecordVector::const_iterator B,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// AddOption - A helper function object used by
|
|
||||||
/// CollectPropertiesFromOptionList.
|
|
||||||
// TOFIX: this largely duplicates CollectProperties::addOption, find a
|
|
||||||
// way to merge them.
|
|
||||||
class AddOption {
|
|
||||||
private:
|
|
||||||
GlobalOptionDescriptions& OptDescs_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit AddOption(GlobalOptionDescriptions& OD) : OptDescs_(OD)
|
|
||||||
{}
|
|
||||||
|
|
||||||
void operator()(Init* i) {
|
|
||||||
const DagInit& d = InitPtrToDag(i);
|
|
||||||
checkNumberOfArguments(&d, 2);
|
|
||||||
const std::string& Type = d.getOperator()->getAsString();
|
|
||||||
const std::string& Name = InitPtrToString(d.getArg(0));
|
|
||||||
GlobalOptionDescription OD(AddOption::getType(Type), Name);
|
|
||||||
if (OD.Type != OptionType::Alias)
|
|
||||||
processOptionProperties(&d, 0, OD);
|
|
||||||
OptDescs_.insertDescription(OD);
|
|
||||||
}
|
|
||||||
|
|
||||||
OptionType::OptionType getType(const std::string& T) const {
|
|
||||||
if (T == "alias_option")
|
|
||||||
return OptionType::Alias;
|
|
||||||
else if (T == "switch_option")
|
|
||||||
return OptionType::Switch;
|
|
||||||
else if (T == "parameter_option")
|
|
||||||
return OptionType::Parameter;
|
|
||||||
else if (T == "parameter_list_option")
|
|
||||||
return OptionType::ParameterList;
|
|
||||||
else if (T == "prefix_option")
|
|
||||||
return OptionType::Prefix;
|
|
||||||
else if (T == "prefix_list_option")
|
|
||||||
return OptionType::PrefixList;
|
|
||||||
else
|
|
||||||
throw "Unknown option type: " + T + '!';
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/// CollectPropertiesFromOptionList - Gather information about
|
/// CollectPropertiesFromOptionList - Gather information about
|
||||||
/// *global* option properties from the OptionList.
|
/// *global* option properties from the OptionList.
|
||||||
|
Loading…
Reference in New Issue
Block a user