source: webkit/trunk/JavaScriptCore/debugger/DebuggerActivation.cpp@ 40332

Last change on this file since 40332 was 40332, checked in by [email protected], 16 years ago

JavaScriptCore:

2009-01-28 Sam Weinig <[email protected]>

Reviewed by Geoff Garen.

Fix for <rdar://problem/6129678>
REGRESSION (Safari 3-4): Local variable not accessible from Dashcode console or variables view

Iterating the properties of activation objects accessed through the WebKit debugging
APIs was broken by forced conversion of JSActivation to the global object. To fix this,
we use a proxy activation object that acts more like a normal JSObject.

  • debugger/DebuggerActivation.cpp: Added. (JSC::DebuggerActivation::DebuggerActivation): (JSC::DebuggerActivation::mark): (JSC::DebuggerActivation::className): (JSC::DebuggerActivation::getOwnPropertySlot): (JSC::DebuggerActivation::put): (JSC::DebuggerActivation::putWithAttributes): (JSC::DebuggerActivation::deleteProperty): (JSC::DebuggerActivation::getPropertyNames): (JSC::DebuggerActivation::getPropertyAttributes): (JSC::DebuggerActivation::defineGetter): (JSC::DebuggerActivation::defineSetter): (JSC::DebuggerActivation::lookupGetter): (JSC::DebuggerActivation::lookupSetter):
  • debugger/DebuggerActivation.h: Added. Proxy JSActivation object for Debugging.
  • runtime/JSActivation.h: (JSC::JSActivation::isActivationObject): Added.
  • runtime/JSObject.h: (JSC::JSObject::isActivationObject): Added.

WebCore:

2009-01-28 Sam Weinig <[email protected]>

Reviewed by Geoff Garen.

Add forwarding header.

  • ForwardingHeaders/debugger/DebuggerActivation.h: Added.

WebKit/mac:

2009-01-28 Sam Weinig <[email protected]>

Reviewed by Geoff Garen.

Fix for <rdar://problem/6129678>
REGRESSION (Safari 3-4): Local variable not accessible from Dashcode console or variables view

  • WebView/WebScriptDebugDelegate.mm: (-[WebScriptCallFrame scopeChain]): Wrap JSActivations in DebuggerActivations.
File size: 3.6 KB
Line 
1/*
2 * Copyright (C) 2008 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 "DebuggerActivation.h"
28
29#include "JSActivation.h"
30
31namespace JSC {
32
33DebuggerActivation::DebuggerActivation(JSObject* activation)
34 : JSObject(DebuggerActivation::createStructure(jsNull()))
35{
36 ASSERT(activation);
37 ASSERT(activation->isActivationObject());
38 m_activation = static_cast<JSActivation*>(activation);
39}
40
41void DebuggerActivation::mark()
42{
43 JSObject::mark();
44 if (m_activation && !m_activation->marked())
45 m_activation->mark();
46}
47
48UString DebuggerActivation::className() const
49{
50 return m_activation->className();
51}
52
53bool DebuggerActivation::getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot& slot)
54{
55 return m_activation->getOwnPropertySlot(exec, propertyName, slot);
56}
57
58void DebuggerActivation::put(ExecState* exec, const Identifier& propertyName, JSValuePtr value, PutPropertySlot& slot)
59{
60 m_activation->put(exec, propertyName, value, slot);
61}
62
63void DebuggerActivation::putWithAttributes(ExecState* exec, const Identifier& propertyName, JSValuePtr value, unsigned attributes)
64{
65 m_activation->putWithAttributes(exec, propertyName, value, attributes);
66}
67
68bool DebuggerActivation::deleteProperty(ExecState* exec, const Identifier& propertyName)
69{
70 return m_activation->deleteProperty(exec, propertyName);
71}
72
73void DebuggerActivation::getPropertyNames(ExecState* exec, PropertyNameArray& propertyNames)
74{
75 m_activation->getPropertyNames(exec, propertyNames);
76}
77
78bool DebuggerActivation::getPropertyAttributes(JSC::ExecState* exec, const Identifier& propertyName, unsigned& attributes) const
79{
80 return m_activation->getPropertyAttributes(exec, propertyName, attributes);
81}
82
83void DebuggerActivation::defineGetter(ExecState* exec, const Identifier& propertyName, JSObject* getterFunction)
84{
85 m_activation->defineGetter(exec, propertyName, getterFunction);
86}
87
88void DebuggerActivation::defineSetter(ExecState* exec, const Identifier& propertyName, JSObject* setterFunction)
89{
90 m_activation->defineSetter(exec, propertyName, setterFunction);
91}
92
93JSValuePtr DebuggerActivation::lookupGetter(ExecState* exec, const Identifier& propertyName)
94{
95 return m_activation->lookupGetter(exec, propertyName);
96}
97
98JSValuePtr DebuggerActivation::lookupSetter(ExecState* exec, const Identifier& propertyName)
99{
100 return m_activation->lookupSetter(exec, propertyName);
101}
102
103} // namespace JSC
Note: See TracBrowser for help on using the repository browser.