nsStyleContext*  aContext,
nsIStyleContext* aContext,
nsTableFrame::Init(nsIPresContext*  aPresContext,                   nsIContent*      aContent,                   nsIFrame*        aParent,                   nsStyleContext*  aContext,                   nsIFrame*        aPrevInFlow){  nsresult  rv;  // Let the base class do its processing  rv = nsHTMLContainerFrame::Init(aPresContext, aContent, aParent, aContext,                                  aPrevInFlow);  // record that children that are ignorable whitespace should be excluded   mState |= NS_FRAME_EXCLUDE_IGNORABLE_WHITESPACE;  // see if border collapse is on, if so set it  const nsStyleTableBorder* tableStyle = GetStyleTableBorder();  PRBool borderCollapse = (NS_STYLE_BORDER_COLLAPSE == tableStyle->mBorderCollapse);  SetBorderCollapse(borderCollapse);  // Create the cell map  // XXX Why do we do this for continuing frames?  mCellMap = new nsTableCellMap(*this, borderCollapse);  if (!mCellMap) return NS_ERROR_OUT_OF_MEMORY;  if (aPrevInFlow) {    // set my width, because all frames in a table flow are the same width and    // code in nsTableOuterFrame depends on this being set    mRect.width = aPrevInFlow->GetSize().width;  }  else {    NS_ASSERTION(!mTableLayoutStrategy, "strategy was created before Init was called");    // create the strategy    mTableLayoutStrategy = (IsAutoLayout()) ?      new BasicTableLayoutStrategy(this,                eCompatibility_NavQuirks == aPresContext->CompatibilityMode())      : new FixedTableLayoutStrategy(this);  }  return rv;}