nsIFrame* childFrame = nsnull; rgFrame->FirstChild(aPresContext, nsnull, &childFrame);
nsIFrame* childFrame = rgFrame->GetFirstChild(nsnull);
ProcessRowInserted(nsIPresContext* aPresContext,                   nsTableFrame&   aTableFrame,                   PRBool          aInvalidate,                   nscoord         aNewHeight){  aTableFrame.SetRowInserted(PR_FALSE); // reset the bit that got us here  nsAutoVoidArray rowGroups;  PRUint32 numRowGroups;  aTableFrame.OrderRowGroups(rowGroups, numRowGroups);  // find the row group containing the inserted row  for (PRUint32 rgX = 0; rgX < numRowGroups; rgX++) {    nsTableRowGroupFrame* rgFrame = (nsTableRowGroupFrame*)rowGroups.ElementAt(rgX);    if (!rgFrame) continue; // should never happen    nsIFrame* childFrame = nsnull;    rgFrame->FirstChild(aPresContext, nsnull, &childFrame);    // find the row that was inserted first    while (childFrame) {      if (nsLayoutAtoms::tableRowFrame == childFrame->GetType()) {        nsTableRowFrame* rowFrame = (nsTableRowFrame*)childFrame;        if (rowFrame->IsFirstInserted()) {          rowFrame->SetFirstInserted(PR_FALSE);          if (aInvalidate) {            // damage the table from the 1st row inserted to the end of the table            nsRect damageRect = aTableFrame.GetRect();            damageRect.y += rgFrame->GetPosition().y + rowFrame->GetPosition().y;             damageRect.height = aNewHeight - damageRect.y;            aTableFrame.Invalidate(aPresContext, damageRect);            aTableFrame.SetRowInserted(PR_FALSE);          }          return; // found it, so leave        }      }      childFrame = childFrame->GetNextSibling();    }  }}