OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 (function (global, utils) { | 5 (function (global, utils) { |
6 "use strict"; | 6 "use strict"; |
7 | 7 |
8 // ---------------------------------------------------------------------------- | 8 // ---------------------------------------------------------------------------- |
9 // Imports | 9 // Imports |
10 | 10 |
11 var FrameMirror = global.FrameMirror; | 11 var FrameMirror = global.FrameMirror; |
12 var GlobalArray = global.Array; | 12 var GlobalArray = global.Array; |
13 var GlobalRegExp = global.RegExp; | 13 var GlobalRegExp = global.RegExp; |
14 var IsNaN = global.isNaN; | 14 var IsNaN = global.isNaN; |
15 var JSONParse = global.JSON.parse; | 15 var JSONParse = global.JSON.parse; |
16 var JSONStringify = global.JSON.stringify; | 16 var JSONStringify = global.JSON.stringify; |
17 var LookupMirror = global.LookupMirror; | 17 var LookupMirror = global.LookupMirror; |
18 var MakeMirror = global.MakeMirror; | 18 var MakeMirror = global.MakeMirror; |
19 var MakeMirrorSerializer = global.MakeMirrorSerializer; | 19 var MakeMirrorSerializer = global.MakeMirrorSerializer; |
20 var MathMin = global.Math.min; | 20 var MathMin = global.Math.min; |
21 var Mirror = global.Mirror; | 21 var Mirror = global.Mirror; |
22 var MirrorType; | 22 var MirrorType; |
23 var ParseInt = global.parseInt; | 23 var ParseInt = global.parseInt; |
| 24 var ToBoolean; |
| 25 var ToNumber; |
| 26 var ToString; |
24 var ValueMirror = global.ValueMirror; | 27 var ValueMirror = global.ValueMirror; |
25 | 28 |
26 utils.Import(function(from) { | 29 utils.Import(function(from) { |
27 MirrorType = from.MirrorType; | 30 MirrorType = from.MirrorType; |
| 31 ToBoolean = from.ToBoolean; |
| 32 ToNumber = from.ToNumber; |
| 33 ToString = from.ToString; |
28 }); | 34 }); |
29 | 35 |
30 //---------------------------------------------------------------------------- | 36 //---------------------------------------------------------------------------- |
31 | 37 |
32 // Default number of frames to include in the response to backtrace request. | 38 // Default number of frames to include in the response to backtrace request. |
33 var kDefaultBacktraceLength = 10; | 39 var kDefaultBacktraceLength = 10; |
34 | 40 |
35 var Debug = {}; | 41 var Debug = {}; |
36 | 42 |
37 // Regular expression to skip "crud" at the beginning of a source line which is | 43 // Regular expression to skip "crud" at the beginning of a source line which is |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
221 BreakPoint.prototype.isTriggered = function(exec_state) { | 227 BreakPoint.prototype.isTriggered = function(exec_state) { |
222 // Break point not active - not triggered. | 228 // Break point not active - not triggered. |
223 if (!this.active()) return false; | 229 if (!this.active()) return false; |
224 | 230 |
225 // Check for conditional break point. | 231 // Check for conditional break point. |
226 if (this.condition()) { | 232 if (this.condition()) { |
227 // If break point has condition try to evaluate it in the top frame. | 233 // If break point has condition try to evaluate it in the top frame. |
228 try { | 234 try { |
229 var mirror = exec_state.frame(0).evaluate(this.condition()); | 235 var mirror = exec_state.frame(0).evaluate(this.condition()); |
230 // If no sensible mirror or non true value break point not triggered. | 236 // If no sensible mirror or non true value break point not triggered. |
231 if (!(mirror instanceof ValueMirror) || !$toBoolean(mirror.value_)) { | 237 if (!(mirror instanceof ValueMirror) || !ToBoolean(mirror.value_)) { |
232 return false; | 238 return false; |
233 } | 239 } |
234 } catch (e) { | 240 } catch (e) { |
235 // Exception evaluating condition counts as not triggered. | 241 // Exception evaluating condition counts as not triggered. |
236 return false; | 242 return false; |
237 } | 243 } |
238 } | 244 } |
239 | 245 |
240 // Update the hit count. | 246 // Update the hit count. |
241 this.hit_count_++; | 247 this.hit_count_++; |
(...skipping 695 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
937 } | 943 } |
938 | 944 |
939 function ExecutionState(break_id) { | 945 function ExecutionState(break_id) { |
940 this.break_id = break_id; | 946 this.break_id = break_id; |
941 this.selected_frame = 0; | 947 this.selected_frame = 0; |
942 } | 948 } |
943 | 949 |
944 ExecutionState.prototype.prepareStep = function(opt_action, opt_count, | 950 ExecutionState.prototype.prepareStep = function(opt_action, opt_count, |
945 opt_callframe) { | 951 opt_callframe) { |
946 var action = Debug.StepAction.StepIn; | 952 var action = Debug.StepAction.StepIn; |
947 if (!IS_UNDEFINED(opt_action)) action = $toNumber(opt_action); | 953 if (!IS_UNDEFINED(opt_action)) action = ToNumber(opt_action); |
948 var count = opt_count ? $toNumber(opt_count) : 1; | 954 var count = opt_count ? ToNumber(opt_count) : 1; |
949 var callFrameId = 0; | 955 var callFrameId = 0; |
950 if (!IS_UNDEFINED(opt_callframe)) { | 956 if (!IS_UNDEFINED(opt_callframe)) { |
951 callFrameId = opt_callframe.details_.frameId(); | 957 callFrameId = opt_callframe.details_.frameId(); |
952 } | 958 } |
953 | 959 |
954 return %PrepareStep(this.break_id, action, count, callFrameId); | 960 return %PrepareStep(this.break_id, action, count, callFrameId); |
955 }; | 961 }; |
956 | 962 |
957 ExecutionState.prototype.evaluateGlobal = function(source, disable_break, | 963 ExecutionState.prototype.evaluateGlobal = function(source, disable_break, |
958 opt_additional_context) { | 964 opt_additional_context) { |
959 return MakeMirror(%DebugEvaluateGlobal(this.break_id, source, | 965 return MakeMirror(%DebugEvaluateGlobal(this.break_id, source, |
960 $toBoolean(disable_break), | 966 ToBoolean(disable_break), |
961 opt_additional_context)); | 967 opt_additional_context)); |
962 }; | 968 }; |
963 | 969 |
964 ExecutionState.prototype.frameCount = function() { | 970 ExecutionState.prototype.frameCount = function() { |
965 return %GetFrameCount(this.break_id); | 971 return %GetFrameCount(this.break_id); |
966 }; | 972 }; |
967 | 973 |
968 ExecutionState.prototype.threadCount = function() { | 974 ExecutionState.prototype.threadCount = function() { |
969 return %GetThreadCount(this.break_id); | 975 return %GetThreadCount(this.break_id); |
970 }; | 976 }; |
971 | 977 |
972 ExecutionState.prototype.frame = function(opt_index) { | 978 ExecutionState.prototype.frame = function(opt_index) { |
973 // If no index supplied return the selected frame. | 979 // If no index supplied return the selected frame. |
974 if (opt_index == null) opt_index = this.selected_frame; | 980 if (opt_index == null) opt_index = this.selected_frame; |
975 if (opt_index < 0 || opt_index >= this.frameCount()) { | 981 if (opt_index < 0 || opt_index >= this.frameCount()) { |
976 throw MakeTypeError(kDebuggerFrame); | 982 throw MakeTypeError(kDebuggerFrame); |
977 } | 983 } |
978 return new FrameMirror(this.break_id, opt_index); | 984 return new FrameMirror(this.break_id, opt_index); |
979 }; | 985 }; |
980 | 986 |
981 ExecutionState.prototype.setSelectedFrame = function(index) { | 987 ExecutionState.prototype.setSelectedFrame = function(index) { |
982 var i = $toNumber(index); | 988 var i = ToNumber(index); |
983 if (i < 0 || i >= this.frameCount()) { | 989 if (i < 0 || i >= this.frameCount()) { |
984 throw MakeTypeError(kDebuggerFrame); | 990 throw MakeTypeError(kDebuggerFrame); |
985 } | 991 } |
986 this.selected_frame = i; | 992 this.selected_frame = i; |
987 }; | 993 }; |
988 | 994 |
989 ExecutionState.prototype.selectedFrame = function() { | 995 ExecutionState.prototype.selectedFrame = function() { |
990 return this.selected_frame; | 996 return this.selected_frame; |
991 }; | 997 }; |
992 | 998 |
(...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1419 } else { | 1425 } else { |
1420 throw MakeError(kDebugger, | 1426 throw MakeError(kDebugger, |
1421 'Unknown command "' + request.command + '" in request'); | 1427 'Unknown command "' + request.command + '" in request'); |
1422 } | 1428 } |
1423 } catch (e) { | 1429 } catch (e) { |
1424 // If there is no response object created one (without command). | 1430 // If there is no response object created one (without command). |
1425 if (!response) { | 1431 if (!response) { |
1426 response = this.createResponse(); | 1432 response = this.createResponse(); |
1427 } | 1433 } |
1428 response.success = false; | 1434 response.success = false; |
1429 response.message = $toString(e); | 1435 response.message = ToString(e); |
1430 } | 1436 } |
1431 | 1437 |
1432 // Return the response as a JSON encoded string. | 1438 // Return the response as a JSON encoded string. |
1433 try { | 1439 try { |
1434 if (!IS_UNDEFINED(response.running)) { | 1440 if (!IS_UNDEFINED(response.running)) { |
1435 // Response controls running state. | 1441 // Response controls running state. |
1436 this.running_ = response.running; | 1442 this.running_ = response.running; |
1437 } | 1443 } |
1438 response.running = this.running_; | 1444 response.running = this.running_; |
1439 return response.toJSONProtocol(); | 1445 return response.toJSONProtocol(); |
1440 } catch (e) { | 1446 } catch (e) { |
1441 // Failed to generate response - return generic error. | 1447 // Failed to generate response - return generic error. |
1442 return '{"seq":' + response.seq + ',' + | 1448 return '{"seq":' + response.seq + ',' + |
1443 '"request_seq":' + request.seq + ',' + | 1449 '"request_seq":' + request.seq + ',' + |
1444 '"type":"response",' + | 1450 '"type":"response",' + |
1445 '"success":false,' + | 1451 '"success":false,' + |
1446 '"message":"Internal error: ' + $toString(e) + '"}'; | 1452 '"message":"Internal error: ' + ToString(e) + '"}'; |
1447 } | 1453 } |
1448 } catch (e) { | 1454 } catch (e) { |
1449 // Failed in one of the catch blocks above - most generic error. | 1455 // Failed in one of the catch blocks above - most generic error. |
1450 return '{"seq":0,"type":"response","success":false,"message":"Internal error
"}'; | 1456 return '{"seq":0,"type":"response","success":false,"message":"Internal error
"}'; |
1451 } | 1457 } |
1452 }; | 1458 }; |
1453 | 1459 |
1454 | 1460 |
1455 DebugCommandProcessor.prototype.continueRequest_ = function(request, response) { | 1461 DebugCommandProcessor.prototype.continueRequest_ = function(request, response) { |
1456 // Check for arguments for continue. | 1462 // Check for arguments for continue. |
1457 if (request.arguments) { | 1463 if (request.arguments) { |
1458 var count = 1; | 1464 var count = 1; |
1459 var action = Debug.StepAction.StepIn; | 1465 var action = Debug.StepAction.StepIn; |
1460 | 1466 |
1461 // Pull out arguments. | 1467 // Pull out arguments. |
1462 var stepaction = request.arguments.stepaction; | 1468 var stepaction = request.arguments.stepaction; |
1463 var stepcount = request.arguments.stepcount; | 1469 var stepcount = request.arguments.stepcount; |
1464 | 1470 |
1465 // Get the stepcount argument if any. | 1471 // Get the stepcount argument if any. |
1466 if (stepcount) { | 1472 if (stepcount) { |
1467 count = $toNumber(stepcount); | 1473 count = ToNumber(stepcount); |
1468 if (count < 0) { | 1474 if (count < 0) { |
1469 throw MakeError(kDebugger, | 1475 throw MakeError(kDebugger, |
1470 'Invalid stepcount argument "' + stepcount + '".'); | 1476 'Invalid stepcount argument "' + stepcount + '".'); |
1471 } | 1477 } |
1472 } | 1478 } |
1473 | 1479 |
1474 // Get the stepaction argument. | 1480 // Get the stepaction argument. |
1475 if (stepaction) { | 1481 if (stepaction) { |
1476 if (stepaction == 'in') { | 1482 if (stepaction == 'in') { |
1477 action = Debug.StepAction.StepIn; | 1483 action = Debug.StepAction.StepIn; |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1532 // Handle function break point. | 1538 // Handle function break point. |
1533 if (!IS_STRING(target)) { | 1539 if (!IS_STRING(target)) { |
1534 response.failed('Argument "target" is not a string value'); | 1540 response.failed('Argument "target" is not a string value'); |
1535 return; | 1541 return; |
1536 } | 1542 } |
1537 var f; | 1543 var f; |
1538 try { | 1544 try { |
1539 // Find the function through a global evaluate. | 1545 // Find the function through a global evaluate. |
1540 f = this.exec_state_.evaluateGlobal(target).value(); | 1546 f = this.exec_state_.evaluateGlobal(target).value(); |
1541 } catch (e) { | 1547 } catch (e) { |
1542 response.failed('Error: "' + $toString(e) + | 1548 response.failed('Error: "' + ToString(e) + |
1543 '" evaluating "' + target + '"'); | 1549 '" evaluating "' + target + '"'); |
1544 return; | 1550 return; |
1545 } | 1551 } |
1546 if (!IS_FUNCTION(f)) { | 1552 if (!IS_FUNCTION(f)) { |
1547 response.failed('"' + target + '" does not evaluate to a function'); | 1553 response.failed('"' + target + '" does not evaluate to a function'); |
1548 return; | 1554 return; |
1549 } | 1555 } |
1550 | 1556 |
1551 // Set function break point. | 1557 // Set function break point. |
1552 break_point_number = Debug.setBreakPoint(f, line, column, condition); | 1558 break_point_number = Debug.setBreakPoint(f, line, column, condition); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1621 | 1627 |
1622 DebugCommandProcessor.prototype.changeBreakPointRequest_ = function( | 1628 DebugCommandProcessor.prototype.changeBreakPointRequest_ = function( |
1623 request, response) { | 1629 request, response) { |
1624 // Check for legal request. | 1630 // Check for legal request. |
1625 if (!request.arguments) { | 1631 if (!request.arguments) { |
1626 response.failed('Missing arguments'); | 1632 response.failed('Missing arguments'); |
1627 return; | 1633 return; |
1628 } | 1634 } |
1629 | 1635 |
1630 // Pull out arguments. | 1636 // Pull out arguments. |
1631 var break_point = $toNumber(request.arguments.breakpoint); | 1637 var break_point = ToNumber(request.arguments.breakpoint); |
1632 var enabled = request.arguments.enabled; | 1638 var enabled = request.arguments.enabled; |
1633 var condition = request.arguments.condition; | 1639 var condition = request.arguments.condition; |
1634 var ignoreCount = request.arguments.ignoreCount; | 1640 var ignoreCount = request.arguments.ignoreCount; |
1635 | 1641 |
1636 // Check for legal arguments. | 1642 // Check for legal arguments. |
1637 if (!break_point) { | 1643 if (!break_point) { |
1638 response.failed('Missing argument "breakpoint"'); | 1644 response.failed('Missing argument "breakpoint"'); |
1639 return; | 1645 return; |
1640 } | 1646 } |
1641 | 1647 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1697 | 1703 |
1698 DebugCommandProcessor.prototype.clearBreakPointRequest_ = function( | 1704 DebugCommandProcessor.prototype.clearBreakPointRequest_ = function( |
1699 request, response) { | 1705 request, response) { |
1700 // Check for legal request. | 1706 // Check for legal request. |
1701 if (!request.arguments) { | 1707 if (!request.arguments) { |
1702 response.failed('Missing arguments'); | 1708 response.failed('Missing arguments'); |
1703 return; | 1709 return; |
1704 } | 1710 } |
1705 | 1711 |
1706 // Pull out arguments. | 1712 // Pull out arguments. |
1707 var break_point = $toNumber(request.arguments.breakpoint); | 1713 var break_point = ToNumber(request.arguments.breakpoint); |
1708 | 1714 |
1709 // Check for legal arguments. | 1715 // Check for legal arguments. |
1710 if (!break_point) { | 1716 if (!break_point) { |
1711 response.failed('Missing argument "breakpoint"'); | 1717 response.failed('Missing argument "breakpoint"'); |
1712 return; | 1718 return; |
1713 } | 1719 } |
1714 | 1720 |
1715 // Clear break point. | 1721 // Clear break point. |
1716 Debug.clearBreakPoint(break_point); | 1722 Debug.clearBreakPoint(break_point); |
1717 | 1723 |
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1955 }; | 1961 }; |
1956 | 1962 |
1957 | 1963 |
1958 DebugCommandProcessor.prototype.scopeRequest_ = function(request, response) { | 1964 DebugCommandProcessor.prototype.scopeRequest_ = function(request, response) { |
1959 // Get the frame or function for which the scope is requested. | 1965 // Get the frame or function for which the scope is requested. |
1960 var scope_holder = this.resolveScopeHolder_(request.arguments); | 1966 var scope_holder = this.resolveScopeHolder_(request.arguments); |
1961 | 1967 |
1962 // With no scope argument just return top scope. | 1968 // With no scope argument just return top scope. |
1963 var scope_index = 0; | 1969 var scope_index = 0; |
1964 if (request.arguments && !IS_UNDEFINED(request.arguments.number)) { | 1970 if (request.arguments && !IS_UNDEFINED(request.arguments.number)) { |
1965 scope_index = $toNumber(request.arguments.number); | 1971 scope_index = ToNumber(request.arguments.number); |
1966 if (scope_index < 0 || scope_holder.scopeCount() <= scope_index) { | 1972 if (scope_index < 0 || scope_holder.scopeCount() <= scope_index) { |
1967 return response.failed('Invalid scope number'); | 1973 return response.failed('Invalid scope number'); |
1968 } | 1974 } |
1969 } | 1975 } |
1970 | 1976 |
1971 response.body = scope_holder.scope(scope_index); | 1977 response.body = scope_holder.scope(scope_index); |
1972 }; | 1978 }; |
1973 | 1979 |
1974 | 1980 |
1975 // Reads value from protocol description. Description may be in form of type | 1981 // Reads value from protocol description. Description may be in form of type |
1976 // (for singletons), raw value (primitive types supported in JSON), | 1982 // (for singletons), raw value (primitive types supported in JSON), |
1977 // string value description plus type (for primitive values) or handle id. | 1983 // string value description plus type (for primitive values) or handle id. |
1978 // Returns raw value or throws exception. | 1984 // Returns raw value or throws exception. |
1979 DebugCommandProcessor.resolveValue_ = function(value_description) { | 1985 DebugCommandProcessor.resolveValue_ = function(value_description) { |
1980 if ("handle" in value_description) { | 1986 if ("handle" in value_description) { |
1981 var value_mirror = LookupMirror(value_description.handle); | 1987 var value_mirror = LookupMirror(value_description.handle); |
1982 if (!value_mirror) { | 1988 if (!value_mirror) { |
1983 throw MakeError(kDebugger, "Failed to resolve value by handle, ' #" + | 1989 throw MakeError(kDebugger, "Failed to resolve value by handle, ' #" + |
1984 value_description.handle + "# not found"); | 1990 value_description.handle + "# not found"); |
1985 } | 1991 } |
1986 return value_mirror.value(); | 1992 return value_mirror.value(); |
1987 } else if ("stringDescription" in value_description) { | 1993 } else if ("stringDescription" in value_description) { |
1988 if (value_description.type == MirrorType.BOOLEAN_TYPE) { | 1994 if (value_description.type == MirrorType.BOOLEAN_TYPE) { |
1989 return $toBoolean(value_description.stringDescription); | 1995 return ToBoolean(value_description.stringDescription); |
1990 } else if (value_description.type == MirrorType.NUMBER_TYPE) { | 1996 } else if (value_description.type == MirrorType.NUMBER_TYPE) { |
1991 return $toNumber(value_description.stringDescription); | 1997 return ToNumber(value_description.stringDescription); |
1992 } if (value_description.type == MirrorType.STRING_TYPE) { | 1998 } if (value_description.type == MirrorType.STRING_TYPE) { |
1993 return $toString(value_description.stringDescription); | 1999 return ToString(value_description.stringDescription); |
1994 } else { | 2000 } else { |
1995 throw MakeError(kDebugger, "Unknown type"); | 2001 throw MakeError(kDebugger, "Unknown type"); |
1996 } | 2002 } |
1997 } else if ("value" in value_description) { | 2003 } else if ("value" in value_description) { |
1998 return value_description.value; | 2004 return value_description.value; |
1999 } else if (value_description.type == MirrorType.UNDEFINED_TYPE) { | 2005 } else if (value_description.type == MirrorType.UNDEFINED_TYPE) { |
2000 return UNDEFINED; | 2006 return UNDEFINED; |
2001 } else if (value_description.type == MirrorType.NULL_TYPE) { | 2007 } else if (value_description.type == MirrorType.NULL_TYPE) { |
2002 return null; | 2008 return null; |
2003 } else { | 2009 } else { |
(...skipping 15 matching lines...) Expand all Loading... |
2019 var variable_name = request.arguments.name; | 2025 var variable_name = request.arguments.name; |
2020 | 2026 |
2021 var scope_description = request.arguments.scope; | 2027 var scope_description = request.arguments.scope; |
2022 | 2028 |
2023 // Get the frame or function for which the scope is requested. | 2029 // Get the frame or function for which the scope is requested. |
2024 var scope_holder = this.resolveScopeHolder_(scope_description); | 2030 var scope_holder = this.resolveScopeHolder_(scope_description); |
2025 | 2031 |
2026 if (IS_UNDEFINED(scope_description.number)) { | 2032 if (IS_UNDEFINED(scope_description.number)) { |
2027 response.failed('Missing scope number'); | 2033 response.failed('Missing scope number'); |
2028 } | 2034 } |
2029 var scope_index = $toNumber(scope_description.number); | 2035 var scope_index = ToNumber(scope_description.number); |
2030 | 2036 |
2031 var scope = scope_holder.scope(scope_index); | 2037 var scope = scope_holder.scope(scope_index); |
2032 | 2038 |
2033 var new_value = | 2039 var new_value = |
2034 DebugCommandProcessor.resolveValue_(request.arguments.newValue); | 2040 DebugCommandProcessor.resolveValue_(request.arguments.newValue); |
2035 | 2041 |
2036 scope.setVariableValue(variable_name, new_value); | 2042 scope.setVariableValue(variable_name, new_value); |
2037 | 2043 |
2038 var new_value_mirror = MakeMirror(new_value); | 2044 var new_value_mirror = MakeMirror(new_value); |
2039 | 2045 |
(...skipping 11 matching lines...) Expand all Loading... |
2051 // Pull out arguments. | 2057 // Pull out arguments. |
2052 var expression = request.arguments.expression; | 2058 var expression = request.arguments.expression; |
2053 var frame = request.arguments.frame; | 2059 var frame = request.arguments.frame; |
2054 var global = request.arguments.global; | 2060 var global = request.arguments.global; |
2055 var disable_break = request.arguments.disable_break; | 2061 var disable_break = request.arguments.disable_break; |
2056 var additional_context = request.arguments.additional_context; | 2062 var additional_context = request.arguments.additional_context; |
2057 | 2063 |
2058 // The expression argument could be an integer so we convert it to a | 2064 // The expression argument could be an integer so we convert it to a |
2059 // string. | 2065 // string. |
2060 try { | 2066 try { |
2061 expression = $toString(expression); | 2067 expression = ToString(expression); |
2062 } catch(e) { | 2068 } catch(e) { |
2063 return response.failed('Failed to convert expression argument to string'); | 2069 return response.failed('Failed to convert expression argument to string'); |
2064 } | 2070 } |
2065 | 2071 |
2066 // Check for legal arguments. | 2072 // Check for legal arguments. |
2067 if (!IS_UNDEFINED(frame) && global) { | 2073 if (!IS_UNDEFINED(frame) && global) { |
2068 return response.failed('Arguments "frame" and "global" are exclusive'); | 2074 return response.failed('Arguments "frame" and "global" are exclusive'); |
2069 } | 2075 } |
2070 | 2076 |
2071 var additional_context_object; | 2077 var additional_context_object; |
2072 if (additional_context) { | 2078 if (additional_context) { |
2073 additional_context_object = {}; | 2079 additional_context_object = {}; |
2074 for (var i = 0; i < additional_context.length; i++) { | 2080 for (var i = 0; i < additional_context.length; i++) { |
2075 var mapping = additional_context[i]; | 2081 var mapping = additional_context[i]; |
2076 | 2082 |
2077 if (!IS_STRING(mapping.name)) { | 2083 if (!IS_STRING(mapping.name)) { |
2078 return response.failed("Context element #" + i + | 2084 return response.failed("Context element #" + i + |
2079 " doesn't contain name:string property"); | 2085 " doesn't contain name:string property"); |
2080 } | 2086 } |
2081 | 2087 |
2082 var raw_value = DebugCommandProcessor.resolveValue_(mapping); | 2088 var raw_value = DebugCommandProcessor.resolveValue_(mapping); |
2083 additional_context_object[mapping.name] = raw_value; | 2089 additional_context_object[mapping.name] = raw_value; |
2084 } | 2090 } |
2085 } | 2091 } |
2086 | 2092 |
2087 // Global evaluate. | 2093 // Global evaluate. |
2088 if (global) { | 2094 if (global) { |
2089 // Evaluate in the native context. | 2095 // Evaluate in the native context. |
2090 response.body = this.exec_state_.evaluateGlobal( | 2096 response.body = this.exec_state_.evaluateGlobal( |
2091 expression, $toBoolean(disable_break), additional_context_object); | 2097 expression, ToBoolean(disable_break), additional_context_object); |
2092 return; | 2098 return; |
2093 } | 2099 } |
2094 | 2100 |
2095 // Default value for disable_break is true. | 2101 // Default value for disable_break is true. |
2096 if (IS_UNDEFINED(disable_break)) { | 2102 if (IS_UNDEFINED(disable_break)) { |
2097 disable_break = true; | 2103 disable_break = true; |
2098 } | 2104 } |
2099 | 2105 |
2100 // No frames no evaluate in frame. | 2106 // No frames no evaluate in frame. |
2101 if (this.exec_state_.frameCount() == 0) { | 2107 if (this.exec_state_.frameCount() == 0) { |
2102 return response.failed('No frames'); | 2108 return response.failed('No frames'); |
2103 } | 2109 } |
2104 | 2110 |
2105 // Check whether a frame was specified. | 2111 // Check whether a frame was specified. |
2106 if (!IS_UNDEFINED(frame)) { | 2112 if (!IS_UNDEFINED(frame)) { |
2107 var frame_number = $toNumber(frame); | 2113 var frame_number = ToNumber(frame); |
2108 if (frame_number < 0 || frame_number >= this.exec_state_.frameCount()) { | 2114 if (frame_number < 0 || frame_number >= this.exec_state_.frameCount()) { |
2109 return response.failed('Invalid frame "' + frame + '"'); | 2115 return response.failed('Invalid frame "' + frame + '"'); |
2110 } | 2116 } |
2111 // Evaluate in the specified frame. | 2117 // Evaluate in the specified frame. |
2112 response.body = this.exec_state_.frame(frame_number).evaluate( | 2118 response.body = this.exec_state_.frame(frame_number).evaluate( |
2113 expression, $toBoolean(disable_break), additional_context_object); | 2119 expression, ToBoolean(disable_break), additional_context_object); |
2114 return; | 2120 return; |
2115 } else { | 2121 } else { |
2116 // Evaluate in the selected frame. | 2122 // Evaluate in the selected frame. |
2117 response.body = this.exec_state_.frame().evaluate( | 2123 response.body = this.exec_state_.frame().evaluate( |
2118 expression, $toBoolean(disable_break), additional_context_object); | 2124 expression, ToBoolean(disable_break), additional_context_object); |
2119 return; | 2125 return; |
2120 } | 2126 } |
2121 }; | 2127 }; |
2122 | 2128 |
2123 | 2129 |
2124 DebugCommandProcessor.prototype.lookupRequest_ = function(request, response) { | 2130 DebugCommandProcessor.prototype.lookupRequest_ = function(request, response) { |
2125 if (!request.arguments) { | 2131 if (!request.arguments) { |
2126 return response.failed('Missing arguments'); | 2132 return response.failed('Missing arguments'); |
2127 } | 2133 } |
2128 | 2134 |
2129 // Pull out arguments. | 2135 // Pull out arguments. |
2130 var handles = request.arguments.handles; | 2136 var handles = request.arguments.handles; |
2131 | 2137 |
2132 // Check for legal arguments. | 2138 // Check for legal arguments. |
2133 if (IS_UNDEFINED(handles)) { | 2139 if (IS_UNDEFINED(handles)) { |
2134 return response.failed('Argument "handles" missing'); | 2140 return response.failed('Argument "handles" missing'); |
2135 } | 2141 } |
2136 | 2142 |
2137 // Set 'includeSource' option for script lookup. | 2143 // Set 'includeSource' option for script lookup. |
2138 if (!IS_UNDEFINED(request.arguments.includeSource)) { | 2144 if (!IS_UNDEFINED(request.arguments.includeSource)) { |
2139 var includeSource = $toBoolean(request.arguments.includeSource); | 2145 var includeSource = ToBoolean(request.arguments.includeSource); |
2140 response.setOption('includeSource', includeSource); | 2146 response.setOption('includeSource', includeSource); |
2141 } | 2147 } |
2142 | 2148 |
2143 // Lookup handles. | 2149 // Lookup handles. |
2144 var mirrors = {}; | 2150 var mirrors = {}; |
2145 for (var i = 0; i < handles.length; i++) { | 2151 for (var i = 0; i < handles.length; i++) { |
2146 var handle = handles[i]; | 2152 var handle = handles[i]; |
2147 var mirror = LookupMirror(handle); | 2153 var mirror = LookupMirror(handle); |
2148 if (!mirror) { | 2154 if (!mirror) { |
2149 return response.failed('Object #' + handle + '# not found'); | 2155 return response.failed('Object #' + handle + '# not found'); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2197 | 2203 |
2198 var from_line; | 2204 var from_line; |
2199 var to_line; | 2205 var to_line; |
2200 var frame = this.exec_state_.frame(); | 2206 var frame = this.exec_state_.frame(); |
2201 if (request.arguments) { | 2207 if (request.arguments) { |
2202 // Pull out arguments. | 2208 // Pull out arguments. |
2203 from_line = request.arguments.fromLine; | 2209 from_line = request.arguments.fromLine; |
2204 to_line = request.arguments.toLine; | 2210 to_line = request.arguments.toLine; |
2205 | 2211 |
2206 if (!IS_UNDEFINED(request.arguments.frame)) { | 2212 if (!IS_UNDEFINED(request.arguments.frame)) { |
2207 var frame_number = $toNumber(request.arguments.frame); | 2213 var frame_number = ToNumber(request.arguments.frame); |
2208 if (frame_number < 0 || frame_number >= this.exec_state_.frameCount()) { | 2214 if (frame_number < 0 || frame_number >= this.exec_state_.frameCount()) { |
2209 return response.failed('Invalid frame "' + frame + '"'); | 2215 return response.failed('Invalid frame "' + frame + '"'); |
2210 } | 2216 } |
2211 frame = this.exec_state_.frame(frame_number); | 2217 frame = this.exec_state_.frame(frame_number); |
2212 } | 2218 } |
2213 } | 2219 } |
2214 | 2220 |
2215 // Get the script selected. | 2221 // Get the script selected. |
2216 var script = frame.func().script(); | 2222 var script = frame.func().script(); |
2217 if (!script) { | 2223 if (!script) { |
(...skipping 15 matching lines...) Expand all Loading... |
2233 }; | 2239 }; |
2234 | 2240 |
2235 | 2241 |
2236 DebugCommandProcessor.prototype.scriptsRequest_ = function(request, response) { | 2242 DebugCommandProcessor.prototype.scriptsRequest_ = function(request, response) { |
2237 var types = ScriptTypeFlag(Debug.ScriptType.Normal); | 2243 var types = ScriptTypeFlag(Debug.ScriptType.Normal); |
2238 var includeSource = false; | 2244 var includeSource = false; |
2239 var idsToInclude = null; | 2245 var idsToInclude = null; |
2240 if (request.arguments) { | 2246 if (request.arguments) { |
2241 // Pull out arguments. | 2247 // Pull out arguments. |
2242 if (!IS_UNDEFINED(request.arguments.types)) { | 2248 if (!IS_UNDEFINED(request.arguments.types)) { |
2243 types = $toNumber(request.arguments.types); | 2249 types = ToNumber(request.arguments.types); |
2244 if (IsNaN(types) || types < 0) { | 2250 if (IsNaN(types) || types < 0) { |
2245 return response.failed('Invalid types "' + | 2251 return response.failed('Invalid types "' + |
2246 request.arguments.types + '"'); | 2252 request.arguments.types + '"'); |
2247 } | 2253 } |
2248 } | 2254 } |
2249 | 2255 |
2250 if (!IS_UNDEFINED(request.arguments.includeSource)) { | 2256 if (!IS_UNDEFINED(request.arguments.includeSource)) { |
2251 includeSource = $toBoolean(request.arguments.includeSource); | 2257 includeSource = ToBoolean(request.arguments.includeSource); |
2252 response.setOption('includeSource', includeSource); | 2258 response.setOption('includeSource', includeSource); |
2253 } | 2259 } |
2254 | 2260 |
2255 if (IS_ARRAY(request.arguments.ids)) { | 2261 if (IS_ARRAY(request.arguments.ids)) { |
2256 idsToInclude = {}; | 2262 idsToInclude = {}; |
2257 var ids = request.arguments.ids; | 2263 var ids = request.arguments.ids; |
2258 for (var i = 0; i < ids.length; i++) { | 2264 for (var i = 0; i < ids.length; i++) { |
2259 idsToInclude[ids[i]] = true; | 2265 idsToInclude[ids[i]] = true; |
2260 } | 2266 } |
2261 } | 2267 } |
2262 | 2268 |
2263 var filterStr = null; | 2269 var filterStr = null; |
2264 var filterNum = null; | 2270 var filterNum = null; |
2265 if (!IS_UNDEFINED(request.arguments.filter)) { | 2271 if (!IS_UNDEFINED(request.arguments.filter)) { |
2266 var num = $toNumber(request.arguments.filter); | 2272 var num = ToNumber(request.arguments.filter); |
2267 if (!IsNaN(num)) { | 2273 if (!IsNaN(num)) { |
2268 filterNum = num; | 2274 filterNum = num; |
2269 } | 2275 } |
2270 filterStr = request.arguments.filter; | 2276 filterStr = request.arguments.filter; |
2271 } | 2277 } |
2272 } | 2278 } |
2273 | 2279 |
2274 // Collect all scripts in the heap. | 2280 // Collect all scripts in the heap. |
2275 var scripts = %DebugGetLoadedScripts(); | 2281 var scripts = %DebugGetLoadedScripts(); |
2276 | 2282 |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2392 var frame = request.arguments.frame; | 2398 var frame = request.arguments.frame; |
2393 | 2399 |
2394 // No frames to evaluate in frame. | 2400 // No frames to evaluate in frame. |
2395 if (this.exec_state_.frameCount() == 0) { | 2401 if (this.exec_state_.frameCount() == 0) { |
2396 return response.failed('No frames'); | 2402 return response.failed('No frames'); |
2397 } | 2403 } |
2398 | 2404 |
2399 var frame_mirror; | 2405 var frame_mirror; |
2400 // Check whether a frame was specified. | 2406 // Check whether a frame was specified. |
2401 if (!IS_UNDEFINED(frame)) { | 2407 if (!IS_UNDEFINED(frame)) { |
2402 var frame_number = $toNumber(frame); | 2408 var frame_number = ToNumber(frame); |
2403 if (frame_number < 0 || frame_number >= this.exec_state_.frameCount()) { | 2409 if (frame_number < 0 || frame_number >= this.exec_state_.frameCount()) { |
2404 return response.failed('Invalid frame "' + frame + '"'); | 2410 return response.failed('Invalid frame "' + frame + '"'); |
2405 } | 2411 } |
2406 // Restart specified frame. | 2412 // Restart specified frame. |
2407 frame_mirror = this.exec_state_.frame(frame_number); | 2413 frame_mirror = this.exec_state_.frame(frame_number); |
2408 } else { | 2414 } else { |
2409 // Restart selected frame. | 2415 // Restart selected frame. |
2410 frame_mirror = this.exec_state_.frame(); | 2416 frame_mirror = this.exec_state_.frame(); |
2411 } | 2417 } |
2412 | 2418 |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2614 "IsBreakPointTriggered", IsBreakPointTriggered, | 2620 "IsBreakPointTriggered", IsBreakPointTriggered, |
2615 "UpdateScriptBreakPoints", UpdateScriptBreakPoints, | 2621 "UpdateScriptBreakPoints", UpdateScriptBreakPoints, |
2616 ]); | 2622 ]); |
2617 | 2623 |
2618 // Export to liveedit.js | 2624 // Export to liveedit.js |
2619 utils.Export(function(to) { | 2625 utils.Export(function(to) { |
2620 to.GetScriptBreakPoints = GetScriptBreakPoints; | 2626 to.GetScriptBreakPoints = GetScriptBreakPoints; |
2621 }); | 2627 }); |
2622 | 2628 |
2623 }) | 2629 }) |
OLD | NEW |