summaryrefslogtreecommitdiff
path: root/src
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
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')
-rw-r--r--src/nodes/base/node.h2
-rw-r--r--src/parsers/blocknode.cpp3
-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
-rw-r--r--src/parsers/expr/addr_expr.cpp3
-rw-r--r--src/parsers/expr/bind_expr.cpp3
-rw-r--r--src/parsers/expr/call_expr.cpp4
-rw-r--r--src/parsers/expr/cleanuppoint_expr.cpp3
-rw-r--r--src/parsers/expr/cond_expr.cpp3
-rw-r--r--src/parsers/expr/convert_expr.cpp3
-rw-r--r--src/parsers/expr/decl_expr.cpp3
-rw-r--r--src/parsers/expr/eq_expr.cpp3
-rw-r--r--src/parsers/expr/ge_expr.cpp3
-rw-r--r--src/parsers/expr/gt_expr.cpp3
-rw-r--r--src/parsers/expr/indirect_ref.cpp3
-rw-r--r--src/parsers/expr/init_expr.cpp3
-rw-r--r--src/parsers/expr/le_expr.cpp3
-rw-r--r--src/parsers/expr/loop_expr.cpp3
-rw-r--r--src/parsers/expr/lt_expr.cpp3
-rw-r--r--src/parsers/expr/minus_expr.cpp3
-rw-r--r--src/parsers/expr/modify_expr.cpp3
-rw-r--r--src/parsers/expr/mult_expr.cpp3
-rw-r--r--src/parsers/expr/ne_expr.cpp3
-rw-r--r--src/parsers/expr/nop_expr.cpp3
-rw-r--r--src/parsers/expr/plus_expr.cpp3
-rw-r--r--src/parsers/expr/pointerplus_expr.cpp3
-rw-r--r--src/parsers/expr/return_expr.cpp3
-rw-r--r--src/parsers/generic.cpp10
-rw-r--r--src/parsers/generic.h6
-rw-r--r--src/parsers/list/statement_list.cpp3
-rw-r--r--src/parsers/list/tree_list.cpp3
-rw-r--r--src/parsers/stmt/expr_stmt.cpp3
-rw-r--r--src/parsers/stmt/if_stmt.cpp3
-rw-r--r--src/parsers/stmt/while_stmt.cpp3
-rw-r--r--src/parsers/type/function_type.cpp3
-rw-r--r--src/parsers/type/integer_type.cpp3
-rw-r--r--src/parsers/type/pointer_type.cpp3
-rw-r--r--src/parsers/type/void_type.cpp3
41 files changed, 133 insertions, 8 deletions
diff --git a/src/nodes/base/node.h b/src/nodes/base/node.h
index ad8fe10..1331467 100644
--- a/src/nodes/base/node.h
+++ b/src/nodes/base/node.h
@@ -42,6 +42,7 @@ struct Node
column(-1),
treeNumber(0),
indent(0),
+ parseChilds(true),
noLabel(false)
{
allocations ++;
@@ -73,6 +74,7 @@ struct Node
int column;
int treeNumber;
int indent;
+ bool parseChilds;
bool noLabel;
};
diff --git a/src/parsers/blocknode.cpp b/src/parsers/blocknode.cpp
index b83cf81..a3b15cb 100644
--- a/src/parsers/blocknode.cpp
+++ b/src/parsers/blocknode.cpp
@@ -39,6 +39,9 @@ void parseBlockNode(BlockNode *node)
}
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
FOR_CHAIN(node->gccNode, it, BLOCK_VARS, DECL_CHAIN)
{
node->vars.push_back(static_cast<VarDeclNode*>(createParseNode(
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);
}
}
diff --git a/src/parsers/expr/addr_expr.cpp b/src/parsers/expr/addr_expr.cpp
index f831e4e..459ed2d 100644
--- a/src/parsers/expr/addr_expr.cpp
+++ b/src/parsers/expr/addr_expr.cpp
@@ -34,6 +34,9 @@ void parseAddrExprNode(AddrExprNode *node)
fillExprLocation(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillExprOperands(node);
}
diff --git a/src/parsers/expr/bind_expr.cpp b/src/parsers/expr/bind_expr.cpp
index 1157163..174b9c3 100644
--- a/src/parsers/expr/bind_expr.cpp
+++ b/src/parsers/expr/bind_expr.cpp
@@ -34,6 +34,9 @@ void parseBindExprNode(BindExprNode *node)
fillExprLocation(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillExprOperands(node);
// args 0 - BIND_EXPR_VARS
diff --git a/src/parsers/expr/call_expr.cpp b/src/parsers/expr/call_expr.cpp
index f3072bf..b30136e 100644
--- a/src/parsers/expr/call_expr.cpp
+++ b/src/parsers/expr/call_expr.cpp
@@ -41,6 +41,10 @@ void parseCallExprNode(CallExprNode *node)
node->functionName = internal_fn_name(CALL_EXPR_IFN (node->gccNode));
Log::dump(node, "- function: %s", node->functionName.c_str());
+
+ if (!node->parseChilds)
+ return;
+
const int argsCount = call_expr_nargs(node->gccNode);
for (int f = 0; f < argsCount; f ++)
{
diff --git a/src/parsers/expr/cleanuppoint_expr.cpp b/src/parsers/expr/cleanuppoint_expr.cpp
index b08b9e1..017d5aa 100644
--- a/src/parsers/expr/cleanuppoint_expr.cpp
+++ b/src/parsers/expr/cleanuppoint_expr.cpp
@@ -34,6 +34,9 @@ void parseCleanupPointExprNode(CleanupPointExprNode *node)
fillExprLocation(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillExprOperands(node);
}
diff --git a/src/parsers/expr/cond_expr.cpp b/src/parsers/expr/cond_expr.cpp
index 2129059..de207e4 100644
--- a/src/parsers/expr/cond_expr.cpp
+++ b/src/parsers/expr/cond_expr.cpp
@@ -34,6 +34,9 @@ void parseCondExprNode(CondExprNode *node)
fillExprLocation(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillExprOperands(node);
}
diff --git a/src/parsers/expr/convert_expr.cpp b/src/parsers/expr/convert_expr.cpp
index bb74e24..b489b25 100644
--- a/src/parsers/expr/convert_expr.cpp
+++ b/src/parsers/expr/convert_expr.cpp
@@ -34,6 +34,9 @@ void parseConvertExprNode(ConvertExprNode *node)
fillExprLocation(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillExprOperands(node);
}
diff --git a/src/parsers/expr/decl_expr.cpp b/src/parsers/expr/decl_expr.cpp
index 7a333f3..d572433 100644
--- a/src/parsers/expr/decl_expr.cpp
+++ b/src/parsers/expr/decl_expr.cpp
@@ -34,6 +34,9 @@ void parseDeclExprNode(DeclExprNode *node)
fillExprLocation(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillExprOperands(node);
// args 0 - DECL_EXPR_DECL
diff --git a/src/parsers/expr/eq_expr.cpp b/src/parsers/expr/eq_expr.cpp
index 7cf458c..58e18d6 100644
--- a/src/parsers/expr/eq_expr.cpp
+++ b/src/parsers/expr/eq_expr.cpp
@@ -34,6 +34,9 @@ void parseEqExprNode(EqExprNode *node)
fillExprLocation(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillExprOperands(node);
}
diff --git a/src/parsers/expr/ge_expr.cpp b/src/parsers/expr/ge_expr.cpp
index 96d536e..7145bd3 100644
--- a/src/parsers/expr/ge_expr.cpp
+++ b/src/parsers/expr/ge_expr.cpp
@@ -34,6 +34,9 @@ void parseGeExprNode(GeExprNode *node)
fillExprLocation(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillExprOperands(node);
}
diff --git a/src/parsers/expr/gt_expr.cpp b/src/parsers/expr/gt_expr.cpp
index d0ef3bf..d622832 100644
--- a/src/parsers/expr/gt_expr.cpp
+++ b/src/parsers/expr/gt_expr.cpp
@@ -34,6 +34,9 @@ void parseGtExprNode(GtExprNode *node)
fillExprLocation(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillExprOperands(node);
}
diff --git a/src/parsers/expr/indirect_ref.cpp b/src/parsers/expr/indirect_ref.cpp
index 961050b..43b030a 100644
--- a/src/parsers/expr/indirect_ref.cpp
+++ b/src/parsers/expr/indirect_ref.cpp
@@ -34,6 +34,9 @@ void parseIndirectRefNode(IndirectRefNode *node)
fillExprLocation(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillExprOperands(node);
}
diff --git a/src/parsers/expr/init_expr.cpp b/src/parsers/expr/init_expr.cpp
index 44baf51..db9673e 100644
--- a/src/parsers/expr/init_expr.cpp
+++ b/src/parsers/expr/init_expr.cpp
@@ -34,6 +34,9 @@ void parseInitExprNode(InitExprNode *node)
fillExprLocation(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillExprOperands(node);
// args 0 - left side
diff --git a/src/parsers/expr/le_expr.cpp b/src/parsers/expr/le_expr.cpp
index 15e90a8..e60227e 100644
--- a/src/parsers/expr/le_expr.cpp
+++ b/src/parsers/expr/le_expr.cpp
@@ -34,6 +34,9 @@ void parseLeExprNode(LeExprNode *node)
fillExprLocation(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillExprOperands(node);
}
diff --git a/src/parsers/expr/loop_expr.cpp b/src/parsers/expr/loop_expr.cpp
index 78846f0..5b38eb4 100644
--- a/src/parsers/expr/loop_expr.cpp
+++ b/src/parsers/expr/loop_expr.cpp
@@ -34,6 +34,9 @@ void parseLoopExprNode(LoopExprNode *node)
fillExprLocation(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
// fillExprOperands(node);
node->body = createParseNode(
diff --git a/src/parsers/expr/lt_expr.cpp b/src/parsers/expr/lt_expr.cpp
index bf3f330..bca5b08 100644
--- a/src/parsers/expr/lt_expr.cpp
+++ b/src/parsers/expr/lt_expr.cpp
@@ -34,6 +34,9 @@ void parseLtExprNode(LtExprNode *node)
fillExprLocation(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillExprOperands(node);
}
diff --git a/src/parsers/expr/minus_expr.cpp b/src/parsers/expr/minus_expr.cpp
index 9922b8e..b3217ba 100644
--- a/src/parsers/expr/minus_expr.cpp
+++ b/src/parsers/expr/minus_expr.cpp
@@ -34,6 +34,9 @@ void parseMinusExprNode(MinusExprNode *node)
fillExprLocation(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillExprOperands(node);
}
diff --git a/src/parsers/expr/modify_expr.cpp b/src/parsers/expr/modify_expr.cpp
index af225e7..759e40d 100644
--- a/src/parsers/expr/modify_expr.cpp
+++ b/src/parsers/expr/modify_expr.cpp
@@ -34,6 +34,9 @@ void parseModifyExprNode(ModifyExprNode *node)
fillExprLocation(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillExprOperands(node);
}
diff --git a/src/parsers/expr/mult_expr.cpp b/src/parsers/expr/mult_expr.cpp
index e67b40c..419c9f2 100644
--- a/src/parsers/expr/mult_expr.cpp
+++ b/src/parsers/expr/mult_expr.cpp
@@ -34,6 +34,9 @@ void parseMultExprNode(MultExprNode *node)
fillExprLocation(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillExprOperands(node);
}
diff --git a/src/parsers/expr/ne_expr.cpp b/src/parsers/expr/ne_expr.cpp
index ba20614..a6a155d 100644
--- a/src/parsers/expr/ne_expr.cpp
+++ b/src/parsers/expr/ne_expr.cpp
@@ -34,6 +34,9 @@ void parseNeExprNode(NeExprNode *node)
fillExprLocation(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillExprOperands(node);
}
diff --git a/src/parsers/expr/nop_expr.cpp b/src/parsers/expr/nop_expr.cpp
index 1efecc5..cfdae94 100644
--- a/src/parsers/expr/nop_expr.cpp
+++ b/src/parsers/expr/nop_expr.cpp
@@ -34,6 +34,9 @@ void parseNopExprNode(NopExprNode *node)
fillExprLocation(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillExprOperands(node);
}
diff --git a/src/parsers/expr/plus_expr.cpp b/src/parsers/expr/plus_expr.cpp
index 41dceaa..0fcb300 100644
--- a/src/parsers/expr/plus_expr.cpp
+++ b/src/parsers/expr/plus_expr.cpp
@@ -34,6 +34,9 @@ void parsePlusExprNode(PlusExprNode *node)
fillExprLocation(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillExprOperands(node);
}
diff --git a/src/parsers/expr/pointerplus_expr.cpp b/src/parsers/expr/pointerplus_expr.cpp
index 13963d7..64c445e 100644
--- a/src/parsers/expr/pointerplus_expr.cpp
+++ b/src/parsers/expr/pointerplus_expr.cpp
@@ -34,6 +34,9 @@ void parsePointerPlusExprNode(PointerPlusExprNode *node)
fillExprLocation(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillExprOperands(node);
}
diff --git a/src/parsers/expr/return_expr.cpp b/src/parsers/expr/return_expr.cpp
index b36993a..7c2e5fc 100644
--- a/src/parsers/expr/return_expr.cpp
+++ b/src/parsers/expr/return_expr.cpp
@@ -34,6 +34,9 @@ void parseReturnExprNode(ReturnExprNode *node)
fillExprLocation(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillExprOperands(node);
}
diff --git a/src/parsers/generic.cpp b/src/parsers/generic.cpp
index f1a13e8..12b3a06 100644
--- a/src/parsers/generic.cpp
+++ b/src/parsers/generic.cpp
@@ -34,18 +34,21 @@ namespace Generic
Node *createParseNode(Node *parent,
tree gccNode,
- std::string tag)
+ std::string tag,
+ bool parseChilds)
{
return createParseNode(parent,
gccNode,
ERROR_MARK,
- tag);
+ tag,
+ parseChilds);
}
Node *createParseNode(Node *parent,
tree gccNode,
tree_code wantType,
- std::string tag)
+ std::string tag,
+ bool parseChilds)
{
if (gccNode == NULL_TREE)
{
@@ -80,6 +83,7 @@ Node *createParseNode(Node *parent,
{
node->parent = parent;
node->gccNode = gccNode;
+ node->parseChilds = parseChilds;
if (parent)
{
node->indent = parent->indent + 1;
diff --git a/src/parsers/generic.h b/src/parsers/generic.h
index 32aadc2..246f119 100644
--- a/src/parsers/generic.h
+++ b/src/parsers/generic.h
@@ -42,12 +42,14 @@ namespace Generic
Node *createParseNode(Node *parent,
tree gccNode,
- std::string tag = "");
+ std::string tag = "",
+ bool parseChilds = true);
Node *createParseNode(Node *parent,
tree gccNode,
tree_code wantType,
- std::string tag = "");
+ std::string tag = "",
+ bool parseChilds = true);
}
#endif // PARSERS_GENERIC_H
diff --git a/src/parsers/list/statement_list.cpp b/src/parsers/list/statement_list.cpp
index 4b4ca9e..78e599b 100644
--- a/src/parsers/list/statement_list.cpp
+++ b/src/parsers/list/statement_list.cpp
@@ -33,6 +33,9 @@ void parseStatementListNode(StatementListNode *node)
fillType(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
for (tree_stmt_iterator it = tsi_start (node->gccNode);
!tsi_end_p (it);
tsi_next (&it))
diff --git a/src/parsers/list/tree_list.cpp b/src/parsers/list/tree_list.cpp
index b264a66..6ee383f 100644
--- a/src/parsers/list/tree_list.cpp
+++ b/src/parsers/list/tree_list.cpp
@@ -31,6 +31,9 @@ void parseTreeListNode(TreeListNode *node)
fillType(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
node->purpose = createParseNode(
node,
TREE_PURPOSE(node->gccNode),
diff --git a/src/parsers/stmt/expr_stmt.cpp b/src/parsers/stmt/expr_stmt.cpp
index 46afdf5..3cadbff 100644
--- a/src/parsers/stmt/expr_stmt.cpp
+++ b/src/parsers/stmt/expr_stmt.cpp
@@ -35,6 +35,9 @@ void parseExprStmtNode(ExprStmtNode *node)
fillType(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
node->expression = static_cast<ExprNode*>(createParseNode(
node,
EXPR_STMT_EXPR(node->gccNode),
diff --git a/src/parsers/stmt/if_stmt.cpp b/src/parsers/stmt/if_stmt.cpp
index 6a5c8b5..9800f07 100644
--- a/src/parsers/stmt/if_stmt.cpp
+++ b/src/parsers/stmt/if_stmt.cpp
@@ -33,6 +33,9 @@ void parseIfStmtNode(IfStmtNode *node)
fillType(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
node->condition = createParseNode(
node,
IF_COND(node->gccNode),
diff --git a/src/parsers/stmt/while_stmt.cpp b/src/parsers/stmt/while_stmt.cpp
index 5814462..1c82aba 100644
--- a/src/parsers/stmt/while_stmt.cpp
+++ b/src/parsers/stmt/while_stmt.cpp
@@ -33,6 +33,9 @@ void parseWhileStmtNode(WhileStmtNode *node)
fillType(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
node->condition = createParseNode(
node,
WHILE_COND(node->gccNode),
diff --git a/src/parsers/type/function_type.cpp b/src/parsers/type/function_type.cpp
index ae55bf6..9740cf7 100644
--- a/src/parsers/type/function_type.cpp
+++ b/src/parsers/type/function_type.cpp
@@ -33,6 +33,9 @@ void parseFunctionTypeNode(FunctionTypeNode *node)
fillType(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillTypeName(node);
node->returnType = static_cast<TypeNode*>(createParseNode(
node,
diff --git a/src/parsers/type/integer_type.cpp b/src/parsers/type/integer_type.cpp
index 4633a4e..0da88e1 100644
--- a/src/parsers/type/integer_type.cpp
+++ b/src/parsers/type/integer_type.cpp
@@ -41,6 +41,9 @@ void parseIntegerTypeNode(IntegerTypeNode *node)
else
Log::dumpRaw(node, "- signed");
+ if (!node->parseChilds)
+ return;
+
fillTypeName(node);
fillTypeAttributes(node);
node->typeSize = static_cast<IntegerCstNode*>(createParseNode(
diff --git a/src/parsers/type/pointer_type.cpp b/src/parsers/type/pointer_type.cpp
index df64497..9b2a197 100644
--- a/src/parsers/type/pointer_type.cpp
+++ b/src/parsers/type/pointer_type.cpp
@@ -33,6 +33,9 @@ void parsePointerTypeNode(PointerTypeNode *node)
fillType(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillTypeName(node);
fillTypeAttributes(node);
node->nestedType = static_cast<TypeNode*>(createParseNode(
diff --git a/src/parsers/type/void_type.cpp b/src/parsers/type/void_type.cpp
index cea3e6f..748142d 100644
--- a/src/parsers/type/void_type.cpp
+++ b/src/parsers/type/void_type.cpp
@@ -33,6 +33,9 @@ void parseVoidTypeNode(VoidTypeNode *node)
fillType(node);
Log::dump(node);
+ if (!node->parseChilds)
+ return;
+
fillTypeName(node);
fillTypeAttributes(node);
}