1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 14:38:11 +00:00

AK: Allow JsonValue to store 64-bit integers internally

Add dedicated internal types for Int64 and UnsignedInt64. This makes it
a bit more straightforward to work with 64-bit numbers (instead of just
implicitly storing them as doubles.)
This commit is contained in:
Andreas Kling 2019-10-29 16:36:50 +01:00
parent 5442e365c9
commit 014f8ca8c4
6 changed files with 120 additions and 87 deletions

View file

@ -34,10 +34,8 @@ GVariant GJsonArrayModel::data(const GModelIndex& index, Role role) const
auto data = object.get(json_field_name);
if (field_spec.massage_for_display)
return field_spec.massage_for_display(object);
if (data.is_int())
return data.as_int();
if (data.is_uint())
return data.as_uint();
if (data.is_number())
return data.to_i32();
return object.get(json_field_name).to_string();
}

View file

@ -93,15 +93,29 @@ GVariant::GVariant(const JsonValue& value)
return;
}
if (value.is_int()) {
if (value.is_i32()) {
m_type = Type::Int;
m_value.as_int = value.as_int();
m_value.as_int = value.as_i32();
return;
}
if (value.is_uint()) {
if (value.is_u32()) {
m_type = Type::UnsignedInt;
m_value.as_uint = value.as_uint();
m_value.as_uint = value.as_u32();
return;
}
if (value.is_i64()) {
// FIXME: GVariant should have a 64-bit internal type.
m_type = Type::Int;
m_value.as_int = value.to_i32();
return;
}
if (value.is_u64()) {
// FIXME: GVariant should have a 64-bit internal type.
m_type = Type::UnsignedInt;
m_value.as_uint = value.to_u32();
return;
}