asObject() ignores pointers (6814,5626)

This commit is contained in:
Benoit Blanchon
2022-03-28 12:34:43 +02:00
parent 2d81897371
commit 24f718201b
3 changed files with 5 additions and 5 deletions

View File

@@ -264,7 +264,9 @@ struct Converter<ObjectRef> {
static ObjectRef fromJson(VariantRef src) {
VariantData* data = getData(src);
MemoryPool* pool = getPool(src);
return ObjectRef(pool, data != 0 ? data->asObject() : 0);
if (!data)
return ObjectRef();
return ObjectRef(pool, data->asObject());
}
static InvalidConversion<VariantConstRef, ObjectRef> fromJson(

View File

@@ -108,8 +108,6 @@ class VariantData {
}
const CollectionData *asObject() const {
if (isPointer()) // P+20 G+0
return _content.asPointer->asObject();
return const_cast<VariantData *>(this)->asObject();
}
@@ -321,7 +319,7 @@ class VariantData {
template <typename TAdaptedString>
VariantData *getMember(TAdaptedString key) const { // P+4 G+0
const CollectionData *col = asObject();
const CollectionData *col = resolve()->asObject();
return col ? col->getMember(key) : 0;
}

View File

@@ -24,7 +24,7 @@ inline const CollectionData *variantAsArray(const VariantData *var) {
}
inline const CollectionData *variantAsObject(const VariantData *var) {
return var != 0 ? var->asObject() : 0;
return var != 0 ? var->resolve()->asObject() : 0;
}
inline CollectionData *variantAsObject(VariantData *var) {