Skip to content

Commit c6a0439

Browse files
committed
[libSyntax] Model IsRef in SyntaxDataRef by a a virtual isRef method
1 parent f284529 commit c6a0439

File tree

1 file changed

+11
-15
lines changed

1 file changed

+11
-15
lines changed

include/swift/Syntax/SyntaxData.h

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,6 @@ class SyntaxDataRef {
8484
/// and released when \c this is destroyed.
8585
const SyntaxDataRef *Parent;
8686

87-
#ifndef NDEBUG
88-
/// In debug builds, a flag that specifies if this instance is a \c
89-
/// SyntaxDataRef or a \c SyntaxData object.
90-
bool IsRef = true;
91-
#endif
92-
9387
/// Creates an empty \c SyntaxDataRef variable to which values can later be
9488
/// stored.
9589
SyntaxDataRef() : AbsoluteRaw() {}
@@ -104,6 +98,11 @@ class SyntaxDataRef {
10498
"create a SyntaxDataRef to be populated later.");
10599
}
106100

101+
#ifndef NDEBUG
102+
virtual bool isRef() const { return true; }
103+
virtual ~SyntaxDataRef() {}
104+
#endif
105+
107106
public:
108107
SyntaxDataRef(const SyntaxDataRef &DataRef) = default;
109108
SyntaxDataRef(SyntaxDataRef &&DataRef) = default;
@@ -224,29 +223,26 @@ class SyntaxData final : public SyntaxDataRef {
224223
assert(
225224
Parent != nullptr &&
226225
"Use SyntaxData(AbsoluteRawSyntax) or makeRoot to create a root node.");
227-
assert(!Parent->IsRef &&
226+
assert(!Parent->isRef() &&
228227
"Cannot create a SyntaxData as a child of a SyntaxDataRef");
229228
Parent->Retain();
230-
#ifndef NDEBUG
231-
IsRef = false;
232-
#endif
233229
}
234230

235231
/// Create a new root node.
236232
SyntaxData(const AbsoluteRawSyntax &AbsoluteRaw)
237233
: SyntaxDataRef(AbsoluteRaw, nullptr),
238-
Arena(AbsoluteRaw.getRaw()->getArena()) {
234+
Arena(AbsoluteRaw.getRaw()->getArena()) {}
235+
239236
#ifndef NDEBUG
240-
IsRef = false;
237+
virtual bool isRef() const override { return false; }
241238
#endif
242-
}
243239

244240
public:
245241
SyntaxData(const SyntaxData &DataRef)
246242
: SyntaxDataRef(DataRef.AbsoluteRaw, DataRef.Parent),
247243
Arena(DataRef.Arena) {
248244
if (auto Parent = getParent()) {
249-
assert(!Parent->IsRef &&
245+
assert(!Parent->isRef() &&
250246
"Parent of a SyntaxData node should always be a SyntaxData node");
251247
Parent->Retain();
252248
}
@@ -280,7 +276,7 @@ class SyntaxData final : public SyntaxDataRef {
280276
/// Return the parent syntax if there is one, otherwise return \c nullptr.
281277
RC<const SyntaxData> getParent() const {
282278
if (auto ParentRef = getParentRef()) {
283-
assert(!ParentRef->IsRef &&
279+
assert(!ParentRef->isRef() &&
284280
"Parent of a SyntaxData node should always be a SyntaxData node");
285281
return RC<const SyntaxData>(static_cast<const SyntaxData *>(ParentRef));
286282
} else {

0 commit comments

Comments
 (0)