mFreeLineList(nsnull),
nsBlockReflowState::nsBlockReflowState(const nsHTMLReflowState& aReflowState,                                       nsIPresContext* aPresContext,                                       nsBlockFrame* aFrame,                                       const nsHTMLReflowMetrics& aMetrics)  : mBlock(aFrame),    mPresContext(aPresContext),    mReflowState(aReflowState),    mIsTopMarginRoot(PR_FALSE),    mIsBottomMarginRoot(PR_FALSE),    mApplyTopMargin(PR_FALSE),    mNextRCFrame(nsnull),    mPrevBottomMargin(0),    mLineNumber(0){  mSpaceManager = aReflowState.mSpaceManager;  // Translate into our content area and then save the   // coordinate system origin for later.  const nsMargin& borderPadding = BorderPadding();  mSpaceManager->Translate(borderPadding.left, borderPadding.top);  mSpaceManager->GetTranslation(mSpaceManagerX, mSpaceManagerY);  mReflowStatus = NS_FRAME_COMPLETE;  mPresContext = aPresContext;  mBlock->GetNextInFlow((nsIFrame**)&mNextInFlow);  mKidXMost = 0;  // Compute content area width (the content area is inside the border  // and padding)  mUnconstrainedWidth = PR_FALSE;  if (NS_UNCONSTRAINEDSIZE != aReflowState.mComputedWidth) {    mContentArea.width = aReflowState.mComputedWidth;  }  else {    if (NS_UNCONSTRAINEDSIZE == aReflowState.availableWidth) {      mContentArea.width = NS_UNCONSTRAINEDSIZE;      mUnconstrainedWidth = PR_TRUE;    }    else {      nscoord lr = borderPadding.left + borderPadding.right;      mContentArea.width = aReflowState.availableWidth - lr;    }  }  mHaveRightFloaters = PR_FALSE;  // Compute content area height. Unlike the width, if we have a  // specified style height we ignore it since extra content is  // managed by the "overflow" property. When we don't have a  // specified style height then we may end up limiting our height if  // the availableHeight is constrained (this situation occurs when we  // are paginated).  mUnconstrainedHeight = PR_FALSE;  if (NS_UNCONSTRAINEDSIZE != aReflowState.availableHeight) {    // We are in a paginated situation. The bottom edge is just inside    // the bottom border and padding. The content area height doesn't    // include either border or padding edge.    mBottomEdge = aReflowState.availableHeight - borderPadding.bottom;    mContentArea.height = mBottomEdge - borderPadding.top;  }  else {    // When we are not in a paginated situation then we always use    // an constrained height.    mUnconstrainedHeight = PR_TRUE;    mContentArea.height = mBottomEdge = NS_UNCONSTRAINEDSIZE;  }  mY = borderPadding.top;  mBand.Init(mSpaceManager, mContentArea);  mPrevChild = nsnull;  mCurrentLine = nsnull;  mPrevLine = nsnull;  const nsStyleText* styleText;  mBlock->GetStyleData(eStyleStruct_Text,                       (const nsStyleStruct*&) styleText);  switch (styleText->mWhiteSpace) {  case NS_STYLE_WHITESPACE_PRE:  case NS_STYLE_WHITESPACE_NOWRAP:    mNoWrap = PR_TRUE;    break;  default:    mNoWrap = PR_FALSE;    break;  }  mComputeMaxElementSize = nsnull != aMetrics.maxElementSize;  mMaxElementSize.SizeTo(0, 0);  if (0 != borderPadding.top) {    mIsTopMarginRoot = PR_TRUE;  }  if (0 != borderPadding.bottom) {    mIsBottomMarginRoot = PR_TRUE;  }  mMinLineHeight = nsHTMLReflowState::CalcLineHeight(*mPresContext,                                                     aReflowState.rendContext,                                                     aReflowState.frame);}