diff --git a/lib/forwardanalyzer.cpp b/lib/forwardanalyzer.cpp index b394da4c8..545bea966 100644 --- a/lib/forwardanalyzer.cpp +++ b/lib/forwardanalyzer.cpp @@ -58,15 +58,17 @@ struct ForwardTraversal { } template)> - Progress traverseRecursive(T* tok, std::function f, bool traverseUnknown) { + Progress traverseRecursive(T* tok, std::function f, bool traverseUnknown, unsigned int recursion=0) { if (!tok) return Progress::Continue; - if (tok->astOperand1() && traverseRecursive(tok->astOperand1(), f, traverseUnknown) == Progress::Break) + if (recursion > 10000) + return Progress::Skip; + if (tok->astOperand1() && traverseRecursive(tok->astOperand1(), f, traverseUnknown, recursion+1) == Progress::Break) return Progress::Break; Progress p = traverseTok(tok, f, traverseUnknown); if (p == Progress::Break) return Progress::Break; - if (p == Progress::Continue && traverseRecursive(tok->astOperand2(), f, traverseUnknown) == Progress::Break) + if (p == Progress::Continue && traverseRecursive(tok->astOperand2(), f, traverseUnknown, recursion+1) == Progress::Break) return Progress::Break; return Progress::Continue; }