diff options
Diffstat (limited to 'src/qml/compiler/qv4codegen_p.h')
-rw-r--r-- | src/qml/compiler/qv4codegen_p.h | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/src/qml/compiler/qv4codegen_p.h b/src/qml/compiler/qv4codegen_p.h index 5c4ce14870..e52f63e1f4 100644 --- a/src/qml/compiler/qv4codegen_p.h +++ b/src/qml/compiler/qv4codegen_p.h @@ -219,6 +219,28 @@ public: return isStackSlot(); } + enum PropertyCapturePolicy { + /* + We're reading a property from the scope or context object, but it's a CONSTANT property, + so we don't need to register a dependency at all. + */ + DontCapture, + /* + We're reading the property of a QObject, and we know that it's the + scope object or context object, which we know very well. Instead of registering a + property capture every time, we can do that ahead of time and then register all those + captures in one shot in registerQmlDependencies(). + */ + CaptureAheadOfTime, + /* + We're reading the property of a QObject, and we're not quite sure where + the QObject comes from or what it is. So, when reading that property at run-time, + make sure that we capture where we read that property so that if it changes we can + re-evaluate the entire expression. + */ + CaptureAtRuntime + }; + static Reference fromAccumulator(Codegen *cg) { return Reference(cg, Accumulator); } @@ -267,20 +289,20 @@ public: r.isReadonly = true; return r; } - static Reference fromQmlScopeObject(const Reference &base, qint16 coreIndex, qint16 notifyIndex, bool captureRequired) { + static Reference fromQmlScopeObject(const Reference &base, qint16 coreIndex, qint16 notifyIndex, PropertyCapturePolicy capturePolicy) { Reference r(base.codegen, QmlScopeObject); r.qmlBase = base.storeOnStack().stackSlot(); r.qmlCoreIndex = coreIndex; r.qmlNotifyIndex = notifyIndex; - r.captureRequired = captureRequired; + r.capturePolicy = capturePolicy; return r; } - static Reference fromQmlContextObject(const Reference &base, qint16 coreIndex, qint16 notifyIndex, bool captureRequired) { + static Reference fromQmlContextObject(const Reference &base, qint16 coreIndex, qint16 notifyIndex, PropertyCapturePolicy capturePolicy) { Reference r(base.codegen, QmlContextObject); r.qmlBase = base.storeOnStack().stackSlot(); r.qmlCoreIndex = coreIndex; r.qmlNotifyIndex = notifyIndex; - r.captureRequired = captureRequired; + r.capturePolicy = capturePolicy; return r; } static Reference fromThis(Codegen *cg) { @@ -336,7 +358,7 @@ public: Moth::StackSlot qmlBase; qint16 qmlCoreIndex; qint16 qmlNotifyIndex; - bool captureRequired; + PropertyCapturePolicy capturePolicy; }; }; QString name; |