bool ClonedArguments::deleteProperty(JSCell* cell, ExecState* exec, PropertyName ident) { ClonedArguments* thisObject = jsCast<ClonedArguments*>(cell); VM& vm = exec->vm(); if (ident == vm.propertyNames->callee || ident == vm.propertyNames->iteratorSymbol) thisObject->materializeSpecialsIfNecessary(exec); return Base::deleteProperty(thisObject, exec, ident); }
bool ClonedArguments::defineOwnProperty(JSObject* object, ExecState* exec, PropertyName ident, const PropertyDescriptor& descriptor, bool shouldThrow) { ClonedArguments* thisObject = jsCast<ClonedArguments*>(object); VM& vm = exec->vm(); if (ident == vm.propertyNames->callee || ident == vm.propertyNames->iteratorSymbol) thisObject->materializeSpecialsIfNecessary(exec); return Base::defineOwnProperty(object, exec, ident, descriptor, shouldThrow); }
bool ClonedArguments::put(JSCell* cell, ExecState* exec, PropertyName ident, JSValue value, PutPropertySlot& slot) { ClonedArguments* thisObject = jsCast<ClonedArguments*>(cell); VM& vm = exec->vm(); if (ident == vm.propertyNames->callee || ident == vm.propertyNames->iteratorSymbol) { thisObject->materializeSpecialsIfNecessary(exec); PutPropertySlot dummy = slot; // Shadow the given PutPropertySlot to prevent caching. return Base::put(thisObject, exec, ident, value, dummy); } return Base::put(thisObject, exec, ident, value, slot); }
bool ClonedArguments::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName ident, PropertySlot& slot) { ClonedArguments* thisObject = jsCast<ClonedArguments*>(object); VM& vm = exec->vm(); if (ident == vm.propertyNames->callee || ident == vm.propertyNames->caller || ident == vm.propertyNames->iteratorSymbol) thisObject->materializeSpecialsIfNecessary(exec); if (Base::getOwnPropertySlot(thisObject, exec, ident, slot)) return true; return false; }
void ClonedArguments::getOwnPropertyNames(JSObject* object, ExecState* exec, PropertyNameArray& array, EnumerationMode mode) { ClonedArguments* thisObject = jsCast<ClonedArguments*>(object); thisObject->materializeSpecialsIfNecessary(exec); Base::getOwnPropertyNames(thisObject, exec, array, mode); }