summaryrefslogtreecommitdiffstats
path: root/Source/cmGeneratorExpression.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmGeneratorExpression.h')
-rw-r--r--Source/cmGeneratorExpression.h54
1 files changed, 35 insertions, 19 deletions
diff --git a/Source/cmGeneratorExpression.h b/Source/cmGeneratorExpression.h
index 00e6907..b8467c2 100644
--- a/Source/cmGeneratorExpression.h
+++ b/Source/cmGeneratorExpression.h
@@ -21,6 +21,8 @@ class cmListFileBacktrace;
struct cmGeneratorExpressionEvaluator;
+class cmCompiledGeneratorExpression;
+
/** \class cmGeneratorExpression
* \brief Evaluate generate-time query expression syntax.
*
@@ -33,34 +35,48 @@ struct cmGeneratorExpressionEvaluator;
class cmGeneratorExpression
{
public:
- /** Construct with an evaluation context and configuration. */
- cmGeneratorExpression(cmMakefile* mf, const char* config,
- cmListFileBacktrace const& backtrace,
- bool quiet = false);
-
+ /** Construct. */
+ cmGeneratorExpression(cmListFileBacktrace const& backtrace);
~cmGeneratorExpression();
- /** Evaluate generator expressions in a string. */
- const char* Process(std::string const& input);
- const char* Process(const char* input);
+ const cmCompiledGeneratorExpression& Parse(std::string const& input);
+ const cmCompiledGeneratorExpression& Parse(const char* input);
+
+private:
+ cmGeneratorExpression(const cmGeneratorExpression &);
+ void operator=(const cmGeneratorExpression &);
+
+ cmListFileBacktrace const& Backtrace;
+ cmCompiledGeneratorExpression *CompiledExpression;
+};
- void Parse(const char* input);
+class cmCompiledGeneratorExpression
+{
+public:
const char* Evaluate(cmMakefile* mf, const char* config,
- bool quiet = false);
+ bool quiet = false) const;
/** Get set of targets found during evaluations. */
std::set<cmTarget*> const& GetTargets() const
{ return this->Targets; }
+
+ ~cmCompiledGeneratorExpression();
+
private:
- std::vector<cmGeneratorExpressionEvaluator*> Evaluators;
- cmMakefile* Makefile;
- const char* Config;
- cmListFileBacktrace const& Backtrace;
- bool Quiet;
+ cmCompiledGeneratorExpression(cmListFileBacktrace const& backtrace,
+ const std::vector<cmGeneratorExpressionEvaluator*> &evaluators,
+ const char *input, bool needsParsing);
- std::set<cmTarget*> Targets;
- const char* Input;
- bool NeedsParsing;
+ friend class cmGeneratorExpression;
+
+ cmCompiledGeneratorExpression(const cmCompiledGeneratorExpression &);
+ void operator=(const cmCompiledGeneratorExpression &);
+
+ cmListFileBacktrace const& Backtrace;
+ const std::vector<cmGeneratorExpressionEvaluator*> Evaluators;
+ const char* const Input;
+ const bool NeedsParsing;
- std::string Output;
+ mutable std::set<cmTarget*> Targets;
+ mutable std::string Output;
};