void
ServoElementSnapshot::AddAttrs(Element* aElement)
{
  MOZ_ASSERT(aElement);

  if (HasAny(Flags::Attributes)) {
    return;
  }

  uint32_t attrCount = aElement->GetAttrCount();
  const nsAttrName* attrName;
  for (uint32_t i = 0; i < attrCount; ++i) {
    attrName = aElement->GetAttrNameAt(i);
    const nsAttrValue* attrValue =
      aElement->GetParsedAttr(attrName->LocalName(), attrName->NamespaceID());
    mAttrs.AppendElement(ServoAttrSnapshot(*attrName, *attrValue));
  }
  mContains |= Flags::Attributes;
}
void THomonymGrammems::Replace(const TGramBitSet& grOld, const TGramBitSet& grNew) {
    if ((grOld.none() || !HasAny(grOld)) && (grNew.none() || HasAll(grNew)))
        return;

    TGramBitSet noOld = ~grOld;

    All_ &= noOld;
    All_ |= grNew;

    TGrammarBunch tmp;
    for (TFormIter it(Forms_); it.Ok(); ++it) {
        TGramBitSet grammems = *it;
        grammems &= noOld;
        grammems |= grNew;
        if (grammems.any())
            tmp.insert(grammems);
    }
    Forms_.swap(tmp);
}