Coverage Report

Created: 2018-09-25 14:53

/work/obj-fuzz/dist/include/js/UniquePtr.h
Line
Count
Source
1
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2
 * vim: set ts=8 sts=4 et sw=4 tw=99:
3
 * This Source Code Form is subject to the terms of the Mozilla Public
4
 * License, v. 2.0. If a copy of the MPL was not distributed with this
5
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7
#ifndef js_UniquePtr_h
8
#define js_UniquePtr_h
9
10
#include "mozilla/UniquePtr.h"
11
12
#include "js/Utility.h"
13
14
namespace js {
15
16
// Replacement for mozilla::UniquePtr that defaults to JS::DeletePolicy.
17
template <typename T, typename D = JS::DeletePolicy<T>>
18
using UniquePtr = mozilla::UniquePtr<T, D>;
19
20
namespace detail {
21
22
template<typename T>
23
struct UniqueSelector
24
{
25
  typedef UniquePtr<T> SingleObject;
26
};
27
28
template<typename T>
29
struct UniqueSelector<T[]>
30
{
31
  typedef UniquePtr<T[]> UnknownBound;
32
};
33
34
template<typename T, decltype(sizeof(int)) N>
35
struct UniqueSelector<T[N]>
36
{
37
  typedef UniquePtr<T[N]> KnownBound;
38
};
39
40
} // namespace detail
41
42
// Replacement for mozilla::MakeUnique that correctly calls js_new and produces
43
// a js::UniquePtr.
44
template<typename T, typename... Args>
45
typename detail::UniqueSelector<T>::SingleObject
46
MakeUnique(Args&&... aArgs)
47
144
{
48
144
  return UniquePtr<T>(js_new<T>(std::forward<Args>(aArgs)...));
49
144
}
Unexecuted instantiation: js::detail::UniqueSelector<JS::ubi::SimpleEdgeRange>::SingleObject js::MakeUnique<JS::ubi::SimpleEdgeRange>()
Unexecuted instantiation: js::detail::UniqueSelector<JS::ubi::BackEdge>::SingleObject js::MakeUnique<JS::ubi::BackEdge>()
js::detail::UniqueSelector<js::SharedImmutableStringsCache::StringBox>::SingleObject js::MakeUnique<js::SharedImmutableStringsCache::StringBox, mozilla::UniquePtr<char [], JS::FreePolicy>, unsigned long&>(mozilla::UniquePtr<char [], JS::FreePolicy>&&, unsigned long&)
Line
Count
Source
47
3
{
48
3
  return UniquePtr<T>(js_new<T>(std::forward<Args>(aArgs)...));
49
3
}
Unexecuted instantiation: js::detail::UniqueSelector<js::jit::IonScriptCounts>::SingleObject js::MakeUnique<js::jit::IonScriptCounts>()
js::detail::UniqueSelector<js::jit::CodeGenerator>::SingleObject js::MakeUnique<js::jit::CodeGenerator, js::jit::MIRGenerator*&, js::jit::LIRGraph*&>(js::jit::MIRGenerator*&, js::jit::LIRGraph*&)
Line
Count
Source
47
14
{
48
14
  return UniquePtr<T>(js_new<T>(std::forward<Args>(aArgs)...));
49
14
}
Unexecuted instantiation: js::detail::UniqueSelector<js::jit::PcScriptCache>::SingleObject js::MakeUnique<js::jit::PcScriptCache, unsigned long>(unsigned long&&)
Unexecuted instantiation: js::detail::UniqueSelector<JSStructuredCloneData>::SingleObject js::MakeUnique<JSStructuredCloneData, JS::StructuredCloneScope>(JS::StructuredCloneScope&&)
Unexecuted instantiation: js::detail::UniqueSelector<JSErrorNotes::Note>::SingleObject js::MakeUnique<JSErrorNotes::Note>()
Unexecuted instantiation: js::detail::UniqueSelector<JSErrorNotes>::SingleObject js::MakeUnique<JSErrorNotes>()
Unexecuted instantiation: js::detail::UniqueSelector<JS::dbg::GarbageCollectionEvent>::SingleObject js::MakeUnique<JS::dbg::GarbageCollectionEvent, unsigned long&>(unsigned long&)
js::detail::UniqueSelector<mozilla::Vector<js::HelperThread, 0ul, js::SystemAllocPolicy> >::SingleObject js::MakeUnique<mozilla::Vector<js::HelperThread, 0ul, js::SystemAllocPolicy>>()
Line
Count
Source
47
3
{
48
3
  return UniquePtr<T>(js_new<T>(std::forward<Args>(aArgs)...));
49
3
}
Unexecuted instantiation: js::detail::UniqueSelector<mozilla::HashMap<js::ScriptSourceChunk, mozilla::UniquePtr<char16_t [], JS::FreePolicy>, js::ScriptSourceChunkHasher, js::SystemAllocPolicy> >::SingleObject js::MakeUnique<mozilla::HashMap<js::ScriptSourceChunk, mozilla::UniquePtr<char16_t [], JS::FreePolicy>, js::ScriptSourceChunkHasher, js::SystemAllocPolicy>>()
Unexecuted instantiation: js::detail::UniqueSelector<js::SourceCompressionTask>::SingleObject js::MakeUnique<js::SourceCompressionTask, JSRuntime*, js::ScriptSource*>(JSRuntime*&&, js::ScriptSource*&&)
Unexecuted instantiation: js::detail::UniqueSelector<js::XDRIncrementalEncoder>::SingleObject js::MakeUnique<js::XDRIncrementalEncoder, JSContext*&>(JSContext*&)
js::detail::UniqueSelector<mozilla::HashSet<js::Shape*, js::ShapeHasher, js::SystemAllocPolicy> >::SingleObject js::MakeUnique<mozilla::HashSet<js::Shape*, js::ShapeHasher, js::SystemAllocPolicy>>()
Line
Count
Source
47
73
{
48
73
  return UniquePtr<T>(js_new<T>(std::forward<Args>(aArgs)...));
49
73
}
js::detail::UniqueSelector<JS::Zone>::SingleObject js::MakeUnique<JS::Zone, JSRuntime*>(JSRuntime*&&)
Line
Count
Source
47
3
{
48
3
  return UniquePtr<T>(js_new<T>(std::forward<Args>(aArgs)...));
49
3
}
Unexecuted instantiation: js::detail::UniqueSelector<JS::ubi::PreComputedEdgeRange>::SingleObject js::MakeUnique<JS::ubi::PreComputedEdgeRange, mozilla::Vector<JS::ubi::Edge, 8ul, js::SystemAllocPolicy>&>(mozilla::Vector<JS::ubi::Edge, 8ul, js::SystemAllocPolicy>&)
Unexecuted instantiation: js::detail::UniqueSelector<JS::ubi::ByObjectClass::Count>::SingleObject js::MakeUnique<JS::ubi::ByObjectClass::Count, JS::ubi::ByObjectClass&, mozilla::UniquePtr<JS::ubi::CountBase, JS::ubi::CountDeleter>&>(JS::ubi::ByObjectClass&, mozilla::UniquePtr<JS::ubi::CountBase, JS::ubi::CountDeleter>&)
Unexecuted instantiation: js::detail::UniqueSelector<JS::ubi::ByDomObjectClass::Count>::SingleObject js::MakeUnique<JS::ubi::ByDomObjectClass::Count, JS::ubi::ByDomObjectClass&>(JS::ubi::ByDomObjectClass&)
Unexecuted instantiation: js::detail::UniqueSelector<JS::ubi::ByUbinodeType::Count>::SingleObject js::MakeUnique<JS::ubi::ByUbinodeType::Count, JS::ubi::ByUbinodeType&>(JS::ubi::ByUbinodeType&)
Unexecuted instantiation: js::detail::UniqueSelector<JS::ubi::ByAllocationStack::Count>::SingleObject js::MakeUnique<JS::ubi::ByAllocationStack::Count, JS::ubi::ByAllocationStack&, mozilla::UniquePtr<JS::ubi::CountBase, JS::ubi::CountDeleter>&>(JS::ubi::ByAllocationStack&, mozilla::UniquePtr<JS::ubi::CountBase, JS::ubi::CountDeleter>&)
Unexecuted instantiation: js::detail::UniqueSelector<JS::ubi::ByFilename::Count>::SingleObject js::MakeUnique<JS::ubi::ByFilename::Count, JS::ubi::ByFilename&, mozilla::UniquePtr<JS::ubi::CountBase, JS::ubi::CountDeleter>, mozilla::UniquePtr<JS::ubi::CountBase, JS::ubi::CountDeleter> >(JS::ubi::ByFilename&, mozilla::UniquePtr<JS::ubi::CountBase, JS::ubi::CountDeleter>&&, mozilla::UniquePtr<JS::ubi::CountBase, JS::ubi::CountDeleter>&&)
Unexecuted instantiation: js::detail::UniqueSelector<BuiltinThunks>::SingleObject js::MakeUnique<BuiltinThunks>()
Unexecuted instantiation: js::detail::UniqueSelector<js::wasm::FuncType>::SingleObject js::MakeUnique<js::wasm::FuncType>()
Unexecuted instantiation: js::detail::UniqueSelector<js::wasm::ModuleSegment>::SingleObject js::MakeUnique<js::wasm::ModuleSegment, js::wasm::Tier&, mozilla::UniquePtr<unsigned char, js::wasm::FreeCode>, unsigned int&, js::wasm::LinkData const&>(js::wasm::Tier&, mozilla::UniquePtr<unsigned char, js::wasm::FreeCode>&&, unsigned int&, js::wasm::LinkData const&)
Unexecuted instantiation: js::detail::UniqueSelector<js::wasm::ModuleSegment>::SingleObject js::MakeUnique<js::wasm::ModuleSegment, js::wasm::Tier, mozilla::UniquePtr<unsigned char, js::wasm::FreeCode>, unsigned int&, js::wasm::LinkData const&>(js::wasm::Tier&&, mozilla::UniquePtr<unsigned char, js::wasm::FreeCode>&&, unsigned int&, js::wasm::LinkData const&)
Unexecuted instantiation: js::detail::UniqueSelector<js::wasm::LazyStubSegment>::SingleObject js::MakeUnique<js::wasm::LazyStubSegment, mozilla::UniquePtr<unsigned char, js::wasm::FreeCode>, unsigned long&>(mozilla::UniquePtr<unsigned char, js::wasm::FreeCode>&&, unsigned long&)
Unexecuted instantiation: js::detail::UniqueSelector<js::wasm::MetadataTier>::SingleObject js::MakeUnique<js::wasm::MetadataTier, js::wasm::Tier>(js::wasm::Tier&&)
Unexecuted instantiation: js::detail::UniqueSelector<js::wasm::CodeTier>::SingleObject js::MakeUnique<js::wasm::CodeTier, mozilla::UniquePtr<js::wasm::MetadataTier, JS::DeletePolicy<js::wasm::MetadataTier> >, mozilla::UniquePtr<js::wasm::ModuleSegment, JS::DeletePolicy<js::wasm::ModuleSegment> > >(mozilla::UniquePtr<js::wasm::MetadataTier, JS::DeletePolicy<js::wasm::MetadataTier> >&&, mozilla::UniquePtr<js::wasm::ModuleSegment, JS::DeletePolicy<js::wasm::ModuleSegment> >&&)
Unexecuted instantiation: js::detail::UniqueSelector<js::wasm::LinkData>::SingleObject js::MakeUnique<js::wasm::LinkData, js::wasm::Tier>(js::wasm::Tier&&)
Unexecuted instantiation: js::detail::UniqueSelector<mozilla::Vector<unsigned char, 0ul, js::SystemAllocPolicy> >::SingleObject js::MakeUnique<mozilla::Vector<unsigned char, 0ul, js::SystemAllocPolicy>>()
Unexecuted instantiation: js::detail::UniqueSelector<JS::GCHashMap<unsigned int, js::HeapPtr<JSFunction*>, mozilla::DefaultHasher<unsigned int>, js::SystemAllocPolicy, JS::DefaultMapSweepPolicy<unsigned int, js::HeapPtr<JSFunction*> > > >::SingleObject js::MakeUnique<JS::GCHashMap<unsigned int, js::HeapPtr<JSFunction*>, mozilla::DefaultHasher<unsigned int>, js::SystemAllocPolicy, JS::DefaultMapSweepPolicy<unsigned int, js::HeapPtr<JSFunction*> > >>()
Unexecuted instantiation: js::detail::UniqueSelector<JS::WeakCache<JS::GCHashMap<unsigned int, js::ReadBarriered<js::WasmFunctionScope*>, mozilla::DefaultHasher<unsigned int>, js::SystemAllocPolicy, JS::DefaultMapSweepPolicy<unsigned int, js::ReadBarriered<js::WasmFunctionScope*> > > > >::SingleObject js::MakeUnique<JS::WeakCache<JS::GCHashMap<unsigned int, js::ReadBarriered<js::WasmFunctionScope*>, mozilla::DefaultHasher<unsigned int>, js::SystemAllocPolicy, JS::DefaultMapSweepPolicy<unsigned int, js::ReadBarriered<js::WasmFunctionScope*> > > >, JS::Zone*>(JS::Zone*&&)
Unexecuted instantiation: js::detail::UniqueSelector<JS::GCVector<js::WasmGlobalObject*, 0ul, js::SystemAllocPolicy> >::SingleObject js::MakeUnique<JS::GCVector<js::WasmGlobalObject*, 0ul, js::SystemAllocPolicy>>()
Unexecuted instantiation: js::detail::UniqueSelector<JS::WeakCache<JS::GCHashSet<js::ReadBarriered<js::WasmInstanceObject*>, js::MovableCellHasher<js::ReadBarriered<js::WasmInstanceObject*> >, js::SystemAllocPolicy> > >::SingleObject js::MakeUnique<JS::WeakCache<JS::GCHashSet<js::ReadBarriered<js::WasmInstanceObject*>, js::MovableCellHasher<js::ReadBarriered<js::WasmInstanceObject*> >, js::SystemAllocPolicy> >, JS::Zone*>(JS::Zone*&&)
Unexecuted instantiation: js::detail::UniqueSelector<js::wasm::Module::Tier2GeneratorTaskImpl>::SingleObject js::MakeUnique<js::wasm::Module::Tier2GeneratorTaskImpl, js::wasm::CompileArgs const&, js::wasm::ShareableBytes const&, js::wasm::Module&>(js::wasm::CompileArgs const&, js::wasm::ShareableBytes const&, js::wasm::Module&)
Unexecuted instantiation: js::detail::UniqueSelector<js::wasm::MetadataTier>::SingleObject js::MakeUnique<js::wasm::MetadataTier, js::wasm::Tier&>(js::wasm::Tier&)
js::detail::UniqueSelector<sweepaction::SweepActionCall<js::FreeOp*, js::SliceBudget&> >::SingleObject js::MakeUnique<sweepaction::SweepActionCall<js::FreeOp*, js::SliceBudget&>, js::gc::IncrementalProgress (js::gc::GCRuntime::*&)(js::FreeOp*, js::SliceBudget&)>(js::gc::IncrementalProgress (js::gc::GCRuntime::*&)(js::FreeOp*, js::SliceBudget&))
Line
Count
Source
47
15
{
48
15
  return UniquePtr<T>(js_new<T>(std::forward<Args>(aArgs)...));
49
15
}
js::detail::UniqueSelector<sweepaction::SweepActionCall<js::FreeOp*, js::SliceBudget&, JS::Zone*> >::SingleObject js::MakeUnique<sweepaction::SweepActionCall<js::FreeOp*, js::SliceBudget&, JS::Zone*>, js::gc::IncrementalProgress (js::gc::GCRuntime::*&)(js::FreeOp*, js::SliceBudget&, JS::Zone*)>(js::gc::IncrementalProgress (js::gc::GCRuntime::*&)(js::FreeOp*, js::SliceBudget&, JS::Zone*))
Line
Count
Source
47
9
{
48
9
  return UniquePtr<T>(js_new<T>(std::forward<Args>(aArgs)...));
49
9
}
js::detail::UniqueSelector<sweepaction::SweepActionCall<js::FreeOp*, js::SliceBudget&, JS::Zone*, js::gc::AllocKind> >::SingleObject js::MakeUnique<sweepaction::SweepActionCall<js::FreeOp*, js::SliceBudget&, JS::Zone*, js::gc::AllocKind>, js::gc::IncrementalProgress (js::gc::GCRuntime::*&)(js::FreeOp*, js::SliceBudget&, JS::Zone*, js::gc::AllocKind)>(js::gc::IncrementalProgress (js::gc::GCRuntime::*&)(js::FreeOp*, js::SliceBudget&, JS::Zone*, js::gc::AllocKind))
Line
Count
Source
47
6
{
48
6
  return UniquePtr<T>(js_new<T>(std::forward<Args>(aArgs)...));
49
6
}
js::detail::UniqueSelector<sweepaction::SweepActionForEach<ContainerIter<mozilla::EnumSet<js::gc::AllocKind, unsigned int> >, mozilla::EnumSet<js::gc::AllocKind, unsigned int>, js::gc::GCRuntime*, js::FreeOp*, js::SliceBudget&, JS::Zone*> >::SingleObject js::MakeUnique<sweepaction::SweepActionForEach<ContainerIter<mozilla::EnumSet<js::gc::AllocKind, unsigned int> >, mozilla::EnumSet<js::gc::AllocKind, unsigned int>, js::gc::GCRuntime*, js::FreeOp*, js::SliceBudget&, JS::Zone*>, mozilla::EnumSet<js::gc::AllocKind, unsigned int>&, mozilla::UniquePtr<js::gc::SweepAction<js::gc::GCRuntime*, js::FreeOp*, js::SliceBudget&, JS::Zone*, js::gc::AllocKind>, JS::DeletePolicy<js::gc::SweepAction<js::gc::GCRuntime*, js::FreeOp*, js::SliceBudget&, JS::Zone*, js::gc::AllocKind> > > >(mozilla::EnumSet<js::gc::AllocKind, unsigned int>&, mozilla::UniquePtr<js::gc::SweepAction<js::gc::GCRuntime*, js::FreeOp*, js::SliceBudget&, JS::Zone*, js::gc::AllocKind>, JS::DeletePolicy<js::gc::SweepAction<js::gc::GCRuntime*, js::FreeOp*, js::SliceBudget&, JS::Zone*, js::gc::AllocKind> > >&&)
Line
Count
Source
47
6
{
48
6
  return UniquePtr<T>(js_new<T>(std::forward<Args>(aArgs)...));
49
6
}
js::detail::UniqueSelector<sweepaction::SweepActionSequence<js::gc::GCRuntime*, js::FreeOp*, js::SliceBudget&, JS::Zone*> >::SingleObject js::MakeUnique<sweepaction::SweepActionSequence<js::gc::GCRuntime*, js::FreeOp*, js::SliceBudget&, JS::Zone*>>()
Line
Count
Source
47
3
{
48
3
  return UniquePtr<T>(js_new<T>(std::forward<Args>(aArgs)...));
49
3
}
js::detail::UniqueSelector<sweepaction::SweepActionForEach<js::gc::SweepGroupZonesIter, JSRuntime*, js::gc::GCRuntime*, js::FreeOp*, js::SliceBudget&> >::SingleObject js::MakeUnique<sweepaction::SweepActionForEach<js::gc::SweepGroupZonesIter, JSRuntime*, js::gc::GCRuntime*, js::FreeOp*, js::SliceBudget&>, JSRuntime*&, mozilla::UniquePtr<js::gc::SweepAction<js::gc::GCRuntime*, js::FreeOp*, js::SliceBudget&, JS::Zone*>, JS::DeletePolicy<js::gc::SweepAction<js::gc::GCRuntime*, js::FreeOp*, js::SliceBudget&, JS::Zone*> > > >(JSRuntime*&, mozilla::UniquePtr<js::gc::SweepAction<js::gc::GCRuntime*, js::FreeOp*, js::SliceBudget&, JS::Zone*>, JS::DeletePolicy<js::gc::SweepAction<js::gc::GCRuntime*, js::FreeOp*, js::SliceBudget&, JS::Zone*> > >&&)
Line
Count
Source
47
3
{
48
3
  return UniquePtr<T>(js_new<T>(std::forward<Args>(aArgs)...));
49
3
}
js::detail::UniqueSelector<sweepaction::SweepActionSequence<js::gc::GCRuntime*, js::FreeOp*, js::SliceBudget&> >::SingleObject js::MakeUnique<sweepaction::SweepActionSequence<js::gc::GCRuntime*, js::FreeOp*, js::SliceBudget&>>()
Line
Count
Source
47
3
{
48
3
  return UniquePtr<T>(js_new<T>(std::forward<Args>(aArgs)...));
49
3
}
js::detail::UniqueSelector<sweepaction::SweepActionRepeatFor<js::gc::SweepGroupsIter, JSRuntime*, js::gc::GCRuntime*, js::FreeOp*, js::SliceBudget&> >::SingleObject js::MakeUnique<sweepaction::SweepActionRepeatFor<js::gc::SweepGroupsIter, JSRuntime*, js::gc::GCRuntime*, js::FreeOp*, js::SliceBudget&>, JSRuntime*&, mozilla::UniquePtr<js::gc::SweepAction<js::gc::GCRuntime*, js::FreeOp*, js::SliceBudget&>, JS::DeletePolicy<js::gc::SweepAction<js::gc::GCRuntime*, js::FreeOp*, js::SliceBudget&> > > >(JSRuntime*&, mozilla::UniquePtr<js::gc::SweepAction<js::gc::GCRuntime*, js::FreeOp*, js::SliceBudget&>, JS::DeletePolicy<js::gc::SweepAction<js::gc::GCRuntime*, js::FreeOp*, js::SliceBudget&> > >&&)
Line
Count
Source
47
3
{
48
3
  return UniquePtr<T>(js_new<T>(std::forward<Args>(aArgs)...));
49
3
}
50
51
template<typename T>
52
typename detail::UniqueSelector<T>::UnknownBound
53
MakeUnique(decltype(sizeof(int)) aN) = delete;
54
55
template<typename T, typename... Args>
56
typename detail::UniqueSelector<T>::KnownBound
57
MakeUnique(Args&&... aArgs) = delete;
58
59
} // namespace js
60
61
#endif /* js_UniquePtr_h */