blob: 9b7e1826d467af221094cef8cd9caa30ce87ae2e [file] [log] [blame]
ggaren@apple.combc3ae3f2012-08-29 17:13:50 +00001/*
2 * Copyright (C) 2012 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#ifndef JSWithScope_h
27#define JSWithScope_h
28
ggaren@apple.coma62184d2012-09-01 01:39:51 +000029#include "JSGlobalObject.h"
ggaren@apple.combc3ae3f2012-08-29 17:13:50 +000030
31namespace JSC {
32
33class JSWithScope : public JSScope {
34public:
35 typedef JSScope Base;
36
37 static JSWithScope* create(ExecState* exec, JSObject* object)
38 {
39 JSWithScope* withScope = new (NotNull, allocateCell<JSWithScope>(*exec->heap())) JSWithScope(exec, object);
ggaren@apple.com9a9a4b52013-04-18 19:32:17 +000040 withScope->finishCreation(exec->vm());
ggaren@apple.combc3ae3f2012-08-29 17:13:50 +000041 return withScope;
42 }
43
ggaren@apple.comb11e7872012-08-30 22:50:00 +000044 static JSWithScope* create(ExecState* exec, JSObject* object, JSScope* next)
45 {
46 JSWithScope* withScope = new (NotNull, allocateCell<JSWithScope>(*exec->heap())) JSWithScope(exec, object, next);
ggaren@apple.com9a9a4b52013-04-18 19:32:17 +000047 withScope->finishCreation(exec->vm());
ggaren@apple.comb11e7872012-08-30 22:50:00 +000048 return withScope;
49 }
50
ggaren@apple.combc3ae3f2012-08-29 17:13:50 +000051 JSObject* object() { return m_object.get(); }
52
53 static void visitChildren(JSCell*, SlotVisitor&);
54
ggaren@apple.com9a9a4b52013-04-18 19:32:17 +000055 static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue proto)
ggaren@apple.combc3ae3f2012-08-29 17:13:50 +000056 {
fpizlo@apple.com10ae2d02013-08-14 02:41:47 +000057 return Structure::create(vm, globalObject, proto, TypeInfo(WithScopeType, StructureFlags), info());
ggaren@apple.combc3ae3f2012-08-29 17:13:50 +000058 }
59
fpizlo@apple.com10ae2d02013-08-14 02:41:47 +000060 DECLARE_EXPORT_INFO;
ggaren@apple.combc3ae3f2012-08-29 17:13:50 +000061
62protected:
63 static const unsigned StructureFlags = OverridesVisitChildren | Base::StructureFlags;
64
65private:
66 JSWithScope(ExecState* exec, JSObject* object)
ggaren@apple.comb11e7872012-08-30 22:50:00 +000067 : Base(
ggaren@apple.com9a9a4b52013-04-18 19:32:17 +000068 exec->vm(),
ggaren@apple.coma62184d2012-09-01 01:39:51 +000069 exec->lexicalGlobalObject()->withScopeStructure(),
ggaren@apple.comb11e7872012-08-30 22:50:00 +000070 exec->scope()
71 )
ggaren@apple.com9a9a4b52013-04-18 19:32:17 +000072 , m_object(exec->vm(), this, object)
ggaren@apple.comb11e7872012-08-30 22:50:00 +000073 {
74 }
75
76 JSWithScope(ExecState* exec, JSObject* object, JSScope* next)
77 : Base(
ggaren@apple.com9a9a4b52013-04-18 19:32:17 +000078 exec->vm(),
ggaren@apple.coma62184d2012-09-01 01:39:51 +000079 exec->lexicalGlobalObject()->withScopeStructure(),
ggaren@apple.comb11e7872012-08-30 22:50:00 +000080 next
81 )
ggaren@apple.com9a9a4b52013-04-18 19:32:17 +000082 , m_object(exec->vm(), this, object)
ggaren@apple.combc3ae3f2012-08-29 17:13:50 +000083 {
84 }
85
86 WriteBarrier<JSObject> m_object;
87};
88
89} // namespace JSC
90
91#endif // JSWithScope_h