| Index: Source/core/inspector/JavaScriptCallFrame.cpp
|
| diff --git a/Source/core/inspector/JavaScriptCallFrame.cpp b/Source/core/inspector/JavaScriptCallFrame.cpp
|
| index f01ce098d5c721aa88e782153cacc0d5e3174fa6..821adf0e414a0b0e369dc12d96b976d44279f344 100644
|
| --- a/Source/core/inspector/JavaScriptCallFrame.cpp
|
| +++ b/Source/core/inspector/JavaScriptCallFrame.cpp
|
| @@ -150,12 +150,23 @@ v8::Handle<v8::Value> JavaScriptCallFrame::returnValue() const
|
| return m_callFrame.newLocal(m_isolate)->Get(v8AtomicString(m_isolate, "returnValue"));
|
| }
|
|
|
| -v8::Handle<v8::Value> JavaScriptCallFrame::evaluate(const String& expression)
|
| +v8::Handle<v8::Value> JavaScriptCallFrame::evaluateWithExceptionDetails(const String& expression)
|
| {
|
| v8::Handle<v8::Object> callFrame = m_callFrame.newLocal(m_isolate);
|
| v8::Handle<v8::Function> evalFunction = v8::Handle<v8::Function>::Cast(callFrame->Get(v8AtomicString(m_isolate, "evaluate")));
|
| v8::Handle<v8::Value> argv[] = { v8String(m_debuggerContext.newLocal(m_isolate)->GetIsolate(), expression) };
|
| - return evalFunction->Call(callFrame, WTF_ARRAY_LENGTH(argv), argv);
|
| + v8::TryCatch tryCatch;
|
| + v8::Handle<v8::Value> result = evalFunction->Call(callFrame, WTF_ARRAY_LENGTH(argv), argv);
|
| +
|
| + v8::Handle<v8::Object> wrappedResult = v8::Object::New(m_isolate);
|
| + if (tryCatch.HasCaught()) {
|
| + wrappedResult->Set(v8::String::NewFromUtf8(m_isolate, "result"), tryCatch.Exception());
|
| + wrappedResult->Set(v8::String::NewFromUtf8(m_isolate, "exceptionDetails"), createExceptionDetails(tryCatch.Message(), m_isolate));
|
| + } else {
|
| + wrappedResult->Set(v8::String::NewFromUtf8(m_isolate, "result"), result);
|
| + wrappedResult->Set(v8::String::NewFromUtf8(m_isolate, "exceptionDetails"), v8::Undefined(m_isolate));
|
| + }
|
| + return wrappedResult;
|
| }
|
|
|
| v8::Handle<v8::Value> JavaScriptCallFrame::restart()
|
| @@ -181,6 +192,20 @@ ScriptValue JavaScriptCallFrame::setVariableValue(ScriptState* scriptState, int
|
| return ScriptValue(scriptState, setVariableValueFunction->Call(callFrame, WTF_ARRAY_LENGTH(argv), argv));
|
| }
|
|
|
| +v8::Handle<v8::Object> JavaScriptCallFrame::createExceptionDetails(v8::Handle<v8::Message> message, v8::Isolate* isolate)
|
| +{
|
| + v8::Handle<v8::Object> exceptionDetails = v8::Object::New(isolate);
|
| + exceptionDetails->Set(v8::String::NewFromUtf8(isolate, "text"), message->Get());
|
| + exceptionDetails->Set(v8::String::NewFromUtf8(isolate, "url"), message->GetScriptOrigin().ResourceName());
|
| + exceptionDetails->Set(v8::String::NewFromUtf8(isolate, "line"), v8::Integer::New(isolate, message->GetLineNumber()));
|
| + exceptionDetails->Set(v8::String::NewFromUtf8(isolate, "column"), v8::Integer::New(isolate, message->GetStartColumn()));
|
| + if (!message->GetStackTrace().IsEmpty())
|
| + exceptionDetails->Set(v8::String::NewFromUtf8(isolate, "stackTrace"), message->GetStackTrace()->AsArray());
|
| + else
|
| + exceptionDetails->Set(v8::String::NewFromUtf8(isolate, "stackTrace"), v8::Undefined(isolate));
|
| + return exceptionDetails;
|
| +}
|
| +
|
| void JavaScriptCallFrame::trace(Visitor* visitor)
|
| {
|
| visitor->trace(m_caller);
|
|
|