From 3c090c80c58d99f1bd29493ef747a4f6fa915a71 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Fri, 6 Apr 2018 23:25:51 +0200 Subject: Remove String dependency from InternalClass This is required, so we can also use Symbols in the internal classes. Change-Id: I630e7aa7b8b16d5a94041f8d18515fd582f94264 Reviewed-by: Simon Hausmann --- src/qml/jsruntime/qv4internalclass.cpp | 34 +++++++++------------------------- 1 file changed, 9 insertions(+), 25 deletions(-) (limited to 'src/qml/jsruntime/qv4internalclass.cpp') diff --git a/src/qml/jsruntime/qv4internalclass.cpp b/src/qml/jsruntime/qv4internalclass.cpp index de3f6e0ee6..40b57e76e1 100644 --- a/src/qml/jsruntime/qv4internalclass.cpp +++ b/src/qml/jsruntime/qv4internalclass.cpp @@ -225,11 +225,12 @@ static void removeFromPropertyData(QV4::Object *object, int idx, bool accessor = o->setProperty(v4, size + 1, Primitive::undefinedValue()); } -void InternalClass::changeMember(QV4::Object *object, QV4::String *string, PropertyAttributes data, uint *index) +void InternalClass::changeMember(QV4::Object *object, Identifier id, PropertyAttributes data, uint *index) { + Q_ASSERT(id.isValid()); uint idx; Heap::InternalClass *oldClass = object->internalClass(); - Heap::InternalClass *newClass = oldClass->changeMember(string->identifier(), data, &idx); + Heap::InternalClass *newClass = oldClass->changeMember(id, data, &idx); if (index) *index = idx; @@ -382,31 +383,26 @@ Heap::InternalClass *InternalClass::nonExtensible() return newClass; } -void InternalClass::addMember(QV4::Object *object, QV4::String *string, PropertyAttributes data, uint *index) +void InternalClass::addMember(QV4::Object *object, Identifier id, PropertyAttributes data, uint *index) { + Q_ASSERT(id.isValid()); data.resolve(); - object->internalClass()->engine->identifierTable->identifier(string); - if (object->internalClass()->propertyTable.lookup(string->d()->identifier) < object->internalClass()->size) { - changeMember(object, string, data, index); + if (object->internalClass()->propertyTable.lookup(id) < object->internalClass()->size) { + changeMember(object, id, data, index); return; } uint idx; - Heap::InternalClass *newClass = object->internalClass()->addMemberImpl(string->identifier(), data, &idx); + Heap::InternalClass *newClass = object->internalClass()->addMemberImpl(id, data, &idx); if (index) *index = idx; object->setInternalClass(newClass); } -Heap::InternalClass *InternalClass::addMember(QV4::String *string, PropertyAttributes data, uint *index) -{ - engine->identifierTable->identifier(string); - return addMember(string->identifier(), data, index); -} - Heap::InternalClass *InternalClass::addMember(Identifier identifier, PropertyAttributes data, uint *index) { + Q_ASSERT(identifier.isValid()); data.resolve(); if (propertyTable.lookup(identifier) < size) @@ -479,18 +475,6 @@ void InternalClass::removeMember(QV4::Object *object, Identifier identifier) Q_ASSERT(object->internalClass()->size == oldClass->size); } -uint InternalClass::find(const QV4::String *string) -{ - engine->identifierTable->identifier(string); - const Identifier id = string->d()->identifier; - - uint index = propertyTable.lookup(id); - if (index < size) - return index; - - return UINT_MAX; -} - Heap::InternalClass *InternalClass::sealed() { if (isSealed) -- cgit v1.2.3