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