45 std::vector<Subscript> subscripts;
46 const Symbol *symbol{
nullptr};
47 bool operator==(
const Part &that)
const {
48 return subscripts == that.subscripts && symbol == that.symbol;
52 static std::optional<DesignatorPath> Get(
56 std::string AsFortran()
const;
57 llvm::raw_ostream &AsFortran(llvm::raw_ostream &)
const;
59 void AddComponent(
const Symbol &);
60 void AddSubscripts(std::vector<Subscript>);
61 const std::optional<NamedEntity> &Base()
const {
return base; }
62 const std::vector<Part> &Parts()
const {
return parts; }
63 bool empty()
const {
return !base && parts.empty(); }
64 bool HasBaseOnly()
const {
return base && parts.empty(); }
65 bool operator==(
const DesignatorPath &that)
const {
66 return base == that.base && parts == that.parts;
74 static std::optional<ConstantSubscriptRange> GetConstantSubscriptRange(
76 static bool IsFullTriplet(
const Triplet &);
77 static DesignatorRelation CompareSubscripts(
79 static DesignatorRelation CompareSubscriptLists(
80 const std::vector<Subscript> &,
const std::vector<Subscript> &);
81 static DesignatorRelation CompareParts(
const Part &,
const Part &);
82 static DesignatorRelation CombineRelations(
83 bool contains,
bool containedBy,
bool overlaps);
85 static bool SubscriptListMayContain(
86 const std::vector<Subscript> &,
const std::vector<Subscript> &);
87 static bool PartMayContain(
const Part &,
const Part &);
90 void AddDataRef(
const DataRef &);
96 std::optional<NamedEntity> base;
97 std::vector<Part> parts;
106 using iterator =
typename std::vector<Entry>::iterator;
107 using const_iterator =
typename std::vector<Entry>::const_iterator;
109 iterator begin() {
return entries_.begin(); }
110 iterator end() {
return entries_.end(); }
111 const_iterator begin()
const {
return entries_.begin(); }
112 const_iterator end()
const {
return entries_.end(); }
113 bool empty()
const {
return entries_.empty(); }
114 void clear() { entries_.clear(); }
115 iterator erase(iterator iter) {
return entries_.erase(iter); }
116 void push_back(DesignatorPath path, A value) {
117 entries_.push_back({std::move(path), std::move(value)});
121 std::vector<Entry> entries_;
Definition designator-path.h:102