Bug 1251480 - Implement Rooted<UniquePtr<T>>, r=terrence

--HG--
extra : rebase_source : 26962432d56d40f42e89b90e7585037d90ce4b68
This commit is contained in:
Steve Fink 2016-02-26 11:56:29 -08:00
Родитель 51d8f437d1
Коммит ffcba27ec8
2 изменённых файлов: 20 добавлений и 1 удалений

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

@ -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;
};