summaryrefslogtreecommitdiff
path: root/src/parsers/generic.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-03 20:41:45 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-03 20:41:45 +0300
commit7f873372e2e20ebdc36a4f02ee9773ba6b1d8e32 (patch)
treebfc6cafab5e86c9850b48cac72c0d410a8bbb847 /src/parsers/generic.cpp
parent6cecc9730f99096c29c045c050a948254bc59dbb (diff)
downloadparanucker-7f873372e2e20ebdc36a4f02ee9773ba6b1d8e32.tar.gz
paranucker-7f873372e2e20ebdc36a4f02ee9773ba6b1d8e32.tar.bz2
paranucker-7f873372e2e20ebdc36a4f02ee9773ba6b1d8e32.tar.xz
paranucker-7f873372e2e20ebdc36a4f02ee9773ba6b1d8e32.zip
Add reading for all default nodes for FUNC_DECL node.
Diffstat (limited to 'src/parsers/generic.cpp')
-rw-r--r--src/parsers/generic.cpp21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/parsers/generic.cpp b/src/parsers/generic.cpp
index 4bb9a2a..2b88147 100644
--- a/src/parsers/generic.cpp
+++ b/src/parsers/generic.cpp
@@ -35,6 +35,11 @@ namespace Generic
Node *createParseNode(Node *parent, tree gccNode)
{
+ return createParseNode(parent, gccNode, ERROR_MARK);
+}
+
+Node *createParseNode(Node *parent, tree gccNode, tree_code wantType)
+{
if (gccNode == NULL_TREE)
{
return nullptr;
@@ -54,7 +59,7 @@ Node *createParseNode(Node *parent, tree gccNode)
break;
default:
Log::log(parent, "Not supported node type: %s",
- get_tree_code_name(TREE_CODE(node->gccNode)));
+ get_tree_code_name(TREE_CODE(gccNode)));
break;
}
if (node)
@@ -67,7 +72,7 @@ Node *createParseNode(Node *parent, tree gccNode)
switch (TREE_CODE(node->gccNode))
{
case FUNCTION_DECL:
- parseFunctionDeclNode(node);
+ parseFunctionDeclNode(static_cast<FunctionDeclNode*>(node));
break;
case FUNCTION_TYPE:
parseFunctionTypeNode(node);
@@ -76,17 +81,22 @@ Node *createParseNode(Node *parent, tree gccNode)
parseResultDeclNode(node);
break;
default:
- Log::log(node, "Not supported node type: %s",
- get_tree_code_name(TREE_CODE(node->gccNode)));
break;
}
+ if (wantType != ERROR_MARK &&
+ node->nodeType != get_tree_code_name(wantType))
+ {
+ Log::log(node, "Wrong node type. Want %s but get %s",
+ get_tree_code_name(wantType),
+ node->nodeType.c_str());
+ }
}
return node;
}
void parseNodes(tree gccNode)
{
- createParseNode(nullptr, gccNode);
+ createParseNode(nullptr, gccNode, FUNCTION_DECL);
}
void fillType(Node *node)
@@ -98,6 +108,7 @@ void fillType(Node *node)
node->treeNumber = static_cast<int>(TREE_CODE(node->gccNode));
node->nodeType = get_tree_code_name(TREE_CODE(node->gccNode));
+// Log::log(node);
}
void fillLocation(Node *node)