@@ -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+
107106public:
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
244240public:
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