Git commit 15952d23c5f16e7dbfd83d50c8101f6a12257c69 by Alexander Dymo. Committed on 23/10/2012 at 22:34. Pushed by dymo into branch 'master'. Improve performance of if expression parsing: make it O(n) instead of O(n!), visitLastStatement is already smart enough to traverse the elsif/else tree, so there's no need for additional visiting and loop M +3 -6 duchain/expressionvisitor.cpp http://commits.kde.org/kdev-ruby/15952d23c5f16e7dbfd83d50c8101f6a12257c69 diff --git a/duchain/expressionvisitor.cpp b/duchain/expressionvisitor.cpp index b90f749..0c6256d 100644 --- a/duchain/expressionvisitor.cpp +++ b/duchain/expressionvisitor.cpp @@ -309,17 +309,14 @@ void ExpressionVisitor::visitBoolean(RubyAst *) = void ExpressionVisitor::visitIfStatement(RubyAst *node) { - RubyAstVisitor::visitIfStatement(node); Node *aux =3D node->tree; node->tree =3D aux->l; ExpressionVisitor::visitLastStatement(node); AbstractType::Ptr res =3D lastType(); + node->tree =3D aux->r; + ExpressionVisitor::visitLastStatement(node); + res =3D mergeTypes(res, lastType()); = - for (Node *n =3D aux->r; n !=3D NULL; n =3D n->r) { - node->tree =3D n; - ExpressionVisitor::visitLastStatement(node); - res =3D mergeTypes(res, lastType()); - } encounter(res); node->tree =3D aux; }