ForwardAnalyzer: Add recursion limit 10000
This commit is contained in:
parent
6a3cfdf576
commit
e7ddd9cc15
|
@ -58,15 +58,17 @@ struct ForwardTraversal {
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T, REQUIRES("T must be a Token class", std::is_convertible<T*, const Token*>)>
|
template<class T, REQUIRES("T must be a Token class", std::is_convertible<T*, const Token*>)>
|
||||||
Progress traverseRecursive(T* tok, std::function<Progress(T*)> f, bool traverseUnknown) {
|
Progress traverseRecursive(T* tok, std::function<Progress(T*)> f, bool traverseUnknown, unsigned int recursion=0) {
|
||||||
if (!tok)
|
if (!tok)
|
||||||
return Progress::Continue;
|
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;
|
return Progress::Break;
|
||||||
Progress p = traverseTok(tok, f, traverseUnknown);
|
Progress p = traverseTok(tok, f, traverseUnknown);
|
||||||
if (p == Progress::Break)
|
if (p == Progress::Break)
|
||||||
return 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::Break;
|
||||||
return Progress::Continue;
|
return Progress::Continue;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue