From kde-commits Tue Oct 23 20:40:42 2012 From: Alexander Dymo Date: Tue, 23 Oct 2012 20:40:42 +0000 To: kde-commits Subject: [kdev-ruby] duchain: Improve performance of if expression parsing: make it O(n) instead of O(n!), Message-Id: <20121023204042.8F62BA6078 () git ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=135102485029697 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; }