119fc91b0f08d83004f524c00e32f0cb40984a63
[WebKit-https.git] / Source / WebCore / domjit / DOMJITAbstractHeapRepository.h
1 /*
2  * Copyright (C) 2016 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #pragma once
27
28 #include <domjit/DOMJITHeapRange.h>
29 #include <wtf/NeverDestroyed.h>
30 #include <wtf/Noncopyable.h>
31
32 #if ENABLE(JIT)
33
34 namespace WebCore { namespace DOMJIT {
35
36 // Describe your abstract heap hierarchy here.
37 // V(AbstractHeapName, Parent)
38 #define DOMJIT_ABSTRACT_HEAP_LIST(V) \
39     V(Node, DOM) \
40     V(Node_firstChild, Node) \
41     V(Node_lastChild, Node) \
42     V(Node_parentNode, Node) \
43     V(Node_nextSibling, Node) \
44     V(Node_previousSibling, Node) \
45
46
47 class AbstractHeapRepository {
48 WTF_MAKE_NONCOPYABLE(AbstractHeapRepository);
49 public:
50     static const AbstractHeapRepository& shared();
51
52     JSC::DOMJIT::HeapRange DOM;
53
54 #define DOMJIT_DEFINE_MEMBER(name, parent) JSC::DOMJIT::HeapRange name;
55     DOMJIT_ABSTRACT_HEAP_LIST(DOMJIT_DEFINE_MEMBER)
56 #undef DOMJIT_DEFINE_MEMBER
57
58 private:
59     friend class NeverDestroyed<AbstractHeapRepository>;
60     AbstractHeapRepository();
61 };
62
63 } }
64
65 #endif