| Index: tools/clang/blink_gc_plugin/tests/heap/stubs.h
 | 
| diff --git a/tools/clang/blink_gc_plugin/tests/heap/stubs.h b/tools/clang/blink_gc_plugin/tests/heap/stubs.h
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..5e07c2366e05cacfc3f874c8fdc03eb25517c6ab
 | 
| --- /dev/null
 | 
| +++ b/tools/clang/blink_gc_plugin/tests/heap/stubs.h
 | 
| @@ -0,0 +1,263 @@
 | 
| +// Copyright 2014 The Chromium Authors. All rights reserved.
 | 
| +// Use of this source code is governed by a BSD-style license that can be
 | 
| +// found in the LICENSE file.
 | 
| +
 | 
| +#ifndef HEAP_STUBS_H_
 | 
| +#define HEAP_STUBS_H_
 | 
| +
 | 
| +#include "stddef.h"
 | 
| +
 | 
| +#define WTF_MAKE_FAST_ALLOCATED                 \
 | 
| +    public:                                     \
 | 
| +    void* operator new(size_t, void* p);        \
 | 
| +    void* operator new[](size_t, void* p);      \
 | 
| +    void* operator new(size_t size);            \
 | 
| +    private:                                    \
 | 
| +    typedef int __thisIsHereToForceASemicolonAfterThisMacro
 | 
| +
 | 
| +namespace WTF {
 | 
| +
 | 
| +template<typename T> class RefCounted { };
 | 
| +
 | 
| +template<typename T> class RawPtr {
 | 
| +public:
 | 
| +    operator T*() const { return 0; }
 | 
| +    T* operator->() { return 0; }
 | 
| +};
 | 
| +
 | 
| +template<typename T> class RefPtr {
 | 
| +public:
 | 
| +    ~RefPtr() { }
 | 
| +    operator T*() const { return 0; }
 | 
| +    T* operator->() { return 0; }
 | 
| +};
 | 
| +
 | 
| +template<typename T> class OwnPtr {
 | 
| +public:
 | 
| +    ~OwnPtr() { }
 | 
| +    operator T*() const { return 0; }
 | 
| +    T* operator->() { return 0; }
 | 
| +};
 | 
| +
 | 
| +class DefaultAllocator {
 | 
| +public:
 | 
| +    static const bool isGarbageCollected = false;
 | 
| +};
 | 
| +
 | 
| +template<typename T>
 | 
| +struct VectorTraits {
 | 
| +    static const bool needsDestruction = true;
 | 
| +};
 | 
| +
 | 
| +template<size_t inlineCapacity, bool isGarbageCollected, bool tNeedsDestruction>
 | 
| +class VectorDestructorBase {
 | 
| +public:
 | 
| +    ~VectorDestructorBase() {}
 | 
| +};
 | 
| +
 | 
| +template<size_t inlineCapacity>
 | 
| +class VectorDestructorBase<inlineCapacity, true, false> {};
 | 
| +
 | 
| +template<>
 | 
| +class VectorDestructorBase<0, true, true> {};
 | 
| +
 | 
| +template<
 | 
| +    typename T,
 | 
| +    size_t inlineCapacity = 0,
 | 
| +    typename Allocator = DefaultAllocator>
 | 
| +class Vector : public VectorDestructorBase<inlineCapacity,
 | 
| +                                           Allocator::isGarbageCollected,
 | 
| +                                           VectorTraits<T>::needsDestruction> {
 | 
| +public:
 | 
| +    size_t size();
 | 
| +    T& operator[](size_t);
 | 
| +};
 | 
| +
 | 
| +template<
 | 
| +    typename T,
 | 
| +    size_t inlineCapacity = 0,
 | 
| +    typename Allocator = DefaultAllocator>
 | 
| +class Deque {};
 | 
| +
 | 
| +template<
 | 
| +    typename ValueArg,
 | 
| +    typename HashArg = void,
 | 
| +    typename TraitsArg = void,
 | 
| +    typename Allocator = DefaultAllocator>
 | 
| +class HashSet {};
 | 
| +
 | 
| +template<
 | 
| +    typename ValueArg,
 | 
| +    typename HashArg = void,
 | 
| +    typename TraitsArg = void,
 | 
| +    typename Allocator = DefaultAllocator>
 | 
| +class ListHashSet {};
 | 
| +
 | 
| +template<
 | 
| +    typename ValueArg,
 | 
| +    typename HashArg = void,
 | 
| +    typename TraitsArg = void,
 | 
| +    typename Allocator = DefaultAllocator>
 | 
| +class LinkedHashSet {};
 | 
| +
 | 
| +template<
 | 
| +    typename ValueArg,
 | 
| +    typename HashArg = void,
 | 
| +    typename TraitsArg = void,
 | 
| +    typename Allocator = DefaultAllocator>
 | 
| +class HashCountedSet {};
 | 
| +
 | 
| +template<
 | 
| +    typename KeyArg,
 | 
| +    typename MappedArg,
 | 
| +    typename HashArg = void,
 | 
| +    typename KeyTraitsArg = void,
 | 
| +    typename MappedTraitsArg = void,
 | 
| +    typename Allocator = DefaultAllocator>
 | 
| +class HashMap {};
 | 
| +
 | 
| +}
 | 
