mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-12 04:45:45 +00:00
Bug 602341 part 1. Switch the pseudoclass Has*Arg functions from atoms to pseudoclass types. r=dbaron
This commit is contained in:
parent
3bb129e1e3
commit
d133473456
@ -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___ */
|
||||
|
Loading…
Reference in New Issue
Block a user