diff options
author | Lars Knoll <lars.knoll@qt.io> | 2018-06-19 21:29:01 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2018-06-26 10:03:46 +0000 |
commit | 53adb5bbc659f4ae78427b0b1925bf9732d8a6e5 (patch) | |
tree | c45d87219ef000d09c514b3800564d896ce4b95f /src/qml/jsruntime/qv4object.cpp | |
parent | 89f585157af905d45012dbd9c079c48491e5211d (diff) |
Unify deleteProperty and deleteIndexedProperty vtable methods
Change-Id: I25245818c6ff2104642594476cb9684bac824f29
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4object.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4object.cpp | 40 |
1 files changed, 14 insertions, 26 deletions
diff --git a/src/qml/jsruntime/qv4object.cpp b/src/qml/jsruntime/qv4object.cpp index ba6d8f9c77..e09022b60f 100644 --- a/src/qml/jsruntime/qv4object.cpp +++ b/src/qml/jsruntime/qv4object.cpp @@ -344,14 +344,9 @@ bool Object::putIndexed(Managed *m, uint index, const Value &value) return static_cast<Object *>(m)->internalPutIndexed(index, value); } -bool Object::deleteProperty(Managed *m, StringOrSymbol *name) +bool Object::deleteProperty(Managed *m, Identifier id) { - return static_cast<Object *>(m)->internalDeleteProperty(name); -} - -bool Object::deleteIndexedProperty(Managed *m, uint index) -{ - return static_cast<Object *>(m)->internalDeleteIndexedProperty(index); + return static_cast<Object *>(m)->internalDeleteProperty(id); } void Object::advanceIterator(Managed *m, ObjectIterator *it, Value *name, uint *index, Property *pd, PropertyAttributes *attrs) @@ -636,17 +631,23 @@ bool Object::internalPutIndexed(uint index, const Value &value) } // Section 8.12.7 -bool Object::internalDeleteProperty(StringOrSymbol *name) +bool Object::internalDeleteProperty(Identifier id) { if (internalClass()->engine->hasException) return false; - uint idx = name->asArrayIndex(); - if (idx != UINT_MAX) - return deleteIndexedProperty(idx); + if (id.isArrayIndex()) { + uint index = id.asArrayIndex(); + Scope scope(engine()); + if (scope.engine->hasException) + return false; - name->makeIdentifier(); - Identifier id = name->identifier(); + Scoped<ArrayData> ad(scope, arrayData()); + if (!ad || ad->vtable()->del(this, index)) + return true; + + return false; + } uint memberIdx = internalClass()->find(id); if (memberIdx != UINT_MAX) { @@ -660,19 +661,6 @@ bool Object::internalDeleteProperty(StringOrSymbol *name) return true; } -bool Object::internalDeleteIndexedProperty(uint index) -{ - Scope scope(engine()); - if (scope.engine->hasException) - return false; - - Scoped<ArrayData> ad(scope, arrayData()); - if (!ad || ad->vtable()->del(this, index)) - return true; - - return false; -} - // Section 8.12.9 bool Object::__defineOwnProperty__(ExecutionEngine *engine, StringOrSymbol *name, const Property *p, PropertyAttributes attrs) { |