Files
Upsilon/tree_node.cpp

26 lines
841 B
C++

#include "tree_node.h"
#include "tree_pool.h"
#include "expression_node.h"
void TreeNode::release() {
printf("Release %d(%p)\n", m_identifier, this);
m_referenceCounter--;
if (m_referenceCounter == 0) {
if (numberOfChildren() != 0) {
int lastIdentifier = lastChild()->identifier();
TreeNode * child = next();
bool lastChildReleased = false;
while (!lastChildReleased) {
lastChildReleased = child->identifier() == lastIdentifier;
int nextSiblingIdentifier = lastChildReleased ? -1 : child->nextSibling()->identifier();
child->release();
if (nextSiblingIdentifier != -1) {
child = TreePool::sharedPool()->node(nextSiblingIdentifier);
}
}
}
printf("Delete %d(%p)\n", m_identifier, this);
TreePool::sharedPool()->discardTreeNode(this);
}
}