summaryrefslogtreecommitdiffstats
path: root/Source/cmGeneratorExpressionEvaluator.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmGeneratorExpressionEvaluator.cxx')
-rw-r--r--Source/cmGeneratorExpressionEvaluator.cxx246
1 files changed, 105 insertions, 141 deletions
diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index 5645e01..66437eb 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -28,11 +28,10 @@
#include "cmGeneratorExpressionNode.h"
GeneratorExpressionContent::GeneratorExpressionContent(
- const char *startContent,
- size_t length)
- : StartContent(startContent), ContentLength(length)
+ const char* startContent, size_t length)
+ : StartContent(startContent)
+ , ContentLength(length)
{
-
}
std::string GeneratorExpressionContent::GetOriginalExpression() const
@@ -41,201 +40,166 @@ std::string GeneratorExpressionContent::GetOriginalExpression() const
}
std::string GeneratorExpressionContent::ProcessArbitraryContent(
- const cmGeneratorExpressionNode *node,
- const std::string &identifier,
- cmGeneratorExpressionContext *context,
- cmGeneratorExpressionDAGChecker *dagChecker,
- std::vector<std::vector<cmGeneratorExpressionEvaluator*> >::const_iterator
+ const cmGeneratorExpressionNode* node, const std::string& identifier,
+ cmGeneratorExpressionContext* context,
+ cmGeneratorExpressionDAGChecker* dagChecker,
+ std::vector<std::vector<cmGeneratorExpressionEvaluator*> >::const_iterator
pit) const
{
std::string result;
- const
- std::vector<std::vector<cmGeneratorExpressionEvaluator*> >::const_iterator
- pend = this->ParamChildren.end();
- for ( ; pit != pend; ++pit)
- {
- std::vector<cmGeneratorExpressionEvaluator*>::const_iterator it
- = pit->begin();
- const std::vector<cmGeneratorExpressionEvaluator*>::const_iterator end
- = pit->end();
- for ( ; it != end; ++it)
- {
- if (node->RequiresLiteralInput())
- {
- if ((*it)->GetType() != cmGeneratorExpressionEvaluator::Text)
- {
- reportError(context, this->GetOriginalExpression(),
- "$<" + identifier + "> expression requires literal input.");
+ const std::vector<
+ std::vector<cmGeneratorExpressionEvaluator*> >::const_iterator pend =
+ this->ParamChildren.end();
+ for (; pit != pend; ++pit) {
+ std::vector<cmGeneratorExpressionEvaluator*>::const_iterator it =
+ pit->begin();
+ const std::vector<cmGeneratorExpressionEvaluator*>::const_iterator end =
+ pit->end();
+ for (; it != end; ++it) {
+ if (node->RequiresLiteralInput()) {
+ if ((*it)->GetType() != cmGeneratorExpressionEvaluator::Text) {
+ reportError(context, this->GetOriginalExpression(), "$<" +
+ identifier + "> expression requires literal input.");
return std::string();
- }
}
+ }
result += (*it)->Evaluate(context, dagChecker);
- if (context->HadError)
- {
+ if (context->HadError) {
return std::string();
- }
}
- if ((pit + 1) != pend)
- {
- result += ",";
- }
}
- if (node->RequiresLiteralInput())
- {
+ if ((pit + 1) != pend) {
+ result += ",";
+ }
+ }
+ if (node->RequiresLiteralInput()) {
std::vector<std::string> parameters;
parameters.push_back(result);
return node->Evaluate(parameters, context, this, dagChecker);
- }
+ }
return result;
}
std::string GeneratorExpressionContent::Evaluate(
- cmGeneratorExpressionContext *context,
- cmGeneratorExpressionDAGChecker *dagChecker) const
+ cmGeneratorExpressionContext* context,
+ cmGeneratorExpressionDAGChecker* dagChecker) const
{
std::string identifier;
{
- std::vector<cmGeneratorExpressionEvaluator*>::const_iterator it
- = this->IdentifierChildren.begin();
- const std::vector<cmGeneratorExpressionEvaluator*>::const_iterator end
- = this->IdentifierChildren.end();
- for ( ; it != end; ++it)
- {
- identifier += (*it)->Evaluate(context, dagChecker);
- if (context->HadError)
- {
- return std::string();
+ std::vector<cmGeneratorExpressionEvaluator*>::const_iterator it =
+ this->IdentifierChildren.begin();
+ const std::vector<cmGeneratorExpressionEvaluator*>::const_iterator end =
+ this->IdentifierChildren.end();
+ for (; it != end; ++it) {
+ identifier += (*it)->Evaluate(context, dagChecker);
+ if (context->HadError) {
+ return std::string();
}
}
}
- const cmGeneratorExpressionNode *node =
- cmGeneratorExpressionNode::GetNode(identifier);
+ const cmGeneratorExpressionNode* node =
+ cmGeneratorExpressionNode::GetNode(identifier);
- if (!node)
- {
+ if (!node) {
reportError(context, this->GetOriginalExpression(),
- "Expression did not evaluate to a known generator expression");
+ "Expression did not evaluate to a known generator expression");
return std::string();
- }
+ }
- if (!node->GeneratesContent())
- {
- if (node->NumExpectedParameters() == 1
- && node->AcceptsArbitraryContentParameter())
- {
- if (this->ParamChildren.empty())
- {
+ if (!node->GeneratesContent()) {
+ if (node->NumExpectedParameters() == 1 &&
+ node->AcceptsArbitraryContentParameter()) {
+ if (this->ParamChildren.empty()) {
reportError(context, this->GetOriginalExpression(),
- "$<" + identifier + "> expression requires a parameter.");
- }
+ "$<" + identifier + "> expression requires a parameter.");
}
- else
- {
+ } else {
std::vector<std::string> parameters;
this->EvaluateParameters(node, identifier, context, dagChecker,
parameters);
- }
- return std::string();
}
+ return std::string();
+ }
std::vector<std::string> parameters;
this->EvaluateParameters(node, identifier, context, dagChecker, parameters);
- if (context->HadError)
- {
+ if (context->HadError) {
return std::string();
- }
+ }
return node->Evaluate(parameters, context, this, dagChecker);
}
std::string GeneratorExpressionContent::EvaluateParameters(
- const cmGeneratorExpressionNode *node,
- const std::string &identifier,
- cmGeneratorExpressionContext *context,
- cmGeneratorExpressionDAGChecker *dagChecker,
- std::vector<std::string> &parameters) const
+ const cmGeneratorExpressionNode* node, const std::string& identifier,
+ cmGeneratorExpressionContext* context,
+ cmGeneratorExpressionDAGChecker* dagChecker,
+ std::vector<std::string>& parameters) const
{
const int numExpected = node->NumExpectedParameters();
{
- std::vector<std::vector<cmGeneratorExpressionEvaluator*> >::const_iterator
- pit = this->ParamChildren.begin();
- const
- std::vector<std::vector<cmGeneratorExpressionEvaluator*> >::const_iterator
- pend = this->ParamChildren.end();
- const bool acceptsArbitraryContent
- = node->AcceptsArbitraryContentParameter();
- int counter = 1;
- for ( ; pit != pend; ++pit, ++counter)
- {
- if (acceptsArbitraryContent && counter == numExpected)
- {
- std::string lastParam = this->ProcessArbitraryContent(node, identifier,
- context,
- dagChecker,
- pit);
- parameters.push_back(lastParam);
- return std::string();
- }
- else
- {
- std::string parameter;
- std::vector<cmGeneratorExpressionEvaluator*>::const_iterator it =
- pit->begin();
- const std::vector<cmGeneratorExpressionEvaluator*>::const_iterator end =
- pit->end();
- for ( ; it != end; ++it)
- {
- parameter += (*it)->Evaluate(context, dagChecker);
- if (context->HadError)
- {
- return std::string();
+ std::vector<std::vector<cmGeneratorExpressionEvaluator*> >::const_iterator
+ pit = this->ParamChildren.begin();
+ const std::vector<
+ std::vector<cmGeneratorExpressionEvaluator*> >::const_iterator pend =
+ this->ParamChildren.end();
+ const bool acceptsArbitraryContent =
+ node->AcceptsArbitraryContentParameter();
+ int counter = 1;
+ for (; pit != pend; ++pit, ++counter) {
+ if (acceptsArbitraryContent && counter == numExpected) {
+ std::string lastParam = this->ProcessArbitraryContent(
+ node, identifier, context, dagChecker, pit);
+ parameters.push_back(lastParam);
+ return std::string();
+ } else {
+ std::string parameter;
+ std::vector<cmGeneratorExpressionEvaluator*>::const_iterator it =
+ pit->begin();
+ const std::vector<cmGeneratorExpressionEvaluator*>::const_iterator
+ end = pit->end();
+ for (; it != end; ++it) {
+ parameter += (*it)->Evaluate(context, dagChecker);
+ if (context->HadError) {
+ return std::string();
}
}
- parameters.push_back(parameter);
+ parameters.push_back(parameter);
}
}
}
- if ((numExpected > cmGeneratorExpressionNode::DynamicParameters
- && (unsigned int)numExpected != parameters.size()))
- {
- if (numExpected == 0)
- {
+ if ((numExpected > cmGeneratorExpressionNode::DynamicParameters &&
+ (unsigned int)numExpected != parameters.size())) {
+ if (numExpected == 0) {
reportError(context, this->GetOriginalExpression(),
"$<" + identifier + "> expression requires no parameters.");
- }
- else if (numExpected == 1)
- {
- reportError(context, this->GetOriginalExpression(),
- "$<" + identifier + "> expression requires "
- "exactly one parameter.");
- }
- else
- {
+ } else if (numExpected == 1) {
+ reportError(context, this->GetOriginalExpression(), "$<" + identifier +
+ "> expression requires "
+ "exactly one parameter.");
+ } else {
std::ostringstream e;
- e << "$<" + identifier + "> expression requires "
- << numExpected
- << " comma separated parameters, but got "
- << parameters.size() << " instead.";
+ e << "$<" + identifier + "> expression requires " << numExpected
+ << " comma separated parameters, but got " << parameters.size()
+ << " instead.";
reportError(context, this->GetOriginalExpression(), e.str());
- }
- return std::string();
}
+ return std::string();
+ }
- if (numExpected == cmGeneratorExpressionNode::OneOrMoreParameters
- && parameters.empty())
- {
- reportError(context, this->GetOriginalExpression(), "$<" + identifier
- + "> expression requires at least one parameter.");
- }
- if (numExpected == cmGeneratorExpressionNode::OneOrZeroParameters
- && parameters.size() > 1)
- {
- reportError(context, this->GetOriginalExpression(), "$<" + identifier
- + "> expression requires one or zero parameters.");
- }
+ if (numExpected == cmGeneratorExpressionNode::OneOrMoreParameters &&
+ parameters.empty()) {
+ reportError(context, this->GetOriginalExpression(), "$<" + identifier +
+ "> expression requires at least one parameter.");
+ }
+ if (numExpected == cmGeneratorExpressionNode::OneOrZeroParameters &&
+ parameters.size() > 1) {
+ reportError(context, this->GetOriginalExpression(), "$<" + identifier +
+ "> expression requires one or zero parameters.");
+ }
return std::string();
}