1
0
Эх сурвалжийг харах

Genex: Extract an evaluateWithContext method.

Make it easier to make modifications to the context before
evaluating with it.
Stephen Kelly 10 жил өмнө
parent
commit
80b9f0cbe2

+ 20 - 12
Source/cmGeneratorExpression.cxx

@@ -72,18 +72,6 @@ const char *cmCompiledGeneratorExpression::Evaluate(
   cmGeneratorExpressionDAGChecker *dagChecker,
   std::string const& language) const
 {
-  if (!this->NeedsEvaluation)
-    {
-    return this->Input.c_str();
-    }
-
-  this->Output = "";
-
-  std::vector<cmGeneratorExpressionEvaluator*>::const_iterator it
-                                                  = this->Evaluators.begin();
-  const std::vector<cmGeneratorExpressionEvaluator*>::const_iterator end
-                                                  = this->Evaluators.end();
-
   cmGeneratorExpressionContext context;
   context.Makefile = mf;
   context.Config = config;
@@ -98,6 +86,26 @@ const char *cmCompiledGeneratorExpression::Evaluate(
   context.Backtrace = this->Backtrace;
   context.Language = language;
 
+  return this->EvaluateWithContext(context, dagChecker);
+}
+
+//----------------------------------------------------------------------------
+const char* cmCompiledGeneratorExpression::EvaluateWithContext(
+                            cmGeneratorExpressionContext& context,
+                            cmGeneratorExpressionDAGChecker *dagChecker) const
+{
+  if (!this->NeedsEvaluation)
+    {
+    return this->Input.c_str();
+    }
+
+  this->Output = "";
+
+  std::vector<cmGeneratorExpressionEvaluator*>::const_iterator it
+                                                  = this->Evaluators.begin();
+  const std::vector<cmGeneratorExpressionEvaluator*>::const_iterator end
+                                                  = this->Evaluators.end();
+
   for ( ; it != end; ++it)
     {
     this->Output += (*it)->Evaluate(&context, dagChecker);

+ 4 - 0
Source/cmGeneratorExpression.h

@@ -24,6 +24,7 @@ class cmMakefile;
 class cmListFileBacktrace;
 
 struct cmGeneratorExpressionEvaluator;
+struct cmGeneratorExpressionContext;
 struct cmGeneratorExpressionDAGChecker;
 
 class cmCompiledGeneratorExpression;
@@ -131,6 +132,9 @@ public:
                     std::map<std::string, std::string>& mapping);
 
 private:
+  const char* EvaluateWithContext(cmGeneratorExpressionContext& context,
+                           cmGeneratorExpressionDAGChecker *dagChecker) const;
+
   cmCompiledGeneratorExpression(cmListFileBacktrace const& backtrace,
               const std::string& input);