Chromium Code Reviews| Index: Source/bindings/dart/DartUtilities.cpp |
| diff --git a/Source/bindings/dart/DartUtilities.cpp b/Source/bindings/dart/DartUtilities.cpp |
| index 49f7d85db026762588af6b95cd6523d86c252c63..cbf116693fd13ff2c1f636ea3d376be75495a6fc 100644 |
| --- a/Source/bindings/dart/DartUtilities.cpp |
| +++ b/Source/bindings/dart/DartUtilities.cpp |
| @@ -953,34 +953,41 @@ PassRefPtr<ScriptArguments> DartUtilities::createScriptArguments(Dart_Handle arg |
| return ScriptArguments::create(DartUtilities::currentScriptState(), arguments); |
| } |
| -static PassRefPtr<ScriptCallStack> createScriptCallStackFromParsedStackTrace(Dart_Handle parsedStackTrace, Dart_Handle exception) |
| +static PassRefPtr<ScriptCallStack> createScriptCallStackFromStackTrace(Dart_ExceptionStackTrace stackTrace) |
| { |
| - Vector<Dart_Handle> callFrames; |
| - DartUtilities::extractListElements(parsedStackTrace, exception, callFrames); |
| - if (exception) |
| + intptr_t frameCount = 0; |
| + Dart_Handle result = Dart_StacktraceLength(stackTrace, &frameCount); |
| + if (Dart_IsError(result)) |
| return 0; |
| - size_t frameCount = callFrames.size(); |
| if (frameCount > ScriptCallStack::maxCallStackSizeToCapture) |
| frameCount = ScriptCallStack::maxCallStackSizeToCapture; |
| Vector<ScriptCallFrame> scriptCallStackFrames; |
| - for (size_t i = 0; i < frameCount; i++) { |
| - Dart_Handle callFrame = callFrames[i]; |
| - Vector<Dart_Handle> fields; |
| - DartUtilities::extractListElements(callFrame, exception, fields); |
| - if (exception) |
| + for (intptr_t frameIndex = 0; frameIndex < frameCount; frameIndex++) { |
| + Dart_Handle dartFunctionName; |
| + Dart_Handle dartScriptUrl; |
| + intptr_t lineNumber = 0; |
| + intptr_t columnNumber = 0; |
| + result = Dart_StacktraceFrameInfo(stackTrace, frameIndex, &dartFunctionName, &dartScriptUrl, &lineNumber, &columnNumber); |
| + if (Dart_IsError(result)) |
| return 0; |
| - ASSERT(fields.size() == 4); |
| - String functionName = DartUtilities::toString(fields[0]); |
| - String sourceName = DartUtilities::toString(fields[1]); |
| - int lineNumber = DartUtilities::toInteger(fields[2], exception); |
| - if (exception) |
| + |
| + const char* cstr = 0; |
| + result = Dart_StringToCString(dartFunctionName, &cstr); |
| + if (Dart_IsError(result)) |
| return 0; |
| - int columnNumber = DartUtilities::toInteger(fields[3], exception); |
| - if (exception) |
| + String functionName(cstr); |
| + result = Dart_StringToCString(dartScriptUrl, &cstr); |
| + if (Dart_IsError(result)) |
| return 0; |
| - scriptCallStackFrames.append(ScriptCallFrame(functionName, "undefined", sourceName, lineNumber, columnNumber)); |
| + String scriptUrl(cstr); |
| + |
| + // FIXME |
|
rmacnak
2013/11/07 21:30:41
The console Sources tab sometimes tries to highlig
|
| + const char* scriptName = "undefined"; |
| + // FIXME |
| + if (columnNumber != -1) |
|
rmacnak
2013/11/07 21:30:41
When stack traces were parsed by a Dart regex, the
|
| + scriptCallStackFrames.append(ScriptCallFrame(functionName, scriptName, scriptUrl, lineNumber, columnNumber)); |
| } |
| if (!frameCount) |
| scriptCallStackFrames.append(ScriptCallFrame("undefined", "undefined", "undefined", 0, 0)); |
| @@ -988,30 +995,14 @@ static PassRefPtr<ScriptCallStack> createScriptCallStackFromParsedStackTrace(Dar |
| return ScriptCallStack::create(scriptCallStackFrames); |
| } |
| -static PassRefPtr<ScriptCallStack> createScriptCallStackFromStackTrace(Dart_Handle stackTrace, Dart_Handle& exception) |
| -{ |
| - Dart_Handle parsedStackTrace = DartUtilities::invokeUtilsMethod("parseStackTrace", 1, &stackTrace); |
| - if (!DartUtilities::checkResult(parsedStackTrace, exception)) |
| - return 0; |
| - |
| - return createScriptCallStackFromParsedStackTrace(parsedStackTrace, exception); |
| -} |
| - |
| PassRefPtr<ScriptCallStack> DartUtilities::createScriptCallStack() |
| { |
| - Dart_ExceptionPauseInfo previousPauseInfo = Dart_GetExceptionPauseInfo(); |
| - if (previousPauseInfo != kNoPauseOnExceptions) |
| - Dart_SetExceptionPauseInfo(kNoPauseOnExceptions); |
| - Dart_Handle exception = 0; |
| - Dart_Handle parsedStackTrace = DartUtilities::invokeUtilsMethod("captureParsedStackTrace", 0, 0); |
| - |
| - if (previousPauseInfo != kNoPauseOnExceptions) |
| - Dart_SetExceptionPauseInfo(previousPauseInfo); |
| - |
| - if (!DartUtilities::checkResult(parsedStackTrace, exception)) |
| - return 0; |
| - |
| - return createScriptCallStackFromParsedStackTrace(parsedStackTrace, exception); |
| + Dart_ExceptionStackTrace trace = 0; |
| + Dart_Handle result = Dart_CurrentStacktrace(&trace); |
| + ASSERT(!Dart_IsError(result)); |
| + ASSERT(!Dart_IsNull(result)); |
| + ASSERT(trace); |
| + return createScriptCallStackFromStackTrace(trace); |
| } |
| Dart_WeakPersistentHandle DartUtilities::createPrologueWeakPersistentHandle(Dart_Handle object, void* peer, Dart_WeakPersistentHandleFinalizer weakCallback) |
| @@ -1136,12 +1127,10 @@ void DartUtilities::reportProblem(ScriptExecutionContext* context, Dart_Handle r |
| errorMessage = String("Exception: ") + DartUtilities::toString(exception); |
| // Print the stack trace. |
| - Dart_Handle stacktrace = Dart_ErrorGetStacktrace(result); |
| - ASSERT(!Dart_IsError(stacktrace)); |
| - Dart_Handle stackTraceConversionException = 0; |
| - callStack = createScriptCallStackFromStackTrace(stacktrace, stackTraceConversionException); |
| - if (stackTraceConversionException) |
| - errorMessage.append(String("\nError converting stack trace to a string: ") + DartUtilities::toString(stackTraceConversionException)); |
| + Dart_ExceptionStackTrace stacktrace; |
| + Dart_Handle traceResult = Dart_ErrorGetStacktrace(result, &stacktrace); |
| + ASSERT(!Dart_IsError(traceResult)); |
| + callStack = createScriptCallStackFromStackTrace(stacktrace); |
| } |
| if (context && context->isDocument()) { |