};
private:
const StmtClass sClass;
+
+protected:
+ /// DestroyChildren - Invoked by destructors of subclasses of Stmt to
+ /// recursively release child AST nodes.
+ void DestroyChildren();
+
public:
Stmt(StmtClass SC) : sClass(SC) {
if (Stmt::CollectingStats()) Stmt::addStmtClass(SC);
return getStmtInfoTableEntry(sClass).Name;
}
+void Stmt::DestroyChildren() {
+ for (child_iterator I = child_begin(), E = child_end(); I !=E; ++I)
+ delete *I; // Handles the case when *I == NULL.
+}
+
void Stmt::PrintStats() {
// Ensure the table is primed.
getStmtInfoTableEntry(Stmt::NullStmtClass);