void
DOMSVGPointList::Clear(ErrorResult& aError)
{
  if (IsAnimValList()) {
    aError.Throw(NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR);
    return;
  }

  if (LengthNoFlush() > 0) {
    AutoChangePointListNotifier notifier(this);
    // DOM list items that are to be removed must be removed before we change
    // the internal list, otherwise they wouldn't be able to copy their
    // internal counterparts' values!

    InternalListWillChangeTo(SVGPointList()); // clears mItems

    if (!AttrIsAnimating()) {
      // The anim val list is in sync with the base val list
      DOMSVGPointList *animList =
        GetDOMWrapperIfExists(InternalAList().GetAnimValKey());
      if (animList) {
        animList->InternalListWillChangeTo(SVGPointList()); // clears its mItems
      }
    }

    InternalList().Clear();
  }
}
void
SVGAnimatedPointList::ClearBaseValue()
{
    // We must send these notifications *before* changing mBaseVal! (See above.)

    DOMSVGPointList *baseValWrapper =
        DOMSVGPointList::GetDOMWrapperIfExists(GetBaseValKey());
    if (baseValWrapper) {
        baseValWrapper->InternalListWillChangeTo(SVGPointList());
    }

    if (!IsAnimating()) { // DOM anim val wraps our base val too!
        DOMSVGPointList *animValWrapper =
            DOMSVGPointList::GetDOMWrapperIfExists(GetAnimValKey());
        if (animValWrapper) {
            animValWrapper->InternalListWillChangeTo(SVGPointList());
        }
    }

    mBaseVal.Clear();
    // Caller notifies
}