void JSActivation::put(ExecState*, const Identifier& propertyName, JSValue value, PutPropertySlot& slot) { ASSERT(!Heap::heap(value) || Heap::heap(value) == Heap::heap(this)); if (symbolTablePut(propertyName, value)) return; // We don't call through to JSObject because __proto__ and getter/setter // properties are non-standard extensions that other implementations do not // expose in the activation object. ASSERT(!hasGetterSetterProperties()); putDirect(propertyName, value, 0, true, slot); }
// FIXME: Make this function honor ReadOnly (const) and DontEnum void JSActivation::putWithAttributes(ExecState* exec, const Identifier& propertyName, JSValue value, unsigned attributes) { ASSERT(!Heap::heap(value) || Heap::heap(value) == Heap::heap(this)); if (symbolTablePutWithAttributes(propertyName, value, attributes)) return; // We don't call through to JSObject because __proto__ and getter/setter // properties are non-standard extensions that other implementations do not // expose in the activation object. ASSERT(!hasGetterSetterProperties()); PutPropertySlot slot; JSObject::putWithAttributes(exec, propertyName, value, attributes, true, slot); }
bool JSActivation::getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot& slot) { if (propertyName == exec->propertyNames().arguments) { slot.setCustom(this, getArgumentsGetter()); return true; } if (symbolTableGet(propertyName, slot)) return true; if (JSValue* location = getDirectLocation(propertyName)) { slot.setValueSlot(location); return true; } // We don't call through to JSObject because there's no way to give an // activation object getter properties or a prototype. ASSERT(!hasGetterSetterProperties()); ASSERT(prototype().isNull()); return false; }