mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-03-09 04:25:38 +00:00
Bug 875939. Make passing a Rooted<T> or Handle<T> to a function taking |const T&| not be a gc hazard. r=terrence
This commit is contained in:
parent
35e6b8bc90
commit
76ce95b003
@ -231,9 +231,13 @@ class MOZ_STACK_CLASS Handle : public js::HandleBase<T>
|
||||
typename mozilla::EnableIf<mozilla::IsConvertible<S, T>::value, int>::Type dummy = 0);
|
||||
|
||||
const T *address() const { return ptr; }
|
||||
T get() const { return *ptr; }
|
||||
const T& get() const { return *ptr; }
|
||||
|
||||
operator T() const { return get(); }
|
||||
/*
|
||||
* Return a reference so passing a Handle<T> to something that
|
||||
* takes a |const T&| is not a GC hazard.
|
||||
*/
|
||||
operator const T&() const { return get(); }
|
||||
T operator->() const { return get(); }
|
||||
|
||||
bool operator!=(const T &other) { return *ptr != other; }
|
||||
@ -465,7 +469,11 @@ class MOZ_STACK_CLASS Rooted : public js::RootedBase<T>
|
||||
Rooted<T> *previous() { return prev; }
|
||||
#endif
|
||||
|
||||
operator T() const { return ptr; }
|
||||
/*
|
||||
* Important: Return a reference here so passing a Rooted<T> to
|
||||
* something that takes a |const T&| is not a GC hazard.
|
||||
*/
|
||||
operator const T&() const { return ptr; }
|
||||
T operator->() const { return ptr; }
|
||||
T *address() { return &ptr; }
|
||||
const T *address() const { return &ptr; }
|
||||
|
Loading…
x
Reference in New Issue
Block a user