diff options
Diffstat (limited to 'src/declarative')
-rw-r--r-- | src/declarative/qml/v8/qdeclarativebuiltinfunctions.cpp | 52 | ||||
-rw-r--r-- | src/declarative/qml/v8/qdeclarativebuiltinfunctions_p.h | 1 | ||||
-rw-r--r-- | src/declarative/qml/v8/qv8engine.cpp | 1 |
3 files changed, 41 insertions, 13 deletions
diff --git a/src/declarative/qml/v8/qdeclarativebuiltinfunctions.cpp b/src/declarative/qml/v8/qdeclarativebuiltinfunctions.cpp index a77c8a07c5..5f0b3ff509 100644 --- a/src/declarative/qml/v8/qdeclarativebuiltinfunctions.cpp +++ b/src/declarative/qml/v8/qdeclarativebuiltinfunctions.cpp @@ -94,6 +94,22 @@ static QString extendMessage(const QString &msg) { return msg; } +static void printStack() { + //The v8 default is currently 10 stack frames. + v8::Handle<v8::StackTrace> stackTrace = + v8::StackTrace::CurrentStackTrace(10, v8::StackTrace::kOverview); + int stackCount = stackTrace->GetFrameCount(); + + for (int i = 0; i < stackCount; i++) { + v8::Local<v8::StackFrame> frame = stackTrace->GetFrame(i); + v8::String::Utf8Value func_name(frame->GetFunctionName()); + v8::String::Utf8Value script_name(frame->GetScriptName()); + int lineNumber = frame->GetLineNumber(); + int columnNumber = frame->GetColumn(); + qDebug("%s (%s:%d:%d)\n", *func_name, *script_name, lineNumber, columnNumber); + } +} + v8::Handle<v8::Value> console(ConsoleLogTypes logType, const v8::Arguments &args) { v8::HandleScope handleScope; @@ -252,19 +268,7 @@ v8::Handle<v8::Value> consoleTrace(const v8::Arguments &args) if (args.Length() != 0) V8THROW_ERROR("console.trace(): Invalid arguments"); - //The v8 default is currently 10 stack frames. - v8::Handle<v8::StackTrace> stackTrace = - v8::StackTrace::CurrentStackTrace(10, v8::StackTrace::kOverview); - int stackCount = stackTrace->GetFrameCount(); - - for (int i = 0; i < stackCount; i++) { - v8::Local<v8::StackFrame> frame = stackTrace->GetFrame(i); - v8::String::Utf8Value func_name(frame->GetFunctionName()); - v8::String::Utf8Value script_name(frame->GetScriptName()); - int lineNumber = frame->GetLineNumber(); - int columnNumber = frame->GetColumn(); - qDebug("%s (%s:%d:%d)\n", *func_name, *script_name, lineNumber, columnNumber); - } + printStack(); return v8::Undefined(); } @@ -273,6 +277,28 @@ v8::Handle<v8::Value> consoleWarn(const v8::Arguments &args) return console(Warn, args); } +v8::Handle<v8::Value> consoleAssert(const v8::Arguments &args) +{ + if (args.Length() == 0) + V8THROW_ERROR("console.assert(): Missing argument"); + + if (!args[0]->ToBoolean()->Value()) { + QString message; + for (int i = 1; i < args.Length(); ++i) { + if (i != 1) + message.append(QLatin1Char(' ')); + + v8::Local<v8::Value> value = args[i]; + message.append(V8ENGINE()->toString(value->ToString())); + } + + message = extendMessage(message); + qCritical("%s", qPrintable(message)); + printStack(); + } + return v8::Undefined(); +} + v8::Handle<v8::Value> stringArg(const v8::Arguments &args) { QString value = V8ENGINE()->toString(args.This()->ToString()); diff --git a/src/declarative/qml/v8/qdeclarativebuiltinfunctions_p.h b/src/declarative/qml/v8/qdeclarativebuiltinfunctions_p.h index 8761bdc838..cdb31b60a8 100644 --- a/src/declarative/qml/v8/qdeclarativebuiltinfunctions_p.h +++ b/src/declarative/qml/v8/qdeclarativebuiltinfunctions_p.h @@ -70,6 +70,7 @@ v8::Handle<v8::Value> consoleTimeEnd(const v8::Arguments &args); v8::Handle<v8::Value> consoleCount(const v8::Arguments &args); v8::Handle<v8::Value> consoleTrace(const v8::Arguments &args); v8::Handle<v8::Value> consoleWarn(const v8::Arguments &args); +v8::Handle<v8::Value> consoleAssert(const v8::Arguments &args); v8::Handle<v8::Value> isQtObject(const v8::Arguments &args); v8::Handle<v8::Value> rgba(const v8::Arguments &args); v8::Handle<v8::Value> hsla(const v8::Arguments &args); diff --git a/src/declarative/qml/v8/qv8engine.cpp b/src/declarative/qml/v8/qv8engine.cpp index aaf912a35c..fa35533be3 100644 --- a/src/declarative/qml/v8/qv8engine.cpp +++ b/src/declarative/qml/v8/qv8engine.cpp @@ -530,6 +530,7 @@ void QV8Engine::initializeGlobal(v8::Handle<v8::Object> global) console->Set(v8::String::New("info"), consoleLogFn); console->Set(v8::String::New("warn"), V8FUNCTION(consoleWarn, this)); console->Set(v8::String::New("error"), V8FUNCTION(consoleError, this)); + console->Set(v8::String::New("assert"), V8FUNCTION(consoleAssert, this)); console->Set(v8::String::New("count"), V8FUNCTION(consoleCount, this)); console->Set(v8::String::New("profile"), V8FUNCTION(consoleProfile, this)); |