asFloat() ignores pointers (6808,5626)

This commit is contained in:
Benoit Blanchon
2022-03-28 12:19:53 +02:00
parent 1ee9616f6f
commit 228a48c368
3 changed files with 9 additions and 3 deletions

View File

@@ -103,7 +103,9 @@ struct Converter<T, typename enable_if<is_floating_point<T>::value>::type> {
static T fromJson(VariantConstRef src) { static T fromJson(VariantConstRef src) {
const VariantData* data = getData(src); const VariantData* data = getData(src);
return data ? data->asFloat<T>() : false; if (!data)
return 0;
return data->resolve()->asFloat<T>();
} }
static bool checkJson(VariantConstRef src) { static bool checkJson(VariantConstRef src) {

View File

@@ -87,6 +87,12 @@ class VariantData {
bool asBoolean() const; bool asBoolean() const;
const VariantData *resolve() const {
if (isPointer())
return _content.asPointer->resolve();
return this;
}
CollectionData *asArray() { CollectionData *asArray() {
return isArrayStrict() ? &_content.asCollection : 0; return isArrayStrict() ? &_content.asCollection : 0;
} }

View File

@@ -69,8 +69,6 @@ inline T VariantData::asFloat() const {
return parseNumber<T>(_content.asString.data); return parseNumber<T>(_content.asString.data);
case VALUE_IS_FLOAT: case VALUE_IS_FLOAT:
return static_cast<T>(_content.asFloat); return static_cast<T>(_content.asFloat);
case VALUE_IS_POINTER: // P+34 G+0
return _content.asPointer->asFloat<T>();
default: default:
return 0; return 0;
} }