pANTLR3_BASE_TREE dupTreeTT (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, pANTLR3_BASE_TREE parent) { pANTLR3_BASE_TREE newTree; pANTLR3_BASE_TREE child; pANTLR3_BASE_TREE newSubTree; ANTLR3_UINT32 n; ANTLR3_UINT32 i; if (t == NULL) { return NULL; } newTree = (pANTLR3_BASE_TREE)t->dupNode(t); // Ensure new subtree root has parent/child index set // adaptor->setChildIndex (adaptor, newTree, t->getChildIndex(t)); adaptor->setParent (adaptor, newTree, parent); n = adaptor->getChildCount (adaptor, t); for (i=0; i < n; i++) { child = (pANTLR3_BASE_TREE)adaptor->getChild (adaptor, t, i); newSubTree = (pANTLR3_BASE_TREE)adaptor->dupTreeTT (adaptor, child, t); adaptor->addChild (adaptor, newTree, newSubTree); } return newTree; }
/** Duplicate the supplied node. */ static pANTLR3_BASE_TREE dupNode (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE treeNode) { return treeNode->dupNode(treeNode); }