void FunctionPrototype::initRestrictedProperties(ExecState* exec, JSGlobalObject* globalObject) { VM& vm = exec->vm(); GetterSetter* errorGetterSetter = globalObject->throwTypeErrorArgumentsCalleeAndCallerGetterSetter(); putDirectAccessor(exec, vm.propertyNames->caller, errorGetterSetter, DontEnum | Accessor); putDirectAccessor(exec, vm.propertyNames->arguments, errorGetterSetter, DontEnum | Accessor); }
void JSBoundFunction::finishCreation(ExecState* exec, NativeExecutable* executable, int length, const String& name) { Base::finishCreation(exec, executable, length, name); ASSERT(inherits(&s_info)); putDirectAccessor(exec, exec->propertyNames().arguments, globalObject()->throwTypeErrorGetterSetter(exec), DontDelete | DontEnum | Accessor); putDirectAccessor(exec, exec->propertyNames().caller, globalObject()->throwTypeErrorGetterSetter(exec), DontDelete | DontEnum | Accessor); }
void ClonedArguments::materializeSpecials(ExecState* exec) { RELEASE_ASSERT(!specialsMaterialized()); VM& vm = exec->vm(); FunctionExecutable* executable = jsCast<FunctionExecutable*>(m_callee->executable()); bool isStrictMode = executable->isStrictMode(); if (isStrictMode) { putDirectAccessor(exec, vm.propertyNames->callee, globalObject()->throwTypeErrorGetterSetter(vm), DontDelete | DontEnum | Accessor); putDirectAccessor(exec, vm.propertyNames->caller, globalObject()->throwTypeErrorGetterSetter(vm), DontDelete | DontEnum | Accessor); } else putDirect(vm, vm.propertyNames->callee, JSValue(m_callee.get())); putDirect(vm, vm.propertyNames->iteratorSymbol, globalObject()->arrayProtoValuesFunction(), DontEnum); m_callee.clear(); }