diff options
Diffstat (limited to 'src/v4/qv4internalclass.cpp')
-rw-r--r-- | src/v4/qv4internalclass.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/v4/qv4internalclass.cpp b/src/v4/qv4internalclass.cpp index 25857de361..0f4a94527c 100644 --- a/src/v4/qv4internalclass.cpp +++ b/src/v4/qv4internalclass.cpp @@ -52,15 +52,16 @@ InternalClass::InternalClass(const QQmlJS::VM::InternalClass &other) : engine(other.engine) , propertyTable(other.propertyTable) , nameMap(other.nameMap) + , propertyData(other.propertyData) , transitions() , size(other.size) { } -InternalClass *InternalClass::addMember(String *string, uint *index) +InternalClass *InternalClass::addMember(String *string, PropertyAttributes data, uint *index) { engine->identifierCache->toIdentifier(string); - uint id = string->identifier; + uint id = string->identifier | ((uint)data << 24); assert(propertyTable.constFind(id) == propertyTable.constEnd()); @@ -73,8 +74,9 @@ InternalClass *InternalClass::addMember(String *string, uint *index) } else { // create a new class and add it to the tree InternalClass *newClass = new InternalClass(*this); - newClass->propertyTable.insert(id, size); + newClass->propertyTable.insert(string->identifier, size); newClass->nameMap.append(string); + newClass->propertyData.append(data); ++newClass->size; transitions.insert(id, newClass); return newClass; @@ -100,7 +102,7 @@ void InternalClass::removeMember(Object *object, uint id) for (int i = 0; i < nameMap.size(); ++i) { if (i == propIdx) continue; - object->internalClass = object->internalClass->addMember(nameMap.at(i)); + object->internalClass = object->internalClass->addMember(nameMap.at(i), propertyData.at(i)); } transitions.insert(toRemove, object->internalClass); |