OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2014 Google Inc. All rights reserved. | 2 * Copyright (C) 2014 Google Inc. 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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
50 using WebCore::TypeBuilder::Debugger::Location; | 50 using WebCore::TypeBuilder::Debugger::Location; |
51 using WebCore::TypeBuilder::Debugger::Scope; | 51 using WebCore::TypeBuilder::Debugger::Scope; |
52 using WebCore::TypeBuilder::Runtime::PropertyDescriptor; | 52 using WebCore::TypeBuilder::Runtime::PropertyDescriptor; |
53 using WebCore::TypeBuilder::Runtime::InternalPropertyDescriptor; | 53 using WebCore::TypeBuilder::Runtime::InternalPropertyDescriptor; |
54 using WebCore::TypeBuilder::Debugger::FunctionDetails; | 54 using WebCore::TypeBuilder::Debugger::FunctionDetails; |
55 using WebCore::TypeBuilder::Runtime::RemoteObject; | 55 using WebCore::TypeBuilder::Runtime::RemoteObject; |
56 using WebCore::TypeBuilder::Runtime::PropertyPreview; | 56 using WebCore::TypeBuilder::Runtime::PropertyPreview; |
57 | 57 |
58 namespace WebCore { | 58 namespace WebCore { |
59 | 59 |
60 static const uint64_t kMaxSafeIntegerForDouble = 0x1fffffffffffffUL; | |
61 | |
60 Dart_Handle getLibraryUrl(Dart_Handle handle) | 62 Dart_Handle getLibraryUrl(Dart_Handle handle) |
61 { | 63 { |
62 intptr_t libraryId = 0; | 64 intptr_t libraryId = 0; |
63 Dart_Handle ALLOW_UNUSED result = Dart_LibraryId(handle, &libraryId); | 65 Dart_Handle ALLOW_UNUSED result = Dart_LibraryId(handle, &libraryId); |
64 ASSERT(!Dart_IsError(result)); | 66 ASSERT(!Dart_IsError(result)); |
65 Dart_Handle libraryUrl = Dart_GetLibraryURL(libraryId); | 67 Dart_Handle libraryUrl = Dart_GetLibraryURL(libraryId); |
66 ASSERT(Dart_IsString(libraryUrl)); | 68 ASSERT(Dart_IsString(libraryUrl)); |
67 return libraryUrl; | 69 return libraryUrl; |
68 } | 70 } |
69 | 71 |
(...skipping 667 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
737 | 739 |
738 void DartInjectedScript::restartFrame(ErrorString* errorString, const StackTrace & callFrames, const String& callFrameId, RefPtr<JSONObject>* result) | 740 void DartInjectedScript::restartFrame(ErrorString* errorString, const StackTrace & callFrames, const String& callFrameId, RefPtr<JSONObject>* result) |
739 { | 741 { |
740 ASSERT(!callFrames.isJavaScript()); | 742 ASSERT(!callFrames.isJavaScript()); |
741 *errorString = "Dart does not yet support restarting call frames"; | 743 *errorString = "Dart does not yet support restarting call frames"; |
742 return; | 744 return; |
743 } | 745 } |
744 | 746 |
745 void DartInjectedScript::getStepInPositions(ErrorString* errorString, const Stac kTrace& callFrames, const String& callFrameId, RefPtr<Array<TypeBuilder::Debugge r::Location> >& positions) | 747 void DartInjectedScript::getStepInPositions(ErrorString* errorString, const Stac kTrace& callFrames, const String& callFrameId, RefPtr<Array<TypeBuilder::Debugge r::Location> >& positions) |
746 { | 748 { |
747 ASSERT(!callFrames.isJavaScript()); | 749 ASSERT(callFrames.isJavaScript()); |
748 if (!m_scriptState) { | 750 if (!m_scriptState) { |
749 *errorString = "Invalid DartInjectedScript"; | 751 *errorString = "Invalid DartInjectedScript"; |
750 return; | 752 return; |
751 } | 753 } |
752 DartIsolateScope scope(m_scriptState->isolate()); | 754 DartIsolateScope scope(m_scriptState->isolate()); |
753 DartApiScope apiScope; | 755 DartApiScope apiScope; |
754 *errorString = "FIXME: support dart."; | 756 *errorString = "FIXME: support dart."; |
755 return; | 757 return; |
756 } | 758 } |
757 | 759 |
758 void DartInjectedScript::setVariableValue(ErrorString* errorString, const StackT race& callFrames, const String* callFrameIdOpt, const String* functionObjectIdOp t, int scopeNumber, const String& variableName, const String& newValueStr) | 760 void DartInjectedScript::setVariableValue(ErrorString* errorString, const StackT race& callFrames, const String* callFrameIdOpt, const String* functionObjectIdOp t, int scopeNumber, const String& variableName, const String& newValueStr) |
759 { | 761 { |
762 ASSERT(callFrames.isJavaScript()); | |
760 if (!m_scriptState) { | 763 if (!m_scriptState) { |
761 *errorString = "Invalid DartInjectedScript"; | 764 *errorString = "Invalid DartInjectedScript"; |
762 return; | 765 return; |
763 } | 766 } |
764 DartIsolateScope scope(m_scriptState->isolate()); | 767 DartIsolateScope scope(m_scriptState->isolate()); |
765 DartApiScope apiScope; | 768 DartApiScope apiScope; |
766 ASSERT(!callFrames.isJavaScript()); | |
767 *errorString = "Not supported by Dart."; | 769 *errorString = "Not supported by Dart."; |
768 return; | 770 return; |
769 } | 771 } |
770 | 772 |
771 void DartInjectedScript::getFunctionDetails(ErrorString* errorString, const Stri ng& functionId, RefPtr<FunctionDetails>* result) | 773 void DartInjectedScript::getFunctionDetails(ErrorString* errorString, const Stri ng& functionId, RefPtr<FunctionDetails>* result) |
772 { | 774 { |
773 if (!m_scriptState) { | 775 if (!m_scriptState) { |
774 *errorString = "Invalid DartInjectedScript"; | 776 *errorString = "Invalid DartInjectedScript"; |
775 return; | 777 return; |
776 } | 778 } |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
836 { | 838 { |
837 ASSERT(Dart_IsList(completions)); | 839 ASSERT(Dart_IsList(completions)); |
838 intptr_t length = 0; | 840 intptr_t length = 0; |
839 Dart_ListLength(completions, &length); | 841 Dart_ListLength(completions, &length); |
840 for (intptr_t i = 0; i < length; ++i) | 842 for (intptr_t i = 0; i < length; ++i) |
841 (*result)->addItem(DartUtilities::toString(Dart_ListGetAt(completions, i ))); | 843 (*result)->addItem(DartUtilities::toString(Dart_ListGetAt(completions, i ))); |
842 } | 844 } |
843 | 845 |
844 void DartInjectedScript::getCompletionsOnCallFrame(ErrorString* errorString, con st StackTrace& callFrames, const Vector<StackTrace>& asyncCallStacks, const Stri ng& callFrameId, const String& expression, RefPtr<TypeBuilder::Array<String> >* result) | 846 void DartInjectedScript::getCompletionsOnCallFrame(ErrorString* errorString, con st StackTrace& callFrames, const Vector<StackTrace>& asyncCallStacks, const Stri ng& callFrameId, const String& expression, RefPtr<TypeBuilder::Array<String> >* result) |
845 { | 847 { |
846 ASSERT(!callFrames.isJavaScript()); | 848 ASSERT(callFrames.isJavaScript()); |
847 *result = TypeBuilder::Array<String>::create(); | 849 *result = TypeBuilder::Array<String>::create(); |
848 if (!m_scriptState) { | 850 if (!m_scriptState) { |
849 *errorString = "Invalid DartInjectedScript"; | 851 *errorString = "Invalid DartInjectedScript"; |
850 return; | 852 return; |
851 } | 853 } |
852 DartIsolateScope scope(m_scriptState->isolate()); | 854 DartIsolateScope scope(m_scriptState->isolate()); |
853 DartApiScope apiScope; | 855 DartApiScope apiScope; |
854 V8Scope v8scope(DartDOMData::current()); | 856 V8Scope v8scope(DartDOMData::current()); |
855 | 857 |
856 Dart_ActivationFrame frame = callFrameForId(callFrames, asyncCallStacks, cal lFrameId); | 858 Dart_ActivationFrame frame = callFrameForId(callFrames, asyncCallStacks, cal lFrameId); |
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1208 success = json->asObject()->getNumber("asyncOrdinal", &asyncOrdinal); | 1210 success = json->asObject()->getNumber("asyncOrdinal", &asyncOrdinal); |
1209 ASSERT(success); | 1211 ASSERT(success); |
1210 } else { | 1212 } else { |
1211 ASSERT(json && json->type() == JSONValue::TypeObject); | 1213 ASSERT(json && json->type() == JSONValue::TypeObject); |
1212 return 0; | 1214 return 0; |
1213 } | 1215 } |
1214 Dart_Handle ALLOW_UNUSED result; | 1216 Dart_Handle ALLOW_UNUSED result; |
1215 if (asyncOrdinal > 0) { // 1-based index | 1217 if (asyncOrdinal > 0) { // 1-based index |
1216 ASSERT(asyncOrdinal <= (int)asyncCallStacks.size()); | 1218 ASSERT(asyncOrdinal <= (int)asyncCallStacks.size()); |
1217 if (asyncOrdinal <= (int)asyncCallStacks.size()) { | 1219 if (asyncOrdinal <= (int)asyncCallStacks.size()) { |
1218 ASSERT(!asyncCallStacks[asyncOrdinal-1].isJavaScript()); | 1220 StackTrace asyncCallStack = asyncCallStacks[asyncOrdinal-1]; |
1219 result = Dart_GetActivationFrame(asyncCallStacks[asyncOrdinal-1].asD art(), ordinal, &frame); | 1221 ASSERT(!asyncCallStack.isJavaScript()); |
1222 result = Dart_GetActivationFrame(asyncCallStack.asDart(), ordinal, & frame); | |
1220 } else { | 1223 } else { |
1221 return 0; | 1224 return 0; |
1222 } | 1225 } |
1223 } else { | 1226 } else { |
1224 result = Dart_GetActivationFrame(trace, ordinal, &frame); | 1227 result = Dart_GetActivationFrame(trace, ordinal, &frame); |
1225 } | 1228 } |
1226 ASSERT(result); | 1229 ASSERT(result); |
1227 return frame; | 1230 return frame; |
1228 } | 1231 } |
1229 | 1232 |
1230 PassRefPtr<Array<CallFrame> > DartInjectedScript::wrapCallFrames(const StackTrac e& callFrames, int asyncOrdinal) | 1233 PassRefPtr<Array<CallFrame> > DartInjectedScript::wrapCallFrames(const StackTrac e& callFrames, int asyncOrdinal) |
1231 { | 1234 { |
1232 ASSERT(!callFrames.isJavaScript()); | 1235 ASSERT(!callFrames.isJavaScript()); |
1233 if (callFrames.isJavaScript()) | 1236 if (callFrames.isJavaScript()) |
1234 return nullptr; | 1237 return nullptr; |
1238 DartIsolateScope scope(m_scriptState->isolate()); | |
1239 DartApiScope apiScope; | |
1235 Dart_StackTrace trace = callFrames.asDart(); | 1240 Dart_StackTrace trace = callFrames.asDart(); |
1236 intptr_t length = 0; | 1241 intptr_t length = 0; |
1237 Dart_Handle ALLOW_UNUSED result; | 1242 Dart_Handle ALLOW_UNUSED result; |
1238 RefPtr<Array<CallFrame> > ret = Array<CallFrame>::create(); | 1243 RefPtr<Array<CallFrame> > ret = Array<CallFrame>::create(); |
1239 result = Dart_StackTraceLength(trace, &length); | 1244 result = Dart_StackTraceLength(trace, &length); |
1240 ASSERT(!Dart_IsError(result)); | 1245 ASSERT(!Dart_IsError(result)); |
1241 DartScriptDebugServer& debugServer = DartScriptDebugServer::shared(); | 1246 DartScriptDebugServer& debugServer = DartScriptDebugServer::shared(); |
1242 Dart_Handle libraries = Dart_GetLibraryIds(); | 1247 Dart_Handle libraries = Dart_GetLibraryIds(); |
1248 | |
1243 for (intptr_t i = 0; i < length; i++) { | 1249 for (intptr_t i = 0; i < length; i++) { |
1244 Dart_ActivationFrame frame = 0; | 1250 Dart_ActivationFrame frame = 0; |
1245 result = Dart_GetActivationFrame(trace, i, &frame); | 1251 result = Dart_GetActivationFrame(trace, i, &frame); |
1246 ASSERT(!Dart_IsError(result)); | 1252 ASSERT(!Dart_IsError(result)); |
1247 Dart_Handle functionName = 0; | 1253 Dart_Handle functionName = 0; |
1248 Dart_Handle function = 0; | 1254 Dart_Handle function = 0; |
1249 Dart_CodeLocation location; | 1255 Dart_CodeLocation location; |
1250 Dart_ActivationFrameGetLocation(frame, &functionName, &function, &locati on); | 1256 result = Dart_ActivationFrameGetLocation(frame, &functionName, &function , &location); |
1257 ASSERT(!Dart_IsError(result)); | |
1258 | |
1251 const String& url = DartUtilities::toString(location.script_url); | 1259 const String& url = DartUtilities::toString(location.script_url); |
1252 intptr_t line = 0; | 1260 intptr_t line = 0; |
1253 intptr_t column = 0; | 1261 intptr_t column = 0; |
1254 Dart_ActivationFrameInfo(frame, 0, 0, &line, &column); | 1262 Dart_ActivationFrameInfo(frame, 0, 0, &line, &column); |
1255 RefPtr<Location> locationJson = Location::create() | 1263 RefPtr<Location> locationJson = Location::create() |
1256 .setScriptId(debugServer.getScriptId(url, Dart_CurrentIsolate())) | 1264 .setScriptId(debugServer.getScriptId(url, Dart_CurrentIsolate())) |
1257 .setLineNumber(line - 1); | 1265 .setLineNumber(line - 1); |
1258 locationJson->setColumnNumber(column); | 1266 locationJson->setColumnNumber(column); |
1259 Dart_Handle localVariables = Dart_GetLocalVariables(frame); | 1267 Dart_Handle localVariables = Dart_GetLocalVariables(frame); |
1260 Dart_Handle thisHandle = findReceiver(localVariables); | 1268 Dart_Handle thisHandle = findReceiver(localVariables); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1295 .setType(Scope::Type::Library) | 1303 .setType(Scope::Type::Library) |
1296 .setObject(wrapDartHandle(library, DartDebuggerObject::CurrentLi brary, "backtrace", false)) | 1304 .setObject(wrapDartHandle(library, DartDebuggerObject::CurrentLi brary, "backtrace", false)) |
1297 .release()); | 1305 .release()); |
1298 } | 1306 } |
1299 | 1307 |
1300 scopeChain->addItem(Scope::create() | 1308 scopeChain->addItem(Scope::create() |
1301 .setType(Scope::Type::Isolate) | 1309 .setType(Scope::Type::Isolate) |
1302 .setObject(wrapDartHandle(libraries, DartDebuggerObject::Isolate, "b acktrace", false)) | 1310 .setObject(wrapDartHandle(libraries, DartDebuggerObject::Isolate, "b acktrace", false)) |
1303 .release()); | 1311 .release()); |
1304 | 1312 |
1305 ret->addItem(CallFrame::create() | 1313 RefPtr<CallFrame> callFrame = CallFrame::create() |
1306 .setCallFrameId(getCallFrameId(i, asyncOrdinal)) | 1314 .setCallFrameId(getCallFrameId(i, asyncOrdinal)) |
1307 .setFunctionName(DartUtilities::toString(functionName)) | 1315 .setFunctionName(DartUtilities::toString(functionName)) |
1308 .setLocation(locationJson) | 1316 .setLocation(locationJson) |
1309 .setScopeChain(scopeChain) | 1317 .setScopeChain(scopeChain) |
1310 .setThis(thisObject) | 1318 .setThis(thisObject) |
1311 .release()); | 1319 .release(); |
1320 | |
1321 uintptr_t framePointer = 0; | |
1322 result = Dart_ActivationFrameGetFramePointer(frame, &framePointer); | |
rmacnak
2014/09/08 22:51:44
Why not represent the frame pointer as a string or
Jacob
2014/09/10 17:58:56
I've switched to high and low halves instead of tr
| |
1323 // No frame pointers will actually be larger than 2^48 on a current x64 | |
1324 // machine but we truncate to 52 bits of precision to future proof the | |
1325 // method. As we don't care about the exact frame pointer only the | |
1326 // order of frame pointers, truncating to 52 bits will still generate th e | |
1327 // correct ordering with high probability. | |
1328 framePointer = framePointer & kMaxSafeIntegerForDouble; | |
1329 callFrame->setFramePointer(static_cast<double>(framePointer)); | |
1330 ret->addItem(callFrame); | |
1312 } | 1331 } |
1313 return ret; | 1332 return ret; |
1314 } | 1333 } |
1315 | 1334 |
1316 DartDebuggerObject::Kind DartInjectedScript::inferKind(Dart_Handle handle) | 1335 DartDebuggerObject::Kind DartInjectedScript::inferKind(Dart_Handle handle) |
1317 { | 1336 { |
1318 DartDOMData* domData = DartDOMData::current(); | 1337 DartDOMData* domData = DartDOMData::current(); |
1319 ASSERT(domData); | 1338 ASSERT(domData); |
1320 if (Dart_IsType(handle)) | 1339 if (Dart_IsType(handle)) |
1321 return DartDebuggerObject::Class; | 1340 return DartDebuggerObject::Class; |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1412 } | 1431 } |
1413 | 1432 |
1414 DartDebuggerObject* DartInjectedScript::lookupObject(const String& objectId) | 1433 DartDebuggerObject* DartInjectedScript::lookupObject(const String& objectId) |
1415 { | 1434 { |
1416 ASSERT(validateObjectId(objectId)); | 1435 ASSERT(validateObjectId(objectId)); |
1417 DebuggerObjectMap::iterator it = m_objects.find(objectId); | 1436 DebuggerObjectMap::iterator it = m_objects.find(objectId); |
1418 return it != m_objects.end() ? it->value : 0; | 1437 return it != m_objects.end() ? it->value : 0; |
1419 } | 1438 } |
1420 | 1439 |
1421 } // namespace WebCore | 1440 } // namespace WebCore |
OLD | NEW |