mAtEnd   = PR_TRUE; mPrevRow = mRow; if (aRow) { mRow = aRow;
prevRow = row; row      = (aRow) ? aRow : row->GetNextRow();  if (row) { isNewRow = PR_TRUE; y = row->GetRowIndex(); x = startX;
BCMapCellIterator::SetNewRow(nsTableRowFrame* aRow){  mAtEnd   = PR_TRUE;  mPrevRow = mRow;  if (aRow) {    mRow = aRow;  }  else if (mRow) {    mRow = mRow->GetNextRow();  }  if (mRow) {    mRowIndex = mRow->GetRowIndex();    // get to the first entry with an originating cell    PRInt32 rgRowIndex = mRowIndex - mRowGroupStart;    nsVoidArray* row = (nsVoidArray*)mCellMap->mRows.ElementAt(rgRowIndex); if (!row) ABORT1(PR_FALSE);    PRInt32 rowSize = row->Count();    for (mColIndex = mAreaStart.x; mColIndex <= mAreaEnd.x; mColIndex++) {      CellData* cellData = (mColIndex < rowSize) ? (CellData*)row->ElementAt(mColIndex) : nsnull;      if (!cellData) { // add a dead cell data        nsRect damageArea;        cellData = mCellMap->AppendCell(*mTableCellMap, nsnull, rgRowIndex, PR_FALSE, damageArea); if (!cellData) ABORT1(PR_FALSE);      }      if (cellData && (cellData->IsOrig() || cellData->IsDead())) {        break;      }    }    mIsNewRow = PR_TRUE;    mAtEnd    = PR_FALSE;  }  else ABORT1(PR_FALSE);  return !mAtEnd;}