X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/14957cd040308e3eeec43d26bae5d76da13fcd85..ed1e77d3adeb83d26fd1dfb16dd84cabdcefd250:/runtime/NativeErrorConstructor.cpp?ds=sidebyside diff --git a/runtime/NativeErrorConstructor.cpp b/runtime/NativeErrorConstructor.cpp index 2a7a7f5..3fb58a3 100644 --- a/runtime/NativeErrorConstructor.cpp +++ b/runtime/NativeErrorConstructor.cpp @@ -25,61 +25,65 @@ #include "JSFunction.h" #include "JSString.h" #include "NativeErrorPrototype.h" +#include "JSCInlines.h" namespace JSC { -ASSERT_CLASS_FITS_IN_CELL(NativeErrorConstructor); +STATIC_ASSERT_IS_TRIVIALLY_DESTRUCTIBLE(NativeErrorConstructor); -const ClassInfo NativeErrorConstructor::s_info = { "Function", &InternalFunction::s_info, 0, 0 }; +const ClassInfo NativeErrorConstructor::s_info = { "Function", &InternalFunction::s_info, 0, CREATE_METHOD_TABLE(NativeErrorConstructor) }; -NativeErrorConstructor::NativeErrorConstructor(ExecState* exec, JSGlobalObject* globalObject, Structure* structure, Structure* prototypeStructure, const UString& nameAndMessage) - : InternalFunction(&exec->globalData(), globalObject, structure, Identifier(exec, nameAndMessage)) +NativeErrorConstructor::NativeErrorConstructor(VM& vm, Structure* structure) + : InternalFunction(vm, structure) { - ASSERT(inherits(&s_info)); - - NativeErrorPrototype* prototype = new (exec) NativeErrorPrototype(exec, globalObject, prototypeStructure, nameAndMessage, this); +} - putDirect(exec->globalData(), exec->propertyNames().length, jsNumber(1), DontDelete | ReadOnly | DontEnum); // ECMA 15.11.7.5 - putDirect(exec->globalData(), exec->propertyNames().prototype, prototype, DontDelete | ReadOnly | DontEnum); - m_errorStructure.set(exec->globalData(), this, ErrorInstance::createStructure(exec->globalData(), prototype)); +void NativeErrorConstructor::finishCreation(VM& vm, JSGlobalObject* globalObject, Structure* prototypeStructure, const String& name) +{ + Base::finishCreation(vm, name); + ASSERT(inherits(info())); + + NativeErrorPrototype* prototype = NativeErrorPrototype::create(vm, globalObject, prototypeStructure, name, this); + + putDirect(vm, vm.propertyNames->length, jsNumber(1), DontDelete | ReadOnly | DontEnum); // ECMA 15.11.7.5 + putDirect(vm, vm.propertyNames->prototype, prototype, DontDelete | ReadOnly | DontEnum); + m_errorStructure.set(vm, this, ErrorInstance::createStructure(vm, globalObject, prototype)); ASSERT(m_errorStructure); - ASSERT(m_errorStructure->typeInfo().type() == ObjectType); + ASSERT(m_errorStructure->isObject()); } -void NativeErrorConstructor::visitChildren(SlotVisitor& visitor) +void NativeErrorConstructor::visitChildren(JSCell* cell, SlotVisitor& visitor) { - ASSERT_GC_OBJECT_INHERITS(this, &s_info); - COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag); - ASSERT(structure()->typeInfo().overridesVisitChildren()); - InternalFunction::visitChildren(visitor); - if (m_errorStructure) - visitor.append(&m_errorStructure); + NativeErrorConstructor* thisObject = jsCast(cell); + ASSERT_GC_OBJECT_INHERITS(thisObject, info()); + Base::visitChildren(thisObject, visitor); + visitor.append(&thisObject->m_errorStructure); } -static EncodedJSValue JSC_HOST_CALL constructWithNativeErrorConstructor(ExecState* exec) +EncodedJSValue JSC_HOST_CALL Interpreter::constructWithNativeErrorConstructor(ExecState* exec) { - JSValue message = exec->argumentCount() ? exec->argument(0) : jsUndefined(); + JSValue message = exec->argument(0); Structure* errorStructure = static_cast(exec->callee())->errorStructure(); ASSERT(errorStructure); - return JSValue::encode(ErrorInstance::create(exec, errorStructure, message)); + return JSValue::encode(ErrorInstance::create(exec, errorStructure, message, nullptr, TypeNothing, false)); } -ConstructType NativeErrorConstructor::getConstructData(ConstructData& constructData) +ConstructType NativeErrorConstructor::getConstructData(JSCell*, ConstructData& constructData) { - constructData.native.function = constructWithNativeErrorConstructor; + constructData.native.function = Interpreter::constructWithNativeErrorConstructor; return ConstructTypeHost; } -static EncodedJSValue JSC_HOST_CALL callNativeErrorConstructor(ExecState* exec) +EncodedJSValue JSC_HOST_CALL Interpreter::callNativeErrorConstructor(ExecState* exec) { - JSValue message = exec->argumentCount() ? exec->argument(0) : jsUndefined(); + JSValue message = exec->argument(0); Structure* errorStructure = static_cast(exec->callee())->errorStructure(); - return JSValue::encode(ErrorInstance::create(exec, errorStructure, message)); + return JSValue::encode(ErrorInstance::create(exec, errorStructure, message, nullptr, TypeNothing, false)); } -CallType NativeErrorConstructor::getCallData(CallData& callData) +CallType NativeErrorConstructor::getCallData(JSCell*, CallData& callData) { - callData.native.function = callNativeErrorConstructor; + callData.native.function = Interpreter::callNativeErrorConstructor; return CallTypeHost; }