diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-06-24 13:19:30 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-06-24 13:19:30 +0300 |
commit | 38cdb19d91e40f59d05717e89cfe628de53f95fe (patch) | |
tree | f31ad6c1d46e35c5e2d508b2cd7feda01b5e5d7a /src/analysis/expression.cpp | |
parent | 0115abd5dc7cc43a6e84c21bab03324fd37a5f32 (diff) | |
download | paranucker-38cdb19d91e40f59d05717e89cfe628de53f95fe.tar.gz paranucker-38cdb19d91e40f59d05717e89cfe628de53f95fe.tar.bz2 paranucker-38cdb19d91e40f59d05717e89cfe628de53f95fe.tar.xz paranucker-38cdb19d91e40f59d05717e89cfe628de53f95fe.zip |
Reorder child nodes in BIND_EXPR.
Diffstat (limited to 'src/analysis/expression.cpp')
-rw-r--r-- | src/analysis/expression.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp index 78b3d8e..54cf738 100644 --- a/src/analysis/expression.cpp +++ b/src/analysis/expression.cpp @@ -325,13 +325,24 @@ void analyseCompoundExpr(CompoundExprNode *node, const WalkItem &wi, WalkItem &w // type var1 = var2; void analyseBindExpr(BindExprNode *node, const WalkItem &wi, WalkItem &wo) { - // need one arg for check - if (node->args.empty() || command == FindArgs) + const size_t sz = node->args.size(); + if (sz < 1 || command == FindArgs) return; Log::dumpWI(node, "wo in ", wo); - Node *node1 = skipNop(node->args[0]); + WalkItem wi2 = wi; + walkTree(node->args[1], wi2, wo); + wi2 = wo; + Log::dumpWI(node, "wi2 ", wi2); + walkTree(node->args[0], wi2, wo); + if (sz > 2) + { + wi2 = wo; + Log::dumpWI(node, "wi2 ", wi2); + walkTree(node->args[2], wi2, wo); + } + Node *node1 = skipNop(node->args[0]); if (node1 && node1->nodeType == VAR_DECL) { @@ -343,6 +354,7 @@ void analyseBindExpr(BindExprNode *node, const WalkItem &wi, WalkItem &wo) addLinkedVar(wo, initial->label, varDecl->label); } } + wo.stopWalking = true; Log::dumpWI(node, "wo out ", wo); } |