1717#ifndef SWIFT_REFLECTION_RECORDS_H
1818#define SWIFT_REFLECTION_RECORDS_H
1919
20- #include " swift/Basic/RelativePointer .h"
20+ #include " swift/ABI/TargetLayout .h"
2121#include " swift/Demangling/Demangle.h"
2222#include " llvm/ADT/ArrayRef.h"
2323
@@ -82,14 +82,15 @@ class FieldRecordFlags {
8282 }
8383};
8484
85- class FieldRecord {
85+ template <typename Runtime>
86+ class TargetFieldRecord {
8687 const FieldRecordFlags Flags;
8788
8889public:
89- const RelativeDirectPointer< const char > MangledTypeName;
90- const RelativeDirectPointer< const char > FieldName;
90+ const TargetRelativeDirectPointer<Runtime, const char > MangledTypeName;
91+ const TargetRelativeDirectPointer<Runtime, const char > FieldName;
9192
92- FieldRecord () = delete ;
93+ TargetFieldRecord () = delete ;
9394
9495 bool hasMangledTypeName () const {
9596 return MangledTypeName;
@@ -111,36 +112,37 @@ class FieldRecord {
111112 return Flags.isVar ();
112113 }
113114};
115+ using FieldRecord = TargetFieldRecord<InProcess>;
114116
115- struct FieldRecordIterator {
116- const FieldRecord *Cur;
117- const FieldRecord * const End;
117+ template <typename Runtime>
118+ struct TargetFieldRecordIterator {
119+ const TargetFieldRecord<Runtime> *Cur;
120+ const TargetFieldRecord<Runtime> *const End;
118121
119- FieldRecordIterator (const FieldRecord *Cur, const FieldRecord * const End)
120- : Cur(Cur), End(End) {}
122+ TargetFieldRecordIterator (const TargetFieldRecord<Runtime> *Cur,
123+ const TargetFieldRecord<Runtime> *const End)
124+ : Cur(Cur), End(End) {}
121125
122- const FieldRecord &operator *() const {
123- return *Cur;
124- }
126+ const TargetFieldRecord<Runtime> &operator *() const { return *Cur; }
125127
126- const FieldRecord *operator ->() const {
127- return Cur;
128- }
128+ const TargetFieldRecord<Runtime> *operator ->() const { return Cur; }
129129
130- FieldRecordIterator &operator ++() {
130+ TargetFieldRecordIterator &operator ++() {
131131 ++Cur;
132132 return *this ;
133133 }
134134
135- bool operator ==(const FieldRecordIterator &other) const {
135+ bool operator ==(const TargetFieldRecordIterator &other) const {
136136 return Cur == other.Cur && End == other.End ;
137137 }
138138
139- bool operator !=(const FieldRecordIterator &other) const {
139+ bool operator !=(const TargetFieldRecordIterator &other) const {
140140 return !(*this == other);
141141 }
142142};
143143
144+ using FieldRecordIterator = TargetFieldRecordIterator<InProcess>;
145+
144146enum class FieldDescriptorKind : uint16_t {
145147 // Swift nominal types.
146148 Struct,
@@ -173,16 +175,17 @@ enum class FieldDescriptorKind : uint16_t {
173175
174176// Field descriptors contain a collection of field records for a single
175177// class, struct or enum declaration.
176- class FieldDescriptor {
177- const FieldRecord *getFieldRecordBuffer () const {
178- return reinterpret_cast <const FieldRecord *>(this + 1 );
178+ template <typename Runtime>
179+ class TargetFieldDescriptor {
180+ const TargetFieldRecord<Runtime> *getFieldRecordBuffer () const {
181+ return reinterpret_cast <const TargetFieldRecord<Runtime> *>(this + 1 );
179182 }
180183
181184public:
182- const RelativeDirectPointer< const char > MangledTypeName;
183- const RelativeDirectPointer< const char > Superclass;
185+ const TargetRelativeDirectPointer<Runtime, const char > MangledTypeName;
186+ const TargetRelativeDirectPointer<Runtime, const char > Superclass;
184187
185- FieldDescriptor () = delete ;
188+ TargetFieldDescriptor () = delete ;
186189
187190 const FieldDescriptorKind Kind;
188191 const uint16_t FieldRecordSize;
@@ -222,7 +225,7 @@ class FieldDescriptor {
222225 return const_iterator { End, End };
223226 }
224227
225- llvm::ArrayRef<FieldRecord > getFields () const {
228+ llvm::ArrayRef<TargetFieldRecord<Runtime> > getFields () const {
226229 return {getFieldRecordBuffer (), NumFields};
227230 }
228231
@@ -242,6 +245,7 @@ class FieldDescriptor {
242245 return Demangle::makeSymbolicMangledNameStringRef (Superclass.get ());
243246 }
244247};
248+ using FieldDescriptor = TargetFieldDescriptor<InProcess>;
245249
246250// Associated type records describe the mapping from an associated
247251// type to the type witness of a conformance.
0 commit comments