Commit 4d8aa4f0 authored by neverlord's avatar neverlord

bugfix

parent 754dbbe1
...@@ -28,6 +28,7 @@ struct list_member_util ...@@ -28,6 +28,7 @@ struct list_member_util
{ {
list.push_back(get<value_type>(d->read_value(vptype))); list.push_back(get<value_type>(d->read_value(vptype)));
} }
d->end_sequence();
} }
}; };
...@@ -49,6 +50,7 @@ struct list_member_util<List, false> ...@@ -49,6 +50,7 @@ struct list_member_util<List, false>
{ {
m_value_type->serialize(&(*i), s); m_value_type->serialize(&(*i), s);
} }
s->end_sequence();
} }
void operator()(List& list, deserializer* d) const void operator()(List& list, deserializer* d) const
...@@ -61,6 +63,7 @@ struct list_member_util<List, false> ...@@ -61,6 +63,7 @@ struct list_member_util<List, false>
m_value_type->deserialize(&tmp, d); m_value_type->deserialize(&tmp, d);
list.push_back(tmp); list.push_back(tmp);
} }
d->end_sequence();
} }
}; };
......
...@@ -180,6 +180,11 @@ class string_deserializer : public deserializer ...@@ -180,6 +180,11 @@ class string_deserializer : public deserializer
error += "' found '"; error += "' found '";
error += *m_pos; error += *m_pos;
error += "'"; error += "'";
if (m_open_objects.empty() == false)
{
error += "during deserialization an instance of ";
error += m_open_objects.top();
}
throw_malformed(error); throw_malformed(error);
} }
++m_pos; ++m_pos;
...@@ -306,6 +311,7 @@ class string_deserializer : public deserializer ...@@ -306,6 +311,7 @@ class string_deserializer : public deserializer
void end_sequence() void end_sequence()
{ {
integrity_check();
consume('}'); consume('}');
} }
......
...@@ -124,6 +124,28 @@ void deserialize_nullptr(deserializer* source) ...@@ -124,6 +124,28 @@ void deserialize_nullptr(deserializer* source)
source->end_object(); source->end_object();
} }
class void_type_tinfo : public util::abstract_uniform_type_info<void_type>
{
protected:
void serialize(const void*, serializer* sink) const
{
serialize_nullptr(sink);
}
void deserialize(void*, deserializer* source) const
{
std::string cname = source->seek_object();
if (cname != name())
{
throw std::logic_error("wrong type name found");
}
deserialize_nullptr(source);
}
};
class actor_ptr_tinfo : public util::abstract_uniform_type_info<actor_ptr> class actor_ptr_tinfo : public util::abstract_uniform_type_info<actor_ptr>
{ {
...@@ -645,7 +667,8 @@ class uniform_type_info_map_helper ...@@ -645,7 +667,8 @@ class uniform_type_info_map_helper
insert(d, new channel_ptr_tinfo, { raw_name<channel_ptr>() }); insert(d, new channel_ptr_tinfo, { raw_name<channel_ptr>() });
//insert(d, new message_tinfo, { raw_name<any_tuple>() }); //insert(d, new message_tinfo, { raw_name<any_tuple>() });
insert(d, new atom_value_tinfo, { raw_name<atom_value>() }); insert(d, new atom_value_tinfo, { raw_name<atom_value>() });
insert(d, new addr_msg_tinfo, {raw_name<detail::addressed_message>()}); insert(d, new addr_msg_tinfo, {raw_name<detail::addressed_message>() });
insert(d, new void_type_tinfo, { raw_name<void_type>() });
insert<float>(d); insert<float>(d);
if (sizeof(double) == sizeof(long double)) if (sizeof(double) == sizeof(long double))
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment