diff options
author | Douglas Gregor <dgregor@apple.com> | 2013-01-23 18:53:14 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2013-01-23 18:53:14 +0000 |
commit | bfd73d74b9f8aa92dd71994a5a19794b7ca4fb01 (patch) | |
tree | d24c919bd732e6d9f469c59802c810174011a0bc /clang/lib/Serialization/ASTReader.cpp | |
parent | cc8fbbf129cf0619f3c796062571eb30e5c3735e (diff) | |
download | bcm5719-llvm-bfd73d74b9f8aa92dd71994a5a19794b7ca4fb01.tar.gz bcm5719-llvm-bfd73d74b9f8aa92dd71994a5a19794b7ca4fb01.zip |
Factor the trait for lookup into the on-based hash table of
identifiers into two parts: the part that involves dealing with the
key (which can be re-used) and the ASTReader-specific part that
creates the IdentifierInfos. While I'm at it, StringRef'ify this code,
which was using pair<const char*, unsigned>. No functionality change.
llvm-svn: 173283
Diffstat (limited to 'clang/lib/Serialization/ASTReader.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 3acf5b57510..83d894c1d63 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -440,22 +440,22 @@ ASTSelectorLookupTrait::ReadData(Selector, const unsigned char* d, return Result; } -unsigned ASTIdentifierLookupTrait::ComputeHash(const internal_key_type& a) { - return llvm::HashString(StringRef(a.first, a.second)); +unsigned ASTIdentifierLookupTraitBase::ComputeHash(const internal_key_type& a) { + return llvm::HashString(a); } std::pair<unsigned, unsigned> -ASTIdentifierLookupTrait::ReadKeyDataLength(const unsigned char*& d) { +ASTIdentifierLookupTraitBase::ReadKeyDataLength(const unsigned char*& d) { using namespace clang::io; unsigned DataLen = ReadUnalignedLE16(d); unsigned KeyLen = ReadUnalignedLE16(d); return std::make_pair(KeyLen, DataLen); } -std::pair<const char*, unsigned> -ASTIdentifierLookupTrait::ReadKey(const unsigned char* d, unsigned n) { +ASTIdentifierLookupTraitBase::internal_key_type +ASTIdentifierLookupTraitBase::ReadKey(const unsigned char* d, unsigned n) { assert(n >= 2 && d[n-1] == '\0'); - return std::make_pair((const char*) d, n-1); + return StringRef((const char*) d, n-1); } IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k, @@ -474,7 +474,7 @@ IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k, // and associate it with the persistent ID. IdentifierInfo *II = KnownII; if (!II) { - II = &Reader.getIdentifierTable().getOwn(StringRef(k.first, k.second)); + II = &Reader.getIdentifierTable().getOwn(k); KnownII = II; } Reader.SetIdentifierInfo(ID, II); @@ -503,7 +503,7 @@ IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k, // the new IdentifierInfo. IdentifierInfo *II = KnownII; if (!II) { - II = &Reader.getIdentifierTable().getOwn(StringRef(k.first, k.second)); + II = &Reader.getIdentifierTable().getOwn(StringRef(k)); KnownII = II; } Reader.markIdentifierUpToDate(II); @@ -1398,9 +1398,7 @@ namespace { ASTIdentifierLookupTrait Trait(IdTable->getInfoObj().getReader(), M, This->Found); - std::pair<const char*, unsigned> Key(This->Name.begin(), - This->Name.size()); - ASTIdentifierLookupTable::iterator Pos = IdTable->find(Key, &Trait); + ASTIdentifierLookupTable::iterator Pos = IdTable->find(This->Name, &Trait); if (Pos == IdTable->end()) return false; @@ -5745,9 +5743,9 @@ StringRef ASTIdentifierIterator::Next() { // We have any identifiers remaining in the current AST file; return // the next one. - std::pair<const char*, unsigned> Key = *Current; + StringRef Result = *Current; ++Current; - return StringRef(Key.first, Key.second); + return Result; } IdentifierIterator *ASTReader::getIdentifiers() const { |