Make node types `struct` instead of `class`
This emphasises that the node types contain no hidden or mutable
state.
PiperOrigin-RevId: 456082057
Change-Id: Ia2ed03d99feac08f97759a8065b92d83d6806dca
diff --git a/stg.cc b/stg.cc
index 42f13d9..1981536 100644
--- a/stg.cc
+++ b/stg.cc
@@ -315,7 +315,7 @@
Name PointerReference::MakeDescription(const Graph& graph,
NameCache& names) const {
std::string sign;
- switch (kind_) {
+ switch (kind) {
case PointerReference::Kind::POINTER:
sign = "*";
break;
@@ -326,31 +326,31 @@
sign = "&&";
break;
}
- return GetDescription(graph, names, pointee_type_id_)
+ return GetDescription(graph, names, pointee_type_id)
.Add(Side::LEFT, Precedence::POINTER, sign);
}
Name Typedef::MakeDescription(const Graph&, NameCache&) const {
- return Name{name_};
+ return Name{name};
}
Name Qualified::MakeDescription(const Graph& graph, NameCache& names) const {
Qualifiers qualifiers;
- qualifiers.insert(qualifier_);
- Id under = qualified_type_id_;
+ qualifiers.insert(qualifier);
+ Id under = qualified_type_id;
while (const auto maybe = graph.Get(under).ResolveQualifier(qualifiers))
under = *maybe;
return GetDescription(graph, names, under).Qualify(qualifiers);
}
Name Integer::MakeDescription(const Graph&, NameCache&) const {
- return Name{name_};
+ return Name{name};
}
Name Array::MakeDescription(const Graph& graph, NameCache& names) const {
std::ostringstream os;
- os << '[' << number_of_elements_ << ']';
- return GetDescription(graph, names, element_type_id_)
+ os << '[' << number_of_elements << ']';
+ return GetDescription(graph, names, element_type_id)
.Add(Side::RIGHT, Precedence::ARRAY_FUNCTION, os.str());
}
@@ -359,23 +359,23 @@
}
Name Member::MakeDescription(const Graph& graph, NameCache& names) const {
- auto description = GetDescription(graph, names, type_id_);
- if (!name_.empty())
- description = description.Add(Side::LEFT, Precedence::ATOMIC, name_);
- if (bitsize_)
+ auto description = GetDescription(graph, names, type_id);
+ if (!name.empty())
+ description = description.Add(Side::LEFT, Precedence::ATOMIC, name);
+ if (bitsize)
description = description.Add(
- Side::RIGHT, Precedence::ATOMIC, " : " + std::to_string(bitsize_));
+ Side::RIGHT, Precedence::ATOMIC, " : " + std::to_string(bitsize));
return description;
}
Name StructUnion::MakeDescription(const Graph& graph, NameCache& names) const {
std::ostringstream os;
- os << kind_ << ' ';
- if (!name_.empty()) {
- os << name_;
- } else if (definition_) {
+ os << kind << ' ';
+ if (!name.empty()) {
+ os << name;
+ } else if (definition) {
os << "{ ";
- for (const auto& member : definition_->members)
+ for (const auto& member : definition->members)
os << GetDescription(graph, names, member) << "; ";
os << '}';
}
@@ -385,11 +385,11 @@
Name Enumeration::MakeDescription(const Graph&, NameCache&) const {
std::ostringstream os;
os << "enum ";
- if (!name_.empty()) {
- os << name_;
- } else if (definition_) {
+ if (!name.empty()) {
+ os << name;
+ } else if (definition) {
os << "{ ";
- for (const auto& e : definition_->enumerators)
+ for (const auto& e : definition->enumerators)
os << e.first << " = " << e.second << ", ";
os << '}';
}
@@ -400,7 +400,7 @@
std::ostringstream os;
os << '(';
bool sep = false;
- for (const auto& p : parameters_) {
+ for (const auto& p : parameters) {
if (sep)
os << ", ";
else
@@ -409,14 +409,14 @@
os << GetDescription(graph, names, p.type_id);
}
os << ')';
- return GetDescription(graph, names, return_type_id_)
+ return GetDescription(graph, names, return_type_id)
.Add(Side::RIGHT, Precedence::ARRAY_FUNCTION, os.str());
}
Name ElfSymbol::MakeDescription(const Graph&, NameCache&) const {
- if (!full_name_ || *full_name_ == symbol_name_)
- return Name{symbol_name_};
- return Name{*full_name_ + " {" + symbol_name_ + "}"};
+ if (!full_name || *full_name == symbol_name)
+ return Name{symbol_name};
+ return Name{*full_name + " {" + symbol_name + "}"};
}
Name Symbols::MakeDescription(const Graph&, NameCache&) const {
@@ -441,12 +441,11 @@
const auto& o = other.as<PointerReference>();
Result result;
- if (kind_ != o.kind_)
+ if (kind != o.kind)
return result.MarkIncomparable();
- const auto ref_diff =
- Compare(state, pointee_type_id_, o.pointee_type_id_);
+ const auto ref_diff = Compare(state, pointee_type_id, o.pointee_type_id);
const auto text =
- kind_ == PointerReference::Kind::POINTER ? "pointed-to" : "referred-to";
+ kind == PointerReference::Kind::POINTER ? "pointed-to" : "referred-to";
result.MaybeAddEdgeDiff(text, ref_diff);
return result;
}
@@ -465,10 +464,10 @@
const auto& o = other.as<Integer>();
Result result;
- result.MaybeAddNodeDiff("encoding", encoding_, o.encoding_);
- result.MaybeAddNodeDiff("bit size", bitsize_, o.bitsize_);
- if (bitsize_ != bytesize_ * 8 && o.bitsize_ != o.bytesize_ * 8)
- result.MaybeAddNodeDiff("byte size", bytesize_, o.bytesize_);
+ result.MaybeAddNodeDiff("encoding", encoding, o.encoding);
+ result.MaybeAddNodeDiff("bit size", bitsize, o.bitsize);
+ if (bitsize != bytesize * 8 && o.bitsize != o.bytesize * 8)
+ result.MaybeAddNodeDiff("byte size", bytesize, o.bytesize);
return result;
}
@@ -477,9 +476,9 @@
Result result;
result.MaybeAddNodeDiff("number of elements",
- number_of_elements_, o.number_of_elements_);
+ number_of_elements, o.number_of_elements);
const auto element_type_diff =
- Compare(state, element_type_id_, o.element_type_id_);
+ Compare(state, element_type_id, o.element_type_id);
result.MaybeAddEdgeDiff("element", element_type_diff);
return result;
}
@@ -571,9 +570,9 @@
const auto& o = other.as<BaseClass>();
Result result;
- result.MaybeAddNodeDiff("inheritance", inheritance_, o.inheritance_);
- result.MaybeAddNodeDiff("offset", offset_, o.offset_);
- const auto sub_diff = Compare(state, type_id_, o.type_id_);
+ result.MaybeAddNodeDiff("inheritance", inheritance, o.inheritance);
+ result.MaybeAddNodeDiff("offset", offset, o.offset);
+ const auto sub_diff = Compare(state, type_id, o.type_id);
result.MaybeAddEdgeDiff("", sub_diff);
return result;
}
@@ -582,9 +581,9 @@
const auto& o = other.as<Member>();
Result result;
- result.MaybeAddNodeDiff("offset", offset_, o.offset_);
- result.MaybeAddNodeDiff("size", bitsize_, o.bitsize_);
- const auto sub_diff = Compare(state, type_id_, o.type_id_);
+ result.MaybeAddNodeDiff("offset", offset, o.offset);
+ result.MaybeAddNodeDiff("size", bitsize, o.bitsize);
+ const auto sub_diff = Compare(state, type_id, o.type_id);
result.MaybeAddEdgeDiff("", sub_diff);
return result;
}
@@ -596,12 +595,12 @@
// Compare two anonymous types recursively, not holding diffs.
// Compare two identically named types recursively, holding diffs.
// Everything else treated as distinct. No recursion.
- if (kind_ != o.kind_ || name_ != o.name_)
+ if (kind != o.kind || name != o.name)
return result.MarkIncomparable();
- result.diff_.holds_changes = !name_.empty();
+ result.diff_.holds_changes = !name.empty();
- const auto& definition1 = definition_;
- const auto& definition2 = o.definition_;
+ const auto& definition1 = definition;
+ const auto& definition2 = o.definition;
if (!CompareDefined(definition1.has_value(), definition2.has_value(), result))
return result;
@@ -621,12 +620,12 @@
// Compare two anonymous types recursively, not holding diffs.
// Compare two identically named types recursively, holding diffs.
// Everything else treated as distinct. No recursion.
- if (name_ != o.name_)
+ if (name != o.name)
return result.MarkIncomparable();
- result.diff_.holds_changes = !name_.empty();
+ result.diff_.holds_changes = !name.empty();
- const auto& definition1 = definition_;
- const auto& definition2 = o.definition_;
+ const auto& definition1 = definition;
+ const auto& definition2 = o.definition;
if (!CompareDefined(definition1.has_value(), definition2.has_value(), result))
return result;
result.MaybeAddNodeDiff(
@@ -672,11 +671,11 @@
Result result;
const auto return_type_diff
- = Compare(state, return_type_id_, o.return_type_id_);
+ = Compare(state, return_type_id, o.return_type_id);
result.MaybeAddEdgeDiff("return", return_type_diff);
- const auto& parameters1 = parameters_;
- const auto& parameters2 = o.parameters_;
+ const auto& parameters1 = parameters;
+ const auto& parameters2 = o.parameters;
size_t min = std::min(parameters1.size(), parameters2.size());
for (size_t i = 0; i < min; ++i) {
const auto& p1 = parameters1.at(i);
@@ -705,7 +704,7 @@
bool added = parameters1.size() < parameters2.size();
const auto& which = added ? o : *this;
- const auto& parameters = which.parameters_;
+ const auto& parameters = which.parameters;
for (size_t i = min; i < parameters.size(); ++i) {
const auto& parameter = parameters.at(i);
std::ostringstream os;
@@ -774,25 +773,25 @@
// Symbol namespaces - not yet supported by symtab_reader
Result result;
- result.MaybeAddNodeDiff("name", symbol_name_, o.symbol_name_);
+ result.MaybeAddNodeDiff("name", symbol_name, o.symbol_name);
- result.MaybeAddNodeDiff("version", version_, o.version_);
+ result.MaybeAddNodeDiff("version", version, o.version);
result.MaybeAddNodeDiff(
- "default version", is_default_version_, o.is_default_version_);
+ "default version", is_default_version, o.is_default_version);
- result.MaybeAddNodeDiff("defined", is_defined_, o.is_defined_);
- result.MaybeAddNodeDiff("symbol type", symbol_type_, o.symbol_type_);
- result.MaybeAddNodeDiff("binding", binding_, o.binding_);
- result.MaybeAddNodeDiff("visibility", visibility_, o.visibility_);
- result.MaybeAddNodeDiff("CRC", crc_, o.crc_);
+ result.MaybeAddNodeDiff("defined", is_defined, o.is_defined);
+ result.MaybeAddNodeDiff("symbol type", symbol_type, o.symbol_type);
+ result.MaybeAddNodeDiff("binding", binding, o.binding);
+ result.MaybeAddNodeDiff("visibility", visibility, o.visibility);
+ result.MaybeAddNodeDiff("CRC", crc, o.crc);
- if (type_id_ && o.type_id_) {
- const auto type_diff = Compare(state, *type_id_, *o.type_id_);
+ if (type_id && o.type_id) {
+ const auto type_diff = Compare(state, *type_id, *o.type_id);
result.MaybeAddEdgeDiff("", type_diff);
- } else if (type_id_) {
- result.AddEdgeDiff("", Removed(state, *type_id_));
- } else if (o.type_id_) {
- result.AddEdgeDiff("", Added(state, *o.type_id_));
+ } else if (type_id) {
+ result.AddEdgeDiff("", Removed(state, *type_id));
+ } else if (o.type_id) {
+ result.AddEdgeDiff("", Added(state, *o.type_id));
} else {
// both types missing, we have nothing to say
}
@@ -811,8 +810,8 @@
std::vector<Id> added;
std::vector<std::pair<Id, Id>> in_both;
- const auto& symbols1 = symbols_;
- const auto& symbols2 = o.symbols_;
+ const auto& symbols1 = symbols;
+ const auto& symbols2 = o.symbols;
auto it1 = symbols1.begin();
auto it2 = symbols2.begin();
const auto end1 = symbols1.end();
@@ -861,8 +860,8 @@
}
std::optional<Id> Qualified::ResolveQualifier(Qualifiers& qualifiers) const {
- qualifiers.insert(qualifier_);
- return {qualified_type_id_};
+ qualifiers.insert(qualifier);
+ return {qualified_type_id};
}
std::optional<Id> Node::ResolveTypedef(std::vector<std::string>&) const {
@@ -871,27 +870,27 @@
std::optional<Id> Typedef::ResolveTypedef(
std::vector<std::string>& typedefs) const {
- typedefs.push_back(name_);
- return {referred_type_id_};
+ typedefs.push_back(name);
+ return {referred_type_id};
}
std::string Node::MatchingKey(const Graph&) const { return {}; }
std::string BaseClass::MatchingKey(const Graph& graph) const {
- return graph.Get(type_id_).MatchingKey(graph);
+ return graph.Get(type_id).MatchingKey(graph);
}
std::string Member::MatchingKey(const Graph& graph) const {
- if (!name_.empty())
- return name_;
- return graph.Get(type_id_).MatchingKey(graph);
+ if (!name.empty())
+ return name;
+ return graph.Get(type_id).MatchingKey(graph);
}
std::string StructUnion::MatchingKey(const Graph& graph) const {
- if (!name_.empty())
- return name_;
- if (definition_) {
- const auto& members = definition_->members;
+ if (!name.empty())
+ return name;
+ if (definition) {
+ const auto& members = definition->members;
for (const auto& member : members) {
const auto recursive = graph.Get(member).MatchingKey(graph);
if (!recursive.empty())
@@ -903,8 +902,8 @@
std::vector<std::pair<std::string, size_t>> Enumeration::GetEnumNames() const {
std::vector<std::pair<std::string, size_t>> names;
- if (definition_) {
- const auto& enums = definition_->enumerators;
+ if (definition) {
+ const auto& enums = definition->enumerators;
const auto size = enums.size();
names.reserve(size);
for (size_t ix = 0; ix < size; ++ix) {
diff --git a/stg.h b/stg.h
index d246715..e5be03f 100644
--- a/stg.h
+++ b/stg.h
@@ -41,7 +41,7 @@
namespace stg {
-class Node;
+struct Node;
template <typename Kind, typename... Args>
std::unique_ptr<Node> Make(Args&&... args) {
@@ -237,8 +237,7 @@
SCC<Comparison, HashComparison> scc;
};
-class Node {
- public:
+struct Node {
virtual ~Node() = default;
// as<Target>() provides a method to delegate downcasting to the base class,
@@ -270,68 +269,57 @@
std::pair<bool, std::optional<Comparison>> Compare(
State& state, Id node1, const Id node2);
-class Void : public Node {
- public:
+struct Void : Node {
Name MakeDescription(const Graph& graph, NameCache& names) const final;
Result Equals(State& state, const Node& other) const final;
};
-class Variadic : public Node {
- public:
+struct Variadic : Node {
Name MakeDescription(const Graph& graph, NameCache& names) const final;
Result Equals(State& state, const Node& other) const final;
};
-class PointerReference : public Node {
- public:
+struct PointerReference : Node {
enum class Kind {
POINTER,
LVALUE_REFERENCE,
RVALUE_REFERENCE,
};
PointerReference(Kind kind, Id pointee_type_id)
- : kind_(kind), pointee_type_id_(pointee_type_id) {}
+ : kind(kind), pointee_type_id(pointee_type_id) {}
Name MakeDescription(const Graph& graph, NameCache& names) const final;
Result Equals(State& state, const Node& other) const final;
- private:
- const Kind kind_;
- const Id pointee_type_id_;
+ const Kind kind;
+ const Id pointee_type_id;
};
std::ostream& operator<<(std::ostream& os, PointerReference::Kind kind);
-class Typedef : public Node {
- public:
+struct Typedef : Node {
Typedef(const std::string& name, Id referred_type_id)
- : name_(name),
- referred_type_id_(referred_type_id) {}
+ : name(name), referred_type_id(referred_type_id) {}
Name MakeDescription(const Graph& graph, NameCache& names) const final;
Result Equals(State& state, const Node& other) const final;
std::optional<Id> ResolveTypedef(
std::vector<std::string>& typedefs) const final;
- private:
- const std::string name_;
- const Id referred_type_id_;
+ const std::string name;
+ const Id referred_type_id;
};
-class Qualified : public Node {
- public:
+struct Qualified : Node {
Qualified(Qualifier qualifier, Id qualified_type_id)
- : qualifier_(qualifier),
- qualified_type_id_(qualified_type_id) {}
+ : qualifier(qualifier), qualified_type_id(qualified_type_id) {}
Name MakeDescription(const Graph& graph, NameCache& names) const final;
Result Equals(State& state, const Node& other) const final;
std::optional<Id> ResolveQualifier(Qualifiers& qualifiers) const final;
- private:
- const Qualifier qualifier_;
- const Id qualified_type_id_;
+ const Qualifier qualifier;
+ const Id qualified_type_id;
};
-class Integer : public Node {
- public:
+struct Integer : Node {
enum class Encoding {
BOOLEAN,
SIGNED_INTEGER,
@@ -342,143 +330,114 @@
};
Integer(const std::string& name, Encoding encoding, uint32_t bitsize,
uint32_t bytesize)
- : name_(name),
- encoding_(encoding),
- bitsize_(bitsize),
- bytesize_(bytesize) {}
+ : name(name), encoding(encoding), bitsize(bitsize), bytesize(bytesize) {}
+
Name MakeDescription(const Graph& graph, NameCache& names) const final;
Result Equals(State& state, const Node& other) const final;
- private:
- const std::string name_;
- const Encoding encoding_;
- // bitsize_ gives the semantics of the field. bytesize_ gives the
- // storage size, and is equal to bitsize_ / 8 rounded up.
- const uint32_t bitsize_;
- const uint32_t bytesize_;
+ const std::string name;
+ const Encoding encoding;
+ // bitsize gives the semantics of the field. bytesize gives the
+ // storage size, and is equal to bitsize / 8 rounded up.
+ const uint32_t bitsize;
+ const uint32_t bytesize;
};
-class Array : public Node {
- public:
- Array(uint64_t number_of_elements,
- Id element_type_id)
- : number_of_elements_(number_of_elements),
- element_type_id_(element_type_id) {}
+struct Array : Node {
+ Array(uint64_t number_of_elements, Id element_type_id)
+ : number_of_elements(number_of_elements),
+ element_type_id(element_type_id) {}
Name MakeDescription(const Graph& graph, NameCache& names) const final;
Result Equals(State& state, const Node& other) const final;
std::optional<Id> ResolveQualifier(Qualifiers& qualifiers) const final;
- private:
- const uint64_t number_of_elements_;
- const Id element_type_id_;
+ const uint64_t number_of_elements;
+ const Id element_type_id;
};
-class BaseClass : public Node {
- public:
+struct BaseClass : Node {
enum class Inheritance { NON_VIRTUAL, VIRTUAL };
BaseClass(Id type_id, uint64_t offset, Inheritance inheritance)
- : type_id_(type_id), offset_(offset), inheritance_(inheritance) {}
+ : type_id(type_id), offset(offset), inheritance(inheritance) {}
std::string GetKindDescription() const final;
Name MakeDescription(const Graph& graph, NameCache& names) const final;
Result Equals(State& state, const Node& other) const final;
std::string MatchingKey(const Graph& graph) const final;
- private:
- const Id type_id_;
- const uint64_t offset_;
- const Inheritance inheritance_;
+ const Id type_id;
+ const uint64_t offset;
+ const Inheritance inheritance;
};
std::ostream& operator<<(std::ostream& os, BaseClass::Inheritance inheritance);
-class Member : public Node {
- public:
+struct Member : Node {
Member(const std::string& name, Id type_id, uint64_t offset, uint64_t bitsize)
- : name_(name),
- type_id_(type_id),
- offset_(offset),
- bitsize_(bitsize) {}
+ : name(name), type_id(type_id), offset(offset), bitsize(bitsize) {}
std::string GetKindDescription() const final;
Name MakeDescription(const Graph& graph, NameCache& names) const final;
Result Equals(State& state, const Node& other) const final;
std::string MatchingKey(const Graph& graph) const final;
- private:
- const std::string name_;
- const Id type_id_;
- const uint64_t offset_;
- const uint64_t bitsize_;
+ const std::string name;
+ const Id type_id;
+ const uint64_t offset;
+ const uint64_t bitsize;
};
-class StructUnion : public Node {
- public:
+struct StructUnion : Node {
enum class Kind { CLASS, STRUCT, UNION };
struct Definition {
const uint64_t bytesize;
const std::vector<Id> base_classes;
const std::vector<Id> members;
};
- StructUnion(Kind kind, const std::string& name)
- : kind_(kind),
- name_(name) {}
- StructUnion(Kind kind, const std::string& name,
- uint64_t bytesize,
+ StructUnion(Kind kind, const std::string& name) : kind(kind), name(name) {}
+ StructUnion(Kind kind, const std::string& name, uint64_t bytesize,
const std::vector<Id>& base_classes,
const std::vector<Id>& members)
- : kind_(kind),
- name_(name),
- definition_({bytesize, base_classes, members}) {}
+ : kind(kind), name(name), definition({bytesize, base_classes, members}) {}
Name MakeDescription(const Graph& graph, NameCache& names) const final;
Result Equals(State& state, const Node& other) const final;
std::string MatchingKey(const Graph& graph) const final;
- private:
- const Kind kind_;
- const std::string name_;
- const std::optional<Definition> definition_;
+ const Kind kind;
+ const std::string name;
+ const std::optional<Definition> definition;
};
std::ostream& operator<<(std::ostream& os, StructUnion::Kind kind);
-class Enumeration : public Node {
- public:
+struct Enumeration : Node {
using Enumerators = std::vector<std::pair<std::string, int64_t>>;
struct Definition {
const uint32_t bytesize;
const Enumerators enumerators;
};
- Enumeration(const std::string& name)
- : name_(name) {}
+ Enumeration(const std::string& name) : name(name) {}
Enumeration(const std::string& name, uint32_t bytesize,
const Enumerators& enumerators)
- : name_(name),
- definition_({bytesize, enumerators}) {}
+ : name(name), definition({bytesize, enumerators}) {}
Name MakeDescription(const Graph& graph, NameCache& names) const final;
Result Equals(State& state, const Node& other) const final;
- private:
std::vector<std::pair<std::string, size_t>> GetEnumNames() const;
- const std::string name_;
- const std::optional<Definition> definition_;
+ const std::string name;
+ const std::optional<Definition> definition;
};
-class Function : public Node {
- public:
- Function(Id return_type_id,
- const std::vector<Parameter>& parameters)
- : return_type_id_(return_type_id),
- parameters_(parameters) {}
+struct Function : Node {
+ Function(Id return_type_id, const std::vector<Parameter>& parameters)
+ : return_type_id(return_type_id), parameters(parameters) {}
Name MakeDescription(const Graph& graph, NameCache& names) const final;
Result Equals(State& state, const Node& other) const final;
std::optional<Id> ResolveQualifier(Qualifiers& qualifiers) const final;
- private:
- const Id return_type_id_;
- const std::vector<Parameter> parameters_;
+ const Id return_type_id;
+ const std::vector<Parameter> parameters;
};
-class ElfSymbol : public Node {
- public:
+struct ElfSymbol : Node {
enum class SymbolType { OBJECT, FUNCTION, COMMON, TLS };
enum class Binding { GLOBAL, LOCAL, WEAK, GNU_UNIQUE };
enum class Visibility { DEFAULT, PROTECTED, HIDDEN, INTERNAL };
@@ -492,47 +451,43 @@
std::optional<CRC> crc,
std::optional<Id> type_id,
const std::optional<std::string>& full_name)
- : symbol_name_(symbol_name),
- version_(version),
- is_default_version_(is_default_version),
- is_defined_(is_defined),
- symbol_type_(symbol_type),
- binding_(binding),
- visibility_(visibility),
- crc_(crc),
- type_id_(type_id),
- full_name_(full_name) {}
+ : symbol_name(symbol_name),
+ version(version),
+ is_default_version(is_default_version),
+ is_defined(is_defined),
+ symbol_type(symbol_type),
+ binding(binding),
+ visibility(visibility),
+ crc(crc),
+ type_id(type_id),
+ full_name(full_name) {}
std::string GetKindDescription() const final;
Name MakeDescription(const Graph& graph, NameCache& names) const final;
Result Equals(State& state, const Node& other) const final;
- private:
- const std::string symbol_name_;
- const std::string version_;
- const bool is_default_version_;
- const bool is_defined_;
- const SymbolType symbol_type_;
- const Binding binding_;
- const Visibility visibility_;
- const std::optional<CRC> crc_;
- const std::optional<Id> type_id_;
- const std::optional<std::string> full_name_;
+ const std::string symbol_name;
+ const std::string version;
+ const bool is_default_version;
+ const bool is_defined;
+ const SymbolType symbol_type;
+ const Binding binding;
+ const Visibility visibility;
+ const std::optional<CRC> crc;
+ const std::optional<Id> type_id;
+ const std::optional<std::string> full_name;
};
std::ostream& operator<<(std::ostream& os, ElfSymbol::SymbolType);
std::ostream& operator<<(std::ostream& os, ElfSymbol::Binding);
std::ostream& operator<<(std::ostream& os, ElfSymbol::Visibility);
-class Symbols : public Node {
- public:
- Symbols(const std::map<std::string, Id>& symbols)
- : symbols_(symbols) {}
+struct Symbols : Node {
+ Symbols(const std::map<std::string, Id>& symbols) : symbols(symbols) {}
std::string GetKindDescription() const final;
Name MakeDescription(const Graph& graph, NameCache& names) const final;
Result Equals(State& state, const Node& other) const final;
- private:
- const std::map<std::string, Id> symbols_;
+ const std::map<std::string, Id> symbols;
};
std::ostream& operator<<(std::ostream& os, Integer::Encoding encoding);