Bug 1120796 - Part 2: Replace ConvertibleToBool hackarounds with explicit bool operators. r=Waldo

This commit is contained in:
Birunthan Mohanathas 2015-02-03 18:52:36 +02:00
Родитель 847dbb9825
Коммит 1b10c9d731
15 изменённых файлов: 32 добавлений и 95 удалений

Просмотреть файл

@ -386,10 +386,6 @@ private: // data
*/
class DrawableFrameRef MOZ_FINAL
{
// Implementation details for safe boolean conversion.
typedef void (DrawableFrameRef::* ConvertibleToBool)(float*****, double*****);
void nonNull(float*****, double*****) {}
public:
DrawableFrameRef() { }
@ -416,10 +412,7 @@ public:
return *this;
}
operator ConvertibleToBool() const
{
return bool(mFrame) ? &DrawableFrameRef::nonNull : 0;
}
explicit operator bool() const { return bool(mFrame); }
imgFrame* operator->()
{
@ -461,10 +454,6 @@ private:
*/
class RawAccessFrameRef MOZ_FINAL
{
// Implementation details for safe boolean conversion.
typedef void (RawAccessFrameRef::* ConvertibleToBool)(float*****, double*****);
void nonNull(float*****, double*****) {}
public:
RawAccessFrameRef() { }
@ -503,10 +492,7 @@ public:
return *this;
}
operator ConvertibleToBool() const
{
return bool(mFrame) ? &RawAccessFrameRef::nonNull : 0;
}
explicit operator bool() const { return bool(mFrame); }
imgFrame* operator->()
{

Просмотреть файл

@ -142,8 +142,6 @@ class Builder {
class BuiltThing {
friend class BuilderOrigin;
void nonNull() {}
protected:
// The Builder to which this trusted thing belongs.
Builder &owner;
@ -170,10 +168,9 @@ class Builder {
return *this;
}
typedef void (BuiltThing::* ConvertibleToBool)();
operator ConvertibleToBool() const {
// If we ever instantiate BuiltThink<Value>, this might not suffice.
return value ? &BuiltThing::nonNull : 0;
explicit operator bool() const {
// If we ever instantiate BuiltThing<Value>, this might not suffice.
return value;
}
private:
@ -221,8 +218,7 @@ class Builder {
bool defineProperty(JSContext *cx, const char *name, JS::HandleObject value);
bool defineProperty(JSContext *cx, const char *name, Object &value);
using Base::ConvertibleToBool;
using Base::operator ConvertibleToBool;
using Base::operator bool;
};
// Build an empty object for direct use by debugger code, owned by this

Просмотреть файл

@ -210,7 +210,7 @@ class HashMap
/************************************************** Shorthand operations */
bool has(const Lookup &l) const {
return impl.lookup(l) != nullptr;
return impl.lookup(l).found();
}
// Overwrite existing value with v. Return false on oom.
@ -441,7 +441,7 @@ class HashSet
/************************************************** Shorthand operations */
bool has(const Lookup &l) const {
return impl.lookup(l) != nullptr;
return impl.lookup(l).found();
}
// Add |u| if it is not present already. Return false on oom.
@ -767,8 +767,6 @@ class HashTable : private AllocPolicy
class Ptr
{
friend class HashTable;
typedef void (Ptr::* ConvertibleToBool)();
void nonNull() {}
Entry *entry_;
#ifdef JS_DEBUG
@ -800,8 +798,8 @@ class HashTable : private AllocPolicy
return entry_->isLive();
}
operator ConvertibleToBool() const {
return found() ? &Ptr::nonNull : 0;
explicit operator bool() const {
return found();
}
bool operator==(const Ptr &rhs) const {

Просмотреть файл

@ -153,9 +153,6 @@ struct Zone
// to several kinds of GC thing.
class JS_FRIEND_API(GCCellPtr)
{
typedef void (GCCellPtr::* ConvertibleToBool)();
void nonNull() {}
public:
// Construction from a void* and trace kind.
GCCellPtr(void *gcthing, JSGCTraceKind traceKind) : ptr(checkedCast(gcthing, traceKind)) {}
@ -179,9 +176,9 @@ class JS_FRIEND_API(GCCellPtr)
}
// Allow GCCellPtr to be used in a boolean context.
operator ConvertibleToBool() const {
explicit operator bool() const {
MOZ_ASSERT(bool(asCell()) == (kind() != JSTRACE_NULL));
return asCell() ? &GCCellPtr::nonNull : 0;
return asCell();
}
// Simplify checks to the kind.

Просмотреть файл

@ -250,9 +250,6 @@ class Node {
Concrete<T>::construct(base(), ptr);
}
typedef void (Node::* ConvertibleToBool)();
void nonNull() {}
public:
Node() { construct<void>(nullptr); }
@ -304,8 +301,8 @@ class Node {
bool operator==(const Node &rhs) const { return *base() == *rhs.base(); }
bool operator!=(const Node &rhs) const { return *base() != *rhs.base(); }
operator ConvertibleToBool() const {
return base()->ptr ? &Node::nonNull : 0;
explicit operator bool() const {
return base()->ptr != nullptr;
}
template<typename T>

Просмотреть файл

@ -103,8 +103,6 @@ class InlineMap
InlineElem *inlPtr;
bool isInlinePtr;
typedef Ptr ******* ConvertibleToBool;
explicit Ptr(WordMapPtr p) : mapPtr(p), isInlinePtr(false) {}
explicit Ptr(InlineElem *ie) : inlPtr(ie), isInlinePtr(true) {}
void operator==(const Ptr &other);
@ -124,8 +122,8 @@ class InlineMap
return isInlinePtr ? bool(inlPtr) : mapPtr.found();
}
operator ConvertibleToBool() const {
return ConvertibleToBool(found());
explicit operator bool() const {
return found();
}
K &key() {
@ -157,8 +155,6 @@ class InlineMap
void operator==(const AddPtr &other);
typedef AddPtr ******* ConvertibleToBool;
public:
AddPtr() {}
@ -166,8 +162,8 @@ class InlineMap
return isInlinePtr ? inlPtrFound : mapAddPtr.found();
}
operator ConvertibleToBool() const {
return found() ? ConvertibleToBool(1) : ConvertibleToBool(0);
explicit operator bool() const {
return found();
}
V &value() {

Просмотреть файл

@ -74,11 +74,8 @@ class IncrementalSafety
static IncrementalSafety Safe() { return IncrementalSafety(nullptr); }
static IncrementalSafety Unsafe(const char *reason) { return IncrementalSafety(reason); }
typedef void (IncrementalSafety::* ConvertibleToBool)();
void nonNull() {}
operator ConvertibleToBool() const {
return reason_ == nullptr ? &IncrementalSafety::nonNull : 0;
explicit operator bool() const {
return reason_ == nullptr;
}
const char *reason() {

Просмотреть файл

@ -36,11 +36,9 @@ struct DependentAddPtr
return table.relookupOrAdd(addPtr, key, value);
}
typedef void (DependentAddPtr::* ConvertibleToBool)();
void nonNull() {}
bool found() const { return addPtr.found(); }
operator ConvertibleToBool() const { return found() ? &DependentAddPtr::nonNull : 0; }
explicit operator bool() const { return found(); }
const Entry &operator*() const { return *addPtr; }
const Entry *operator->() const { return &*addPtr; }

Просмотреть файл

@ -171,9 +171,6 @@ class ArrayBufferObject : public ArrayBufferObjectMaybeShared
friend class ArrayBufferObject;
typedef void (BufferContents::* ConvertibleToBool)();
void nonNull() {}
BufferContents(uint8_t *data, BufferKind kind) : data_(data), kind_(kind) {
MOZ_ASSERT((kind_ & ~KIND_MASK) == 0);
}
@ -194,7 +191,7 @@ class ArrayBufferObject : public ArrayBufferObjectMaybeShared
uint8_t *data() const { return data_; }
BufferKind kind() const { return kind_; }
operator ConvertibleToBool() const { return data_ ? &BufferContents::nonNull : nullptr; }
explicit operator bool() const { return data_ != nullptr; }
};
static const Class class_;

Просмотреть файл

@ -128,8 +128,8 @@ class DebuggerWeakMap : private WeakMap<PreBarriered<UnbarrieredKey>, Relocatabl
bool hasKeyInZone(JS::Zone *zone) {
CountMap::Ptr p = zoneCounts.lookup(zone);
MOZ_ASSERT_IF(p, p->value() > 0);
return p;
MOZ_ASSERT_IF(p.found(), p->value() > 0);
return p.found();
}
private:

Просмотреть файл

@ -904,7 +904,7 @@ JSStructuredCloneWriter::startObject(HandleObject obj, bool *backref)
{
/* Handle cycles in the object graph. */
CloneMemory::AddPtr p = memory.lookupForAdd(obj);
if ((*backref = p))
if ((*backref = p.found()))
return out.writePair(SCTAG_BACK_REFERENCE_OBJECT, p->value());
if (!memory.add(p, obj, memory.count()))
return false;

Просмотреть файл

@ -82,9 +82,6 @@ struct Nothing { };
template<class T>
class Maybe
{
typedef void (Maybe::* ConvertibleToBool)(float*****, double*****);
void nonNull(float*****, double*****) {}
bool mIsSome;
AlignedStorage2<T> mStorage;
@ -154,7 +151,7 @@ public:
}
/* Methods that check whether this Maybe contains a value */
operator ConvertibleToBool() const { return mIsSome ? &Maybe::nonNull : 0; }
explicit operator bool() const { return isSome(); }
bool isSome() const { return mIsSome; }
bool isNothing() const { return !mIsSome; }

Просмотреть файл

@ -20,9 +20,6 @@ class Range
const RangedPtr<T> mStart;
const RangedPtr<T> mEnd;
typedef void (Range::* ConvertibleToBool)();
void nonNull() {}
public:
Range() : mStart(nullptr, 0), mEnd(nullptr, 0) {}
Range(T* aPtr, size_t aLength)
@ -36,7 +33,7 @@ public:
T& operator[](size_t aOffset) const { return mStart[aOffset]; }
operator ConvertibleToBool() const { return mStart ? &Range::nonNull : 0; }
explicit operator bool() const { return mStart != nullptr; }
};
} // namespace mozilla

Просмотреть файл

@ -49,9 +49,6 @@ class RangedPtr
T* const mRangeEnd;
#endif
typedef void (RangedPtr::* ConvertibleToBool)();
void nonNull() {}
void checkSanity()
{
MOZ_ASSERT(mRangeStart <= mPtr);
@ -118,7 +115,7 @@ public:
T* get() const { return mPtr; }
operator ConvertibleToBool() const { return mPtr ? &RangedPtr::nonNull : 0; }
explicit operator bool() const { return mPtr != nullptr; }
/*
* You can only assign one RangedPtr into another if the two pointers have

Просмотреть файл

@ -286,21 +286,13 @@ public:
return get();
}
explicit operator bool() const { return get() != nullptr; }
Pointer get() const { return ptr(); }
DeleterType& getDeleter() { return del(); }
const DeleterType& getDeleter() const { return del(); }
private:
typedef void (UniquePtr::* ConvertibleToBool)(double, char);
void nonNull(double, char) {}
public:
operator ConvertibleToBool() const
{
return get() != nullptr ? &UniquePtr::nonNull : nullptr;
}
Pointer release()
{
Pointer p = ptr();
@ -433,22 +425,14 @@ public:
return *this;
}
explicit operator bool() const { return get() != nullptr; }
T& operator[](decltype(sizeof(int)) aIndex) const { return get()[aIndex]; }
Pointer get() const { return mTuple.first(); }
DeleterType& getDeleter() { return mTuple.second(); }
const DeleterType& getDeleter() const { return mTuple.second(); }
private:
typedef void (UniquePtr::* ConvertibleToBool)(double, char);
void nonNull(double, char) {}
public:
operator ConvertibleToBool() const
{
return get() != nullptr ? &UniquePtr::nonNull : nullptr;
}
Pointer release()
{
Pointer p = mTuple.first();