[PATCH] D54866: Cleanups in IdentifierInfo following the removal of PTH
Bruno Ricci via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Nov 23 13:53:03 PST 2018
riccibruno created this revision.
riccibruno added a project: clang.
Herald added a subscriber: cfe-commits.
Conditional on D54547 <https://reviews.llvm.org/D54547>: PTH-- Remove feature entirely-
The `Entry` pointer in `IdentifierInfo` was only null for `IdentifierInfo`s
created from a PTH. Now that PTH support has been removed we can remove
some PTH specific code in `IdentifierInfo::getLength` and `IdentifierInfo::getNameStart`.
Also make the constructor of `IdentifierInfo` private to make sure that they
are only created by `IdentifierTable`, and move it to the header so that it
can be inlined in `IdentifierTable::get` and `IdentifierTable::getOwn`.
Repository:
rC Clang
https://reviews.llvm.org/D54866
Files:
include/clang/Basic/IdentifierTable.h
lib/Basic/IdentifierTable.cpp
Index: lib/Basic/IdentifierTable.cpp
===================================================================
--- lib/Basic/IdentifierTable.cpp
+++ lib/Basic/IdentifierTable.cpp
@@ -33,28 +33,6 @@
using namespace clang;
-//===----------------------------------------------------------------------===//
-// IdentifierInfo Implementation
-//===----------------------------------------------------------------------===//
-
-IdentifierInfo::IdentifierInfo() {
- TokenID = tok::identifier;
- ObjCOrBuiltinID = 0;
- HasMacro = false;
- HadMacro = false;
- IsExtension = false;
- IsFutureCompatKeyword = false;
- IsPoisoned = false;
- IsCPPOperatorKeyword = false;
- NeedsHandleIdentifier = false;
- IsFromAST = false;
- ChangedAfterLoad = false;
- FEChangedAfterLoad = false;
- RevertedTokenID = false;
- OutOfDate = false;
- IsModulesImport = false;
-}
-
//===----------------------------------------------------------------------===//
// IdentifierTable Implementation
//===----------------------------------------------------------------------===//
Index: include/clang/Basic/IdentifierTable.h
===================================================================
--- include/clang/Basic/IdentifierTable.h
+++ include/clang/Basic/IdentifierTable.h
@@ -116,10 +116,19 @@
llvm::StringMapEntry<IdentifierInfo *> *Entry = nullptr;
+ IdentifierInfo()
+ : TokenID(tok::identifier), ObjCOrBuiltinID(0), HasMacro(false),
+ HadMacro(false), IsExtension(false), IsFutureCompatKeyword(false),
+ IsPoisoned(false), IsCPPOperatorKeyword(false),
+ NeedsHandleIdentifier(false), IsFromAST(false), ChangedAfterLoad(false),
+ FEChangedAfterLoad(false), RevertedTokenID(false), OutOfDate(false),
+ IsModulesImport(false) {}
+
public:
- IdentifierInfo();
IdentifierInfo(const IdentifierInfo &) = delete;
IdentifierInfo &operator=(const IdentifierInfo &) = delete;
+ IdentifierInfo(IdentifierInfo &&) = delete;
+ IdentifierInfo &operator=(IdentifierInfo &&) = delete;
/// Return true if this is the identifier for the specified string.
///
@@ -139,29 +148,14 @@
/// Return the beginning of the actual null-terminated string for this
/// identifier.
const char *getNameStart() const {
- if (Entry) return Entry->getKeyData();
- // FIXME: This is gross. It would be best not to embed specific details
- // of the PTH file format here.
- // The 'this' pointer really points to a
- // std::pair<IdentifierInfo, const char*>, where internal pointer
- // points to the external string data.
- using actualtype = std::pair<IdentifierInfo, const char *>;
-
- return ((const actualtype*) this)->second;
+ assert(Entry && "Entry is null!");
+ return Entry->getKeyData();
}
/// Efficiently return the length of this identifier info.
unsigned getLength() const {
- if (Entry) return Entry->getKeyLength();
- // FIXME: This is gross. It would be best not to embed specific details
- // of the PTH file format here.
- // The 'this' pointer really points to a
- // std::pair<IdentifierInfo, const char*>, where internal pointer
- // points to the external string data.
- using actualtype = std::pair<IdentifierInfo, const char *>;
-
- const char* p = ((const actualtype*) this)->second - 2;
- return (((unsigned) p[0]) | (((unsigned) p[1]) << 8)) - 1;
+ assert(Entry && "Entry is null!");
+ return Entry->getKeyLength();
}
/// Return the actual identifier string.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D54866.175141.patch
Type: text/x-patch
Size: 3499 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20181123/bb91b266/attachment.bin>
More information about the cfe-commits
mailing list