void Arguments::createStrictModeCalleeIfNecessary(ExecState* exec) { if (d->overrodeCallee) return; d->overrodeCallee = true; PropertyDescriptor descriptor; descriptor.setAccessorDescriptor(globalObject()->throwTypeErrorGetterSetter(exec), DontEnum | DontDelete | Accessor); methodTable()->defineOwnProperty(this, exec, exec->propertyNames().callee, descriptor, false); }
void Arguments::createStrictModeCallerIfNecessary(ExecState* exec) { if (m_overrodeCaller) return; VM& vm = exec->vm(); m_overrodeCaller = true; PropertyDescriptor descriptor; descriptor.setAccessorDescriptor(globalObject()->throwTypeErrorGetterSetter(vm), DontEnum | DontDelete | Accessor); methodTable(exec->vm())->defineOwnProperty(this, exec, vm.propertyNames->caller, descriptor, false); }
void Arguments::createStrictModeCalleeIfNecessary(ExecState* exec) { if (d->overrodeCallee) return; d->overrodeCallee = true; PropertyDescriptor descriptor; JSValue thrower = createTypeErrorFunction(exec, "Unable to access callee of strict mode function"); descriptor.setAccessorDescriptor(thrower, thrower, DontEnum | DontDelete | Getter | Setter); defineOwnProperty(exec, exec->propertyNames().callee, descriptor, false); }
void createDescriptorForThrowingProperty(ExecState* exec, PropertyDescriptor& descriptor, const char* message) { JSValue thrower = createTypeErrorFunction(exec, message); descriptor.setAccessorDescriptor(thrower, thrower, DontEnum | DontDelete | Getter | Setter); }