aboutsummaryrefslogtreecommitdiff
path: root/proto_writer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'proto_writer.cc')
-rw-r--r--proto_writer.cc27
1 files changed, 26 insertions, 1 deletions
diff --git a/proto_writer.cc b/proto_writer.cc
index 694d65e..919c5e8 100644
--- a/proto_writer.cc
+++ b/proto_writer.cc
@@ -74,8 +74,10 @@ struct Transform {
void operator()(const stg::BaseClass&, uint32_t);
void operator()(const stg::Method&, uint32_t);
void operator()(const stg::Member&, uint32_t);
+ void operator()(const stg::VariantMember&, uint32_t);
void operator()(const stg::StructUnion&, uint32_t);
void operator()(const stg::Enumeration&, uint32_t);
+ void operator()(const stg::Variant&, uint32_t);
void operator()(const stg::Function&, uint32_t);
void operator()(const stg::ElfSymbol&, uint32_t);
void operator()(const stg::Interface&, uint32_t);
@@ -92,7 +94,7 @@ struct Transform {
std::unordered_map<uint32_t, Id> GetInternalIdByExternalIdMap() {
std::unordered_map<uint32_t, Id> internal_id_map;
- for (const auto [id, ext_id] : external_id_by_internal_id) {
+ for (const auto& [id, ext_id] : external_id_by_internal_id) {
internal_id_map.emplace(ext_id, id);
}
return internal_id_map;
@@ -213,6 +215,17 @@ void Transform<MapId>::operator()(const stg::Member& x, uint32_t id) {
}
template <typename MapId>
+void Transform<MapId>::operator()(const stg::VariantMember& x, uint32_t id) {
+ auto& variant_member = *stg.add_variant_member();
+ variant_member.set_id(id);
+ variant_member.set_name(x.name);
+ if (x.discriminant_value) {
+ variant_member.set_discriminant_value(*x.discriminant_value);
+ }
+ variant_member.set_type_id((*this)(x.type_id));
+}
+
+template <typename MapId>
void Transform<MapId>::operator()(const stg::StructUnion& x, uint32_t id) {
auto& struct_union = *stg.add_struct_union();
struct_union.set_id(id);
@@ -251,6 +264,18 @@ void Transform<MapId>::operator()(const stg::Enumeration& x, uint32_t id) {
}
template <typename MapId>
+void Transform<MapId>::operator()(const stg::Variant& x, uint32_t id) {
+ auto& variant = *stg.add_variant();
+ variant.set_id(id);
+ variant.set_name(x.name);
+ variant.set_bytesize(x.bytesize);
+ variant.set_discriminant_type_id((*this)(x.discriminant_type_id));
+ for (const auto id : x.members) {
+ variant.add_member_id((*this)(id));
+ }
+}
+
+template <typename MapId>
void Transform<MapId>::operator()(const stg::Function& x, uint32_t id) {
auto& function = *stg.add_function();
function.set_id(id);