summaryrefslogtreecommitdiff
path: root/src/css.cc
diff options
context:
space:
mode:
authorJohannes Hofmann <Johannes.Hofmann@gmx.de>2009-01-25 18:00:39 +0100
committerJohannes Hofmann <Johannes.Hofmann@gmx.de>2009-01-25 18:00:39 +0100
commitd042582057401617924bece71783aa57bf9d345d (patch)
tree070012b0c19771700dcd695c3b18a0891a4a9565 /src/css.cc
parent37e9c1e7d1dbf66ee78189c2775922f8360c0e60 (diff)
allocate/deallocate CssSimpleSelector properly
Diffstat (limited to 'src/css.cc')
-rw-r--r--src/css.cc29
1 files changed, 19 insertions, 10 deletions
diff --git a/src/css.cc b/src/css.cc
index b2e04877..d12aa3a7 100644
--- a/src/css.cc
+++ b/src/css.cc
@@ -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;