diff options
author | Lars Knoll <lars.knoll@qt.io> | 2018-09-23 11:15:52 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2018-09-27 08:33:52 +0000 |
commit | 1804fea8893c355dbd585e373cb9644387410a92 (patch) | |
tree | a1e0a43a74f9137b7bc1c9da0332e6c2e3984cde /src/qml/jsruntime/qv4lookup.cpp | |
parent | 7fb4fc2ac7b56d3f60ceb8ae1175bd4596436cc7 (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.cpp | 38 |
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; } |