30struct SymbolDataInitialization {
33 Item(Range r,
bool isD) : range{r}, isDuplicate{isD} {}
34 bool operator<(
const Item &that)
const {
return range < that.range; }
38 explicit SymbolDataInitialization(std::size_t bytes) : image{bytes} {}
41 void NoteInitializedRange(Range range,
bool isDuplicate =
false) {
42 if (!initializationItems.empty()) {
43 auto &last{initializationItems.back()};
44 if (last.isDuplicate == isDuplicate &&
45 last.range.AnnexIfPredecessor(range)) {
50 initializationItems.emplace_back(range, isDuplicate);
53 void NoteInitializedRange(common::ConstantSubscript offset, std::size_t size,
54 bool isDuplicate =
false) {
55 NoteInitializedRange(Range{offset, size}, isDuplicate);
57 void NoteInitializedRange(
58 evaluate::OffsetSymbol offsetSymbol,
bool isDuplicate =
false) {
60 offsetSymbol.offset(), offsetSymbol.size(), isDuplicate);
63 evaluate::InitialImage image;
64 std::list<Item> initializationItems;