aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4lookup.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2018-09-23 11:15:52 +0200
committerLars Knoll <lars.knoll@qt.io>2018-09-27 08:33:52 +0000
commit1804fea8893c355dbd585e373cb9644387410a92 (patch)
treea1e0a43a74f9137b7bc1c9da0332e6c2e3984cde /src/qml/jsruntime/qv4lookup.cpp
parent7fb4fc2ac7b56d3f60ceb8ae1175bd4596436cc7 (diff)
Refactor InternalClass::find()
Specialize find() into several methods for different purposes. Prepares for further cleanups and being able to split up getter and setter for accessor properties. Change-Id: Id4ec5509ac1a1361e2170bbfc2347b89b520c782 Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4lookup.cpp')
-rw-r--r--src/qml/jsruntime/qv4lookup.cpp38
1 files changed, 19 insertions, 19 deletions
diff --git a/src/qml/jsruntime/qv4lookup.cpp b/src/qml/jsruntime/qv4lookup.cpp
index 3875001bb0..141d9b5afb 100644
--- a/src/qml/jsruntime/qv4lookup.cpp
+++ b/src/qml/jsruntime/qv4lookup.cpp
@@ -50,10 +50,10 @@ using namespace QV4;
void Lookup::resolveProtoGetter(PropertyKey name, const Heap::Object *proto)
{
while (proto) {
- uint index = proto->internalClass->find(name);
- if (index != UINT_MAX) {
- PropertyAttributes attrs = proto->internalClass->propertyData.at(index);
- protoLookup.data = proto->propertyData(index);
+ auto index = proto->internalClass->find(name);
+ if (index.isValid()) {
+ PropertyAttributes attrs = index.attrs;
+ protoLookup.data = proto->propertyData(index.index);
if (attrs.isData()) {
getter = getterProto;
} else {
@@ -77,23 +77,23 @@ ReturnedValue Lookup::resolveGetter(ExecutionEngine *engine, const Object *objec
return getter(this, engine, *object);
}
- uint index = obj->internalClass->find(name);
- if (index != UINT_MAX) {
- PropertyAttributes attrs = obj->internalClass->propertyData.at(index);
+ auto index = obj->internalClass->find(name);
+ if (index.isValid()) {
+ PropertyAttributes attrs = index.attrs;
uint nInline = obj->vtable()->nInlineProperties;
if (attrs.isData()) {
- if (index < obj->vtable()->nInlineProperties) {
- index += obj->vtable()->inlinePropertyOffset;
+ if (index.index < obj->vtable()->nInlineProperties) {
+ index.index += obj->vtable()->inlinePropertyOffset;
getter = getter0Inline;
} else {
- index -= nInline;
+ index.index -= nInline;
getter = getter0MemberData;
}
} else {
getter = getterAccessor;
}
objectLookup.ic = obj->internalClass;
- objectLookup.offset = index;
+ objectLookup.offset = index.index;
return getter(this, engine, *object);
}
@@ -478,15 +478,15 @@ bool Lookup::resolveSetter(ExecutionEngine *engine, Object *object, const Value
Heap::InternalClass *c = object->internalClass();
PropertyKey key = name->toPropertyKey();
- uint idx = c->find(key);
- if (idx != UINT_MAX) {
- if (object->isArrayObject() && idx == Heap::ArrayObject::LengthPropertyIndex) {
+ auto idx = c->find(key);
+ if (idx.isValid()) {
+ if (object->isArrayObject() && idx.index == Heap::ArrayObject::LengthPropertyIndex) {
setter = arrayLengthSetter;
return setter(this, engine, *object, value);
- } else if (object->internalClass()->propertyData[idx].isData() && object->internalClass()->propertyData[idx].isWritable()) {
+ } else if (idx.attrs.isData() && idx.attrs.isWritable()) {
objectLookup.ic = object->internalClass();
- objectLookup.offset = idx;
- setter = idx < object->d()->vtable()->nInlineProperties ? Lookup::setter0Inline : Lookup::setter0;
+ objectLookup.offset = idx.index;
+ setter = idx.index < object->d()->vtable()->nInlineProperties ? Lookup::setter0Inline : Lookup::setter0;
return setter(this, engine, *object, value);
} else {
// ### handle setter
@@ -507,12 +507,12 @@ bool Lookup::resolveSetter(ExecutionEngine *engine, Object *object, const Value
return true;
}
idx = object->internalClass()->find(key);
- if (idx == UINT_MAX) { // ### can this even happen?
+ if (!idx.isValid()) { // ### can this even happen?
setter = setterFallback;
return false;
}
insertionLookup.newClass = object->internalClass();
- insertionLookup.offset = idx;
+ insertionLookup.offset = idx.index;
setter = setterInsert;
return true;
}