aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/v8/qqmlbuiltinfunctions.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/qml/v8/qqmlbuiltinfunctions.cpp')
-rw-r--r--src/qml/qml/v8/qqmlbuiltinfunctions.cpp35
1 files changed, 23 insertions, 12 deletions
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<v8::Value> 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<v8::Value> 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<v8::String> 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<v8::String> 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) {