1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*
2635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *  Copyright (C) 2004, 2008, 2009 Apple Inc. All rights reserved.
3635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *  This library is free software; you can redistribute it and/or
5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *  modify it under the terms of the GNU Library General Public
6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *  License as published by the Free Software Foundation; either
7635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *  version 2 of the License, or (at your option) any later version.
8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *  This library is distributed in the hope that it will be useful,
10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *  Library General Public License for more details.
13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *  You should have received a copy of the GNU Library General Public License
15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *  along with this library; see the file COPYING.LIB.  If not, write to
16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *  Boston, MA 02110-1301, USA.
18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */
20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifndef Protect_h
23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#define Protect_h
24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
2565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "Heap.h"
26cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block#include "JSValue.h"
27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectnamespace JSC {
29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    inline void gcProtect(JSCell* val)
31635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    {
32635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        Heap::heap(val)->protect(val);
33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    }
34635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
35635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    inline void gcUnprotect(JSCell* val)
36635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    {
37635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        Heap::heap(val)->unprotect(val);
38635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    }
39635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
40635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    inline void gcProtectNullTolerant(JSCell* val)
41635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    {
42635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        if (val)
43635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            gcProtect(val);
44635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    }
45635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
46635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    inline void gcUnprotectNullTolerant(JSCell* val)
47635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    {
48635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        if (val)
49635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            gcUnprotect(val);
50635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    }
51635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
525f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    inline void gcProtect(JSValue value)
53635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    {
54635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        if (value && value.isCell())
55e14391e94c850b8bd03680c23b38978db68687a8John Reck            gcProtect(value.asCell());
56635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    }
57635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
585f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    inline void gcUnprotect(JSValue value)
59635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    {
60635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        if (value && value.isCell())
61e14391e94c850b8bd03680c23b38978db68687a8John Reck            gcUnprotect(value.asCell());
62635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    }
63635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
64635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} // namespace JSC
65635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
66635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif // Protect_h
67