diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-06-09 23:44:50 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-06-09 23:44:50 +0300 |
commit | 33bd8b0eab143c6ab7cf228f8ad429daa3cba060 (patch) | |
tree | ac2ba6b96e11a6e6fa3753ecc98e57e48e8df994 /src/parsers/decl | |
parent | 720a4f2590186e38e1aca5331ba0d57055305c8e (diff) | |
download | paranucker-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.cpp | 3 | ||||
-rw-r--r-- | src/parsers/decl/parm_decl.cpp | 4 | ||||
-rw-r--r-- | src/parsers/decl/result_decl.cpp | 3 | ||||
-rw-r--r-- | src/parsers/decl/type_decl.cpp | 5 | ||||
-rw-r--r-- | src/parsers/decl/var_decl.cpp | 8 |
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); } } |