@@ -41,13 +41,6 @@ class Record final {
41
41
const Record *R;
42
42
};
43
43
44
- // / Mapping from identifiers to field descriptors.
45
- using FieldList = llvm::SmallVector<Field, 8 >;
46
- // / Mapping from identifiers to base classes.
47
- using BaseList = llvm::SmallVector<Base, 8 >;
48
- // / List of virtual base classes.
49
- using VirtualBaseList = llvm::SmallVector<Base, 2 >;
50
-
51
44
public:
52
45
// / Returns the underlying declaration.
53
46
const RecordDecl *getDecl () const { return Decl; }
@@ -76,61 +69,64 @@ class Record final {
76
69
return nullptr ;
77
70
}
78
71
79
- using const_field_iter = FieldList ::const_iterator;
72
+ using const_field_iter = ArrayRef<Field> ::const_iterator;
80
73
llvm::iterator_range<const_field_iter> fields () const {
81
- return llvm::make_range (Fields. begin () , Fields. end () );
74
+ return llvm::make_range (Fields, Fields + NumFields );
82
75
}
83
76
84
- unsigned getNumFields () const { return Fields. size () ; }
77
+ unsigned getNumFields () const { return NumFields ; }
85
78
const Field *getField (unsigned I) const { return &Fields[I]; }
86
79
87
- using const_base_iter = BaseList ::const_iterator;
80
+ using const_base_iter = ArrayRef<Base> ::const_iterator;
88
81
llvm::iterator_range<const_base_iter> bases () const {
89
- return llvm::make_range (Bases. begin () , Bases. end () );
82
+ return llvm::make_range (Bases, Bases + NumBases );
90
83
}
91
84
92
- unsigned getNumBases () const { return Bases. size () ; }
85
+ unsigned getNumBases () const { return NumBases ; }
93
86
const Base *getBase (unsigned I) const {
94
87
assert (I < getNumBases ());
95
88
return &Bases[I];
96
89
}
97
90
98
- using const_virtual_iter = VirtualBaseList ::const_iterator;
91
+ using const_virtual_iter = ArrayRef<Base> ::const_iterator;
99
92
llvm::iterator_range<const_virtual_iter> virtual_bases () const {
100
- return llvm::make_range (VirtualBases. begin (), VirtualBases. end () );
93
+ return llvm::make_range (VBases, VBases + NumVBases );
101
94
}
102
95
103
- unsigned getNumVirtualBases () const { return VirtualBases. size () ; }
104
- const Base *getVirtualBase (unsigned I) const { return &VirtualBases [I]; }
96
+ unsigned getNumVirtualBases () const { return NumVBases ; }
97
+ const Base *getVirtualBase (unsigned I) const { return &VBases [I]; }
105
98
106
99
void dump (llvm::raw_ostream &OS, unsigned Indentation = 0 ,
107
100
unsigned Offset = 0 ) const ;
108
101
void dump () const { dump (llvm::errs ()); }
109
102
110
103
private:
111
104
// / Constructor used by Program to create record descriptors.
112
- Record (const RecordDecl *, BaseList && Bases, FieldList &&Fields ,
113
- VirtualBaseList &&VirtualBases , unsigned VirtualSize ,
114
- unsigned BaseSize);
105
+ Record (const RecordDecl *, const Base * Bases, unsigned NumBases ,
106
+ const Field *Fields , unsigned NumFields, Base *VBases ,
107
+ unsigned NumVBases, unsigned VirtualSize, unsigned BaseSize);
115
108
116
109
private:
117
110
friend class Program ;
118
111
119
112
// / Original declaration.
120
113
const RecordDecl *Decl;
121
114
// / List of all base classes.
122
- BaseList Bases;
115
+ const Base *Bases;
116
+ unsigned NumBases;
123
117
// / List of all the fields in the record.
124
- FieldList Fields;
118
+ const Field *Fields;
119
+ unsigned NumFields;
125
120
// / List o fall virtual bases.
126
- VirtualBaseList VirtualBases;
121
+ Base *VBases;
122
+ unsigned NumVBases;
127
123
128
124
// / Mapping from declarations to bases.
129
125
llvm::DenseMap<const RecordDecl *, const Base *> BaseMap;
130
126
// / Mapping from field identifiers to descriptors.
131
127
llvm::DenseMap<const FieldDecl *, const Field *> FieldMap;
132
128
// / Mapping from declarations to virtual bases.
133
- llvm::DenseMap<const RecordDecl *, Base *> VirtualBaseMap;
129
+ llvm::DenseMap<const RecordDecl *, const Base *> VirtualBaseMap;
134
130
// / Size of the structure.
135
131
unsigned BaseSize;
136
132
// / Size of all virtual bases.
0 commit comments