CodeBlocks should be in IsoSubspaces
[WebKit-https.git] / Source / JavaScriptCore / heap / CodeBlockSet.cpp
1 /*
2  * Copyright (C) 2013-2017 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 #include "config.h"
27 #include "CodeBlockSet.h"
28
29 #include "CodeBlock.h"
30 #include "JSCInlines.h"
31 #include "SuperSampler.h"
32 #include <wtf/CommaPrinter.h>
33
34 namespace JSC {
35
36 CodeBlockSet::CodeBlockSet()
37 {
38 }
39
40 CodeBlockSet::~CodeBlockSet()
41 {
42 }
43
44 bool CodeBlockSet::contains(const AbstractLocker&, void* candidateCodeBlock)
45 {
46     RELEASE_ASSERT(m_lock.isLocked());
47     CodeBlock* codeBlock = static_cast<CodeBlock*>(candidateCodeBlock);
48     if (!HashSet<CodeBlock*>::isValidValue(codeBlock))
49         return false;
50     return m_codeBlocks.contains(codeBlock);
51 }
52
53 void CodeBlockSet::clearCurrentlyExecuting()
54 {
55     m_currentlyExecuting.clear();
56 }
57
58 void CodeBlockSet::dump(PrintStream& out) const
59 {
60     CommaPrinter comma;
61     out.print("{codeBlocks = [");
62     for (CodeBlock* codeBlock : m_codeBlocks)
63         out.print(comma, pointerDump(codeBlock));
64     out.print("], currentlyExecuting = [");
65     comma = CommaPrinter();
66     for (CodeBlock* codeBlock : m_currentlyExecuting)
67         out.print(comma, pointerDump(codeBlock));
68     out.print("]}");
69 }
70
71 void CodeBlockSet::add(CodeBlock* codeBlock)
72 {
73     auto locker = holdLock(m_lock);
74     auto result = m_codeBlocks.add(codeBlock);
75     RELEASE_ASSERT(result);
76 }
77
78 void CodeBlockSet::remove(CodeBlock* codeBlock)
79 {
80     auto locker = holdLock(m_lock);
81     bool result = m_codeBlocks.remove(codeBlock);
82     RELEASE_ASSERT(result);
83 }
84
85 } // namespace JSC
86