path: root/src/qml/jsruntime/qv4object_p.h
diff options
authorLars Knoll <>2018-09-16 19:44:45 +0200
committerLars Knoll <>2018-09-27 08:34:14 +0000
commit20a434faa81059fd2e969e7c372758d2e03da9e6 (patch)
tree07f41afc9663342a2ef06e8e0692cf3022950176 /src/qml/jsruntime/qv4object_p.h
parent7c592625032a98f68fd6a09026e466c5fbc7bb09 (diff)
Speed up instanceof operations
Introduce a shortcut if the rhs is a functionobject with the regular function proto as prototype. Add an optimized instanceOf implementation when we already have some checks done, and inline some methods. Change-Id: Iab9b648ae7bbec749b319e883b6ae90a23875454 Reviewed-by: Erik Verbruggen <>
Diffstat (limited to 'src/qml/jsruntime/qv4object_p.h')
1 files changed, 11 insertions, 3 deletions
diff --git a/src/qml/jsruntime/qv4object_p.h b/src/qml/jsruntime/qv4object_p.h
index 7ac9888a88..6753ebfcd4 100644
--- a/src/qml/jsruntime/qv4object_p.h
+++ b/src/qml/jsruntime/qv4object_p.h
@@ -191,9 +191,14 @@ struct Q_QML_EXPORT Object: Managed {
return getValueAccessor(thisObject, v, attrs);
ReturnedValue getValue(const Value &v, PropertyAttributes attrs) const {
- Scope scope(this->engine());
- ScopedValue t(scope, const_cast<Object *>(this));
- return getValue(t, v, attrs);
+ return getValue(*this, v, attrs);
+ }
+ ReturnedValue getValueByIndex(uint propertyIndex) const {
+ PropertyAttributes attrs = internalClass()->;
+ const Value *v = propertyData(propertyIndex);
+ if (!attrs.isAccessor())
+ return v->asReturnedValue();
+ return getValueAccessor(*this, *v, attrs);
static ReturnedValue getValueAccessor(const Value &thisObject, const Value &v, PropertyAttributes attrs);
@@ -382,6 +387,9 @@ protected:
static OwnPropertyKeyIterator *virtualOwnPropertyKeys(const Object *m, Value *target);
static qint64 virtualGetLength(const Managed *m);
static ReturnedValue virtualInstanceOf(const Object *typeObject, const Value &var);
+ // qv4runtime uses this directly
+ static ReturnedValue checkedInstanceOf(ExecutionEngine *engine, const FunctionObject *typeObject, const Value &var);
bool internalDefineOwnProperty(ExecutionEngine *engine, uint index, const InternalClassEntry *memberEntry, const Property *p, PropertyAttributes attrs);