1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file.
4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#ifndef IGNORE_FIELDS_H_
6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define IGNORE_FIELDS_H_
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "heap/stubs.h"
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace blink {
11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class HeapObject : public GarbageCollected<HeapObject> {
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)public:
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    virtual void trace(Visitor*) { }
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)};
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Don't warn about raw pointers to heap allocated objects.
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class A : public GarbageCollected<A>{
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)private:
20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    GC_PLUGIN_IGNORE("http://crbug.com/12345")
21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    HeapObject* m_obj;
22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)};
23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Don't require trace method when (all) GC fields are ignored.
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class B : public GarbageCollected<B> {
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)private:
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    GC_PLUGIN_IGNORE("http://crbug.com/12345")
28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    Member<HeapObject> m_one;
29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)};
30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Don't require tracing an ignored field.
32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class C : public GarbageCollected<C> {
33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)public:
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    void trace(Visitor*);
35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)private:
36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    Member<HeapObject> m_one;
37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    GC_PLUGIN_IGNORE("http://crbug.com/12345")
38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    Member<HeapObject> m_two;
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)};
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif
44