summaryrefslogtreecommitdiff
path: root/src/parsers
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-07 19:03:30 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-07 19:03:30 +0300
commitdb6bbfe7d662460e5357f9d8fdbdd142cae3d8e1 (patch)
tree034477d68499514300b2b5787ed63a815c616b98 /src/parsers
parenta2b5d4b53004059405c8e1c8bc957a084a3fc112 (diff)
downloadparanucker-db6bbfe7d662460e5357f9d8fdbdd142cae3d8e1.tar.gz
paranucker-db6bbfe7d662460e5357f9d8fdbdd142cae3d8e1.tar.bz2
paranucker-db6bbfe7d662460e5357f9d8fdbdd142cae3d8e1.tar.xz
paranucker-db6bbfe7d662460e5357f9d8fdbdd142cae3d8e1.zip
Remove all created nodes before exit from root node parsing.
Diffstat (limited to 'src/parsers')
-rw-r--r--src/parsers/generic.cpp13
-rw-r--r--src/parsers/generic.h4
2 files changed, 14 insertions, 3 deletions
diff --git a/src/parsers/generic.cpp b/src/parsers/generic.cpp
index c2b02ca..ed00197 100644
--- a/src/parsers/generic.cpp
+++ b/src/parsers/generic.cpp
@@ -118,9 +118,18 @@ Node *createParseNode(Node *parent,
return node;
}
-void parseNodes(tree gccNode)
+Node *parseNodes(tree gccNode)
{
- createParseNode(nullptr, gccNode, FUNCTION_DECL);
+ return createParseNode(nullptr, gccNode, FUNCTION_DECL);
+}
+
+void cleanNodes(Node *node)
+{
+ FOR_EACH (std::vector<Node*>::iterator, it, node->childs)
+ {
+ cleanNodes(*it);
+ }
+ delete node;
}
void fillType(Node *node)
diff --git a/src/parsers/generic.h b/src/parsers/generic.h
index 7ad1b25..71ead21 100644
--- a/src/parsers/generic.h
+++ b/src/parsers/generic.h
@@ -28,10 +28,12 @@ struct Node;
namespace Generic
{
- void parseNodes(tree gccNode);
+ Node *parseNodes(tree gccNode);
void parseNode(Node *parent);
+ void cleanNodes(Node *node);
+
void fillType(Node *node);
void fillLocation(Node *node);