7 #include <llvm/ADT/ilist.h>
9 #include "core/value.h"
10 #include "core/global.h"
11 #include "core/symbol_table.h"
12 #include "core/item.h"
24 :
public llvm::ilist_node_with_parent<Atom, Object>
34 typedef ItemListType::iterator iterator;
35 typedef ItemListType::const_iterator const_iterator;
40 const std::string_view name,
41 Visibility visibility = Visibility::LOCAL,
42 std::optional<llvm::Align> align = std::nullopt)
61 void remove(iterator it) { items_.remove(it); }
63 void erase(iterator it) { items_.erase(it); }
65 void AddItem(Item *atom, Item *before =
nullptr);
68 bool empty()
const {
return items_.empty(); }
69 size_t size()
const {
return items_.size(); }
70 iterator begin() {
return items_.begin(); }
71 iterator end() {
return items_.end(); }
72 const_iterator begin()
const {
return items_.begin(); }
73 const_iterator end()
const {
return items_.end(); }
75 void clear() { items_.clear(); }
82 std::optional<llvm::Align>
GetAlignment()
const override {
return align_; }
88 void dump(llvm::raw_ostream &os = llvm::errs())
const;
92 friend struct llvm::ilist_traits<Item>;
98 void setParent(
Object *parent) { parent_ = parent; }
106 std::optional<llvm::Align> align_;
110 inline llvm::raw_ostream &operator<<(llvm::raw_ostream &os,
const Atom &atom)