OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) | 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) |
4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) | 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) |
5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All r
ights reserved. | 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All r
ights reserved. |
6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> | 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> |
7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> | 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> |
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. | 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. |
10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. | 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
216 else | 216 else |
217 addResult.storedValue->value = SiblingInvalidationSet::create(nullpt
r); | 217 addResult.storedValue->value = SiblingInvalidationSet::create(nullpt
r); |
218 return *addResult.storedValue->value; | 218 return *addResult.storedValue->value; |
219 } | 219 } |
220 if (addResult.storedValue->value->type() == type) | 220 if (addResult.storedValue->value->type() == type) |
221 return *addResult.storedValue->value; | 221 return *addResult.storedValue->value; |
222 | 222 |
223 if (type == InvalidateDescendants) | 223 if (type == InvalidateDescendants) |
224 return toSiblingInvalidationSet(addResult.storedValue->value.get())->ens
ureDescendants(); | 224 return toSiblingInvalidationSet(addResult.storedValue->value.get())->ens
ureDescendants(); |
225 | 225 |
226 addResult.storedValue->value = SiblingInvalidationSet::create(toDescendantIn
validationSet(addResult.storedValue->value.get())); | 226 RefPtr<InvalidationSet> descendants = addResult.storedValue->value; |
| 227 RefPtr<InvalidationSet> siblings = SiblingInvalidationSet::create(toDescenda
ntInvalidationSet(descendants.get())); |
| 228 addResult.storedValue->value = siblings; |
227 return *addResult.storedValue->value; | 229 return *addResult.storedValue->value; |
228 } | 230 } |
229 | 231 |
230 void extractInvalidationSets(InvalidationSet* invalidationSet, DescendantInvalid
ationSet*& descendants, SiblingInvalidationSet*& siblings) | 232 void extractInvalidationSets(InvalidationSet* invalidationSet, DescendantInvalid
ationSet*& descendants, SiblingInvalidationSet*& siblings) |
231 { | 233 { |
232 RELEASE_ASSERT(invalidationSet->isAlive()); | 234 RELEASE_ASSERT(invalidationSet->isAlive()); |
233 if (invalidationSet->type() == InvalidateDescendants) { | 235 if (invalidationSet->type() == InvalidateDescendants) { |
234 descendants = toDescendantInvalidationSet(invalidationSet); | 236 descendants = toDescendantInvalidationSet(invalidationSet); |
235 siblings = nullptr; | 237 siblings = nullptr; |
236 return; | 238 return; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
269 m_idInvalidationSets.clear(); | 271 m_idInvalidationSets.clear(); |
270 m_pseudoInvalidationSets.clear(); | 272 m_pseudoInvalidationSets.clear(); |
271 m_universalSiblingInvalidationSet.clear(); | 273 m_universalSiblingInvalidationSet.clear(); |
272 m_nthInvalidationSet.clear(); | 274 m_nthInvalidationSet.clear(); |
273 | 275 |
274 m_isAlive = false; | 276 m_isAlive = false; |
275 } | 277 } |
276 | 278 |
277 ALWAYS_INLINE InvalidationSet& RuleFeatureSet::ensureClassInvalidationSet(const
AtomicString& className, InvalidationType type) | 279 ALWAYS_INLINE InvalidationSet& RuleFeatureSet::ensureClassInvalidationSet(const
AtomicString& className, InvalidationType type) |
278 { | 280 { |
| 281 RELEASE_ASSERT(!className.isEmpty()); |
279 return ensureInvalidationSet(m_classInvalidationSets, className, type); | 282 return ensureInvalidationSet(m_classInvalidationSets, className, type); |
280 } | 283 } |
281 | 284 |
282 ALWAYS_INLINE InvalidationSet& RuleFeatureSet::ensureAttributeInvalidationSet(co
nst AtomicString& attributeName, InvalidationType type) | 285 ALWAYS_INLINE InvalidationSet& RuleFeatureSet::ensureAttributeInvalidationSet(co
nst AtomicString& attributeName, InvalidationType type) |
283 { | 286 { |
| 287 RELEASE_ASSERT(!attributeName.isEmpty()); |
284 return ensureInvalidationSet(m_attributeInvalidationSets, attributeName, typ
e); | 288 return ensureInvalidationSet(m_attributeInvalidationSets, attributeName, typ
e); |
285 } | 289 } |
286 | 290 |
287 ALWAYS_INLINE InvalidationSet& RuleFeatureSet::ensureIdInvalidationSet(const Ato
micString& id, InvalidationType type) | 291 ALWAYS_INLINE InvalidationSet& RuleFeatureSet::ensureIdInvalidationSet(const Ato
micString& id, InvalidationType type) |
288 { | 292 { |
| 293 RELEASE_ASSERT(!id.isEmpty()); |
289 return ensureInvalidationSet(m_idInvalidationSets, id, type); | 294 return ensureInvalidationSet(m_idInvalidationSets, id, type); |
290 } | 295 } |
291 | 296 |
292 ALWAYS_INLINE InvalidationSet& RuleFeatureSet::ensurePseudoInvalidationSet(CSSSe
lector::PseudoType pseudoType, InvalidationType type) | 297 ALWAYS_INLINE InvalidationSet& RuleFeatureSet::ensurePseudoInvalidationSet(CSSSe
lector::PseudoType pseudoType, InvalidationType type) |
293 { | 298 { |
| 299 RELEASE_ASSERT(pseudoType != CSSSelector::PseudoUnknown); |
294 return ensureInvalidationSet(m_pseudoInvalidationSets, pseudoType, type); | 300 return ensureInvalidationSet(m_pseudoInvalidationSets, pseudoType, type); |
295 } | 301 } |
296 | 302 |
297 bool RuleFeatureSet::extractInvalidationSetFeature(const CSSSelector& selector,
InvalidationSetFeatures& features) | 303 bool RuleFeatureSet::extractInvalidationSetFeature(const CSSSelector& selector,
InvalidationSetFeatures& features) |
298 { | 304 { |
299 if (selector.match() == CSSSelector::Tag && selector.tagQName().localName()
!= starAtom) { | 305 if (selector.match() == CSSSelector::Tag && selector.tagQName().localName()
!= starAtom) { |
300 features.tagNames.append(selector.tagQName().localName()); | 306 features.tagNames.append(selector.tagQName().localName()); |
301 return true; | 307 return true; |
302 } | 308 } |
303 if (selector.match() == CSSSelector::Id) { | 309 if (selector.match() == CSSSelector::Id) { |
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
723 usesWindowInactiveSelector = false; | 729 usesWindowInactiveSelector = false; |
724 foundSiblingSelector = false; | 730 foundSiblingSelector = false; |
725 foundInsertionPointCrossing = false; | 731 foundInsertionPointCrossing = false; |
726 maxDirectAdjacentSelectors = 0; | 732 maxDirectAdjacentSelectors = 0; |
727 } | 733 } |
728 | 734 |
729 void RuleFeatureSet::add(const RuleFeatureSet& other) | 735 void RuleFeatureSet::add(const RuleFeatureSet& other) |
730 { | 736 { |
731 RELEASE_ASSERT(m_isAlive); | 737 RELEASE_ASSERT(m_isAlive); |
732 RELEASE_ASSERT(other.m_isAlive); | 738 RELEASE_ASSERT(other.m_isAlive); |
| 739 RELEASE_ASSERT(&other != this); |
733 for (const auto& entry : other.m_classInvalidationSets) | 740 for (const auto& entry : other.m_classInvalidationSets) |
734 ensureInvalidationSet(m_classInvalidationSets, entry.key, entry.value->t
ype()).combine(*entry.value); | 741 ensureInvalidationSet(m_classInvalidationSets, entry.key, entry.value->t
ype()).combine(*entry.value); |
735 for (const auto& entry : other.m_attributeInvalidationSets) | 742 for (const auto& entry : other.m_attributeInvalidationSets) |
736 ensureInvalidationSet(m_attributeInvalidationSets, entry.key, entry.valu
e->type()).combine(*entry.value); | 743 ensureInvalidationSet(m_attributeInvalidationSets, entry.key, entry.valu
e->type()).combine(*entry.value); |
737 for (const auto& entry : other.m_idInvalidationSets) | 744 for (const auto& entry : other.m_idInvalidationSets) |
738 ensureInvalidationSet(m_idInvalidationSets, entry.key, entry.value->type
()).combine(*entry.value); | 745 ensureInvalidationSet(m_idInvalidationSets, entry.key, entry.value->type
()).combine(*entry.value); |
739 for (const auto& entry : other.m_pseudoInvalidationSets) | 746 for (const auto& entry : other.m_pseudoInvalidationSets) |
740 ensureInvalidationSet(m_pseudoInvalidationSets, static_cast<CSSSelector:
:PseudoType>(entry.key), entry.value->type()).combine(*entry.value); | 747 ensureInvalidationSet(m_pseudoInvalidationSets, static_cast<CSSSelector:
:PseudoType>(entry.key), entry.value->type()).combine(*entry.value); |
741 if (other.m_universalSiblingInvalidationSet) | 748 if (other.m_universalSiblingInvalidationSet) |
742 ensureUniversalSiblingInvalidationSet().combine(*other.m_universalSiblin
gInvalidationSet); | 749 ensureUniversalSiblingInvalidationSet().combine(*other.m_universalSiblin
gInvalidationSet); |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
939 addFeaturesToInvalidationSet(universalSet.ensureSiblingDescendants(), de
scendantFeatures); | 946 addFeaturesToInvalidationSet(universalSet.ensureSiblingDescendants(), de
scendantFeatures); |
940 } | 947 } |
941 | 948 |
942 DEFINE_TRACE(RuleFeatureSet) | 949 DEFINE_TRACE(RuleFeatureSet) |
943 { | 950 { |
944 visitor->trace(siblingRules); | 951 visitor->trace(siblingRules); |
945 visitor->trace(uncommonAttributeRules); | 952 visitor->trace(uncommonAttributeRules); |
946 } | 953 } |
947 | 954 |
948 } // namespace blink | 955 } // namespace blink |
OLD | NEW |