Make the ActionResult optimization work for non-void*'s and switch DeclPtrTy to use it.
llvm-svn: 67983
This commit is contained in:
parent
cd8bb18624
commit
57ce399326
|
@ -47,7 +47,7 @@ namespace clang {
|
|||
template<> struct IsResultPtrLowBitFree<1> { static const bool value = true;};
|
||||
template<> struct IsResultPtrLowBitFree<3> { static const bool value = true;};
|
||||
template<> struct IsResultPtrLowBitFree<4> { static const bool value = true;};
|
||||
//template<> struct IsResultPtrLowBitFree<5> { static const bool value = true;};
|
||||
template<> struct IsResultPtrLowBitFree<5> { static const bool value = true;};
|
||||
|
||||
/// Action - As the parser reads the input file and recognizes the productions
|
||||
/// of the grammar, it invokes methods on this class to turn the parsed input
|
||||
|
|
|
@ -230,7 +230,13 @@ namespace clang
|
|||
PtrWithInvalid = reinterpret_cast<uintptr_t>(VP);
|
||||
assert((PtrWithInvalid & 0x01) == 0 && "Badly aligned pointer");
|
||||
}
|
||||
|
||||
|
||||
ActionResult(PtrTy V) {
|
||||
void *VP = PtrTraits::getAsVoidPointer(V);
|
||||
PtrWithInvalid = reinterpret_cast<uintptr_t>(VP);
|
||||
assert((PtrWithInvalid & 0x01) == 0 && "Badly aligned pointer");
|
||||
}
|
||||
|
||||
ActionResult(const DiagnosticBuilder &) : PtrWithInvalid(0x01) { }
|
||||
|
||||
PtrTy get() const {
|
||||
|
@ -246,8 +252,9 @@ namespace clang
|
|||
|
||||
bool isInvalid() const { return PtrWithInvalid & 0x01; }
|
||||
|
||||
const ActionResult &operator=(void *RHS) {
|
||||
PtrWithInvalid = reinterpret_cast<uintptr_t>(RHS);
|
||||
const ActionResult &operator=(PtrTy RHS) {
|
||||
void *VP = PtrTraits::getAsVoidPointer(RHS);
|
||||
PtrWithInvalid = reinterpret_cast<uintptr_t>(VP);
|
||||
assert((PtrWithInvalid & 0x01) == 0 && "Badly aligned pointer");
|
||||
return *this;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue