diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2014-07-23 13:56:43 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2014-11-04 14:58:30 +0100 |
commit | 3f1d0b27a11a1d560c11057d2a801224d1613d60 (patch) | |
tree | a35184460b77be487fa15aaa0e823334e406b833 /src/qml/jsruntime/qv4managed_p.h | |
parent | 8daace55a2c43ec354e5d778a42f9c421f9f9232 (diff) |
Changed Value to store Managed::Data pointers directly
This is a step towards storing direct heap object pointers for the values
on the JS stack, to avoid the costly indirection for data access.
Change-Id: Ibb57ed6cf52a7088bbc95ee04ae3a4cb25b8c045
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/jsruntime/qv4managed_p.h')
-rw-r--r-- | src/qml/jsruntime/qv4managed_p.h | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/qml/jsruntime/qv4managed_p.h b/src/qml/jsruntime/qv4managed_p.h index c062ec4f5b..c73ad10230 100644 --- a/src/qml/jsruntime/qv4managed_p.h +++ b/src/qml/jsruntime/qv4managed_p.h @@ -207,7 +207,7 @@ struct Q_QML_PRIVATE_EXPORT Managed void setVTable(const ManagedVTable *vt); ReturnedValue asReturnedValue() const { - return reinterpret_cast<Managed *>(const_cast<Data *>(this))->asReturnedValue(); + return Value::fromHeapObject(const_cast<Data *>(this)).asReturnedValue(); } void *operator new(size_t, Managed *m) { return m; } @@ -377,6 +377,20 @@ inline FunctionObject *managed_cast(Managed *m) return m ? m->asFunctionObject() : 0; } +inline Value Value::fromManaged(Managed *m) +{ + if (!m) + return QV4::Primitive::undefinedValue(); + Value v; +#if QT_POINTER_SIZE == 8 + v.m = &m->data; +#else + v.tag = Managed_Type; + v.m = &m->data; +#endif + return v; +} + } |