@@ -84,12 +84,6 @@ class SyntaxDataRef {
84
84
// / and released when \c this is destroyed.
85
85
const SyntaxDataRef *Parent;
86
86
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
-
93
87
// / Creates an empty \c SyntaxDataRef variable to which values can later be
94
88
// / stored.
95
89
SyntaxDataRef () : AbsoluteRaw() {}
@@ -104,6 +98,11 @@ class SyntaxDataRef {
104
98
" create a SyntaxDataRef to be populated later." );
105
99
}
106
100
101
+ #ifndef NDEBUG
102
+ virtual bool isRef () const { return true ; }
103
+ virtual ~SyntaxDataRef () {}
104
+ #endif
105
+
107
106
public:
108
107
SyntaxDataRef (const SyntaxDataRef &DataRef) = default ;
109
108
SyntaxDataRef (SyntaxDataRef &&DataRef) = default ;
@@ -224,29 +223,26 @@ class SyntaxData final : public SyntaxDataRef {
224
223
assert (
225
224
Parent != nullptr &&
226
225
" Use SyntaxData(AbsoluteRawSyntax) or makeRoot to create a root node." );
227
- assert (!Parent->IsRef &&
226
+ assert (!Parent->isRef () &&
228
227
" Cannot create a SyntaxData as a child of a SyntaxDataRef" );
229
228
Parent->Retain ();
230
- #ifndef NDEBUG
231
- IsRef = false ;
232
- #endif
233
229
}
234
230
235
231
// / Create a new root node.
236
232
SyntaxData (const AbsoluteRawSyntax &AbsoluteRaw)
237
233
: SyntaxDataRef(AbsoluteRaw, nullptr ),
238
- Arena (AbsoluteRaw.getRaw()->getArena()) {
234
+ Arena (AbsoluteRaw.getRaw()->getArena()) {}
235
+
239
236
#ifndef NDEBUG
240
- IsRef = false ;
237
+ virtual bool isRef () const override { return false ; }
241
238
#endif
242
- }
243
239
244
240
public:
245
241
SyntaxData (const SyntaxData &DataRef)
246
242
: SyntaxDataRef(DataRef.AbsoluteRaw, DataRef.Parent),
247
243
Arena(DataRef.Arena) {
248
244
if (auto Parent = getParent ()) {
249
- assert (!Parent->IsRef &&
245
+ assert (!Parent->isRef () &&
250
246
" Parent of a SyntaxData node should always be a SyntaxData node" );
251
247
Parent->Retain ();
252
248
}
@@ -280,7 +276,7 @@ class SyntaxData final : public SyntaxDataRef {
280
276
// / Return the parent syntax if there is one, otherwise return \c nullptr.
281
277
RC<const SyntaxData> getParent () const {
282
278
if (auto ParentRef = getParentRef ()) {
283
- assert (!ParentRef->IsRef &&
279
+ assert (!ParentRef->isRef () &&
284
280
" Parent of a SyntaxData node should always be a SyntaxData node" );
285
281
return RC<const SyntaxData>(static_cast <const SyntaxData *>(ParentRef));
286
282
} else {
0 commit comments