From 14379df64eefacbfcc807fb5216470071adefdc2 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 3 Jun 2015 00:12:02 +0300 Subject: Extend a bit basic node parsing. Fix warning in gcc plugin includes. --- src/parsers/generic.cpp | 57 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 43 insertions(+), 14 deletions(-) (limited to 'src/parsers/generic.cpp') 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(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(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); } } -- cgit v1.2.3-60-g2f50