1// Copyright 2016 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef FIELDS_ILLEGAL_TRACING_H_
6#define FIELDS_ILLEGAL_TRACING_H_
7
8#include "heap/stubs.h"
9
10namespace blink {
11
12namespace bar {
13
14// check that (only) std::unique_ptr<> is reported
15// as an illegal smart pointer type.
16template<typename T> class unique_ptr {
17public:
18    ~unique_ptr() { }
19    operator T*() const { return 0; }
20    T* operator->() { return 0; }
21
22    void Trace(Visitor* visitor)
23    {
24    }
25};
26
27}
28
29class HeapObject;
30class PartObject;
31
32class PartObject {
33    DISALLOW_NEW();
34public:
35    void Trace(Visitor*);
36private:
37    OwnPtr<HeapObject> m_obj1;
38    RefPtr<HeapObject> m_obj2;
39    bar::unique_ptr<HeapObject> m_obj3;
40    std::unique_ptr<HeapObject> m_obj4;
41    Vector<int>::iterator m_iterator1;
42    HeapVector<Member<HeapObject>>::iterator m_iterator2;
43    HeapHashSet<PartObject>::const_iterator m_iterator3;
44};
45
46class HeapObject : public GarbageCollectedFinalized<HeapObject> {
47public:
48    void Trace(Visitor*);
49private:
50    PartObject m_part;
51    OwnPtr<HeapObject> m_obj1;
52    RefPtr<HeapObject> m_obj2;
53    bar::unique_ptr<HeapObject> m_obj3;
54    std::unique_ptr<HeapObject> m_obj4;
55    HeapHashMap<int, Member<HeapObject>>::reverse_iterator m_iterator3;
56    HeapDeque<Member<HeapObject>>::const_reverse_iterator m_iterator4;
57    HeapListHashSet<Member<HeapObject>>::const_iterator m_iterator5;
58    HeapLinkedHashSet<Member<HeapObject>>::const_iterator m_iterator6;
59};
60
61}
62
63#endif
64