summaryrefslogtreecommitdiff
path: root/src/parsers/expr
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-08 18:16:57 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-08 18:16:57 +0300
commitc8925bec5c9344312572e621f405e146948925de (patch)
tree6309e39569b02a034a79e09170dfd8caad7feb85 /src/parsers/expr
parentb748459e207eb2d38afb343dec607fce45c6daf6 (diff)
downloadparanucker-c8925bec5c9344312572e621f405e146948925de.tar.gz
paranucker-c8925bec5c9344312572e621f405e146948925de.tar.bz2
paranucker-c8925bec5c9344312572e621f405e146948925de.tar.xz
paranucker-c8925bec5c9344312572e621f405e146948925de.zip
Fix infinite loop with CALL_EXPR and internal function.
Diffstat (limited to 'src/parsers/expr')
-rw-r--r--src/parsers/expr/call_expr.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/parsers/expr/call_expr.cpp b/src/parsers/expr/call_expr.cpp
index 2e079f5..18eaea5 100644
--- a/src/parsers/expr/call_expr.cpp
+++ b/src/parsers/expr/call_expr.cpp
@@ -40,12 +40,6 @@ void parseCallExprNode(CallExprNode *node)
node->functionName = internal_fn_name(CALL_EXPR_IFN (node->gccNode));
Log::log(node, "- function: %s", node->functionName.c_str());
-
- node->function = createParseNode(
- node,
- CALL_EXPR_FN(node->gccNode),
- "function");
-
const int argsCount = call_expr_nargs(node->gccNode);
for (int f = 0; f < argsCount; f ++)
{
@@ -59,6 +53,14 @@ void parseCallExprNode(CallExprNode *node)
node,
CALL_EXPR_STATIC_CHAIN(node->gccNode),
"chain");
+
+ if (node->functionName == "LOAD_LANES")
+ return;
+
+ node->function = createParseNode(
+ node,
+ CALL_EXPR_FN(node->gccNode),
+ "function");
}
}