Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(132)

Side by Side Diff: Source/core/css/CSSSelector.h

Issue 1149913008: Compute the linkMatchType inside the CSSSelectorParser. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999-2003 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999-2003 Lars Knoll (knoll@kde.org)
3 * 1999 Waldo Bastian (bastian@kde.org) 3 * 1999 Waldo Bastian (bastian@kde.org)
4 * Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010, 2013 Apple Inc. All rights reserved. 4 * Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010, 2013 Apple Inc. All rights reserved.
5 * 5 *
6 * This library is free software; you can redistribute it and/or 6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public 7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either 8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version. 9 * version 2 of the License, or (at your option) any later version.
10 * 10 *
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 } 289 }
290 290
291 bool isLastInSelectorList() const { return m_isLastInSelectorList; } 291 bool isLastInSelectorList() const { return m_isLastInSelectorList; }
292 void setLastInSelectorList() { m_isLastInSelectorList = true; } 292 void setLastInSelectorList() { m_isLastInSelectorList = true; }
293 bool isLastInTagHistory() const { return m_isLastInTagHistory; } 293 bool isLastInTagHistory() const { return m_isLastInTagHistory; }
294 void setNotLastInTagHistory() { m_isLastInTagHistory = false; } 294 void setNotLastInTagHistory() { m_isLastInTagHistory = false; }
295 295
296 // http://dev.w3.org/csswg/selectors4/#compound 296 // http://dev.w3.org/csswg/selectors4/#compound
297 bool isCompound() const; 297 bool isCompound() const;
298 298
299 // Note: the link match type is only valid for the start of each selecto r
300 // in a CSSSelectorList.
299 enum LinkMatchMask { MatchLink = 1, MatchVisited = 2, MatchAll = MatchLi nk | MatchVisited }; 301 enum LinkMatchMask { MatchLink = 1, MatchVisited = 2, MatchAll = MatchLi nk | MatchVisited };
300 unsigned computeLinkMatchType() const; 302 void updateLinkMatchType();
303 unsigned linkMatchType() const { return m_linkMatchType; }
301 304
302 bool isForPage() const { return m_isForPage; } 305 bool isForPage() const { return m_isForPage; }
303 void setForPage() { m_isForPage = true; } 306 void setForPage() { m_isForPage = true; }
304 307
305 bool relationIsAffectedByPseudoContent() const { return m_relationIsAffe ctedByPseudoContent; } 308 bool relationIsAffectedByPseudoContent() const { return m_relationIsAffe ctedByPseudoContent; }
306 void setRelationIsAffectedByPseudoContent() { m_relationIsAffectedByPseu doContent = true; } 309 void setRelationIsAffectedByPseudoContent() { m_relationIsAffectedByPseu doContent = true; }
307 310
308 private: 311 private:
309 unsigned m_relation : 3; // enum Relation 312 unsigned m_relation : 3; // enum Relation
310 mutable unsigned m_match : 4; // enum Match 313 unsigned m_match : 4; // enum Match
311 mutable unsigned m_pseudoType : 8; // PseudoType 314 unsigned m_pseudoType : 8; // PseudoType
312 unsigned m_isLastInSelectorList : 1; 315 unsigned m_isLastInSelectorList : 1;
313 unsigned m_isLastInTagHistory : 1; 316 unsigned m_isLastInTagHistory : 1;
314 unsigned m_hasRareData : 1; 317 unsigned m_hasRareData : 1;
315 unsigned m_isForPage : 1; 318 unsigned m_isForPage : 1;
316 unsigned m_tagIsImplicit : 1; 319 unsigned m_tagIsImplicit : 1;
317 unsigned m_relationIsAffectedByPseudoContent : 1; 320 unsigned m_relationIsAffectedByPseudoContent : 1;
321 unsigned m_linkMatchType : 2; // LinkMatchMask
318 322
319 void setPseudoType(PseudoType pseudoType) 323 void setPseudoType(PseudoType pseudoType)
320 { 324 {
321 m_pseudoType = pseudoType; 325 m_pseudoType = pseudoType;
322 ASSERT(static_cast<PseudoType>(m_pseudoType) == pseudoType); // usin g a bitfield. 326 ASSERT(static_cast<PseudoType>(m_pseudoType) == pseudoType); // usin g a bitfield.
323 } 327 }
324 328
325 unsigned specificityForOneSelector() const; 329 unsigned specificityForOneSelector() const;
326 unsigned specificityForPage() const; 330 unsigned specificityForPage() const;
327 331
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 inline CSSSelector::CSSSelector() 414 inline CSSSelector::CSSSelector()
411 : m_relation(SubSelector) 415 : m_relation(SubSelector)
412 , m_match(Unknown) 416 , m_match(Unknown)
413 , m_pseudoType(PseudoUnknown) 417 , m_pseudoType(PseudoUnknown)
414 , m_isLastInSelectorList(false) 418 , m_isLastInSelectorList(false)
415 , m_isLastInTagHistory(true) 419 , m_isLastInTagHistory(true)
416 , m_hasRareData(false) 420 , m_hasRareData(false)
417 , m_isForPage(false) 421 , m_isForPage(false)
418 , m_tagIsImplicit(false) 422 , m_tagIsImplicit(false)
419 , m_relationIsAffectedByPseudoContent(false) 423 , m_relationIsAffectedByPseudoContent(false)
424 , m_linkMatchType(MatchAll)
420 { 425 {
421 } 426 }
422 427
423 inline CSSSelector::CSSSelector(const QualifiedName& tagQName, bool tagIsImplici t) 428 inline CSSSelector::CSSSelector(const QualifiedName& tagQName, bool tagIsImplici t)
424 : m_relation(SubSelector) 429 : m_relation(SubSelector)
425 , m_match(Tag) 430 , m_match(Tag)
426 , m_pseudoType(PseudoUnknown) 431 , m_pseudoType(PseudoUnknown)
427 , m_isLastInSelectorList(false) 432 , m_isLastInSelectorList(false)
428 , m_isLastInTagHistory(true) 433 , m_isLastInTagHistory(true)
429 , m_hasRareData(false) 434 , m_hasRareData(false)
430 , m_isForPage(false) 435 , m_isForPage(false)
431 , m_tagIsImplicit(tagIsImplicit) 436 , m_tagIsImplicit(tagIsImplicit)
432 , m_relationIsAffectedByPseudoContent(false) 437 , m_relationIsAffectedByPseudoContent(false)
438 , m_linkMatchType(MatchAll)
433 { 439 {
434 m_data.m_tagQName = tagQName.impl(); 440 m_data.m_tagQName = tagQName.impl();
435 m_data.m_tagQName->ref(); 441 m_data.m_tagQName->ref();
436 } 442 }
437 443
438 inline CSSSelector::CSSSelector(const CSSSelector& o) 444 inline CSSSelector::CSSSelector(const CSSSelector& o)
439 : m_relation(o.m_relation) 445 : m_relation(o.m_relation)
440 , m_match(o.m_match) 446 , m_match(o.m_match)
441 , m_pseudoType(o.m_pseudoType) 447 , m_pseudoType(o.m_pseudoType)
442 , m_isLastInSelectorList(o.m_isLastInSelectorList) 448 , m_isLastInSelectorList(o.m_isLastInSelectorList)
443 , m_isLastInTagHistory(o.m_isLastInTagHistory) 449 , m_isLastInTagHistory(o.m_isLastInTagHistory)
444 , m_hasRareData(o.m_hasRareData) 450 , m_hasRareData(o.m_hasRareData)
445 , m_isForPage(o.m_isForPage) 451 , m_isForPage(o.m_isForPage)
446 , m_tagIsImplicit(o.m_tagIsImplicit) 452 , m_tagIsImplicit(o.m_tagIsImplicit)
447 , m_relationIsAffectedByPseudoContent(o.m_relationIsAffectedByPseudoContent) 453 , m_relationIsAffectedByPseudoContent(o.m_relationIsAffectedByPseudoContent)
454 , m_linkMatchType(MatchAll)
448 { 455 {
449 if (o.m_match == Tag) { 456 if (o.m_match == Tag) {
450 m_data.m_tagQName = o.m_data.m_tagQName; 457 m_data.m_tagQName = o.m_data.m_tagQName;
451 m_data.m_tagQName->ref(); 458 m_data.m_tagQName->ref();
452 } else if (o.m_hasRareData) { 459 } else if (o.m_hasRareData) {
453 m_data.m_rareData = o.m_data.m_rareData; 460 m_data.m_rareData = o.m_data.m_rareData;
454 m_data.m_rareData->ref(); 461 m_data.m_rareData->ref();
455 } else if (o.m_data.m_value) { 462 } else if (o.m_data.m_value) {
456 m_data.m_value = o.m_data.m_value; 463 m_data.m_value = o.m_data.m_value;
457 m_data.m_value->ref(); 464 m_data.m_value->ref();
(...skipping 22 matching lines...) Expand all
480 if (m_hasRareData) 487 if (m_hasRareData)
481 return m_data.m_rareData->m_value; 488 return m_data.m_rareData->m_value;
482 // AtomicString is really just a StringImpl* so the cast below is safe. 489 // AtomicString is really just a StringImpl* so the cast below is safe.
483 // FIXME: Perhaps call sites could be changed to accept StringImpl? 490 // FIXME: Perhaps call sites could be changed to accept StringImpl?
484 return *reinterpret_cast<const AtomicString*>(&m_data.m_value); 491 return *reinterpret_cast<const AtomicString*>(&m_data.m_value);
485 } 492 }
486 493
487 } // namespace blink 494 } // namespace blink
488 495
489 #endif // CSSSelector_h 496 #endif // CSSSelector_h
OLDNEW
« no previous file with comments | « no previous file | Source/core/css/CSSSelector.cpp » ('j') | Source/core/css/parser/CSSSelectorParser.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698