summaryrefslogtreecommitdiff
path: root/src/parsers/decl
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-09 23:44:50 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-09 23:44:50 +0300
commit33bd8b0eab143c6ab7cf228f8ad429daa3cba060 (patch)
treeac2ba6b96e11a6e6fa3753ecc98e57e48e8df994 /src/parsers/decl
parent720a4f2590186e38e1aca5331ba0d57055305c8e (diff)
downloadparanucker-33bd8b0eab143c6ab7cf228f8ad429daa3cba060.tar.gz
paranucker-33bd8b0eab143c6ab7cf228f8ad429daa3cba060.tar.bz2
paranucker-33bd8b0eab143c6ab7cf228f8ad429daa3cba060.tar.xz
paranucker-33bd8b0eab143c6ab7cf228f8ad429daa3cba060.zip
Add flag for each node parser for parse child nodes or not.
This solve recursion issue.
Diffstat (limited to 'src/parsers/decl')
-rw-r--r--src/parsers/decl/function_decl.cpp3
-rw-r--r--src/parsers/decl/parm_decl.cpp4
-rw-r--r--src/parsers/decl/result_decl.cpp3
-rw-r--r--src/parsers/decl/type_decl.cpp5
-rw-r--r--src/parsers/decl/var_decl.cpp8
5 files changed, 20 insertions, 3 deletions
diff --git a/src/parsers/decl/function_decl.cpp b/src/parsers/decl/function_decl.cpp
index fd3a931..76f9f00 100644
--- a/src/parsers/decl/function_decl.cpp
+++ b/src/parsers/decl/function_decl.cpp
@@ -46,6 +46,9 @@ void parseFunctionDeclNode(FunctionDeclNode *node)
setPrintField(node, DECL_EXTERNAL, isExternal);
setPrintField(node, TREE_PUBLIC, isPublic);
+ if (!node->parseChilds)
+ return;
+
fillDeclAttributes(node);
node->functionType = static_cast<FunctionTypeNode*>(createParseNode(
node,
diff --git a/src/parsers/decl/parm_decl.cpp b/src/parsers/decl/parm_decl.cpp
index 5f52d05..89b3bcb 100644
--- a/src/parsers/decl/parm_decl.cpp
+++ b/src/parsers/decl/parm_decl.cpp
@@ -39,6 +39,10 @@ void parseParmDeclNode(ParmDeclNode *node)
Log::dump(node);
fillDeclAutoGenerated(node);
+
+ if (!node->parseChilds)
+ return;
+
fillDeclAttributes(node);
node->declType = static_cast<TypeNode*>(createParseNode(
diff --git a/src/parsers/decl/result_decl.cpp b/src/parsers/decl/result_decl.cpp
index d4decb3..a3f4015 100644
--- a/src/parsers/decl/result_decl.cpp
+++ b/src/parsers/decl/result_decl.cpp
@@ -39,6 +39,9 @@ void parseResultDeclNode(ResultDeclNode *node)
fillDeclAutoGenerated(node);
+ if (!node->parseChilds)
+ return;
+
fillDeclAttributes(node);
node->resultType = static_cast<TypeNode*>(createParseNode(
node,
diff --git a/src/parsers/decl/type_decl.cpp b/src/parsers/decl/type_decl.cpp
index a87f4a0..c266a96 100644
--- a/src/parsers/decl/type_decl.cpp
+++ b/src/parsers/decl/type_decl.cpp
@@ -36,9 +36,14 @@ void parseTypeDeclNode(TypeDeclNode *node)
Log::dump(node);
fillDeclAutoGenerated(node);
+
+ if (!node->parseChilds)
+ return;
+
fillDeclAttributes(node);
// going to parent
+// probably need use parseChilds == false?
// createParseNode(
// node,
// TREE_TYPE(node->gccNode),
diff --git a/src/parsers/decl/var_decl.cpp b/src/parsers/decl/var_decl.cpp
index 661f421..f99dc6a 100644
--- a/src/parsers/decl/var_decl.cpp
+++ b/src/parsers/decl/var_decl.cpp
@@ -41,6 +41,9 @@ void parseVarDeclNode(VarDeclNode *node)
setPrintField(node, TREE_USED, isUsed);
fillDeclAutoGenerated(node);
+ if (!node->parseChilds)
+ return;
+
fillDeclAttributes(node);
node->declSize = static_cast<IntegerCstNode*>(createParseNode(
@@ -55,12 +58,11 @@ void parseVarDeclNode(VarDeclNode *node)
"var type"));
// not loading because it reference self recursivly
-/*
node->initial = createParseNode(
node,
DECL_INITIAL(node->gccNode),
- "initial");
-*/
+ "initial",
+ false);
}
}