Files
avmplus/core/ErrorClass.cpp
dmcallis 65a0592776 Initial source code drop
Source code drop for the Actionscript virtual machine in the Adobe
Flash Player for December 2013
2013-12-02 16:04:04 -08:00

90 lines
2.7 KiB
C++

/* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */
/* vi: set ts=4 sw=4 expandtab: (add to ~/.vimrc: set modeline modelines=5) */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "avmplus.h"
#include "BuiltinNatives.h"
namespace avmplus
{
ErrorClass::ErrorClass(VTable* cvtable)
: ClassClosure(cvtable)
{
AvmAssert(traits()->getSizeOfInstance() >= sizeof(ErrorClass));
// trick: set our prototype to objectClass->prototypePtr for now...
setPrototypePtr(toplevel()->objectClass->prototypePtr());
// now we can create a proper proto, using this->ivtable() and object->proto
ScriptObject* proto = newInstance();
// and replace the one we had before.
setPrototypePtr(proto);
}
/**
* ErrorObject
*/
ErrorObject::ErrorObject(VTable* vtable,
ScriptObject *delegate)
: ScriptObject(vtable, delegate)
{
AvmAssert(traits()->getSizeOfInstance() >= sizeof(ErrorObject));
AvmCore *core = this->core();
const BugCompatibility *bugCompatibility = core->currentBugCompatibility();
if (!bugCompatibility->bugzilla619148) { // Stack traces in release builds
#ifdef DEBUGGER
if (!core->debugger())
return;
#else
return;
#endif
}
// Copy the stack trace
stackTrace = core->newStackTrace();
}
Stringp ErrorObject::getStackTrace() const
{
AvmCore* core = this->core();
const BugCompatibility *bugCompatibility = core->currentBugCompatibility();
if (!bugCompatibility->bugzilla619148) { // Stack traces in release builds
#ifdef DEBUGGER
if (!core->debugger())
return NULL;
#else
return NULL;
#endif
}
// getStackTrace returns the concatenation of the
// error message and the stack trace
Stringp buffer = core->string(atom());
buffer = core->concatStrings(buffer, core->newConstantStringLatin1("\n"));
if (stackTrace) {
buffer = core->concatStrings(buffer, stackTrace->format(core));
}
return buffer;
}
Stringp ErrorClass::getErrorMessage(int errorID) const
{
return this->core()->getErrorMessage(errorID);
}
/**
* NativeErrorClass
*/
NativeErrorClass::NativeErrorClass(VTable* cvtable)
: ClassClosure(cvtable)
{
AvmAssert(traits()->getSizeOfInstance() >= sizeof(ErrorClass));
createVanillaPrototype();
}
}