diff options
author | Johannes Hofmann <Johannes.Hofmann@gmx.de> | 2009-01-25 18:00:39 +0100 |
---|---|---|
committer | Johannes Hofmann <Johannes.Hofmann@gmx.de> | 2009-01-25 18:00:39 +0100 |
commit | d042582057401617924bece71783aa57bf9d345d (patch) | |
tree | 070012b0c19771700dcd695c3b18a0891a4a9565 /src/css.cc | |
parent | 37e9c1e7d1dbf66ee78189c2775922f8360c0e60 (diff) |
allocate/deallocate CssSimpleSelector properly
Diffstat (limited to 'src/css.cc')
-rw-r--r-- | src/css.cc | 29 |
1 files changed, 19 insertions, 10 deletions
@@ -55,13 +55,12 @@ CssSelector::CssSelector () { cs = selectorList->getRef (selectorList->size () - 1); cs->notMatchingBefore = -1; - cs->selector.element = CssSimpleSelector::ELEMENT_ANY; - cs->selector.klass = NULL; - cs->selector.pseudo = NULL; - cs->selector.id = NULL; + cs->selector = new CssSimpleSelector (); }; CssSelector::~CssSelector () { + for (int i = selectorList->size () - 1; i >= 0; i--) + delete selectorList->getRef (i)->selector; delete selectorList; } @@ -74,7 +73,7 @@ bool CssSelector::match (Doctree *docTree, const DoctreeNode *node) { for (int i = selectorList->size () - 1; i >= 0; i--) { struct CombinatorAndSelector *cs = selectorList->getRef (i); - sel = &cs->selector; + sel = cs->selector; notMatchingBefore = &cs->notMatchingBefore; if (node == NULL) @@ -119,15 +118,12 @@ void CssSelector::addSimpleSelector (Combinator c) { cs->combinator = c; cs->notMatchingBefore = -1; - cs->selector.element = CssSimpleSelector::ELEMENT_ANY; - cs->selector.klass = NULL; - cs->selector.pseudo = NULL; - cs->selector.id = NULL; + cs->selector = new CssSimpleSelector (); } void CssSelector::print () { for (int i = 0; i < selectorList->size (); i++) { - selectorList->getRef (i)->selector.print (); + selectorList->getRef (i)->selector->print (); if (i < selectorList->size () - 1) { switch (selectorList->getRef (i + 1)->combinator) { @@ -147,6 +143,19 @@ void CssSelector::print () { fprintf (stderr, "\n"); } +CssSimpleSelector::CssSimpleSelector () { + element = ELEMENT_ANY; + klass = NULL; + id = NULL; + pseudo = NULL; +} + +CssSimpleSelector::~CssSimpleSelector () { + dFree (klass); + dFree (id); + dFree (pseudo); +} + bool CssSimpleSelector::match (const DoctreeNode *n) { if (element != ELEMENT_ANY && element != n->element) return false; |