From 9a342ea31bf6fafcb9c056989460a9beae99c486 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Mon, 1 Dec 2014 14:29:21 +0100 Subject: [PATCH] Fix RegExpCache to store Heap Objects Change-Id: I1613c438f5b862436790f81c6a3d370cfe78b6a1 Reviewed-by: Simon Hausmann --- src/qml/jsruntime/qv4regexp.cpp | 8 ++++---- src/qml/jsruntime/qv4regexp_p.h | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/qml/jsruntime/qv4regexp.cpp b/src/qml/jsruntime/qv4regexp.cpp index 349a0b2..2f1ede1 100644 --- a/src/qml/jsruntime/qv4regexp.cpp +++ b/src/qml/jsruntime/qv4regexp.cpp @@ -42,7 +42,7 @@ RegExpCache::~RegExpCache() { for (RegExpCache::Iterator it = begin(), e = end(); it != e; ++it) - it.value()->d()->cache = 0; + it.value()->cache = 0; clear(); } @@ -69,8 +69,8 @@ Heap::RegExp *RegExp::create(ExecutionEngine* engine, const QString& pattern, bo RegExpCache *cache = engine->regExpCache; if (cache) { - if (RegExp *result = cache->value(key)) - return result->d(); + if (Heap::RegExp *result = cache->value(key)) + return result; } Scope scope(engine); @@ -80,7 +80,7 @@ Heap::RegExp *RegExp::create(ExecutionEngine* engine, const QString& pattern, bo cache = engine->regExpCache = new RegExpCache; result->d()->cache = cache; - cache->insert(key, result); + cache->insert(key, result->d()); return result->d(); } diff --git a/src/qml/jsruntime/qv4regexp_p.h b/src/qml/jsruntime/qv4regexp_p.h index 3219d56..b76c1ac 100644 --- a/src/qml/jsruntime/qv4regexp_p.h +++ b/src/qml/jsruntime/qv4regexp_p.h @@ -133,7 +133,8 @@ inline RegExpCacheKey::RegExpCacheKey(const RegExp::Data *re) inline uint qHash(const RegExpCacheKey& key, uint seed = 0) Q_DECL_NOTHROW { return qHash(key.pattern, seed); } -class RegExpCache : public QHash +// ### GC +class RegExpCache : public QHash { public: ~RegExpCache(); -- 2.7.4