diff options
Diffstat (limited to 'src/qml/jsruntime/qv4persistent_p.h')
-rw-r--r-- | src/qml/jsruntime/qv4persistent_p.h | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/src/qml/jsruntime/qv4persistent_p.h b/src/qml/jsruntime/qv4persistent_p.h index 5b1926468a..c1cd1f34df 100644 --- a/src/qml/jsruntime/qv4persistent_p.h +++ b/src/qml/jsruntime/qv4persistent_p.h @@ -118,7 +118,7 @@ public: Managed *asManaged() const { if (!val) return 0; - return val->as<Managed>(); + return val->managed(); } template<typename T> T *as() const { @@ -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()); @@ -167,7 +184,7 @@ public: Managed *asManaged() const { if (!val) return 0; - return val->as<Managed>(); + return val->managed(); } template <typename T> T *as() const { @@ -192,6 +209,8 @@ private: Value *val; private: + Q_NEVER_INLINE void allocVal(ExecutionEngine *engine); + void free(); }; |