#include <private/qv4object_p.h>
#include <private/qv4functionobject_p.h>
#include <private/qv4objectproto_p.h>
+#include <private/qv4exception_p.h>
using namespace QV4;
#include <QtQml/qqmlerror.h>
#include <private/qqmlengine_p.h>
#include <private/qpointervaluepair_p.h>
+#include <private/qv4exception_p.h>
QT_BEGIN_NAMESPACE
#include "qv4instr_moth_p.h"
#include <private/qv4value_p.h>
#include <private/qv4debugging_p.h>
+#include <private/qv4exception_p.h>
#include <iostream>
return m_qmlExtensions;
}
-Exception::Exception(ExecutionContext *throwingContext, const Value &exceptionValue)
- : exception(exceptionValue)
-{
- this->throwingContext = throwingContext->engine->current;
- accepted = false;
- if (ErrorObject *error = exceptionValue.asErrorObject())
- m_stackTrace = error->stackTrace;
- else
- m_stackTrace = throwingContext->engine->stackTrace();
-}
-
-Exception::~Exception()
-{
- assert(accepted);
-}
-
-void Exception::accept(ExecutionContext *catchingContext)
-{
- assert(!accepted);
- accepted = true;
- partiallyUnwindContext(catchingContext);
-}
-
-void Exception::partiallyUnwindContext(ExecutionContext *catchingContext)
-{
- if (!throwingContext)
- return;
- ExecutionContext *context = throwingContext;
- while (context != catchingContext)
- context = context->engine->popContext();
- throwingContext = context;
-}
-
QT_END_NAMESPACE
return current;
}
-struct Q_QML_EXPORT Exception {
- explicit Exception(ExecutionContext *throwingContext, const Value &exceptionValue);
- ~Exception();
-
- void accept(ExecutionContext *catchingContext);
-
- void partiallyUnwindContext(ExecutionContext *catchingContext);
-
- Value value() const { return exception; }
-
- ExecutionEngine::StackTrace stackTrace() const { return m_stackTrace; }
-
-private:
- ExecutionContext *throwingContext;
- bool accepted;
- PersistentValue exception;
- ExecutionEngine::StackTrace m_stackTrace;
-};
-
} // namespace QV4
QT_END_NAMESPACE
--- /dev/null
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtQml module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qv4exception_p.h"
+#include "qv4errorobject_p.h"
+#include "qv4debugging_p.h"
+#include "qv4unwindhelper_p.h"
+
+#include <wtf/Platform.h>
+
+#if USE(LIBUNWIND_DEBUG)
+#include <libunwind.h>
+#include <execinfo.h>
+#endif
+
+QT_BEGIN_NAMESPACE
+
+using namespace QV4;
+
+
+void Exception::throwException(ExecutionContext *context, const Value &value)
+{
+ if (context->engine->debugger)
+ context->engine->debugger->aboutToThrow(value);
+
+ UnwindHelper::prepareForUnwind(context);
+
+#if USE(LIBUNWIND_DEBUG)
+ printf("about to throw exception. walking stack first with libunwind:\n");
+ unw_cursor_t cursor; unw_context_t uc;
+ unw_word_t ip, sp;
+
+ unw_getcontext(&uc);
+ unw_init_local(&cursor, &uc);
+ while (unw_step(&cursor) > 0) {
+ unw_get_reg(&cursor, UNW_REG_IP, &ip);
+ unw_get_reg(&cursor, UNW_REG_SP, &sp);
+ printf("ip = %lx, sp = %lx ", (long) ip, (long) sp);
+ void * const addr = (void*)ip;
+ char **symbol = backtrace_symbols(&addr, 1);
+ printf("%s", symbol[0]);
+ free(symbol);
+ printf("\n");
+ }
+ printf("stack walked. throwing exception now...\n");
+#endif
+
+ throw Exception(context, value);
+}
+
+Exception::Exception(ExecutionContext *throwingContext, const Value &exceptionValue)
+ : exception(exceptionValue)
+{
+ this->throwingContext = throwingContext->engine->current;
+ accepted = false;
+ if (ErrorObject *error = exceptionValue.asErrorObject())
+ m_stackTrace = error->stackTrace;
+ else
+ m_stackTrace = throwingContext->engine->stackTrace();
+}
+
+Exception::~Exception()
+{
+ assert(accepted);
+}
+
+void Exception::accept(ExecutionContext *catchingContext)
+{
+ assert(!accepted);
+ accepted = true;
+ partiallyUnwindContext(catchingContext);
+}
+
+void Exception::partiallyUnwindContext(ExecutionContext *catchingContext)
+{
+ if (!throwingContext)
+ return;
+ ExecutionContext *context = throwingContext;
+ while (context != catchingContext)
+ context = context->engine->popContext();
+ throwingContext = context;
+}
+
+QT_END_NAMESPACE
--- /dev/null
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtQml module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QV4EXCEPTION_GNU_P
+#define QV4EXCEPTION_GNU_P
+
+#include <qglobal.h>
+#include "qv4value_p.h"
+#include "qv4engine_p.h"
+
+QT_BEGIN_NAMESPACE
+
+namespace QV4 {
+
+struct Q_QML_EXPORT Exception {
+ static void throwException(ExecutionContext *throwingContext, const Value &exceptionValue);
+
+ ~Exception();
+
+ void accept(ExecutionContext *catchingContext);
+
+ void partiallyUnwindContext(ExecutionContext *catchingContext);
+
+ Value value() const { return exception; }
+
+ ExecutionEngine::StackTrace stackTrace() const { return m_stackTrace; }
+
+private:
+ explicit Exception(ExecutionContext *throwingContext, const Value &exceptionValue);
+
+ ExecutionContext *throwingContext;
+ bool accepted;
+ PersistentValue exception;
+ ExecutionEngine::StackTrace m_stackTrace;
+};
+
+} // namespace QV4
+
+QT_END_NAMESPACE
+
+#endif // QV4EXCEPTION_GNU_P
#include "qv4stringobject_p.h"
#include "qv4function_p.h"
#include "qv4mm_p.h"
+#include "qv4exception_p.h"
#include <private/qqmljsengine_p.h>
#include <private/qqmljslexer_p.h>
#include "qv4function_p.h"
#include "qv4debugging_p.h"
#include "qv4script_p.h"
+#include "qv4exception_p.h"
#include <private/qqmljsengine_p.h>
#include <private/qqmljslexer_p.h>
#include <private/qv4functionobject_p.h>
#include <private/qv4script_p.h>
#include <private/qv4context_p.h>
+#include <private/qv4exception_p.h>
#include <private/qqmlcontextwrapper_p.h>
QT_BEGIN_NAMESPACE
#include "qv4lookup_p.h"
#include "qv4function_p.h"
#include "qv4ssa_p.h"
+#include "qv4exception_p.h"
#include <assembler/LinkBuffer.h>
#include <WTFStubs.h>
****************************************************************************/
#include "qv4global_p.h"
-#include "qv4debugging_p.h"
#include "qv4runtime_p.h"
#include "qv4object_p.h"
#include "qv4jsir_p.h"
#include "qv4stringobject_p.h"
#include "qv4lookup_p.h"
#include "qv4function_p.h"
-#include "qv4unwindhelper_p.h"
+#include "qv4exception_p.h"
#include "private/qlocale_tools_p.h"
#include <QtCore/qmath.h>
#include "../../../3rdparty/double-conversion/double-conversion.h"
-#if USE(LIBUNWIND_DEBUG)
-#include <libunwind.h>
-#include <execinfo.h>
-#endif
-
QT_BEGIN_NAMESPACE
namespace QV4 {
void __qmljs_throw(ExecutionContext *context, const Value &value)
{
- if (context->engine->debugger)
- context->engine->debugger->aboutToThrow(value);
-
- UnwindHelper::prepareForUnwind(context);
-
-#if USE(LIBUNWIND_DEBUG)
- printf("about to throw exception. walking stack first with libunwind:\n");
- unw_cursor_t cursor; unw_context_t uc;
- unw_word_t ip, sp;
-
- unw_getcontext(&uc);
- unw_init_local(&cursor, &uc);
- while (unw_step(&cursor) > 0) {
- unw_get_reg(&cursor, UNW_REG_IP, &ip);
- unw_get_reg(&cursor, UNW_REG_SP, &sp);
- printf("ip = %lx, sp = %lx ", (long) ip, (long) sp);
- void * const addr = (void*)ip;
- char **symbol = backtrace_symbols(&addr, 1);
- printf("%s", symbol[0]);
- free(symbol);
- printf("\n");
- }
- printf("stack walked. throwing exception now...\n");
-#endif
-
- throw Exception(context, value);
+ Exception::throwException(context, value);
}
void __qmljs_builtin_typeof(ExecutionContext *ctx, Value *result, const Value &value)
#include "qv4function_p.h"
#include "qv4context_p.h"
#include "qv4debugging_p.h"
+#include "qv4exception_p.h"
#include <private/qqmljsengine_p.h>
#include <private/qqmljslexer_p.h>
#include <qv4object_p.h>
#include <qv4objectproto_p.h>
#include "qv4mm_p.h"
+#include "qv4exception_p.h"
#include <wtf/MathExtras.h>
$$PWD/qv4include.cpp \
$$PWD/qv4qobjectwrapper.cpp \
$$PWD/qv4qmlextensions.cpp \
- $$PWD/qv4stacktrace.cpp
+ $$PWD/qv4stacktrace.cpp \
+ $$PWD/qv4exception.cpp
HEADERS += \
$$PWD/qv4global_p.h \
$$PWD/qv4include_p.h \
$$PWD/qv4qobjectwrapper_p.h \
$$PWD/qv4qmlextensions_p.h \
- $$PWD/qv4stacktrace_p.h
+ $$PWD/qv4stacktrace_p.h \
+ $$PWD/qv4exception_p.h
llvm-libs {
#include "private/qv4mm_p.h"
#include "private/qv4globalobject_p.h"
#include "private/qv4script_p.h"
+#include "private/qv4exception_p.h"
#include <QtCore/qdatetime.h>
#include <QtCore/qmetaobject.h>
#include "qv4regexpobject_p.h"
#include "qv8engine_p.h"
#include <private/qv4mm_p.h>
+#include <private/qv4exception_p.h>
QV4::Value QJSValuePrivate::getValue(QV4::ExecutionEngine *e)
{
#include "qjsvalue_p.h"
#include "private/qv4string_p.h"
#include "private/qv4object_p.h"
+#include "private/qv4exception_p.h"
QT_BEGIN_NAMESPACE
#include "testhttpserver.h"
#include "../../shared/util.h"
#include <private/qv4functionobject_p.h>
+#include <private/qv4exception_p.h>
/*
This test covers evaluation of ECMAScript expressions and bindings from within
#include "private/qv4mm_p.h"
#include "private/qv4context_p.h"
#include "private/qv4script_p.h"
+#include "private/qv4exception_p.h"
#ifdef V4_ENABLE_JIT
# include "private/qv4isel_masm_p.h"