aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4object.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2018-06-19 21:29:01 +0200
committerLars Knoll <lars.knoll@qt.io>2018-06-26 10:03:46 +0000
commit53adb5bbc659f4ae78427b0b1925bf9732d8a6e5 (patch)
treec45d87219ef000d09c514b3800564d896ce4b95f /src/qml/jsruntime/qv4object.cpp
parent89f585157af905d45012dbd9c079c48491e5211d (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.cpp40
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)
{