summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-13 18:57:34 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-13 18:57:34 +0300
commit4b00ff827fd0531a3cd038e57e0a0f24d5171aa3 (patch)
tree545acd611a7bb2399593d21a1077356f6f1f30a5
parentb93d2cb75a0e01876ab600dc3dec6a7f53d4dd8c (diff)
downloadparanucker-4b00ff827fd0531a3cd038e57e0a0f24d5171aa3.tar.gz
paranucker-4b00ff827fd0531a3cd038e57e0a0f24d5171aa3.tar.bz2
paranucker-4b00ff827fd0531a3cd038e57e0a0f24d5171aa3.tar.xz
paranucker-4b00ff827fd0531a3cd038e57e0a0f24d5171aa3.zip
Fix recursion in parsing node ADDR_EXPR.
-rw-r--r--src/parsers/expr/addr_expr.cpp21
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"));
+ }
}
}