зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1251480 - Implement Rooted<UniquePtr<T>>, r=terrence
--HG-- extra : rebase_source : 26962432d56d40f42e89b90e7585037d90ce4b68
This commit is contained in:
Родитель
51d8f437d1
Коммит
ffcba27ec8
|
@ -35,6 +35,7 @@
|
|||
|
||||
#include "js/TraceKind.h"
|
||||
#include "js/TracingAPI.h"
|
||||
#include "mozilla/UniquePtr.h"
|
||||
|
||||
class JSAtom;
|
||||
class JSFunction;
|
||||
|
@ -111,6 +112,19 @@ struct GCPolicy<JS::Heap<T>>
|
|||
}
|
||||
};
|
||||
|
||||
// GCPolicy<UniquePtr<T>> forwards the contained pointer to GCPolicy<T>.
|
||||
template <typename T, typename D>
|
||||
struct GCPolicy<mozilla::UniquePtr<T, D>>
|
||||
{
|
||||
static mozilla::UniquePtr<T,D> initial() { return mozilla::UniquePtr<T,D>(); }
|
||||
static void trace(JSTracer* trc, mozilla::UniquePtr<T,D>* tp, const char* name) {
|
||||
GCPolicy<T>::trace(trc, tp->get(), name);
|
||||
}
|
||||
static bool needsSweep(mozilla::UniquePtr<T,D>* tp) {
|
||||
return GCPolicy<T>::needsSweep(tp->get());
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace js
|
||||
|
||||
#endif // GCPolicyAPI_h
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#define js_TraceKind_h
|
||||
|
||||
#include "js/TypeDecls.h"
|
||||
#include "mozilla/UniquePtr.h"
|
||||
|
||||
// Forward declarations of all the types a TraceKind can denote.
|
||||
namespace js {
|
||||
|
@ -134,9 +135,13 @@ struct MapTypeToRootKind {
|
|||
};
|
||||
template <typename T>
|
||||
struct MapTypeToRootKind<T*> {
|
||||
static const JS::RootKind kind = \
|
||||
static const JS::RootKind kind =
|
||||
JS::MapTraceKindToRootKind<JS::MapTypeToTraceKind<T>::kind>::kind;
|
||||
};
|
||||
template <typename T>
|
||||
struct MapTypeToRootKind<mozilla::UniquePtr<T>> {
|
||||
static const JS::RootKind kind = JS::MapTypeToRootKind<T>::kind;
|
||||
};
|
||||
template <> struct MapTypeToRootKind<JS::Value> {
|
||||
static const JS::RootKind kind = JS::RootKind::Value;
|
||||
};
|
||||
|
|
Загрузка…
Ссылка в новой задаче