From cc878137fcf984eb1d6ecec74d4b807e49874d8b Mon Sep 17 00:00:00 2001 From: Aurindam Jana Date: Tue, 5 Jun 2012 13:34:40 +0200 Subject: Console API: Print JS object Calling console.log(), console.debug(), print() etc would only print out "Object" if a JS Object was passed as an argument. This patch calls the toString() on the object. Change-Id: Iadf8b4d1fe81c3e2c7bd65e3c153a930fd994bef Reviewed-by: Kai Koehne --- src/qml/qml/v8/qqmlbuiltinfunctions.cpp | 35 ++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 12 deletions(-) (limited to 'src/qml') diff --git a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp index c8508e7ecd..3f0702e824 100644 --- a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp +++ b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp @@ -114,24 +114,35 @@ v8::Handle console(ConsoleLogTypes logType, const v8::Arguments &args v8::HandleScope handleScope; QString result; + QV8Engine *engine = V8ENGINE(); for (int i = 0; i < args.Length(); ++i) { if (i != 0) result.append(QLatin1Char(' ')); v8::Local value = args[i]; - //Check for Object Type - if (value->IsObject() && !value->IsFunction() - && !value->IsArray() && !value->IsDate() - && !value->IsRegExp()) { - result.append(QLatin1String("Object")); - } else { - v8::Local jsstr = value->ToString(); - QString tmp = V8ENGINE()->toString(jsstr); - if (value->IsArray()) - result.append(QString::fromLatin1("[%1]").arg(tmp)); - else - result.append(tmp); + + v8::TryCatch tryCatch; + v8::Local toString = value->ToString(); + if (tryCatch.HasCaught()) { + // toString() threw Exception + // Is it possible for value to be anything other than Object? + QString str; + if (value->IsObject()) { + str = QStringLiteral("[object Object]"); + } else { + toString = tryCatch.Exception()->ToString(); + str = QStringLiteral("toString() threw exception: %1") + .arg(engine->toString(toString)); + } + result.append(str); + continue; } + + QString tmp = engine->toString(toString); + if (value->IsArray()) + result.append(QStringLiteral("[%1]").arg(tmp)); + else + result.append(tmp); } if (printStack) { -- cgit v1.2.3