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