aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/language/evaluator.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/corelib/language/evaluator.h')
-rw-r--r--src/lib/corelib/language/evaluator.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/lib/corelib/language/evaluator.h b/src/lib/corelib/language/evaluator.h
index f174d858c..d86e08eb1 100644
--- a/src/lib/corelib/language/evaluator.h
+++ b/src/lib/corelib/language/evaluator.h
@@ -49,11 +49,13 @@
#include <QtCore/qhash.h>
#include <functional>
+#include <mutex>
#include <optional>
#include <stack>
namespace qbs {
namespace Internal {
+class EvaluationData;
class FileTags;
class Logger;
class PropertyDeclaration;
@@ -101,6 +103,8 @@ public:
void setCachingEnabled(bool enabled) { m_valueCacheEnabled = enabled; }
bool cachingEnabled() const { return m_valueCacheEnabled; }
void clearCache(const Item *item);
+ void invalidateCache(const Item *item);
+ void clearCacheIfInvalidated(EvaluationData &edata);
PropertyDependencies &propertyDependencies() { return m_propertyDependencies; }
void clearPropertyDependencies() { m_propertyDependencies.clear(); }
@@ -115,9 +119,10 @@ public:
bool isNonDefaultValue(const Item *item, const QString &name) const;
private:
- void onItemPropertyChanged(Item *item) override { clearCache(item); }
+ void onItemPropertyChanged(Item *item) override { invalidateCache(item); }
bool evaluateProperty(JSValue *result, const Item *item, const QString &name,
bool *propertyWasSet);
+ void clearCache(EvaluationData &edata);
ScriptEngine * const m_scriptEngine;
const JSClassID m_scriptClass;
@@ -126,6 +131,8 @@ private:
QString m_pathPropertiesBaseDir;
PropertyDependencies m_propertyDependencies;
std::stack<QualifiedId> m_requestedProperties;
+ std::mutex m_cacheInvalidationMutex;
+ Set<const Item *> m_invalidatedCaches;
bool m_valueCacheEnabled = false;
};