OLD | NEW |
---|---|
1 // Copyright 2011, Google Inc. | 1 // Copyright 2011, Google Inc. |
2 // All rights reserved. | 2 // All rights reserved. |
3 // | 3 // |
4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
6 // met: | 6 // met: |
7 // | 7 // |
8 // * Redistributions of source code must retain the above copyright | 8 // * Redistributions of source code must retain the above copyright |
9 // notice, this list of conditions and the following disclaimer. | 9 // notice, this list of conditions and the following disclaimer. |
10 // * Redistributions in binary form must reproduce the above | 10 // * Redistributions in binary form must reproduce the above |
(...skipping 935 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
946 } | 946 } |
947 | 947 |
948 PassRefPtr<ScriptArguments> DartUtilities::createScriptArguments(Dart_Handle arg ument, Dart_Handle& exception) | 948 PassRefPtr<ScriptArguments> DartUtilities::createScriptArguments(Dart_Handle arg ument, Dart_Handle& exception) |
949 { | 949 { |
950 v8::Handle<v8::Value> v8Argument = DartHandleProxy::create(argument); | 950 v8::Handle<v8::Value> v8Argument = DartHandleProxy::create(argument); |
951 Vector<ScriptValue> arguments; | 951 Vector<ScriptValue> arguments; |
952 arguments.append(ScriptValue(v8Argument, v8::Isolate::GetCurrent())); | 952 arguments.append(ScriptValue(v8Argument, v8::Isolate::GetCurrent())); |
953 return ScriptArguments::create(DartUtilities::currentScriptState(), argument s); | 953 return ScriptArguments::create(DartUtilities::currentScriptState(), argument s); |
954 } | 954 } |
955 | 955 |
956 static PassRefPtr<ScriptCallStack> createScriptCallStackFromParsedStackTrace(Dar t_Handle parsedStackTrace, Dart_Handle exception) | 956 static PassRefPtr<ScriptCallStack> createScriptCallStackFromStackTrace(Dart_Exce ptionStackTrace stackTrace) |
957 { | 957 { |
958 Vector<Dart_Handle> callFrames; | 958 intptr_t frameCount = 0; |
959 DartUtilities::extractListElements(parsedStackTrace, exception, callFrames); | 959 Dart_Handle result = Dart_StacktraceLength(stackTrace, &frameCount); |
960 if (exception) | 960 if (Dart_IsError(result)) |
961 return 0; | 961 return 0; |
962 | 962 |
963 size_t frameCount = callFrames.size(); | |
964 if (frameCount > ScriptCallStack::maxCallStackSizeToCapture) | 963 if (frameCount > ScriptCallStack::maxCallStackSizeToCapture) |
965 frameCount = ScriptCallStack::maxCallStackSizeToCapture; | 964 frameCount = ScriptCallStack::maxCallStackSizeToCapture; |
966 | 965 |
967 Vector<ScriptCallFrame> scriptCallStackFrames; | 966 Vector<ScriptCallFrame> scriptCallStackFrames; |
968 for (size_t i = 0; i < frameCount; i++) { | 967 for (intptr_t frameIndex = 0; frameIndex < frameCount; frameIndex++) { |
969 Dart_Handle callFrame = callFrames[i]; | 968 Dart_Handle dartFunctionName; |
970 Vector<Dart_Handle> fields; | 969 Dart_Handle dartScriptUrl; |
971 DartUtilities::extractListElements(callFrame, exception, fields); | 970 intptr_t lineNumber = 0; |
972 if (exception) | 971 intptr_t columnNumber = 0; |
972 result = Dart_StacktraceFrameInfo(stackTrace, frameIndex, &dartFunctionN ame, &dartScriptUrl, &lineNumber, &columnNumber); | |
973 if (Dart_IsError(result)) | |
973 return 0; | 974 return 0; |
974 ASSERT(fields.size() == 4); | 975 |
975 String functionName = DartUtilities::toString(fields[0]); | 976 const char* cstr = 0; |
976 String sourceName = DartUtilities::toString(fields[1]); | 977 result = Dart_StringToCString(dartFunctionName, &cstr); |
977 int lineNumber = DartUtilities::toInteger(fields[2], exception); | 978 if (Dart_IsError(result)) |
978 if (exception) | |
979 return 0; | 979 return 0; |
980 int columnNumber = DartUtilities::toInteger(fields[3], exception); | 980 String functionName(cstr); |
981 if (exception) | 981 result = Dart_StringToCString(dartScriptUrl, &cstr); |
982 if (Dart_IsError(result)) | |
982 return 0; | 983 return 0; |
983 scriptCallStackFrames.append(ScriptCallFrame(functionName, "undefined", sourceName, lineNumber, columnNumber)); | 984 String scriptUrl(cstr); |
985 | |
986 // FIXME | |
rmacnak
2013/11/07 21:30:41
The console Sources tab sometimes tries to highlig
| |
987 const char* scriptName = "undefined"; | |
988 // FIXME | |
989 if (columnNumber != -1) | |
rmacnak
2013/11/07 21:30:41
When stack traces were parsed by a Dart regex, the
| |
990 scriptCallStackFrames.append(ScriptCallFrame(functionName, scriptNam e, scriptUrl, lineNumber, columnNumber)); | |
984 } | 991 } |
985 if (!frameCount) | 992 if (!frameCount) |
986 scriptCallStackFrames.append(ScriptCallFrame("undefined", "undefined", " undefined", 0, 0)); | 993 scriptCallStackFrames.append(ScriptCallFrame("undefined", "undefined", " undefined", 0, 0)); |
987 | 994 |
988 return ScriptCallStack::create(scriptCallStackFrames); | 995 return ScriptCallStack::create(scriptCallStackFrames); |
989 } | 996 } |
990 | 997 |
991 static PassRefPtr<ScriptCallStack> createScriptCallStackFromStackTrace(Dart_Hand le stackTrace, Dart_Handle& exception) | |
992 { | |
993 Dart_Handle parsedStackTrace = DartUtilities::invokeUtilsMethod("parseStackT race", 1, &stackTrace); | |
994 if (!DartUtilities::checkResult(parsedStackTrace, exception)) | |
995 return 0; | |
996 | |
997 return createScriptCallStackFromParsedStackTrace(parsedStackTrace, exception ); | |
998 } | |
999 | |
1000 PassRefPtr<ScriptCallStack> DartUtilities::createScriptCallStack() | 998 PassRefPtr<ScriptCallStack> DartUtilities::createScriptCallStack() |
1001 { | 999 { |
1002 Dart_ExceptionPauseInfo previousPauseInfo = Dart_GetExceptionPauseInfo(); | 1000 Dart_ExceptionStackTrace trace = 0; |
1003 if (previousPauseInfo != kNoPauseOnExceptions) | 1001 Dart_Handle result = Dart_CurrentStacktrace(&trace); |
1004 Dart_SetExceptionPauseInfo(kNoPauseOnExceptions); | 1002 ASSERT(!Dart_IsError(result)); |
1005 Dart_Handle exception = 0; | 1003 ASSERT(!Dart_IsNull(result)); |
1006 Dart_Handle parsedStackTrace = DartUtilities::invokeUtilsMethod("capturePars edStackTrace", 0, 0); | 1004 ASSERT(trace); |
1007 | 1005 return createScriptCallStackFromStackTrace(trace); |
1008 if (previousPauseInfo != kNoPauseOnExceptions) | |
1009 Dart_SetExceptionPauseInfo(previousPauseInfo); | |
1010 | |
1011 if (!DartUtilities::checkResult(parsedStackTrace, exception)) | |
1012 return 0; | |
1013 | |
1014 return createScriptCallStackFromParsedStackTrace(parsedStackTrace, exception ); | |
1015 } | 1006 } |
1016 | 1007 |
1017 Dart_WeakPersistentHandle DartUtilities::createPrologueWeakPersistentHandle(Dart _Handle object, void* peer, Dart_WeakPersistentHandleFinalizer weakCallback) | 1008 Dart_WeakPersistentHandle DartUtilities::createPrologueWeakPersistentHandle(Dart _Handle object, void* peer, Dart_WeakPersistentHandleFinalizer weakCallback) |
1018 { | 1009 { |
1019 DartWeakCallback* callback = new DartWeakCallback(peer, weakCallback); | 1010 DartWeakCallback* callback = new DartWeakCallback(peer, weakCallback); |
1020 callback->m_object = Dart_NewPrologueWeakPersistentHandle(object, callback, &weakCallbackWrapper); | 1011 callback->m_object = Dart_NewPrologueWeakPersistentHandle(object, callback, &weakCallbackWrapper); |
1021 DartDOMData::current()->weakCallbacks()->add(callback); | 1012 DartDOMData::current()->weakCallbacks()->add(callback); |
1022 return callback->m_object; | 1013 return callback->m_object; |
1023 } | 1014 } |
1024 | 1015 |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1129 Dart_Handle exception = Dart_ErrorGetException(result); | 1120 Dart_Handle exception = Dart_ErrorGetException(result); |
1130 ASSERT(!Dart_IsError(exception)); | 1121 ASSERT(!Dart_IsError(exception)); |
1131 | 1122 |
1132 exception = Dart_ToString(exception); | 1123 exception = Dart_ToString(exception); |
1133 if (Dart_IsError(exception)) | 1124 if (Dart_IsError(exception)) |
1134 errorMessage = String("Error converting exception to a string: ") + Dart_GetError(exception); | 1125 errorMessage = String("Error converting exception to a string: ") + Dart_GetError(exception); |
1135 else | 1126 else |
1136 errorMessage = String("Exception: ") + DartUtilities::toString(excep tion); | 1127 errorMessage = String("Exception: ") + DartUtilities::toString(excep tion); |
1137 | 1128 |
1138 // Print the stack trace. | 1129 // Print the stack trace. |
1139 Dart_Handle stacktrace = Dart_ErrorGetStacktrace(result); | 1130 Dart_ExceptionStackTrace stacktrace; |
1140 ASSERT(!Dart_IsError(stacktrace)); | 1131 Dart_Handle traceResult = Dart_ErrorGetStacktrace(result, &stacktrace); |
1141 Dart_Handle stackTraceConversionException = 0; | 1132 ASSERT(!Dart_IsError(traceResult)); |
1142 callStack = createScriptCallStackFromStackTrace(stacktrace, stackTraceCo nversionException); | 1133 callStack = createScriptCallStackFromStackTrace(stacktrace); |
1143 if (stackTraceConversionException) | |
1144 errorMessage.append(String("\nError converting stack trace to a stri ng: ") + DartUtilities::toString(stackTraceConversionException)); | |
1145 } | 1134 } |
1146 | 1135 |
1147 if (context && context->isDocument()) { | 1136 if (context && context->isDocument()) { |
1148 static_cast<Document*>(context)->reportException(ErrorEvent::create(erro rMessage, sourceURL, lineNumber, 0, 0), callStack, NotSharableCrossOrigin); | 1137 static_cast<Document*>(context)->reportException(ErrorEvent::create(erro rMessage, sourceURL, lineNumber, 0, 0), callStack, NotSharableCrossOrigin); |
1149 } | 1138 } |
1150 } | 1139 } |
1151 | 1140 |
1152 Dart_Handle DartUtilities::notImplementedException(const char* fileName, int lin eNumber) | 1141 Dart_Handle DartUtilities::notImplementedException(const char* fileName, int lin eNumber) |
1153 { | 1142 { |
1154 Dart_Handle args[2] = { Dart_NewStringFromCString(fileName), Dart_NewInteger (lineNumber) }; | 1143 Dart_Handle args[2] = { Dart_NewStringFromCString(fileName), Dart_NewInteger (lineNumber) }; |
(...skipping 25 matching lines...) Expand all Loading... | |
1180 if (!v) { | 1169 if (!v) { |
1181 return 0; | 1170 return 0; |
1182 } | 1171 } |
1183 ASSERT(valueLen > 0 && static_cast<size_t>(valueLen) > strlen(v)); | 1172 ASSERT(valueLen > 0 && static_cast<size_t>(valueLen) > strlen(v)); |
1184 strncpy(value, v, valueLen); | 1173 strncpy(value, v, valueLen); |
1185 value[valueLen - 1] = '\0'; | 1174 value[valueLen - 1] = '\0'; |
1186 return strlen(value); | 1175 return strlen(value); |
1187 #endif | 1176 #endif |
1188 } | 1177 } |
1189 } | 1178 } |
OLD | NEW |