|
|
@@ -992,6 +992,57 @@ std::string GeneratorExpressionContent::GetOriginalExpression() const
|
|
|
return std::string(this->StartContent, this->ContentLength);
|
|
|
}
|
|
|
|
|
|
+//----------------------------------------------------------------------------
|
|
|
+std::string GeneratorExpressionContent::ProcessArbitraryContent(
|
|
|
+ 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.");
|
|
|
+ return std::string();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ result += (*it)->Evaluate(context, dagChecker);
|
|
|
+ if (context->HadError)
|
|
|
+ {
|
|
|
+ return std::string();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ 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,
|
|
|
@@ -1043,47 +1094,9 @@ std::string GeneratorExpressionContent::Evaluate(
|
|
|
|
|
|
if (node->AcceptsSingleArbitraryContentParameter())
|
|
|
{
|
|
|
- std::string result;
|
|
|
- std::vector<std::vector<cmGeneratorExpressionEvaluator*> >::const_iterator
|
|
|
- pit = this->ParamChildren.begin();
|
|
|
- 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)
|
|
|
- {
|
|
|
- return std::string();
|
|
|
- }
|
|
|
- }
|
|
|
- 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;
|
|
|
+ return this->ProcessArbitraryContent(node, identifier, context,
|
|
|
+ dagChecker,
|
|
|
+ this->ParamChildren.begin());
|
|
|
}
|
|
|
|
|
|
std::vector<std::string> parameters;
|