asArray() ignores pointer (6796,5626)

This commit is contained in:
Benoit Blanchon
2022-03-28 12:39:08 +02:00
parent 24f718201b
commit a3d7158106
3 changed files with 3 additions and 5 deletions

View File

@@ -98,8 +98,6 @@ class VariantData {
}
const CollectionData *asArray() const {
if (isPointer()) // P+14 G+0
return _content.asPointer->asArray();
return const_cast<VariantData *>(this)->asArray();
}
@@ -305,7 +303,7 @@ class VariantData {
}
VariantData *getElement(size_t index) const { // P+4 G+0
const CollectionData *col = asArray();
const CollectionData *col = resolve()->asArray();
return col ? col->getElement(index) : 0;
}

View File

@@ -20,7 +20,7 @@ inline typename TVisitor::result_type variantAccept(const VariantData *var,
}
inline const CollectionData *variantAsArray(const VariantData *var) {
return var != 0 ? var->asArray() : 0;
return var != 0 ? var->resolve()->asArray() : 0;
}
inline const CollectionData *variantAsObject(const VariantData *var) {

View File

@@ -127,7 +127,7 @@ VariantRef::to() const {
}
inline VariantConstRef VariantConstRef::getElement(size_t index) const {
return ArrayConstRef(_data != 0 ? _data->asArray() : 0)[index];
return ArrayConstRef(_data != 0 ? _data->resolve()->asArray() : 0)[index];
}
inline VariantRef VariantRef::addElement() const {