Coverage Report

Created: 2018-09-25 14:53

/work/obj-fuzz/dist/include/mozilla/MaybeOneOf.h
Line
Count
Source
1
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
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
/*
8
 * A class storing one of two optional value types that supports in-place lazy
9
 * construction.
10
 */
11
12
#ifndef mozilla_MaybeOneOf_h
13
#define mozilla_MaybeOneOf_h
14
15
#include "mozilla/Assertions.h"
16
#include "mozilla/Move.h"
17
#include "mozilla/OperatorNewExtensions.h"
18
#include "mozilla/TemplateLib.h"
19
20
#include <new> // for placement new
21
#include <stddef.h> // for size_t
22
23
namespace mozilla {
24
25
/*
26
 * MaybeOneOf<T1, T2> is like Maybe, but it supports constructing either T1
27
 * or T2. When a MaybeOneOf<T1, T2> is constructed, it is |empty()|, i.e.,
28
 * no value has been constructed and no destructor will be called when the
29
 * MaybeOneOf<T1, T2> is destroyed. Upon calling |construct<T1>()| or
30
 * |construct<T2>()|, a T1 or T2 object will be constructed with the given
31
 * arguments and that object will be destroyed when the owning MaybeOneOf is
32
 * destroyed.
33
 *
34
 * Because MaybeOneOf must be aligned suitable to hold any value stored within
35
 * it, and because |alignas| requirements don't affect platform ABI with respect
36
 * to how parameters are laid out in memory, MaybeOneOf can't be used as the
37
 * type of a function parameter.  Pass MaybeOneOf to functions by pointer or
38
 * reference instead.
39
 */
40
template<class T1, class T2>
41
class MOZ_NON_PARAM MaybeOneOf
42
{
43
  static constexpr size_t StorageAlignment =
44
    tl::Max<alignof(T1), alignof(T2)>::value;
45
  static constexpr size_t StorageSize =
46
    tl::Max<sizeof(T1), sizeof(T2)>::value;
47
48
  alignas(StorageAlignment) unsigned char storage[StorageSize];
49
50
  // GCC fails due to -Werror=strict-aliasing if |storage| is directly cast to
51
  // T*.  Indirecting through these functions addresses the problem.
52
4.11k
  void* data() { return storage; }
Unexecuted instantiation: mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 0ul, mozilla::MallocAllocPolicy>, nsTArray<unsigned char> >::data()
Unexecuted instantiation: mozilla::MaybeOneOf<mozilla::layers::ShareableCanvasRenderer*, mozilla::layers::AsyncCanvasRenderer*>::data()
mozilla::MaybeOneOf<js::jit::JSJitFrameIter, js::wasm::WasmFrameIter>::data()
Line
Count
Source
52
262
  void* data() { return storage; }
mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy>, mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> >::data()
Line
Count
Source
52
3.85k
  void* data() { return storage; }
mozilla::MaybeOneOf<js::Shape::Range<(js::AllowGC)0>, js::Shape::Range<(js::AllowGC)1> >::data()
Line
Count
Source
52
3
  void* data() { return storage; }
Unexecuted instantiation: mozilla::MaybeOneOf<InlineCharBuffer<unsigned char>, InlineCharBuffer<char16_t> >::data()
53
611
  const void* data() const { return storage; }
mozilla::MaybeOneOf<js::jit::JSJitFrameIter, js::wasm::WasmFrameIter>::data() const
Line
Count
Source
53
138
  const void* data() const { return storage; }
mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy>, mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> >::data() const
Line
Count
Source
53
473
  const void* data() const { return storage; }
54
55
  enum State { None, SomeT1, SomeT2 } state;
56
  template <class T, class Ignored = void> struct Type2State {};
57
58
  template <class T>
59
  T& as()
60
2.56k
  {
61
2.56k
    MOZ_ASSERT(state == Type2State<T>::result);
62
2.56k
    return *static_cast<T*>(data());
63
2.56k
  }
Unexecuted instantiation: mozilla::Vector<unsigned char, 0ul, mozilla::MallocAllocPolicy>& mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 0ul, mozilla::MallocAllocPolicy>, nsTArray<unsigned char> >::as<mozilla::Vector<unsigned char, 0ul, mozilla::MallocAllocPolicy> >()
Unexecuted instantiation: nsTArray<unsigned char>& mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 0ul, mozilla::MallocAllocPolicy>, nsTArray<unsigned char> >::as<nsTArray<unsigned char> >()
Unexecuted instantiation: mozilla::layers::ShareableCanvasRenderer*& mozilla::MaybeOneOf<mozilla::layers::ShareableCanvasRenderer*, mozilla::layers::AsyncCanvasRenderer*>::as<mozilla::layers::ShareableCanvasRenderer*>()
Unexecuted instantiation: mozilla::layers::AsyncCanvasRenderer*& mozilla::MaybeOneOf<mozilla::layers::ShareableCanvasRenderer*, mozilla::layers::AsyncCanvasRenderer*>::as<mozilla::layers::AsyncCanvasRenderer*>()
js::jit::JSJitFrameIter& mozilla::MaybeOneOf<js::jit::JSJitFrameIter, js::wasm::WasmFrameIter>::as<js::jit::JSJitFrameIter>()
Line
Count
Source
60
236
  {
61
236
    MOZ_ASSERT(state == Type2State<T>::result);
62
236
    return *static_cast<T*>(data());
63
236
  }
Unexecuted instantiation: js::wasm::WasmFrameIter& mozilla::MaybeOneOf<js::jit::JSJitFrameIter, js::wasm::WasmFrameIter>::as<js::wasm::WasmFrameIter>()
mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy>& mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy>, mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> >::as<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy> >()
Line
Count
Source
60
2.32k
  {
61
2.32k
    MOZ_ASSERT(state == Type2State<T>::result);
62
2.32k
    return *static_cast<T*>(data());
63
2.32k
  }
Unexecuted instantiation: mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy>& mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy>, mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> >::as<mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> >()
Unexecuted instantiation: js::Shape::Range<(js::AllowGC)0>& mozilla::MaybeOneOf<js::Shape::Range<(js::AllowGC)0>, js::Shape::Range<(js::AllowGC)1> >::as<js::Shape::Range<(js::AllowGC)0> >()
js::Shape::Range<(js::AllowGC)1>& mozilla::MaybeOneOf<js::Shape::Range<(js::AllowGC)0>, js::Shape::Range<(js::AllowGC)1> >::as<js::Shape::Range<(js::AllowGC)1> >()
Line
Count
Source
60
2
  {
61
2
    MOZ_ASSERT(state == Type2State<T>::result);
62
2
    return *static_cast<T*>(data());
63
2
  }
Unexecuted instantiation: InlineCharBuffer<unsigned char>& mozilla::MaybeOneOf<InlineCharBuffer<unsigned char>, InlineCharBuffer<char16_t> >::as<InlineCharBuffer<unsigned char> >()
Unexecuted instantiation: InlineCharBuffer<char16_t>& mozilla::MaybeOneOf<InlineCharBuffer<unsigned char>, InlineCharBuffer<char16_t> >::as<InlineCharBuffer<char16_t> >()
64
65
  template <class T>
66
  const T& as() const
67
611
  {
68
611
    MOZ_ASSERT(state == Type2State<T>::result);
69
611
    return *static_cast<const T*>(data());
70
611
  }
js::jit::JSJitFrameIter const& mozilla::MaybeOneOf<js::jit::JSJitFrameIter, js::wasm::WasmFrameIter>::as<js::jit::JSJitFrameIter>() const
Line
Count
Source
67
138
  {
68
138
    MOZ_ASSERT(state == Type2State<T>::result);
69
138
    return *static_cast<const T*>(data());
70
138
  }
Unexecuted instantiation: js::wasm::WasmFrameIter const& mozilla::MaybeOneOf<js::jit::JSJitFrameIter, js::wasm::WasmFrameIter>::as<js::wasm::WasmFrameIter>() const
mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy> const& mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy>, mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> >::as<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy> >() const
Line
Count
Source
67
473
  {
68
473
    MOZ_ASSERT(state == Type2State<T>::result);
69
473
    return *static_cast<const T*>(data());
70
473
  }
Unexecuted instantiation: mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> const& mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy>, mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> >::as<mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> >() const
71
72
public:
73
1.56k
  MaybeOneOf() : state(None) {}
mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 0ul, mozilla::MallocAllocPolicy>, nsTArray<unsigned char> >::MaybeOneOf()
Line
Count
Source
73
5
  MaybeOneOf() : state(None) {}
Unexecuted instantiation: mozilla::MaybeOneOf<mozilla::layers::ShareableCanvasRenderer*, mozilla::layers::AsyncCanvasRenderer*>::MaybeOneOf()
mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy>, mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> >::MaybeOneOf()
Line
Count
Source
73
1.52k
  MaybeOneOf() : state(None) {}
mozilla::MaybeOneOf<js::Shape::Range<(js::AllowGC)0>, js::Shape::Range<(js::AllowGC)1> >::MaybeOneOf()
Line
Count
Source
73
1
  MaybeOneOf() : state(None) {}
Unexecuted instantiation: mozilla::MaybeOneOf<InlineCharBuffer<unsigned char>, InlineCharBuffer<char16_t> >::MaybeOneOf()
mozilla::MaybeOneOf<js::jit::JSJitFrameIter, js::wasm::WasmFrameIter>::MaybeOneOf()
Line
Count
Source
73
34
  MaybeOneOf() : state(None) {}
74
1.56k
  ~MaybeOneOf() { destroyIfConstructed(); }
Unexecuted instantiation: mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 0ul, mozilla::MallocAllocPolicy>, nsTArray<unsigned char> >::~MaybeOneOf()
Unexecuted instantiation: mozilla::MaybeOneOf<mozilla::layers::ShareableCanvasRenderer*, mozilla::layers::AsyncCanvasRenderer*>::~MaybeOneOf()
mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy>, mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> >::~MaybeOneOf()
Line
Count
Source
74
1.52k
  ~MaybeOneOf() { destroyIfConstructed(); }
mozilla::MaybeOneOf<js::jit::JSJitFrameIter, js::wasm::WasmFrameIter>::~MaybeOneOf()
Line
Count
Source
74
34
  ~MaybeOneOf() { destroyIfConstructed(); }
mozilla::MaybeOneOf<js::Shape::Range<(js::AllowGC)0>, js::Shape::Range<(js::AllowGC)1> >::~MaybeOneOf()
Line
Count
Source
74
1
  ~MaybeOneOf() { destroyIfConstructed(); }
Unexecuted instantiation: mozilla::MaybeOneOf<InlineCharBuffer<unsigned char>, InlineCharBuffer<char16_t> >::~MaybeOneOf()
75
76
  MaybeOneOf(MaybeOneOf&& rhs)
77
    : state(None)
78
  {
79
    if (!rhs.empty()) {
80
      if (rhs.constructed<T1>()) {
81
        construct<T1>(std::move(rhs.as<T1>()));
82
        rhs.as<T1>().~T1();
83
      } else {
84
        construct<T2>(std::move(rhs.as<T2>()));
85
        rhs.as<T2>().~T2();
86
      }
87
      rhs.state = None;
88
    }
89
  }
90
91
  MaybeOneOf& operator=(MaybeOneOf&& rhs)
92
  {
93
    MOZ_ASSERT(this != &rhs, "Self-move is prohibited");
94
    this->~MaybeOneOf();
95
    new(this) MaybeOneOf(std::move(rhs));
96
    return *this;
97
  }
98
99
1.97k
  bool empty() const { return state == None; }
Unexecuted instantiation: mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 0ul, mozilla::MallocAllocPolicy>, nsTArray<unsigned char> >::empty() const
Unexecuted instantiation: mozilla::MaybeOneOf<mozilla::layers::ShareableCanvasRenderer*, mozilla::layers::AsyncCanvasRenderer*>::empty() const
mozilla::MaybeOneOf<js::jit::JSJitFrameIter, js::wasm::WasmFrameIter>::empty() const
Line
Count
Source
99
444
  bool empty() const { return state == None; }
mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy>, mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> >::empty() const
Line
Count
Source
99
1.52k
  bool empty() const { return state == None; }
mozilla::MaybeOneOf<js::Shape::Range<(js::AllowGC)0>, js::Shape::Range<(js::AllowGC)1> >::empty() const
Line
Count
Source
99
1
  bool empty() const { return state == None; }
Unexecuted instantiation: mozilla::MaybeOneOf<InlineCharBuffer<unsigned char>, InlineCharBuffer<char16_t> >::empty() const
100
101
  template <class T>
102
1.39k
  bool constructed() const { return state == Type2State<T>::result; }
Unexecuted instantiation: bool mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 0ul, mozilla::MallocAllocPolicy>, nsTArray<unsigned char> >::constructed<mozilla::Vector<unsigned char, 0ul, mozilla::MallocAllocPolicy> >() const
Unexecuted instantiation: bool mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 0ul, mozilla::MallocAllocPolicy>, nsTArray<unsigned char> >::constructed<nsTArray<unsigned char> >() const
Unexecuted instantiation: bool mozilla::MaybeOneOf<mozilla::layers::ShareableCanvasRenderer*, mozilla::layers::AsyncCanvasRenderer*>::constructed<mozilla::layers::ShareableCanvasRenderer*>() const
bool mozilla::MaybeOneOf<js::jit::JSJitFrameIter, js::wasm::WasmFrameIter>::constructed<js::jit::JSJitFrameIter>() const
Line
Count
Source
102
296
  bool constructed() const { return state == Type2State<T>::result; }
Unexecuted instantiation: bool mozilla::MaybeOneOf<js::jit::JSJitFrameIter, js::wasm::WasmFrameIter>::constructed<js::wasm::WasmFrameIter>() const
bool mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy>, mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> >::constructed<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy> >() const
Line
Count
Source
102
1.10k
  bool constructed() const { return state == Type2State<T>::result; }
Unexecuted instantiation: bool mozilla::MaybeOneOf<InlineCharBuffer<unsigned char>, InlineCharBuffer<char16_t> >::constructed<InlineCharBuffer<unsigned char> >() const
103
104
  template <class T, class... Args>
105
  void construct(Args&&... aArgs)
106
1.55k
  {
107
1.55k
    MOZ_ASSERT(state == None);
108
1.55k
    state = Type2State<T>::result;
109
1.55k
    ::new (KnownNotNull, data()) T(std::forward<Args>(aArgs)...);
110
1.55k
  }
Unexecuted instantiation: void mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 0ul, mozilla::MallocAllocPolicy>, nsTArray<unsigned char> >::construct<nsTArray<unsigned char>, nsTArray<unsigned char> >(nsTArray<unsigned char>&&)
Unexecuted instantiation: void mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 0ul, mozilla::MallocAllocPolicy>, nsTArray<unsigned char> >::construct<mozilla::Vector<unsigned char, 0ul, mozilla::MallocAllocPolicy>>()
Unexecuted instantiation: void mozilla::MaybeOneOf<mozilla::layers::ShareableCanvasRenderer*, mozilla::layers::AsyncCanvasRenderer*>::construct<mozilla::layers::ShareableCanvasRenderer*, mozilla::layers::ShareableCanvasRenderer*&>(mozilla::layers::ShareableCanvasRenderer*&)
Unexecuted instantiation: void mozilla::MaybeOneOf<mozilla::layers::ShareableCanvasRenderer*, mozilla::layers::AsyncCanvasRenderer*>::construct<mozilla::layers::AsyncCanvasRenderer*, mozilla::layers::AsyncCanvasRenderer*&>(mozilla::layers::AsyncCanvasRenderer*&)
void mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy>, mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> >::construct<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy>, JSContext*&>(JSContext*&)
Line
Count
Source
106
1.52k
  {
107
1.52k
    MOZ_ASSERT(state == None);
108
1.52k
    state = Type2State<T>::result;
109
1.52k
    ::new (KnownNotNull, data()) T(std::forward<Args>(aArgs)...);
110
1.52k
  }
Unexecuted instantiation: void mozilla::MaybeOneOf<js::Shape::Range<(js::AllowGC)0>, js::Shape::Range<(js::AllowGC)1> >::construct<js::Shape::Range<(js::AllowGC)0>, js::Shape*>(js::Shape*&&)
void mozilla::MaybeOneOf<js::Shape::Range<(js::AllowGC)0>, js::Shape::Range<(js::AllowGC)1> >::construct<js::Shape::Range<(js::AllowGC)1>, JSContext*&, js::Shape*>(JSContext*&, js::Shape*&&)
Line
Count
Source
106
1
  {
107
1
    MOZ_ASSERT(state == None);
108
1
    state = Type2State<T>::result;
109
1
    ::new (KnownNotNull, data()) T(std::forward<Args>(aArgs)...);
110
1
  }
Unexecuted instantiation: void mozilla::MaybeOneOf<InlineCharBuffer<unsigned char>, InlineCharBuffer<char16_t> >::construct<InlineCharBuffer<unsigned char>>()
Unexecuted instantiation: void mozilla::MaybeOneOf<InlineCharBuffer<unsigned char>, InlineCharBuffer<char16_t> >::construct<InlineCharBuffer<char16_t>>()
Unexecuted instantiation: void mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy>, mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> >::construct<mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy>, mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> >(mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy>&&)
Unexecuted instantiation: void mozilla::MaybeOneOf<js::jit::JSJitFrameIter, js::wasm::WasmFrameIter>::construct<js::jit::JSJitFrameIter, js::jit::JSJitFrameIter const&>(js::jit::JSJitFrameIter const&)
Unexecuted instantiation: void mozilla::MaybeOneOf<js::jit::JSJitFrameIter, js::wasm::WasmFrameIter>::construct<js::wasm::WasmFrameIter, js::wasm::WasmFrameIter const&>(js::wasm::WasmFrameIter const&)
void mozilla::MaybeOneOf<js::jit::JSJitFrameIter, js::wasm::WasmFrameIter>::construct<js::jit::JSJitFrameIter, js::jit::JitActivation*&>(js::jit::JitActivation*&)
Line
Count
Source
106
26
  {
107
26
    MOZ_ASSERT(state == None);
108
26
    state = Type2State<T>::result;
109
26
    ::new (KnownNotNull, data()) T(std::forward<Args>(aArgs)...);
110
26
  }
Unexecuted instantiation: void mozilla::MaybeOneOf<js::jit::JSJitFrameIter, js::wasm::WasmFrameIter>::construct<js::wasm::WasmFrameIter, js::jit::JitActivation*&>(js::jit::JitActivation*&)
Unexecuted instantiation: void mozilla::MaybeOneOf<js::jit::JSJitFrameIter, js::wasm::WasmFrameIter>::construct<js::wasm::WasmFrameIter, js::jit::JitActivation*&, js::wasm::Frame*&>(js::jit::JitActivation*&, js::wasm::Frame*&)
Unexecuted instantiation: void mozilla::MaybeOneOf<js::jit::JSJitFrameIter, js::wasm::WasmFrameIter>::construct<js::jit::JSJitFrameIter, js::jit::JitActivation*&, js::jit::FrameType&, unsigned char*&>(js::jit::JitActivation*&, js::jit::FrameType&, unsigned char*&)
111
112
  template <class T>
113
  T& ref()
114
1.00k
  {
115
1.00k
    return as<T>();
116
1.00k
  }
Unexecuted instantiation: mozilla::Vector<unsigned char, 0ul, mozilla::MallocAllocPolicy>& mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 0ul, mozilla::MallocAllocPolicy>, nsTArray<unsigned char> >::ref<mozilla::Vector<unsigned char, 0ul, mozilla::MallocAllocPolicy> >()
Unexecuted instantiation: nsTArray<unsigned char>& mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 0ul, mozilla::MallocAllocPolicy>, nsTArray<unsigned char> >::ref<nsTArray<unsigned char> >()
Unexecuted instantiation: mozilla::layers::ShareableCanvasRenderer*& mozilla::MaybeOneOf<mozilla::layers::ShareableCanvasRenderer*, mozilla::layers::AsyncCanvasRenderer*>::ref<mozilla::layers::ShareableCanvasRenderer*>()
Unexecuted instantiation: mozilla::layers::AsyncCanvasRenderer*& mozilla::MaybeOneOf<mozilla::layers::ShareableCanvasRenderer*, mozilla::layers::AsyncCanvasRenderer*>::ref<mozilla::layers::AsyncCanvasRenderer*>()
js::jit::JSJitFrameIter& mozilla::MaybeOneOf<js::jit::JSJitFrameIter, js::wasm::WasmFrameIter>::ref<js::jit::JSJitFrameIter>()
Line
Count
Source
114
210
  {
115
210
    return as<T>();
116
210
  }
Unexecuted instantiation: js::wasm::WasmFrameIter& mozilla::MaybeOneOf<js::jit::JSJitFrameIter, js::wasm::WasmFrameIter>::ref<js::wasm::WasmFrameIter>()
mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy>& mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy>, mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> >::ref<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy> >()
Line
Count
Source
114
797
  {
115
797
    return as<T>();
116
797
  }
Unexecuted instantiation: mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy>& mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy>, mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> >::ref<mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> >()
Unexecuted instantiation: js::Shape::Range<(js::AllowGC)0>& mozilla::MaybeOneOf<js::Shape::Range<(js::AllowGC)0>, js::Shape::Range<(js::AllowGC)1> >::ref<js::Shape::Range<(js::AllowGC)0> >()
js::Shape::Range<(js::AllowGC)1>& mozilla::MaybeOneOf<js::Shape::Range<(js::AllowGC)0>, js::Shape::Range<(js::AllowGC)1> >::ref<js::Shape::Range<(js::AllowGC)1> >()
Line
Count
Source
114
1
  {
115
1
    return as<T>();
116
1
  }
Unexecuted instantiation: InlineCharBuffer<unsigned char>& mozilla::MaybeOneOf<InlineCharBuffer<unsigned char>, InlineCharBuffer<char16_t> >::ref<InlineCharBuffer<unsigned char> >()
Unexecuted instantiation: InlineCharBuffer<char16_t>& mozilla::MaybeOneOf<InlineCharBuffer<unsigned char>, InlineCharBuffer<char16_t> >::ref<InlineCharBuffer<char16_t> >()
117
118
  template <class T>
119
  const T& ref() const
120
611
  {
121
611
    return as<T>();
122
611
  }
js::jit::JSJitFrameIter const& mozilla::MaybeOneOf<js::jit::JSJitFrameIter, js::wasm::WasmFrameIter>::ref<js::jit::JSJitFrameIter>() const
Line
Count
Source
120
138
  {
121
138
    return as<T>();
122
138
  }
Unexecuted instantiation: js::wasm::WasmFrameIter const& mozilla::MaybeOneOf<js::jit::JSJitFrameIter, js::wasm::WasmFrameIter>::ref<js::wasm::WasmFrameIter>() const
mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy> const& mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy>, mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> >::ref<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy> >() const
Line
Count
Source
120
473
  {
121
473
    return as<T>();
122
473
  }
Unexecuted instantiation: mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> const& mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy>, mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> >::ref<mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> >() const
123
124
  void destroy()
125
1.55k
  {
126
1.55k
    MOZ_ASSERT(state == SomeT1 || state == SomeT2);
127
1.55k
    if (state == SomeT1) {
128
1.55k
      as<T1>().~T1();
129
1.55k
    } else if (state == SomeT2) {
130
1
      as<T2>().~T2();
131
1
    }
132
1.55k
    state = None;
133
1.55k
  }
Unexecuted instantiation: mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 0ul, mozilla::MallocAllocPolicy>, nsTArray<unsigned char> >::destroy()
Unexecuted instantiation: mozilla::MaybeOneOf<mozilla::layers::ShareableCanvasRenderer*, mozilla::layers::AsyncCanvasRenderer*>::destroy()
mozilla::MaybeOneOf<js::jit::JSJitFrameIter, js::wasm::WasmFrameIter>::destroy()
Line
Count
Source
125
26
  {
126
26
    MOZ_ASSERT(state == SomeT1 || state == SomeT2);
127
26
    if (state == SomeT1) {
128
26
      as<T1>().~T1();
129
26
    } else if (state == SomeT2) {
130
0
      as<T2>().~T2();
131
0
    }
132
26
    state = None;
133
26
  }
mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy>, mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> >::destroy()
Line
Count
Source
125
1.52k
  {
126
1.52k
    MOZ_ASSERT(state == SomeT1 || state == SomeT2);
127
1.52k
    if (state == SomeT1) {
128
1.52k
      as<T1>().~T1();
129
1.52k
    } else if (state == SomeT2) {
130
0
      as<T2>().~T2();
131
0
    }
132
1.52k
    state = None;
133
1.52k
  }
mozilla::MaybeOneOf<js::Shape::Range<(js::AllowGC)0>, js::Shape::Range<(js::AllowGC)1> >::destroy()
Line
Count
Source
125
1
  {
126
1
    MOZ_ASSERT(state == SomeT1 || state == SomeT2);
127
1
    if (state == SomeT1) {
128
0
      as<T1>().~T1();
129
1
    } else if (state == SomeT2) {
130
1
      as<T2>().~T2();
131
1
    }
132
1
    state = None;
133
1
  }
Unexecuted instantiation: mozilla::MaybeOneOf<InlineCharBuffer<unsigned char>, InlineCharBuffer<char16_t> >::destroy()
134
135
  void destroyIfConstructed()
136
1.56k
  {
137
1.56k
    if (!empty()) {
138
1.55k
      destroy();
139
1.55k
    }
140
1.56k
  }
Unexecuted instantiation: mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 0ul, mozilla::MallocAllocPolicy>, nsTArray<unsigned char> >::destroyIfConstructed()
Unexecuted instantiation: mozilla::MaybeOneOf<mozilla::layers::ShareableCanvasRenderer*, mozilla::layers::AsyncCanvasRenderer*>::destroyIfConstructed()
mozilla::MaybeOneOf<js::jit::JSJitFrameIter, js::wasm::WasmFrameIter>::destroyIfConstructed()
Line
Count
Source
136
34
  {
137
34
    if (!empty()) {
138
26
      destroy();
139
26
    }
140
34
  }
mozilla::MaybeOneOf<mozilla::Vector<unsigned char, 64ul, js::TempAllocPolicy>, mozilla::Vector<char16_t, 32ul, js::TempAllocPolicy> >::destroyIfConstructed()
Line
Count
Source
136
1.52k
  {
137
1.52k
    if (!empty()) {
138
1.52k
      destroy();
139
1.52k
    }
140
1.52k
  }
mozilla::MaybeOneOf<js::Shape::Range<(js::AllowGC)0>, js::Shape::Range<(js::AllowGC)1> >::destroyIfConstructed()
Line
Count
Source
136
1
  {
137
1
    if (!empty()) {
138
1
      destroy();
139
1
    }
140
1
  }
Unexecuted instantiation: mozilla::MaybeOneOf<InlineCharBuffer<unsigned char>, InlineCharBuffer<char16_t> >::destroyIfConstructed()
141
142
private:
143
  MaybeOneOf(const MaybeOneOf& aOther) = delete;
144
  const MaybeOneOf& operator=(const MaybeOneOf& aOther) = delete;
145
};
146
147
template <class T1, class T2>
148
template <class Ignored>
149
struct MaybeOneOf<T1, T2>::Type2State<T1, Ignored>
150
{
151
  typedef MaybeOneOf<T1, T2> Enclosing;
152
  static const typename Enclosing::State result = Enclosing::SomeT1;
153
};
154
155
template <class T1, class T2>
156
template <class Ignored>
157
struct MaybeOneOf<T1, T2>::Type2State<T2, Ignored>
158
{
159
  typedef MaybeOneOf<T1, T2> Enclosing;
160
  static const typename Enclosing::State result = Enclosing::SomeT2;
161
};
162
163
} // namespace mozilla
164
165
#endif /* mozilla_MaybeOneOf_h */