aboutsummaryrefslogtreecommitdiff
path: root/lib/Frontend/PCHReader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Frontend/PCHReader.cpp')
-rw-r--r--lib/Frontend/PCHReader.cpp49
1 files changed, 8 insertions, 41 deletions
diff --git a/lib/Frontend/PCHReader.cpp b/lib/Frontend/PCHReader.cpp
index df9f301f79..f1d7e7a558 100644
--- a/lib/Frontend/PCHReader.cpp
+++ b/lib/Frontend/PCHReader.cpp
@@ -1943,47 +1943,14 @@ IdentifierInfo *PCHReader::DecodeIdentifierInfo(unsigned ID) {
uint32_t Offset = IdentifierOffsets[ID - 1];
const char *Str = IdentifierTableData + Offset;
- // If there is an identifier lookup table, but the offset of this
- // string is after the identifier table itself, then we know that
- // this string is not in the on-disk hash table. Therefore,
- // disable lookup into the hash table when looking for this
- // identifier.
- PCHIdentifierLookupTable *IdTable
- = (PCHIdentifierLookupTable *)IdentifierLookupTable;
- if (!IdTable ||
- Offset >= uint32_t(IdTable->getBuckets() - IdTable->getBase())) {
- // Turn off lookup into the on-disk hash table. We know that
- // this identifier is not there.
- if (IdTable)
- PP.getIdentifierTable().setExternalIdentifierLookup(0);
-
- // All of the strings in the PCH file are preceded by a 16-bit
- // length. Extract that 16-bit length to avoid having to execute
- // strlen().
- const char *StrLenPtr = Str - 2;
- unsigned StrLen = (((unsigned) StrLenPtr[0])
- | (((unsigned) StrLenPtr[1]) << 8)) - 1;
- IdentifiersLoaded[ID - 1]=&PP.getIdentifierTable().get(Str, Str + StrLen);
-
- // Turn on lookup into the on-disk hash table, if we have an
- // on-disk hash table.
- if (IdTable)
- PP.getIdentifierTable().setExternalIdentifierLookup(this);
- } else {
- // The identifier is a key in our on-disk hash table. Since we
- // know where the hash table entry starts, just read in this
- // (key, value) pair.
- PCHIdentifierLookupTrait Trait(const_cast<PCHReader &>(*this));
- const unsigned char *Pos = (const unsigned char *)Str - 4;
- std::pair<unsigned, unsigned> KeyDataLengths
- = Trait.ReadKeyDataLength(Pos);
-
- PCHIdentifierLookupTrait::internal_key_type InternalKey
- = Trait.ReadKey(Pos, KeyDataLengths.first);
- Pos = (const unsigned char *)Str + KeyDataLengths.first;
- IdentifiersLoaded[ID - 1] = Trait.ReadData(InternalKey, Pos,
- KeyDataLengths.second);
- }
+ // All of the strings in the PCH file are preceded by a 16-bit
+ // length. Extract that 16-bit length to avoid having to execute
+ // strlen().
+ const char *StrLenPtr = Str - 2;
+ unsigned StrLen = (((unsigned) StrLenPtr[0])
+ | (((unsigned) StrLenPtr[1]) << 8)) - 1;
+ IdentifiersLoaded[ID - 1]
+ = &PP.getIdentifierTable().get(Str, Str + StrLen);
}
return IdentifiersLoaded[ID - 1];