Bug 602341 part 1. Switch the pseudoclass Has*Arg functions from atoms to pseudoclass types. r=dbaron

This commit is contained in:
Boris Zbarsky 2011-03-23 09:52:24 -04:00
Родитель 3bb129e1e3
Коммит d133473456
5 изменённых файлов: 38 добавлений и 43 удалений

Просмотреть файл

@ -140,8 +140,8 @@ nsPseudoClassList::nsPseudoClassList(nsIAtom* aAtom,
mType(aType),
mNext(nsnull)
{
NS_ASSERTION(!nsCSSPseudoClasses::HasStringArg(aAtom) &&
!nsCSSPseudoClasses::HasNthPairArg(aAtom),
NS_ASSERTION(!nsCSSPseudoClasses::HasStringArg(aType) &&
!nsCSSPseudoClasses::HasNthPairArg(aType),
"unexpected pseudo-class");
MOZ_COUNT_CTOR(nsPseudoClassList);
u.mMemory = nsnull;
@ -154,7 +154,7 @@ nsPseudoClassList::nsPseudoClassList(nsIAtom* aAtom,
mType(aType),
mNext(nsnull)
{
NS_ASSERTION(nsCSSPseudoClasses::HasStringArg(aAtom),
NS_ASSERTION(nsCSSPseudoClasses::HasStringArg(aType),
"unexpected pseudo-class");
NS_ASSERTION(aString, "string expected");
MOZ_COUNT_CTOR(nsPseudoClassList);
@ -168,7 +168,7 @@ nsPseudoClassList::nsPseudoClassList(nsIAtom* aAtom,
mType(aType),
mNext(nsnull)
{
NS_ASSERTION(nsCSSPseudoClasses::HasNthPairArg(aAtom),
NS_ASSERTION(nsCSSPseudoClasses::HasNthPairArg(aType),
"unexpected pseudo-class");
NS_ASSERTION(aIntPair, "integer pair expected");
MOZ_COUNT_CTOR(nsPseudoClassList);
@ -184,7 +184,7 @@ nsPseudoClassList::nsPseudoClassList(nsIAtom* aAtom,
mType(aType),
mNext(nsnull)
{
NS_ASSERTION(nsCSSPseudoClasses::HasSelectorListArg(aAtom),
NS_ASSERTION(nsCSSPseudoClasses::HasSelectorListArg(aType),
"unexpected pseudo-class");
NS_ASSERTION(aSelectorList, "selector list expected");
MOZ_COUNT_CTOR(nsPseudoClassList);
@ -197,12 +197,12 @@ nsPseudoClassList::Clone(PRBool aDeep) const
nsPseudoClassList *result;
if (!u.mMemory) {
result = new nsPseudoClassList(mAtom, mType);
} else if (nsCSSPseudoClasses::HasStringArg(mAtom)) {
} else if (nsCSSPseudoClasses::HasStringArg(mType)) {
result = new nsPseudoClassList(mAtom, mType, u.mString);
} else if (nsCSSPseudoClasses::HasNthPairArg(mAtom)) {
} else if (nsCSSPseudoClasses::HasNthPairArg(mType)) {
result = new nsPseudoClassList(mAtom, mType, u.mNumbers);
} else {
NS_ASSERTION(nsCSSPseudoClasses::HasSelectorListArg(mAtom),
NS_ASSERTION(nsCSSPseudoClasses::HasSelectorListArg(mType),
"unexpected pseudo-class");
// This constructor adopts its selector list argument.
result = new nsPseudoClassList(mAtom, mType, u.mSelectors->Clone());
@ -218,7 +218,7 @@ nsPseudoClassList::Clone(PRBool aDeep) const
nsPseudoClassList::~nsPseudoClassList(void)
{
MOZ_COUNT_DTOR(nsPseudoClassList);
if (nsCSSPseudoClasses::HasSelectorListArg(mAtom)) {
if (nsCSSPseudoClasses::HasSelectorListArg(mType)) {
delete u.mSelectors;
} else if (u.mMemory) {
NS_Free(u.mMemory);
@ -789,10 +789,10 @@ nsCSSSelector::AppendToStringWithoutCombinatorsOrNegations
aString.Append(temp);
if (list->u.mMemory) {
aString.Append(PRUnichar('('));
if (nsCSSPseudoClasses::HasStringArg(list->mAtom)) {
if (nsCSSPseudoClasses::HasStringArg(list->mType)) {
nsStyleUtil::AppendEscapedCSSIdent(
nsDependentString(list->u.mString), aString);
} else if (nsCSSPseudoClasses::HasNthPairArg(list->mAtom)) {
} else if (nsCSSPseudoClasses::HasNthPairArg(list->mType)) {
PRInt32 a = list->u.mNumbers[0],
b = list->u.mNumbers[1];
temp.Truncate();
@ -811,7 +811,7 @@ nsCSSSelector::AppendToStringWithoutCombinatorsOrNegations
}
aString.Append(temp);
} else {
NS_ASSERTION(nsCSSPseudoClasses::HasSelectorListArg(list->mAtom),
NS_ASSERTION(nsCSSPseudoClasses::HasSelectorListArg(list->mType),
"unexpected pseudo-class");
nsString tmp;
list->u.mSelectors->ToString(tmp, aSheet);

Просмотреть файл

@ -94,15 +94,15 @@ public:
nsCOMPtr<nsIAtom> mAtom;
union {
// For a given value of mAtom, we have either:
// For a given value of mType, we have either:
// a. no value, which means mMemory is always null
// (if none of the conditions for (b), (c), or (d) is true)
// b. a string value, which means mString/mMemory is non-null
// (if nsCSSPseudoClasses::HasStringArg(mAtom))
// (if nsCSSPseudoClasses::HasStringArg(mType))
// c. an integer pair value, which means mNumbers/mMemory is non-null
// (if nsCSSPseudoClasses::HasNthPairArg(mAtom))
// (if nsCSSPseudoClasses::HasNthPairArg(mType))
// d. a selector list, which means mSelectors is non-null
// (if nsCSSPseudoClasses::HasSelectorListArg(mAtom))
// (if nsCSSPseudoClasses::HasSelectorListArg(mType))
void* mMemory; // mString and mNumbers use NS_Alloc/NS_Free
PRUnichar* mString;
PRInt32* mNumbers;

Просмотреть файл

@ -3052,10 +3052,10 @@ CSSParserImpl::ParsePseudoSelector(PRInt32& aDataMask,
#ifdef MOZ_XUL
isTree ||
#endif
nsCSSPseudoClasses::notPseudo == pseudo ||
nsCSSPseudoClasses::HasStringArg(pseudo) ||
nsCSSPseudoClasses::HasNthPairArg(pseudo) ||
nsCSSPseudoClasses::HasSelectorListArg(pseudo))) {
nsCSSPseudoClasses::ePseudoClass_notPseudo == pseudoClassType ||
nsCSSPseudoClasses::HasStringArg(pseudoClassType) ||
nsCSSPseudoClasses::HasNthPairArg(pseudoClassType) ||
nsCSSPseudoClasses::HasSelectorListArg(pseudoClassType))) {
// There are no other function pseudos
REPORT_UNEXPECTED_TOKEN(PEPseudoSelNonFunc);
UngetToken();
@ -3088,16 +3088,16 @@ CSSParserImpl::ParsePseudoSelector(PRInt32& aDataMask,
aDataMask |= SEL_MASK_PCLASS;
if (eCSSToken_Function == mToken.mType) {
nsSelectorParsingStatus parsingStatus;
if (nsCSSPseudoClasses::HasStringArg(pseudo)) {
if (nsCSSPseudoClasses::HasStringArg(pseudoClassType)) {
parsingStatus =
ParsePseudoClassWithIdentArg(aSelector, pseudo, pseudoClassType);
}
else if (nsCSSPseudoClasses::HasNthPairArg(pseudo)) {
else if (nsCSSPseudoClasses::HasNthPairArg(pseudoClassType)) {
parsingStatus =
ParsePseudoClassWithNthPairArg(aSelector, pseudo, pseudoClassType);
}
else {
NS_ABORT_IF_FALSE(nsCSSPseudoClasses::HasSelectorListArg(pseudo),
NS_ABORT_IF_FALSE(nsCSSPseudoClasses::HasSelectorListArg(pseudoClassType),
"unexpected pseudo with function token");
parsingStatus = ParsePseudoClassWithSelectorListArg(aSelector, pseudo,
pseudoClassType);

Просмотреть файл

@ -68,27 +68,21 @@ void nsCSSPseudoClasses::AddRefAtoms()
}
PRBool
nsCSSPseudoClasses::HasStringArg(nsIAtom* aAtom)
nsCSSPseudoClasses::HasStringArg(Type aType)
{
return aAtom == nsCSSPseudoClasses::lang ||
aAtom == nsCSSPseudoClasses::mozEmptyExceptChildrenWithLocalname ||
aAtom == nsCSSPseudoClasses::mozSystemMetric ||
aAtom == nsCSSPseudoClasses::mozLocaleDir;
return aType == ePseudoClass_lang ||
aType == ePseudoClass_mozEmptyExceptChildrenWithLocalname ||
aType == ePseudoClass_mozSystemMetric ||
aType == ePseudoClass_mozLocaleDir;
}
PRBool
nsCSSPseudoClasses::HasNthPairArg(nsIAtom* aAtom)
nsCSSPseudoClasses::HasNthPairArg(Type aType)
{
return aAtom == nsCSSPseudoClasses::nthChild ||
aAtom == nsCSSPseudoClasses::nthLastChild ||
aAtom == nsCSSPseudoClasses::nthOfType ||
aAtom == nsCSSPseudoClasses::nthLastOfType;
}
PRBool
nsCSSPseudoClasses::HasSelectorListArg(nsIAtom* aAtom)
{
return aAtom == nsCSSPseudoClasses::any;
return aType == ePseudoClass_nthChild ||
aType == ePseudoClass_nthLastChild ||
aType == ePseudoClass_nthOfType ||
aType == ePseudoClass_nthLastOfType;
}
nsCSSPseudoClasses::Type

Просмотреть файл

@ -52,10 +52,6 @@ public:
static void AddRefAtoms();
static PRBool HasStringArg(nsIAtom* aAtom);
static PRBool HasNthPairArg(nsIAtom* aAtom);
static PRBool HasSelectorListArg(nsIAtom* aAtom);
#define CSS_PSEUDO_CLASS(_name, _value) static nsICSSPseudoClass* _name;
#include "nsCSSPseudoClassList.h"
#undef CSS_PSEUDO_CLASS
@ -71,6 +67,11 @@ public:
};
static Type GetPseudoType(nsIAtom* aAtom);
static PRBool HasStringArg(Type aType);
static PRBool HasNthPairArg(Type aType);
static PRBool HasSelectorListArg(Type aType) {
return aType == ePseudoClass_any;
}
};
#endif /* nsCSSPseudoClasses_h___ */