summaryrefslogtreecommitdiff
path: root/src/parsers/generic.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-03 00:12:02 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-03 00:12:02 +0300
commit14379df64eefacbfcc807fb5216470071adefdc2 (patch)
tree9ff0b4d6405170e524b63bd80d8e5f715bee6fee /src/parsers/generic.cpp
parent49dbfa00f155632dc04ffe71320232799a712dfb (diff)
downloadparanucker-14379df64eefacbfcc807fb5216470071adefdc2.tar.gz
paranucker-14379df64eefacbfcc807fb5216470071adefdc2.tar.bz2
paranucker-14379df64eefacbfcc807fb5216470071adefdc2.tar.xz
paranucker-14379df64eefacbfcc807fb5216470071adefdc2.zip
Extend a bit basic node parsing.
Fix warning in gcc plugin includes.
Diffstat (limited to 'src/parsers/generic.cpp')
-rw-r--r--src/parsers/generic.cpp57
1 files changed, 43 insertions, 14 deletions
diff --git a/src/parsers/generic.cpp b/src/parsers/generic.cpp
index ef4ad10..a1e87df 100644
--- a/src/parsers/generic.cpp
+++ b/src/parsers/generic.cpp
@@ -19,7 +19,7 @@
#include "parsers/generic.h"
-#include "nodes/create.h"
+#include "nodes/functiondeclnode.h"
#include "nodes/node.h"
#include "parsers/functiondeclnode.h"
@@ -31,38 +31,67 @@ extern int plugin_is_GPL_compatible;
namespace Generic
{
-void parseNode(Node *parent,
- tree gccNode)
+Node *createEmptyNode(tree gccNode)
{
- if (!parent || gccNode == NULL_TREE)
+ if (gccNode == NULL_TREE)
{
- return;
+ return nullptr;
}
+ Node *node = nullptr;
switch (TREE_CODE(gccNode))
{
case FUNCTION_DECL:
- parseFunctionDeclNode(parent, gccNode);
+ node = new FunctionDeclNode;
+ }
+ return node;
+}
+
+void parseNode(Node *node)
+{
+ if (!node || node->gccNode == NULL_TREE)
+ {
+ return;
+ }
+
+ switch (TREE_CODE(node->gccNode))
+ {
+ case FUNCTION_DECL:
+ parseFunctionDeclNode(node);
}
}
void parseNodes(tree gccNode)
{
- Node *node = new Node;
- parseNode(node, gccNode);
+ //Node *rootNode = new Node;
+ Node *node = createEmptyNode(gccNode);
+ //node->parent = rootNode;
+ node->gccNode = gccNode;
+ parseNode(node);
+}
+
+void fillType(Node *node)
+{
+ if (!node || node->gccNode == NULL_TREE)
+ {
+ return;
+ }
+
+ node->treeNumber = static_cast<int>(TREE_CODE(node->gccNode));
+ node->nodeType = get_tree_code_name(TREE_CODE(node->gccNode));
}
-void fillType(Node *node,
- tree gccNode)
+void fillLocation(Node *node)
{
- if (!node || gccNode == NULL_TREE)
+ if (!node || node->gccNode == NULL_TREE)
{
return;
}
- location_t loc = DECL_SOURCE_LOCATION(gccNode);
- node->treeNumber = static_cast<int>(TREE_CODE(gccNode));
- node->nodeType = get_tree_code_name(TREE_CODE(gccNode));
+ location_t loc = DECL_SOURCE_LOCATION(node->gccNode);
+ node->file = LOCATION_FILE(loc);
+ node->line = LOCATION_LINE(loc);
+ node->column = LOCATION_COLUMN(loc);
}
}