diff options
-rw-r--r-- | src/qml/jsruntime/qv4persistent.cpp | 26 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4persistent_p.h | 25 |
2 files changed, 27 insertions, 24 deletions
diff --git a/src/qml/jsruntime/qv4persistent.cpp b/src/qml/jsruntime/qv4persistent.cpp index a892194df3..987c322e47 100644 --- a/src/qml/jsruntime/qv4persistent.cpp +++ b/src/qml/jsruntime/qv4persistent.cpp @@ -358,14 +358,14 @@ WeakValue::WeakValue(const WeakValue &other) : val(0) { if (other.val) { - val = other.engine()->memoryManager->m_weakValues->allocate(); + allocVal(other.engine()); *val = *other.val; } } WeakValue::WeakValue(ExecutionEngine *engine, const Value &value) { - val = engine->memoryManager->m_weakValues->allocate(); + allocVal(engine); *val = value; } @@ -374,7 +374,7 @@ WeakValue &WeakValue::operator=(const WeakValue &other) if (!val) { if (!other.val) return *this; - val = other.engine()->memoryManager->m_weakValues->allocate(); + allocVal(other.engine()); } Q_ASSERT(engine() == other.engine()); @@ -388,25 +388,9 @@ WeakValue::~WeakValue() free(); } -void WeakValue::set(ExecutionEngine *engine, const Value &value) -{ - if (!val) - val = engine->memoryManager->m_weakValues->allocate(); - *val = value; -} - -void WeakValue::set(ExecutionEngine *engine, ReturnedValue value) -{ - if (!val) - val = engine->memoryManager->m_weakValues->allocate(); - *val = value; -} - -void WeakValue::set(ExecutionEngine *engine, Heap::Base *obj) +void WeakValue::allocVal(ExecutionEngine *engine) { - if (!val) - val = engine->memoryManager->m_weakValues->allocate(); - *val = obj; + val = engine->memoryManager->m_weakValues->allocate(); } void WeakValue::markOnce(ExecutionEngine *e) diff --git a/src/qml/jsruntime/qv4persistent_p.h b/src/qml/jsruntime/qv4persistent_p.h index a0ade2068f..c1cd1f34df 100644 --- a/src/qml/jsruntime/qv4persistent_p.h +++ b/src/qml/jsruntime/qv4persistent_p.h @@ -154,9 +154,26 @@ public: WeakValue &operator=(const WeakValue &other); ~WeakValue(); - void set(ExecutionEngine *engine, const Value &value); - void set(ExecutionEngine *engine, ReturnedValue value); - void set(ExecutionEngine *engine, Heap::Base *obj); + void set(ExecutionEngine *engine, const Value &value) + { + if (!val) + allocVal(engine); + *val = value; + } + + void set(ExecutionEngine *engine, ReturnedValue value) + { + if (!val) + allocVal(engine); + *val = value; + } + + void set(ExecutionEngine *engine, Heap::Base *obj) + { + if (!val) + allocVal(engine); + *val = obj; + } ReturnedValue value() const { return (val ? val->asReturnedValue() : Encode::undefined()); @@ -192,6 +209,8 @@ private: Value *val; private: + Q_NEVER_INLINE void allocVal(ExecutionEngine *engine); + void free(); }; |