#include "config.h"
#include "ErrorInstance.h"
+#include "JSScope.h"
+#include "JSCInlines.h"
+
namespace JSC {
-const ClassInfo ErrorInstance::s_info = { "Error", &JSNonFinalObject::s_info, 0, 0 };
+STATIC_ASSERT_IS_TRIVIALLY_DESTRUCTIBLE(ErrorInstance);
-ErrorInstance::ErrorInstance(JSGlobalData* globalData, Structure* structure)
- : JSNonFinalObject(*globalData, structure)
- , m_appendSourceToMessage(false)
-{
- ASSERT(inherits(&s_info));
- putDirect(*globalData, globalData->propertyNames->message, jsString(globalData, ""));
-}
+const ClassInfo ErrorInstance::s_info = { "Error", &JSNonFinalObject::s_info, 0, 0, CREATE_METHOD_TABLE(ErrorInstance) };
-ErrorInstance::ErrorInstance(JSGlobalData* globalData, Structure* structure, const UString& message)
- : JSNonFinalObject(*globalData, structure)
+ErrorInstance::ErrorInstance(VM& vm, Structure* structure)
+ : JSNonFinalObject(vm, structure)
, m_appendSourceToMessage(false)
{
- ASSERT(inherits(&s_info));
- putDirect(*globalData, globalData->propertyNames->message, jsString(globalData, message));
}
-ErrorInstance* ErrorInstance::create(JSGlobalData* globalData, Structure* structure, const UString& message)
+void ErrorInstance::finishCreation(VM& vm, const String& message, Vector<StackFrame> stackTrace)
{
- return new (globalData) ErrorInstance(globalData, structure, message);
+ Base::finishCreation(vm);
+ ASSERT(inherits(info()));
+ if (!message.isNull())
+ putDirect(vm, vm.propertyNames->message, jsString(&vm, message), DontEnum);
+
+ if (!stackTrace.isEmpty())
+ putDirect(vm, vm.propertyNames->stack, vm.interpreter->stackTraceAsString(vm.topCallFrame, stackTrace), DontEnum);
}
-
-ErrorInstance* ErrorInstance::create(ExecState* exec, Structure* structure, JSValue message)
-{
- if (message.isUndefined())
- return new (exec) ErrorInstance(&exec->globalData(), structure);
- return new (exec) ErrorInstance(&exec->globalData(), structure, message.toString(exec));
-}
-
+
} // namespace JSC