add a new setNumChildren method for resizing scopes. Tweak getHash() so

that we never return a tombstone value, which (thankfully) triggers an
assert in densemap.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97214 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2010-02-26 07:35:27 +00:00
parent 651d85c2f2
commit ca56feaf38

View File

@ -100,7 +100,8 @@ public:
}
unsigned getHash() const {
return (getHashImpl() << 4) ^ getKind();
// Clear the high bit so we don't conflict with tombstones etc.
return ((getHashImpl() << 4) ^ getKind()) & (~0U>>1);
}
void print(raw_ostream &OS, unsigned indent = 0) const;
@ -137,6 +138,15 @@ public:
Children[i] = 0;
return Res;
}
void setNumChildren(unsigned NC) {
if (NC < Children.size()) {
// delete any children we're about to lose pointers to.
for (unsigned i = NC, e = Children.size(); i != e; ++i)
delete Children[i];
}
Children.resize(NC);
}
static inline bool classof(const Matcher *N) {
return N->getKind() == Scope;