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()) { |