| +
 | 
| +namespace blink {
 | 
| +
 | 
| +using namespace WTF;
 | 
| +
 | 
| +#define DISALLOW_ALLOCATION()                   \
 | 
| +    private:                                    \
 | 
| +    void* operator new(size_t) = delete;        \
 | 
| +    void* operator new(size_t, void*) = delete;
 | 
| +
 | 
| +#define STACK_ALLOCATED()                                   \
 | 
| +    private:                                                \
 | 
| +    __attribute__((annotate("blink_stack_allocated")))      \
 | 
| +    void* operator new(size_t) = delete;                    \
 | 
| +    void* operator new(size_t, void*) = delete;
 | 
| +
 | 
| +#define ALLOW_ONLY_INLINE_ALLOCATION()    \
 | 
| +    public:                               \
 | 
| +    void* operator new(size_t, void*);    \
 | 
| +    private:                              \
 | 
| +    void* operator new(size_t) = delete;
 | 
| +
 | 
| +#define GC_PLUGIN_IGNORE(bug)                           \
 | 
| +    __attribute__((annotate("blink_gc_plugin_ignore")))
 | 
| +
 | 
| +#define USING_GARBAGE_COLLECTED_MIXIN(type)                     \
 | 
| +public:                                                         \
 | 
| +    virtual void adjustAndMark(Visitor*) const override { }     \
 | 
| +    virtual bool isHeapObjectAlive(Visitor*) const override { return 0; }
 | 
| +
 | 
| +#define EAGERLY_FINALIZED() typedef int IsEagerlyFinalizedMarker
 | 
| +
 | 
| +template<typename T> class GarbageCollected { };
 | 
| +
 | 
| +template<typename T>
 | 
| +class GarbageCollectedFinalized : public GarbageCollected<T> { };
 | 
| +
 | 
| +template<typename T> class Member {
 | 
| +public:
 | 
| +    operator T*() const { return 0; }
 | 
| +    T* operator->() { return 0; }
 | 
| +    bool operator!() const { return false; }
 | 
| +};
 | 
| +
 | 
| +template<typename T> class WeakMember {
 | 
| +public:
 | 
| +    operator T*() const { return 0; }
 | 
| +    T* operator->() { return 0; }
 | 
| +    bool operator!() const { return false; }
 | 
| +};
 | 
| +
 | 
| +template<typename T> class Persistent {
 | 
| +public:
 | 
| +    operator T*() const { return 0; }
 | 
| +    T* operator->() { return 0; }
 | 
| +    bool operator!() const { return false; }
 | 
| +};
 | 
| +
 | 
| +class HeapAllocator {
 | 
| +public:
 | 
| +    static const bool isGarbageCollected = true;
 | 
| +};
 | 
| +
 | 
| +template<typename T, size_t inlineCapacity = 0>
 | 
| +class HeapVector : public Vector<T, inlineCapacity, HeapAllocator> { };
 | 
| +
 | 
| +template<typename T, size_t inlineCapacity = 0>
 | 
| +class HeapDeque : public Vector<T, inlineCapacity, HeapAllocator> { };
 | 
| +
 | 
| +template<typename T>
 | 
| +class HeapHashSet : public HashSet<T, void, void, HeapAllocator> { };
 | 
| +
 | 
| +template<typename T>
 | 
| +class HeapListHashSet : public ListHashSet<T, void, void, HeapAllocator> { };
 | 
| +
 | 
| +template<typename T>
 | 
| +class HeapLinkedHashSet : public LinkedHashSet<T, void, void, HeapAllocator> {
 | 
| +};
 | 
| +
 | 
| +template<typename T>
 | 
| +class HeapHashCountedSet : public HashCountedSet<T, void, void, HeapAllocator> {
 | 
| +};
 | 
| +
 | 
| +template<typename K, typename V>
 | 
| +class HeapHashMap : public HashMap<K, V, void, void, void, HeapAllocator> { };
 | 
| +
 | 
| +template<typename T>
 | 
| +class PersistentHeapVector : public Vector<T, 0, HeapAllocator> { };
 | 
| +
 | 
| +template <typename Derived>
 | 
| +class VisitorHelper {
 | 
| +public:
 | 
| +    template<typename T>
 | 
| +    void trace(const T&);
 | 
| +};
 | 
| +
 | 
| +class Visitor : public VisitorHelper<Visitor> {
 | 
| +public:
 | 
| +    template<typename T, void (T::*method)(Visitor*)>
 | 
| +    void registerWeakMembers(const T* obj);
 | 
| +};
 | 
| +
 | 
| +class InlinedGlobalMarkingVisitor
 | 
| +    : public VisitorHelper<InlinedGlobalMarkingVisitor> {
 | 
| +public:
 | 
| +    InlinedGlobalMarkingVisitor* operator->() { return this; }
 | 
| +
 | 
| +    template<typename T, void (T::*method)(Visitor*)>
 | 
| +    void registerWeakMembers(const T* obj);
 | 
| +};
 | 
| +
 | 
| +class GarbageCollectedMixin {
 | 
| +public:
 | 
| +    virtual void adjustAndMark(Visitor*) const = 0;
 | 
| +    virtual bool isHeapObjectAlive(Visitor*) const = 0;
 | 
| +    virtual void trace(Visitor*) { }
 | 
| +};
 | 
| +
 | 
| +template<typename T>
 | 
| +struct TraceIfNeeded {
 | 
| +    static void trace(Visitor*, T*);
 | 
| +};
 | 
| +
 | 
| +// blink::ScriptWrappable receives special treatment
 | 
| +// so as to allow it to be used together with GarbageCollected<T>,
 | 
| +// even when its user-declared destructor is provided.
 | 
| +// As it is with Oilpan disabled.
 | 
| +class ScriptWrappable {
 | 
| +public:
 | 
| +    ~ScriptWrappable() { /* user-declared, thus, non-trivial */ }
 | 
| +};
 | 
| +
 | 
| +}
 | 
| +
 | 
| +namespace WTF {
 | 
| +
 | 
| +template<typename T>
 | 
| +struct VectorTraits<blink::Member<T> > {
 | 
| +    static const bool needsDestruction = false;
 | 
| +};
 | 
| +
 | 
| +}
 | 
| +
 | 
| +#endif
 | 
| 
 |