diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-06-13 18:57:34 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-06-13 18:57:34 +0300 |
commit | 4b00ff827fd0531a3cd038e57e0a0f24d5171aa3 (patch) | |
tree | 545acd611a7bb2399593d21a1077356f6f1f30a5 /src/parsers/expr | |
parent | b93d2cb75a0e01876ab600dc3dec6a7f53d4dd8c (diff) | |
download | paranucker-4b00ff827fd0531a3cd038e57e0a0f24d5171aa3.tar.gz paranucker-4b00ff827fd0531a3cd038e57e0a0f24d5171aa3.tar.bz2 paranucker-4b00ff827fd0531a3cd038e57e0a0f24d5171aa3.tar.xz paranucker-4b00ff827fd0531a3cd038e57e0a0f24d5171aa3.zip |
Fix recursion in parsing node ADDR_EXPR.
Diffstat (limited to 'src/parsers/expr')
-rw-r--r-- | src/parsers/expr/addr_expr.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/parsers/expr/addr_expr.cpp b/src/parsers/expr/addr_expr.cpp index 7e2121f..559402d 100644 --- a/src/parsers/expr/addr_expr.cpp +++ b/src/parsers/expr/addr_expr.cpp @@ -37,7 +37,26 @@ void parseAddrExprNode(AddrExprNode *node) // if (!node->parseChilds) // return; - fillExprOperands(node); +// fillExprOperands(node); + + tree gccNode = TREE_OPERAND (node->gccNode, 0); + + // stop recursion if operand is FUNCTION_DECL + if (TREE_CODE(gccNode) == FUNCTION_DECL) + { + node->args.push_back(createParseNode( + node, + gccNode, + "operand", + false)); + } + else + { + node->args.push_back(createParseNode( + node, + gccNode, + "operand")); + } } } |