diff options
author | Andres Noetzli <andres.noetzli@gmail.com> | 2019-02-06 00:32:05 -0800 |
---|---|---|
committer | Andres Noetzli <andres.noetzli@gmail.com> | 2019-02-06 00:32:05 -0800 |
commit | 2cd7f78bdcc5493ea62da9a1fc72a846e8821597 (patch) | |
tree | ba6a971e0161a9b83b9be0e9439ad75d8a8fc24c /src/smt/smt_engine.cpp | |
parent | 043a0b28f1b616d5af1d29737bb30bcfcc48e9fe (diff) |
fix
Diffstat (limited to 'src/smt/smt_engine.cpp')
-rw-r--r-- | src/smt/smt_engine.cpp | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/src/smt/smt_engine.cpp b/src/smt/smt_engine.cpp index ea91bdddd..ee82b84c7 100644 --- a/src/smt/smt_engine.cpp +++ b/src/smt/smt_engine.cpp @@ -3493,10 +3493,8 @@ namespace { size_t countExtStringFun(Node n) { - size_t count = 0; - - std::unordered_map<TNode, bool, TNodeHashFunction> visited; - std::unordered_map<TNode, bool, TNodeHashFunction>::iterator it; + std::unordered_map<TNode, size_t, TNodeHashFunction> visited; + std::unordered_map<TNode, size_t, TNodeHashFunction>::iterator it; std::vector<TNode> visit; TNode cur; visit.push_back(n); @@ -3507,16 +3505,7 @@ size_t countExtStringFun(Node n) it = visited.find(cur); if (it == visited.end()) { - visited[cur] = false; - - Kind k = cur.getKind(); - if (k == kind::STRING_STRCTN || k == kind::STRING_STRREPL - || k == kind::STRING_STRIDOF || k == kind::STRING_ITOS - || k == kind::STRING_STOI || k == kind::STRING_IN_REGEXP || - k == kind::STRING_SUBSTR) - { - count++; - } + visited[cur] = 0; visit.push_back(cur); for (unsigned i = 0; i < cur.getNumChildren(); i++) @@ -3526,11 +3515,23 @@ size_t countExtStringFun(Node n) } else if (!it->second) { - visited[cur] = true; + for (const TNode c : cur) { + visited[cur] += visited[c]; + } + + Kind k = cur.getKind(); + if (k == kind::STRING_STRCTN || k == kind::STRING_STRREPL + || k == kind::STRING_STRIDOF || k == kind::STRING_ITOS + || k == kind::STRING_STOI || k == kind::STRING_IN_REGEXP + || k == kind::STRING_SUBSTR || k == kind::STRING_CHARAT + || k == kind::STRING_PREFIX || k == kind::STRING_SUFFIX) + { + visited[cur]++; + } } } while (!visit.empty()); - return count; + return visited[n]; } } |