summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-23 19:46:24 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-23 19:46:24 +0300
commit8aa42b625d7fd34d22df6690e5b305b5be525eea (patch)
treef515914c33725728adea08ebb1e7366ced964c0f /src
parent17932a2f13f35d1ec451af73411898ebb03be5be (diff)
downloadparanucker-8aa42b625d7fd34d22df6690e5b305b5be525eea.tar.gz
paranucker-8aa42b625d7fd34d22df6690e5b305b5be525eea.tar.bz2
paranucker-8aa42b625d7fd34d22df6690e5b305b5be525eea.tar.xz
paranucker-8aa42b625d7fd34d22df6690e5b305b5be525eea.zip
Improve a bit parsing nested FUNCTION_DECL.
Diffstat (limited to 'src')
-rw-r--r--src/parsers/decl/function_decl.cpp10
-rw-r--r--src/parsers/type/method_type.cpp4
2 files changed, 10 insertions, 4 deletions
diff --git a/src/parsers/decl/function_decl.cpp b/src/parsers/decl/function_decl.cpp
index c619d86..91eb15b 100644
--- a/src/parsers/decl/function_decl.cpp
+++ b/src/parsers/decl/function_decl.cpp
@@ -47,14 +47,16 @@ void parseFunctionDeclNode(FunctionDeclNode *node)
setPrintField(node, DECL_EXTERNAL, isExternal);
setPrintField(node, TREE_PUBLIC, isPublic);
- if (!node->parseChilds)
- return;
-
fillDeclAttributes(node);
node->functionType = static_cast<TypeNode*>(createParseNode(
node,
TREE_TYPE(node->gccNode),
- "function type"));
+ "function type",
+ node->parseChilds));
+
+ if (!node->parseChilds)
+ return;
+
node->result = static_cast<ResultDeclNode*>(createParseNode(
node,
DECL_RESULT(node->gccNode),
diff --git a/src/parsers/type/method_type.cpp b/src/parsers/type/method_type.cpp
index 264d539..e8a7119 100644
--- a/src/parsers/type/method_type.cpp
+++ b/src/parsers/type/method_type.cpp
@@ -33,7 +33,11 @@ void parseMethodTypeNode(MethodTypeNode *node)
fillType(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillTypeName(node);
+
node->returnType = static_cast<TypeNode*>(createParseNode(
node,
TREE_TYPE(node->gccNode),