2  * Copyright (C) 2008, 2009 Apple Inc. All rights reserved. 
   4  * Redistribution and use in source and binary forms, with or without 
   5  * modification, are permitted provided that the following conditions 
   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. 
  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.  
  27 #include "DebuggerActivation.h" 
  29 #include "JSActivation.h" 
  30 #include "JSCInlines.h" 
  34 STATIC_ASSERT_IS_TRIVIALLY_DESTRUCTIBLE(DebuggerActivation
); 
  36 const ClassInfo 
DebuggerActivation::s_info 
= { "DebuggerActivation", &Base::s_info
, 0, 0, CREATE_METHOD_TABLE(DebuggerActivation
) }; 
  38 DebuggerActivation::DebuggerActivation(VM
& vm
) 
  39     : JSNonFinalObject(vm
, vm
.debuggerActivationStructure
.get()) 
  43 void DebuggerActivation::finishCreation(VM
& vm
, JSObject
* activation
) 
  45     Base::finishCreation(vm
); 
  47     ASSERT(activation
->isActivationObject()); 
  48     m_activation
.set(vm
, this, jsCast
<JSActivation
*>(activation
)); 
  51 void DebuggerActivation::visitChildren(JSCell
* cell
, SlotVisitor
& visitor
) 
  53     DebuggerActivation
* thisObject 
= jsCast
<DebuggerActivation
*>(cell
); 
  54     ASSERT_GC_OBJECT_INHERITS(thisObject
, info()); 
  55     COMPILE_ASSERT(StructureFlags 
& OverridesVisitChildren
, OverridesVisitChildrenWithoutSettingFlag
); 
  56     ASSERT(thisObject
->structure()->typeInfo().overridesVisitChildren()); 
  58     JSObject::visitChildren(thisObject
, visitor
); 
  59     visitor
.append(&thisObject
->m_activation
); 
  62 String 
DebuggerActivation::className(const JSObject
* object
) 
  64     const DebuggerActivation
* thisObject 
= jsCast
<const DebuggerActivation
*>(object
); 
  65     return thisObject
->m_activation
->methodTable()->className(thisObject
->m_activation
.get()); 
  68 bool DebuggerActivation::getOwnPropertySlot(JSObject
* object
, ExecState
* exec
, PropertyName propertyName
, PropertySlot
& slot
) 
  70     DebuggerActivation
* thisObject 
= jsCast
<DebuggerActivation
*>(object
); 
  71     return thisObject
->m_activation
->methodTable()->getOwnPropertySlot(thisObject
->m_activation
.get(), exec
, propertyName
, slot
); 
  74 void DebuggerActivation::put(JSCell
* cell
, ExecState
* exec
, PropertyName propertyName
, JSValue value
, PutPropertySlot
& slot
) 
  76     DebuggerActivation
* thisObject 
= jsCast
<DebuggerActivation
*>(cell
); 
  77     thisObject
->m_activation
->methodTable()->put(thisObject
->m_activation
.get(), exec
, propertyName
, value
, slot
); 
  80 bool DebuggerActivation::deleteProperty(JSCell
* cell
, ExecState
* exec
, PropertyName propertyName
) 
  82     DebuggerActivation
* thisObject 
= jsCast
<DebuggerActivation
*>(cell
); 
  83     return thisObject
->m_activation
->methodTable()->deleteProperty(thisObject
->m_activation
.get(), exec
, propertyName
); 
  86 void DebuggerActivation::getOwnPropertyNames(JSObject
* object
, ExecState
* exec
, PropertyNameArray
& propertyNames
, EnumerationMode mode
) 
  88     DebuggerActivation
* thisObject 
= jsCast
<DebuggerActivation
*>(object
); 
  89     thisObject
->m_activation
->methodTable()->getPropertyNames(thisObject
->m_activation
.get(), exec
, propertyNames
, mode
); 
  92 bool DebuggerActivation::defineOwnProperty(JSObject
* object
, ExecState
* exec
, PropertyName propertyName
, const PropertyDescriptor
& descriptor
, bool shouldThrow
) 
  94     DebuggerActivation
* thisObject 
= jsCast
<DebuggerActivation
*>(object
); 
  95     return thisObject
->m_activation
->methodTable()->defineOwnProperty(thisObject
->m_activation
.get(), exec
, propertyName
, descriptor
, shouldThrow
);