delete shadowHead; return PR_FALSE;
cur->mValue.SetArrayValue(val, eCSSUnit_Array);   if (!ParseVariant(aErrorCode, val->Item(IndexY), VARIANT_LENGTH, nsnull)) { break; }    PRBool haveRadius = PR_FALSE; if (GetToken(aErrorCode, PR_TRUE)) {  haveRadius = mToken.IsDimension();  UngetToken(); }  if (haveRadius) {  if (!ParseVariant(aErrorCode, val->Item(IndexRadius), VARIANT_LENGTH, nsnull)) { break; } }   if (ExpectSymbol(aErrorCode, ',', PR_TRUE)) {  continue; }  if (!haveColor) {    if (ExpectEndProperty(aErrorCode, PR_TRUE)) { atEOP = PR_TRUE; } else {   CLEAR_ERROR();    if (!ParseVariant(aErrorCode, val->Item(IndexColor), VARIANT_COLOR, nsnull)) { break; }  if (ExpectSymbol(aErrorCode, ',', PR_TRUE)) {  continue; } } }
PRBool CSSParserImpl::ParseTextShadow(nsresult& aErrorCode){  nsCSSValue  value;  if (ParseVariant(aErrorCode, value, VARIANT_HC | VARIANT_LENGTH | VARIANT_NONE, nsnull)) {    nsCSSUnit unit = value.GetUnit();    if ((eCSSUnit_Color == unit) || (eCSSUnit_String == unit) || value.IsLengthUnit()) {      nsCSSShadow*  shadowHead = new nsCSSShadow();      nsCSSShadow*  shadow = shadowHead;      if (nsnull == shadow) {        aErrorCode = NS_ERROR_OUT_OF_MEMORY;        return PR_FALSE;      }      while (nsnull != shadow) {        PRBool  haveColor = PR_FALSE;        if (value.IsLengthUnit()) {          shadow->mXOffset = value;        }        else {          haveColor = PR_TRUE;          shadow->mColor = value;          if (ParseVariant(aErrorCode, value, VARIANT_LENGTH, nsnull)) {            shadow->mXOffset = value;          }          else {            break;          }        }        if (ParseVariant(aErrorCode, value, VARIANT_LENGTH, nsnull)) {          shadow->mYOffset = value;        }        else {          break;        }        if (ParseVariant(aErrorCode, value, VARIANT_LENGTH, nsnull)) {          shadow->mRadius = value;        } // optional        if (PR_FALSE == haveColor) {          if (ParseVariant(aErrorCode, value, VARIANT_COLOR, nsnull)) {            shadow->mColor = value;          }        }        if (ExpectSymbol(aErrorCode, ',', PR_TRUE)) {          shadow->mNext = new nsCSSShadow();          shadow = shadow->mNext;          if (nsnull == shadow) {            aErrorCode = NS_ERROR_OUT_OF_MEMORY;            break;          }          if (PR_FALSE == ParseVariant(aErrorCode, value, VARIANT_COLOR | VARIANT_LENGTH, nsnull)) {            break;          }        }        else {          if (ExpectEndProperty(aErrorCode, PR_TRUE)) {            mTempData.SetPropertyBit(eCSSProperty_text_shadow);            mTempData.mText.mTextShadow = shadowHead;            aErrorCode = NS_OK;            return PR_TRUE;          }          break;        }      }      delete shadowHead;      return PR_FALSE;    }    // value is inherit or none    if (ExpectEndProperty(aErrorCode, PR_TRUE)) {      nsCSSShadow* shadowHead = new nsCSSShadow();      shadowHead->mXOffset = value;      mTempData.SetPropertyBit(eCSSProperty_text_shadow);      mTempData.mText.mTextShadow = shadowHead;      return PR_TRUE;    }  }  return PR_FALSE;}