| 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
|
|
|