diff options
author | Martin Nowack <m.nowack@imperial.ac.uk> | 2018-09-12 14:58:11 +0000 |
---|---|---|
committer | Cristian Cadar <c.cadar@imperial.ac.uk> | 2020-02-19 12:05:22 +0000 |
commit | 9cfa329a77d3dfec4746ca307c6da1b3e904cbfa (patch) | |
tree | c9379a0ab0b5afdf740fae0a01c67bf76d061d86 /lib/Expr/ExprPPrinter.cpp | |
parent | 86ab439d589d0afb1b710ef58296d07a263092e3 (diff) | |
download | klee-9cfa329a77d3dfec4746ca307c6da1b3e904cbfa.tar.gz |
Use `ref<>` for UpdateNode
Remove additional reference counting as part of UpdateNodeList and UpdateNode. Simplifies code.
Diffstat (limited to 'lib/Expr/ExprPPrinter.cpp')
-rw-r--r-- | lib/Expr/ExprPPrinter.cpp | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/lib/Expr/ExprPPrinter.cpp b/lib/Expr/ExprPPrinter.cpp index 2ccd7262..9d34e356 100644 --- a/lib/Expr/ExprPPrinter.cpp +++ b/lib/Expr/ExprPPrinter.cpp @@ -92,7 +92,8 @@ private: if (isVerySimple(e)) { return true; } else if (const ReadExpr *re = dyn_cast<ReadExpr>(e)) { - return isVerySimple(re->index) && isVerySimpleUpdate(re->updates.head); + return isVerySimple(re->index) && + isVerySimpleUpdate(re->updates.head.get()); } else { Expr *ep = e.get(); for (unsigned i=0; i<ep->getNumKids(); i++) @@ -113,7 +114,7 @@ private: // FIXME: This needs to be non-recursive. if (un) { if (couldPrintUpdates.insert(un).second) { - scanUpdate(un->next); + scanUpdate(un->next.get()); scan1(un->index); scan1(un->value); } else { @@ -130,7 +131,7 @@ private: scan1(ep->getKid(i)); if (const ReadExpr *re = dyn_cast<ReadExpr>(e)) { usedArrays.insert(re->updates.root); - scanUpdate(re->updates.head); + scanUpdate(re->updates.head.get()); } } else { shouldPrint.insert(e); @@ -139,10 +140,10 @@ private: } void printUpdateList(const UpdateList &updates, PrintContext &PC) { - const UpdateNode *head = updates.head; + auto head = updates.head; // Special case empty list. - if (!head) { + if (head.isNull()) { // FIXME: We need to do something (assert, mangle, etc.) so that printing // distinct arrays with the same name doesn't fail. PC << updates.root->name; @@ -153,22 +154,22 @@ private: bool openedList = false, nextShouldBreak = false; unsigned outerIndent = PC.pos; unsigned middleIndent = 0; - for (const UpdateNode *un = head; un; un = un->next) { + for (auto un = head; !un.isNull(); un = un->next) { // We are done if we hit the cache. - std::map<const UpdateNode*, unsigned>::iterator it = - updateBindings.find(un); + std::map<const UpdateNode *, unsigned>::iterator it = + updateBindings.find(un.get()); if (it!=updateBindings.end()) { if (openedList) PC << "] @ "; PC << "U" << it->second; return; - } else if (!hasScan || shouldPrintUpdates.count(un)) { + } else if (!hasScan || shouldPrintUpdates.count(un.get())) { if (openedList) PC << "] @"; if (un != head) PC.breakLine(outerIndent); - PC << "U" << updateCounter << ":"; - updateBindings.insert(std::make_pair(un, updateCounter++)); + PC << "U" << updateCounter << ":"; + updateBindings.insert(std::make_pair(un.get(), updateCounter++)); openedList = nextShouldBreak = false; } |