nsCSSSelector* nsCSSSelector::Clone(PRBool aDeepNext, PRBool aDeepNegations) const { nsCSSSelector *result = new nsCSSSelector(); if (!result) return nsnull; result->mNameSpace = mNameSpace; result->mLowercaseTag = mLowercaseTag; result->mCasedTag = mCasedTag; result->mOperator = mOperator; result->mPseudoType = mPseudoType; NS_IF_CLONE(mIDList); NS_IF_CLONE(mClassList); NS_IF_CLONE(mPseudoClassList); NS_IF_CLONE(mAttrList); // No need to worry about multiple levels of recursion since an // mNegations can't have an mNext. NS_ASSERTION(!mNegations || !mNegations->mNext, "mNegations can't have non-null mNext"); if (aDeepNegations) { NS_CSS_CLONE_LIST_MEMBER(nsCSSSelector, this, mNegations, result, (PR_TRUE, PR_FALSE)); } if (aDeepNext) { NS_CSS_CLONE_LIST_MEMBER(nsCSSSelector, this, mNext, result, (PR_FALSE, PR_TRUE)); } return result; }
nsAtomList* nsAtomList::Clone(PRBool aDeep) const { nsAtomList *result = new nsAtomList(mAtom); if (!result) return nsnull; if (aDeep) NS_CSS_CLONE_LIST_MEMBER(nsAtomList, this, mNext, result, (PR_FALSE)); return result; }
nsAtomList* nsAtomList::Clone(bool aDeep) const { nsAtomList *result = new nsAtomList(mAtom); if (!result) return nullptr; if (aDeep) NS_CSS_CLONE_LIST_MEMBER(nsAtomList, this, mNext, result, (false)); return result; }
nsAttrSelector* nsAttrSelector::Clone(PRBool aDeep) const { nsAttrSelector *result = new nsAttrSelector(mNameSpace, mLowercaseAttr, mCasedAttr, mFunction, mValue, mCaseSensitive); if (aDeep) NS_CSS_CLONE_LIST_MEMBER(nsAttrSelector, this, mNext, result, (PR_FALSE)); return result; }
nsCSSSelectorList* nsCSSSelectorList::Clone(PRBool aDeep) const { nsCSSSelectorList *result = new nsCSSSelectorList(); result->mWeight = mWeight; NS_IF_CLONE(mSelectors); if (aDeep) { NS_CSS_CLONE_LIST_MEMBER(nsCSSSelectorList, this, mNext, result, (PR_FALSE)); } return result; }
nsPseudoClassList* nsPseudoClassList::Clone(PRBool aDeep) const { nsPseudoClassList *result; if (!u.mMemory) { result = new nsPseudoClassList(mType); } else if (nsCSSPseudoClasses::HasStringArg(mType)) { result = new nsPseudoClassList(mType, u.mString); } else if (nsCSSPseudoClasses::HasNthPairArg(mType)) { result = new nsPseudoClassList(mType, u.mNumbers); } else { NS_ASSERTION(nsCSSPseudoClasses::HasSelectorListArg(mType), "unexpected pseudo-class"); // This constructor adopts its selector list argument. result = new nsPseudoClassList(mType, u.mSelectors->Clone()); } if (aDeep) NS_CSS_CLONE_LIST_MEMBER(nsPseudoClassList, this, mNext, result, (PR_FALSE)); return result; }