| 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 MakeError; | |
| 19 var MakeTypeError; | |
| 20 var MakeMirror = global.MakeMirror; | 18 var MakeMirror = global.MakeMirror; |
| 21 var MakeMirrorSerializer = global.MakeMirrorSerializer; | 19 var MakeMirrorSerializer = global.MakeMirrorSerializer; |
| 22 var MathMin = global.Math.min; | 20 var MathMin = global.Math.min; |
| 23 var Mirror = global.Mirror; | 21 var Mirror = global.Mirror; |
| 24 var MirrorType; | 22 var MirrorType; |
| 25 var ParseInt = global.parseInt; | 23 var ParseInt = global.parseInt; |
| 26 var ValueMirror = global.ValueMirror; | 24 var ValueMirror = global.ValueMirror; |
| 27 | 25 |
| 28 utils.Import(function(from) { | 26 utils.Import(function(from) { |
| 29 MakeError = from.MakeError; | |
| 30 MakeTypeError = from.MakeTypeError; | |
| 31 MirrorType = from.MirrorType; | 27 MirrorType = from.MirrorType; |
| 32 }); | 28 }); |
| 33 | 29 |
| 34 //---------------------------------------------------------------------------- | 30 //---------------------------------------------------------------------------- |
| 35 | 31 |
| 36 // Default number of frames to include in the response to backtrace request. | 32 // Default number of frames to include in the response to backtrace request. |
| 37 var kDefaultBacktraceLength = 10; | 33 var kDefaultBacktraceLength = 10; |
| 38 | 34 |
| 39 var Debug = {}; | 35 var Debug = {}; |
| 40 | 36 |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 240 function ScriptBreakPoint(type, script_id_or_name, opt_line, opt_column, | 236 function ScriptBreakPoint(type, script_id_or_name, opt_line, opt_column, |
| 241 opt_groupId, opt_position_alignment) { | 237 opt_groupId, opt_position_alignment) { |
| 242 this.type_ = type; | 238 this.type_ = type; |
| 243 if (type == Debug.ScriptBreakPointType.ScriptId) { | 239 if (type == Debug.ScriptBreakPointType.ScriptId) { |
| 244 this.script_id_ = script_id_or_name; | 240 this.script_id_ = script_id_or_name; |
| 245 } else if (type == Debug.ScriptBreakPointType.ScriptName) { | 241 } else if (type == Debug.ScriptBreakPointType.ScriptName) { |
| 246 this.script_name_ = script_id_or_name; | 242 this.script_name_ = script_id_or_name; |
| 247 } else if (type == Debug.ScriptBreakPointType.ScriptRegExp) { | 243 } else if (type == Debug.ScriptBreakPointType.ScriptRegExp) { |
| 248 this.script_regexp_object_ = new GlobalRegExp(script_id_or_name); | 244 this.script_regexp_object_ = new GlobalRegExp(script_id_or_name); |
| 249 } else { | 245 } else { |
| 250 throw MakeError(kDebugger, "Unexpected breakpoint type " + type); | 246 throw %make_error(kDebugger, "Unexpected breakpoint type " + type); |
| 251 } | 247 } |
| 252 this.line_ = opt_line || 0; | 248 this.line_ = opt_line || 0; |
| 253 this.column_ = opt_column; | 249 this.column_ = opt_column; |
| 254 this.groupId_ = opt_groupId; | 250 this.groupId_ = opt_groupId; |
| 255 this.position_alignment_ = IS_UNDEFINED(opt_position_alignment) | 251 this.position_alignment_ = IS_UNDEFINED(opt_position_alignment) |
| 256 ? Debug.BreakPositionAlignment.Statement : opt_position_alignment; | 252 ? Debug.BreakPositionAlignment.Statement : opt_position_alignment; |
| 257 this.active_ = true; | 253 this.active_ = true; |
| 258 this.condition_ = null; | 254 this.condition_ = null; |
| 259 this.break_points_ = []; | 255 this.break_points_ = []; |
| 260 } | 256 } |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 363 // We might want to account columns here as well. | 359 // We might want to account columns here as well. |
| 364 if (!(script.line_offset <= this.line_ && | 360 if (!(script.line_offset <= this.line_ && |
| 365 this.line_ < script.line_offset + %ScriptLineCount(script))) { | 361 this.line_ < script.line_offset + %ScriptLineCount(script))) { |
| 366 return false; | 362 return false; |
| 367 } | 363 } |
| 368 if (this.type_ == Debug.ScriptBreakPointType.ScriptName) { | 364 if (this.type_ == Debug.ScriptBreakPointType.ScriptName) { |
| 369 return this.script_name_ == script.nameOrSourceURL(); | 365 return this.script_name_ == script.nameOrSourceURL(); |
| 370 } else if (this.type_ == Debug.ScriptBreakPointType.ScriptRegExp) { | 366 } else if (this.type_ == Debug.ScriptBreakPointType.ScriptRegExp) { |
| 371 return this.script_regexp_object_.test(script.nameOrSourceURL()); | 367 return this.script_regexp_object_.test(script.nameOrSourceURL()); |
| 372 } else { | 368 } else { |
| 373 throw MakeError(kDebugger, "Unexpected breakpoint type " + this.type_); | 369 throw %make_error(kDebugger, "Unexpected breakpoint type " + this.type_); |
| 374 } | 370 } |
| 375 } | 371 } |
| 376 }; | 372 }; |
| 377 | 373 |
| 378 | 374 |
| 379 // Set the script break point in a script. | 375 // Set the script break point in a script. |
| 380 ScriptBreakPoint.prototype.set = function (script) { | 376 ScriptBreakPoint.prototype.set = function (script) { |
| 381 var column = this.column(); | 377 var column = this.column(); |
| 382 var line = this.line(); | 378 var line = this.line(); |
| 383 // If the column is undefined the break is on the line. To help locate the | 379 // If the column is undefined the break is on the line. To help locate the |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 459 if (script_break_points[i].matchesScript(script)) { | 455 if (script_break_points[i].matchesScript(script)) { |
| 460 result.push(script_break_points[i]); | 456 result.push(script_break_points[i]); |
| 461 } | 457 } |
| 462 } | 458 } |
| 463 return result; | 459 return result; |
| 464 } | 460 } |
| 465 | 461 |
| 466 | 462 |
| 467 Debug.setListener = function(listener, opt_data) { | 463 Debug.setListener = function(listener, opt_data) { |
| 468 if (!IS_FUNCTION(listener) && !IS_UNDEFINED(listener) && !IS_NULL(listener)) { | 464 if (!IS_FUNCTION(listener) && !IS_UNDEFINED(listener) && !IS_NULL(listener)) { |
| 469 throw MakeTypeError(kDebuggerType); | 465 throw %make_type_error(kDebuggerType); |
| 470 } | 466 } |
| 471 %SetDebugEventListener(listener, opt_data); | 467 %SetDebugEventListener(listener, opt_data); |
| 472 }; | 468 }; |
| 473 | 469 |
| 474 | 470 |
| 475 // Returns a Script object. If the parameter is a function the return value | 471 // Returns a Script object. If the parameter is a function the return value |
| 476 // is the script in which the function is defined. If the parameter is a string | 472 // is the script in which the function is defined. If the parameter is a string |
| 477 // the return value is the script for which the script name has that string | 473 // the return value is the script for which the script name has that string |
| 478 // value. If it is a regexp and there is a unique script whose name matches | 474 // value. If it is a regexp and there is a unique script whose name matches |
| 479 // we return that, otherwise undefined. | 475 // we return that, otherwise undefined. |
| (...skipping 29 matching lines...) Expand all Loading... |
| 509 // Returns the script source. If the parameter is a function the return value | 505 // Returns the script source. If the parameter is a function the return value |
| 510 // is the script source for the script in which the function is defined. If the | 506 // is the script source for the script in which the function is defined. If the |
| 511 // parameter is a string the return value is the script for which the script | 507 // parameter is a string the return value is the script for which the script |
| 512 // name has that string value. | 508 // name has that string value. |
| 513 Debug.scriptSource = function(func_or_script_name) { | 509 Debug.scriptSource = function(func_or_script_name) { |
| 514 return this.findScript(func_or_script_name).source; | 510 return this.findScript(func_or_script_name).source; |
| 515 }; | 511 }; |
| 516 | 512 |
| 517 | 513 |
| 518 Debug.source = function(f) { | 514 Debug.source = function(f) { |
| 519 if (!IS_FUNCTION(f)) throw MakeTypeError(kDebuggerType); | 515 if (!IS_FUNCTION(f)) throw %make_type_error(kDebuggerType); |
| 520 return %FunctionGetSourceCode(f); | 516 return %FunctionGetSourceCode(f); |
| 521 }; | 517 }; |
| 522 | 518 |
| 523 | 519 |
| 524 Debug.sourcePosition = function(f) { | 520 Debug.sourcePosition = function(f) { |
| 525 if (!IS_FUNCTION(f)) throw MakeTypeError(kDebuggerType); | 521 if (!IS_FUNCTION(f)) throw %make_type_error(kDebuggerType); |
| 526 return %FunctionGetScriptSourcePosition(f); | 522 return %FunctionGetScriptSourcePosition(f); |
| 527 }; | 523 }; |
| 528 | 524 |
| 529 | 525 |
| 530 Debug.findFunctionSourceLocation = function(func, opt_line, opt_column) { | 526 Debug.findFunctionSourceLocation = function(func, opt_line, opt_column) { |
| 531 var script = %FunctionGetScript(func); | 527 var script = %FunctionGetScript(func); |
| 532 var script_offset = %FunctionGetScriptSourcePosition(func); | 528 var script_offset = %FunctionGetScriptSourcePosition(func); |
| 533 return %ScriptLocationFromLine(script, opt_line, opt_column, script_offset); | 529 return %ScriptLocationFromLine(script, opt_line, opt_column, script_offset); |
| 534 }; | 530 }; |
| 535 | 531 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 569 } | 565 } |
| 570 for (var i = 0; i < break_points.length; i++) { | 566 for (var i = 0; i < break_points.length; i++) { |
| 571 if (break_points[i].number() == break_point_number) { | 567 if (break_points[i].number() == break_point_number) { |
| 572 return [break_points[i].actual_location]; | 568 return [break_points[i].actual_location]; |
| 573 } | 569 } |
| 574 } | 570 } |
| 575 return []; | 571 return []; |
| 576 }; | 572 }; |
| 577 | 573 |
| 578 Debug.setBreakPoint = function(func, opt_line, opt_column, opt_condition) { | 574 Debug.setBreakPoint = function(func, opt_line, opt_column, opt_condition) { |
| 579 if (!IS_FUNCTION(func)) throw MakeTypeError(kDebuggerType); | 575 if (!IS_FUNCTION(func)) throw %make_type_error(kDebuggerType); |
| 580 // Break points in API functions are not supported. | 576 // Break points in API functions are not supported. |
| 581 if (%FunctionIsAPIFunction(func)) { | 577 if (%FunctionIsAPIFunction(func)) { |
| 582 throw MakeError(kDebugger, 'Cannot set break point in native code.'); | 578 throw %make_error(kDebugger, 'Cannot set break point in native code.'); |
| 583 } | 579 } |
| 584 // Find source position. | 580 // Find source position. |
| 585 var source_position = | 581 var source_position = |
| 586 this.findFunctionSourceLocation(func, opt_line, opt_column).position; | 582 this.findFunctionSourceLocation(func, opt_line, opt_column).position; |
| 587 // Find the script for the function. | 583 // Find the script for the function. |
| 588 var script = %FunctionGetScript(func); | 584 var script = %FunctionGetScript(func); |
| 589 // Break in builtin JavaScript code is not supported. | 585 // Break in builtin JavaScript code is not supported. |
| 590 if (script.type == Debug.ScriptType.Native) { | 586 if (script.type == Debug.ScriptType.Native) { |
| 591 throw MakeError(kDebugger, 'Cannot set break point in native code.'); | 587 throw %make_error(kDebugger, 'Cannot set break point in native code.'); |
| 592 } | 588 } |
| 593 // If the script for the function has a name convert this to a script break | 589 // If the script for the function has a name convert this to a script break |
| 594 // point. | 590 // point. |
| 595 if (script && script.id) { | 591 if (script && script.id) { |
| 596 // Find line and column for the position in the script and set a script | 592 // Find line and column for the position in the script and set a script |
| 597 // break point from that. | 593 // break point from that. |
| 598 var location = script.locationFromPosition(source_position, false); | 594 var location = script.locationFromPosition(source_position, false); |
| 599 return this.setScriptBreakPointById(script.id, | 595 return this.setScriptBreakPointById(script.id, |
| 600 location.line, location.column, | 596 location.line, location.column, |
| 601 opt_condition); | 597 opt_condition); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 657 break_point.setCondition(condition); | 653 break_point.setCondition(condition); |
| 658 }; | 654 }; |
| 659 | 655 |
| 660 | 656 |
| 661 Debug.clearBreakPoint = function(break_point_number) { | 657 Debug.clearBreakPoint = function(break_point_number) { |
| 662 var break_point = this.findBreakPoint(break_point_number, true); | 658 var break_point = this.findBreakPoint(break_point_number, true); |
| 663 if (break_point) { | 659 if (break_point) { |
| 664 return %ClearBreakPoint(break_point); | 660 return %ClearBreakPoint(break_point); |
| 665 } else { | 661 } else { |
| 666 break_point = this.findScriptBreakPoint(break_point_number, true); | 662 break_point = this.findScriptBreakPoint(break_point_number, true); |
| 667 if (!break_point) throw MakeError(kDebugger, 'Invalid breakpoint'); | 663 if (!break_point) throw %make_error(kDebugger, 'Invalid breakpoint'); |
| 668 } | 664 } |
| 669 }; | 665 }; |
| 670 | 666 |
| 671 | 667 |
| 672 Debug.clearAllBreakPoints = function() { | 668 Debug.clearAllBreakPoints = function() { |
| 673 for (var i = 0; i < break_points.length; i++) { | 669 for (var i = 0; i < break_points.length; i++) { |
| 674 var break_point = break_points[i]; | 670 var break_point = break_points[i]; |
| 675 %ClearBreakPoint(break_point); | 671 %ClearBreakPoint(break_point); |
| 676 } | 672 } |
| 677 break_points = []; | 673 break_points = []; |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 809 | 805 |
| 810 Debug.clearBreakOnUncaughtException = function() { | 806 Debug.clearBreakOnUncaughtException = function() { |
| 811 return %ChangeBreakOnException(Debug.ExceptionBreak.Uncaught, false); | 807 return %ChangeBreakOnException(Debug.ExceptionBreak.Uncaught, false); |
| 812 }; | 808 }; |
| 813 | 809 |
| 814 Debug.isBreakOnUncaughtException = function() { | 810 Debug.isBreakOnUncaughtException = function() { |
| 815 return !!%IsBreakOnException(Debug.ExceptionBreak.Uncaught); | 811 return !!%IsBreakOnException(Debug.ExceptionBreak.Uncaught); |
| 816 }; | 812 }; |
| 817 | 813 |
| 818 Debug.showBreakPoints = function(f, full, opt_position_alignment) { | 814 Debug.showBreakPoints = function(f, full, opt_position_alignment) { |
| 819 if (!IS_FUNCTION(f)) throw MakeError(kDebuggerType); | 815 if (!IS_FUNCTION(f)) throw %make_error(kDebuggerType); |
| 820 var source = full ? this.scriptSource(f) : this.source(f); | 816 var source = full ? this.scriptSource(f) : this.source(f); |
| 821 var offset = full ? 0 : this.sourcePosition(f); | 817 var offset = full ? 0 : this.sourcePosition(f); |
| 822 var position_alignment = IS_UNDEFINED(opt_position_alignment) | 818 var position_alignment = IS_UNDEFINED(opt_position_alignment) |
| 823 ? Debug.BreakPositionAlignment.Statement : opt_position_alignment; | 819 ? Debug.BreakPositionAlignment.Statement : opt_position_alignment; |
| 824 var locations = %GetBreakLocations(f, position_alignment); | 820 var locations = %GetBreakLocations(f, position_alignment); |
| 825 if (!locations) return source; | 821 if (!locations) return source; |
| 826 locations.sort(function(x, y) { return x - y; }); | 822 locations.sort(function(x, y) { return x - y; }); |
| 827 var result = ""; | 823 var result = ""; |
| 828 var prev_pos = 0; | 824 var prev_pos = 0; |
| 829 var pos; | 825 var pos; |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 883 this.selected_frame = 0; | 879 this.selected_frame = 0; |
| 884 } | 880 } |
| 885 | 881 |
| 886 ExecutionState.prototype.prepareStep = function(action) { | 882 ExecutionState.prototype.prepareStep = function(action) { |
| 887 if (action === Debug.StepAction.StepIn || | 883 if (action === Debug.StepAction.StepIn || |
| 888 action === Debug.StepAction.StepOut || | 884 action === Debug.StepAction.StepOut || |
| 889 action === Debug.StepAction.StepNext || | 885 action === Debug.StepAction.StepNext || |
| 890 action === Debug.StepAction.StepFrame) { | 886 action === Debug.StepAction.StepFrame) { |
| 891 return %PrepareStep(this.break_id, action); | 887 return %PrepareStep(this.break_id, action); |
| 892 } | 888 } |
| 893 throw MakeTypeError(kDebuggerType); | 889 throw %make_type_error(kDebuggerType); |
| 894 }; | 890 }; |
| 895 | 891 |
| 896 ExecutionState.prototype.evaluateGlobal = function(source, disable_break, | 892 ExecutionState.prototype.evaluateGlobal = function(source, disable_break, |
| 897 opt_additional_context) { | 893 opt_additional_context) { |
| 898 return MakeMirror(%DebugEvaluateGlobal(this.break_id, source, | 894 return MakeMirror(%DebugEvaluateGlobal(this.break_id, source, |
| 899 TO_BOOLEAN(disable_break), | 895 TO_BOOLEAN(disable_break), |
| 900 opt_additional_context)); | 896 opt_additional_context)); |
| 901 }; | 897 }; |
| 902 | 898 |
| 903 ExecutionState.prototype.frameCount = function() { | 899 ExecutionState.prototype.frameCount = function() { |
| 904 return %GetFrameCount(this.break_id); | 900 return %GetFrameCount(this.break_id); |
| 905 }; | 901 }; |
| 906 | 902 |
| 907 ExecutionState.prototype.frame = function(opt_index) { | 903 ExecutionState.prototype.frame = function(opt_index) { |
| 908 // If no index supplied return the selected frame. | 904 // If no index supplied return the selected frame. |
| 909 if (opt_index == null) opt_index = this.selected_frame; | 905 if (opt_index == null) opt_index = this.selected_frame; |
| 910 if (opt_index < 0 || opt_index >= this.frameCount()) { | 906 if (opt_index < 0 || opt_index >= this.frameCount()) { |
| 911 throw MakeTypeError(kDebuggerFrame); | 907 throw %make_type_error(kDebuggerFrame); |
| 912 } | 908 } |
| 913 return new FrameMirror(this.break_id, opt_index); | 909 return new FrameMirror(this.break_id, opt_index); |
| 914 }; | 910 }; |
| 915 | 911 |
| 916 ExecutionState.prototype.setSelectedFrame = function(index) { | 912 ExecutionState.prototype.setSelectedFrame = function(index) { |
| 917 var i = TO_NUMBER(index); | 913 var i = TO_NUMBER(index); |
| 918 if (i < 0 || i >= this.frameCount()) { | 914 if (i < 0 || i >= this.frameCount()) { |
| 919 throw MakeTypeError(kDebuggerFrame); | 915 throw %make_type_error(kDebuggerFrame); |
| 920 } | 916 } |
| 921 this.selected_frame = i; | 917 this.selected_frame = i; |
| 922 }; | 918 }; |
| 923 | 919 |
| 924 ExecutionState.prototype.selectedFrame = function() { | 920 ExecutionState.prototype.selectedFrame = function() { |
| 925 return this.selected_frame; | 921 return this.selected_frame; |
| 926 }; | 922 }; |
| 927 | 923 |
| 928 ExecutionState.prototype.debugCommandProcessor = function(opt_is_running) { | 924 ExecutionState.prototype.debugCommandProcessor = function(opt_is_running) { |
| 929 return new DebugCommandProcessor(this, opt_is_running); | 925 return new DebugCommandProcessor(this, opt_is_running); |
| (...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1283 var response; // Generated response. | 1279 var response; // Generated response. |
| 1284 try { | 1280 try { |
| 1285 try { | 1281 try { |
| 1286 // Convert the JSON string to an object. | 1282 // Convert the JSON string to an object. |
| 1287 request = JSONParse(json_request); | 1283 request = JSONParse(json_request); |
| 1288 | 1284 |
| 1289 // Create an initial response. | 1285 // Create an initial response. |
| 1290 response = this.createResponse(request); | 1286 response = this.createResponse(request); |
| 1291 | 1287 |
| 1292 if (!request.type) { | 1288 if (!request.type) { |
| 1293 throw MakeError(kDebugger, 'Type not specified'); | 1289 throw %make_error(kDebugger, 'Type not specified'); |
| 1294 } | 1290 } |
| 1295 | 1291 |
| 1296 if (request.type != 'request') { | 1292 if (request.type != 'request') { |
| 1297 throw MakeError(kDebugger, | 1293 throw %make_error(kDebugger, |
| 1298 "Illegal type '" + request.type + "' in request"); | 1294 "Illegal type '" + request.type + "' in request"); |
| 1299 } | 1295 } |
| 1300 | 1296 |
| 1301 if (!request.command) { | 1297 if (!request.command) { |
| 1302 throw MakeError(kDebugger, 'Command not specified'); | 1298 throw %make_error(kDebugger, 'Command not specified'); |
| 1303 } | 1299 } |
| 1304 | 1300 |
| 1305 if (request.arguments) { | 1301 if (request.arguments) { |
| 1306 var args = request.arguments; | 1302 var args = request.arguments; |
| 1307 // TODO(yurys): remove request.arguments.compactFormat check once | 1303 // TODO(yurys): remove request.arguments.compactFormat check once |
| 1308 // ChromeDevTools are switched to 'inlineRefs' | 1304 // ChromeDevTools are switched to 'inlineRefs' |
| 1309 if (args.inlineRefs || args.compactFormat) { | 1305 if (args.inlineRefs || args.compactFormat) { |
| 1310 response.setOption('inlineRefs', true); | 1306 response.setOption('inlineRefs', true); |
| 1311 } | 1307 } |
| 1312 if (!IS_UNDEFINED(args.maxStringLength)) { | 1308 if (!IS_UNDEFINED(args.maxStringLength)) { |
| 1313 response.setOption('maxStringLength', args.maxStringLength); | 1309 response.setOption('maxStringLength', args.maxStringLength); |
| 1314 } | 1310 } |
| 1315 } | 1311 } |
| 1316 | 1312 |
| 1317 var key = request.command.toLowerCase(); | 1313 var key = request.command.toLowerCase(); |
| 1318 var handler = DebugCommandProcessor.prototype.dispatch_[key]; | 1314 var handler = DebugCommandProcessor.prototype.dispatch_[key]; |
| 1319 if (IS_FUNCTION(handler)) { | 1315 if (IS_FUNCTION(handler)) { |
| 1320 %_Call(handler, this, request, response); | 1316 %_Call(handler, this, request, response); |
| 1321 } else { | 1317 } else { |
| 1322 throw MakeError(kDebugger, | 1318 throw %make_error(kDebugger, |
| 1323 'Unknown command "' + request.command + '" in request'); | 1319 'Unknown command "' + request.command + '" in request'); |
| 1324 } | 1320 } |
| 1325 } catch (e) { | 1321 } catch (e) { |
| 1326 // If there is no response object created one (without command). | 1322 // If there is no response object created one (without command). |
| 1327 if (!response) { | 1323 if (!response) { |
| 1328 response = this.createResponse(); | 1324 response = this.createResponse(); |
| 1329 } | 1325 } |
| 1330 response.success = false; | 1326 response.success = false; |
| 1331 response.message = TO_STRING(e); | 1327 response.message = TO_STRING(e); |
| 1332 } | 1328 } |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1364 | 1360 |
| 1365 // Get the stepaction argument. | 1361 // Get the stepaction argument. |
| 1366 if (stepaction) { | 1362 if (stepaction) { |
| 1367 if (stepaction == 'in') { | 1363 if (stepaction == 'in') { |
| 1368 action = Debug.StepAction.StepIn; | 1364 action = Debug.StepAction.StepIn; |
| 1369 } else if (stepaction == 'next') { | 1365 } else if (stepaction == 'next') { |
| 1370 action = Debug.StepAction.StepNext; | 1366 action = Debug.StepAction.StepNext; |
| 1371 } else if (stepaction == 'out') { | 1367 } else if (stepaction == 'out') { |
| 1372 action = Debug.StepAction.StepOut; | 1368 action = Debug.StepAction.StepOut; |
| 1373 } else { | 1369 } else { |
| 1374 throw MakeError(kDebugger, | 1370 throw %make_error(kDebugger, |
| 1375 'Invalid stepaction argument "' + stepaction + '".'); | 1371 'Invalid stepaction argument "' + stepaction + '".'); |
| 1376 } | 1372 } |
| 1377 } | 1373 } |
| 1378 | 1374 |
| 1379 // Set up the VM for stepping. | 1375 // Set up the VM for stepping. |
| 1380 this.exec_state_.prepareStep(action); | 1376 this.exec_state_.prepareStep(action); |
| 1381 } | 1377 } |
| 1382 | 1378 |
| 1383 // VM should be running after executing this request. | 1379 // VM should be running after executing this request. |
| 1384 response.running = true; | 1380 response.running = true; |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1484 if (break_point.type() == Debug.ScriptBreakPointType.ScriptId) { | 1480 if (break_point.type() == Debug.ScriptBreakPointType.ScriptId) { |
| 1485 response.body.type = 'scriptId'; | 1481 response.body.type = 'scriptId'; |
| 1486 response.body.script_id = break_point.script_id(); | 1482 response.body.script_id = break_point.script_id(); |
| 1487 } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptName) { | 1483 } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptName) { |
| 1488 response.body.type = 'scriptName'; | 1484 response.body.type = 'scriptName'; |
| 1489 response.body.script_name = break_point.script_name(); | 1485 response.body.script_name = break_point.script_name(); |
| 1490 } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptRegExp) { | 1486 } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptRegExp) { |
| 1491 response.body.type = 'scriptRegExp'; | 1487 response.body.type = 'scriptRegExp'; |
| 1492 response.body.script_regexp = break_point.script_regexp_object().source; | 1488 response.body.script_regexp = break_point.script_regexp_object().source; |
| 1493 } else { | 1489 } else { |
| 1494 throw MakeError(kDebugger, | 1490 throw %make_error(kDebugger, |
| 1495 "Unexpected breakpoint type: " + break_point.type()); | 1491 "Unexpected breakpoint type: " + break_point.type()); |
| 1496 } | 1492 } |
| 1497 response.body.line = break_point.line(); | 1493 response.body.line = break_point.line(); |
| 1498 response.body.column = break_point.column(); | 1494 response.body.column = break_point.column(); |
| 1499 response.body.actual_locations = break_point.actual_locations(); | 1495 response.body.actual_locations = break_point.actual_locations(); |
| 1500 } else { | 1496 } else { |
| 1501 response.body.type = 'function'; | 1497 response.body.type = 'function'; |
| 1502 response.body.actual_locations = [break_point.actual_location]; | 1498 response.body.actual_locations = [break_point.actual_location]; |
| 1503 } | 1499 } |
| 1504 }; | 1500 }; |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1618 if (break_point.type() == Debug.ScriptBreakPointType.ScriptId) { | 1614 if (break_point.type() == Debug.ScriptBreakPointType.ScriptId) { |
| 1619 description.type = 'scriptId'; | 1615 description.type = 'scriptId'; |
| 1620 description.script_id = break_point.script_id(); | 1616 description.script_id = break_point.script_id(); |
| 1621 } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptName) { | 1617 } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptName) { |
| 1622 description.type = 'scriptName'; | 1618 description.type = 'scriptName'; |
| 1623 description.script_name = break_point.script_name(); | 1619 description.script_name = break_point.script_name(); |
| 1624 } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptRegExp) { | 1620 } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptRegExp) { |
| 1625 description.type = 'scriptRegExp'; | 1621 description.type = 'scriptRegExp'; |
| 1626 description.script_regexp = break_point.script_regexp_object().source; | 1622 description.script_regexp = break_point.script_regexp_object().source; |
| 1627 } else { | 1623 } else { |
| 1628 throw MakeError(kDebugger, | 1624 throw %make_error(kDebugger, |
| 1629 "Unexpected breakpoint type: " + break_point.type()); | 1625 "Unexpected breakpoint type: " + break_point.type()); |
| 1630 } | 1626 } |
| 1631 array.push(description); | 1627 array.push(description); |
| 1632 } | 1628 } |
| 1633 | 1629 |
| 1634 response.body = { | 1630 response.body = { |
| 1635 breakpoints: array, | 1631 breakpoints: array, |
| 1636 breakOnExceptions: Debug.isBreakOnException(), | 1632 breakOnExceptions: Debug.isBreakOnException(), |
| 1637 breakOnUncaughtExceptions: Debug.isBreakOnUncaughtException() | 1633 breakOnUncaughtExceptions: Debug.isBreakOnUncaughtException() |
| 1638 }; | 1634 }; |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1767 }; | 1763 }; |
| 1768 | 1764 |
| 1769 | 1765 |
| 1770 DebugCommandProcessor.prototype.resolveFrameFromScopeDescription_ = | 1766 DebugCommandProcessor.prototype.resolveFrameFromScopeDescription_ = |
| 1771 function(scope_description) { | 1767 function(scope_description) { |
| 1772 // Get the frame for which the scope or scopes are requested. | 1768 // Get the frame for which the scope or scopes are requested. |
| 1773 // With no frameNumber argument use the currently selected frame. | 1769 // With no frameNumber argument use the currently selected frame. |
| 1774 if (scope_description && !IS_UNDEFINED(scope_description.frameNumber)) { | 1770 if (scope_description && !IS_UNDEFINED(scope_description.frameNumber)) { |
| 1775 var frame_index = scope_description.frameNumber; | 1771 var frame_index = scope_description.frameNumber; |
| 1776 if (frame_index < 0 || this.exec_state_.frameCount() <= frame_index) { | 1772 if (frame_index < 0 || this.exec_state_.frameCount() <= frame_index) { |
| 1777 throw MakeTypeError(kDebuggerFrame); | 1773 throw %make_type_error(kDebuggerFrame); |
| 1778 } | 1774 } |
| 1779 return this.exec_state_.frame(frame_index); | 1775 return this.exec_state_.frame(frame_index); |
| 1780 } else { | 1776 } else { |
| 1781 return this.exec_state_.frame(); | 1777 return this.exec_state_.frame(); |
| 1782 } | 1778 } |
| 1783 }; | 1779 }; |
| 1784 | 1780 |
| 1785 | 1781 |
| 1786 // Gets scope host object from request. It is either a function | 1782 // Gets scope host object from request. It is either a function |
| 1787 // ('functionHandle' argument must be specified) or a stack frame | 1783 // ('functionHandle' argument must be specified) or a stack frame |
| 1788 // ('frameNumber' may be specified and the current frame is taken by default). | 1784 // ('frameNumber' may be specified and the current frame is taken by default). |
| 1789 DebugCommandProcessor.prototype.resolveScopeHolder_ = | 1785 DebugCommandProcessor.prototype.resolveScopeHolder_ = |
| 1790 function(scope_description) { | 1786 function(scope_description) { |
| 1791 if (scope_description && "functionHandle" in scope_description) { | 1787 if (scope_description && "functionHandle" in scope_description) { |
| 1792 if (!IS_NUMBER(scope_description.functionHandle)) { | 1788 if (!IS_NUMBER(scope_description.functionHandle)) { |
| 1793 throw MakeError(kDebugger, 'Function handle must be a number'); | 1789 throw %make_error(kDebugger, 'Function handle must be a number'); |
| 1794 } | 1790 } |
| 1795 var function_mirror = LookupMirror(scope_description.functionHandle); | 1791 var function_mirror = LookupMirror(scope_description.functionHandle); |
| 1796 if (!function_mirror) { | 1792 if (!function_mirror) { |
| 1797 throw MakeError(kDebugger, 'Failed to find function object by handle'); | 1793 throw %make_error(kDebugger, 'Failed to find function object by handle'); |
| 1798 } | 1794 } |
| 1799 if (!function_mirror.isFunction()) { | 1795 if (!function_mirror.isFunction()) { |
| 1800 throw MakeError(kDebugger, | 1796 throw %make_error(kDebugger, |
| 1801 'Value of non-function type is found by handle'); | 1797 'Value of non-function type is found by handle'); |
| 1802 } | 1798 } |
| 1803 return function_mirror; | 1799 return function_mirror; |
| 1804 } else { | 1800 } else { |
| 1805 // No frames no scopes. | 1801 // No frames no scopes. |
| 1806 if (this.exec_state_.frameCount() == 0) { | 1802 if (this.exec_state_.frameCount() == 0) { |
| 1807 throw MakeError(kDebugger, 'No scopes'); | 1803 throw %make_error(kDebugger, 'No scopes'); |
| 1808 } | 1804 } |
| 1809 | 1805 |
| 1810 // Get the frame for which the scopes are requested. | 1806 // Get the frame for which the scopes are requested. |
| 1811 var frame = this.resolveFrameFromScopeDescription_(scope_description); | 1807 var frame = this.resolveFrameFromScopeDescription_(scope_description); |
| 1812 return frame; | 1808 return frame; |
| 1813 } | 1809 } |
| 1814 } | 1810 } |
| 1815 | 1811 |
| 1816 | 1812 |
| 1817 DebugCommandProcessor.prototype.scopesRequest_ = function(request, response) { | 1813 DebugCommandProcessor.prototype.scopesRequest_ = function(request, response) { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1850 | 1846 |
| 1851 | 1847 |
| 1852 // Reads value from protocol description. Description may be in form of type | 1848 // Reads value from protocol description. Description may be in form of type |
| 1853 // (for singletons), raw value (primitive types supported in JSON), | 1849 // (for singletons), raw value (primitive types supported in JSON), |
| 1854 // string value description plus type (for primitive values) or handle id. | 1850 // string value description plus type (for primitive values) or handle id. |
| 1855 // Returns raw value or throws exception. | 1851 // Returns raw value or throws exception. |
| 1856 DebugCommandProcessor.resolveValue_ = function(value_description) { | 1852 DebugCommandProcessor.resolveValue_ = function(value_description) { |
| 1857 if ("handle" in value_description) { | 1853 if ("handle" in value_description) { |
| 1858 var value_mirror = LookupMirror(value_description.handle); | 1854 var value_mirror = LookupMirror(value_description.handle); |
| 1859 if (!value_mirror) { | 1855 if (!value_mirror) { |
| 1860 throw MakeError(kDebugger, "Failed to resolve value by handle, ' #" + | 1856 throw %make_error(kDebugger, "Failed to resolve value by handle, ' #" + |
| 1861 value_description.handle + "# not found"); | 1857 value_description.handle + "# not found"); |
| 1862 } | 1858 } |
| 1863 return value_mirror.value(); | 1859 return value_mirror.value(); |
| 1864 } else if ("stringDescription" in value_description) { | 1860 } else if ("stringDescription" in value_description) { |
| 1865 if (value_description.type == MirrorType.BOOLEAN_TYPE) { | 1861 if (value_description.type == MirrorType.BOOLEAN_TYPE) { |
| 1866 return TO_BOOLEAN(value_description.stringDescription); | 1862 return TO_BOOLEAN(value_description.stringDescription); |
| 1867 } else if (value_description.type == MirrorType.NUMBER_TYPE) { | 1863 } else if (value_description.type == MirrorType.NUMBER_TYPE) { |
| 1868 return TO_NUMBER(value_description.stringDescription); | 1864 return TO_NUMBER(value_description.stringDescription); |
| 1869 } if (value_description.type == MirrorType.STRING_TYPE) { | 1865 } if (value_description.type == MirrorType.STRING_TYPE) { |
| 1870 return TO_STRING(value_description.stringDescription); | 1866 return TO_STRING(value_description.stringDescription); |
| 1871 } else { | 1867 } else { |
| 1872 throw MakeError(kDebugger, "Unknown type"); | 1868 throw %make_error(kDebugger, "Unknown type"); |
| 1873 } | 1869 } |
| 1874 } else if ("value" in value_description) { | 1870 } else if ("value" in value_description) { |
| 1875 return value_description.value; | 1871 return value_description.value; |
| 1876 } else if (value_description.type == MirrorType.UNDEFINED_TYPE) { | 1872 } else if (value_description.type == MirrorType.UNDEFINED_TYPE) { |
| 1877 return UNDEFINED; | 1873 return UNDEFINED; |
| 1878 } else if (value_description.type == MirrorType.NULL_TYPE) { | 1874 } else if (value_description.type == MirrorType.NULL_TYPE) { |
| 1879 return null; | 1875 return null; |
| 1880 } else { | 1876 } else { |
| 1881 throw MakeError(kDebugger, "Failed to parse value description"); | 1877 throw %make_error(kDebugger, "Failed to parse value description"); |
| 1882 } | 1878 } |
| 1883 }; | 1879 }; |
| 1884 | 1880 |
| 1885 | 1881 |
| 1886 DebugCommandProcessor.prototype.setVariableValueRequest_ = | 1882 DebugCommandProcessor.prototype.setVariableValueRequest_ = |
| 1887 function(request, response) { | 1883 function(request, response) { |
| 1888 if (!request.arguments) { | 1884 if (!request.arguments) { |
| 1889 response.failed('Missing arguments'); | 1885 response.failed('Missing arguments'); |
| 1890 return; | 1886 return; |
| 1891 } | 1887 } |
| (...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2479 "IsBreakPointTriggered", IsBreakPointTriggered, | 2475 "IsBreakPointTriggered", IsBreakPointTriggered, |
| 2480 "UpdateScriptBreakPoints", UpdateScriptBreakPoints, | 2476 "UpdateScriptBreakPoints", UpdateScriptBreakPoints, |
| 2481 ]); | 2477 ]); |
| 2482 | 2478 |
| 2483 // Export to liveedit.js | 2479 // Export to liveedit.js |
| 2484 utils.Export(function(to) { | 2480 utils.Export(function(to) { |
| 2485 to.GetScriptBreakPoints = GetScriptBreakPoints; | 2481 to.GetScriptBreakPoints = GetScriptBreakPoints; |
| 2486 }); | 2482 }); |
| 2487 | 2483 |
| 2488 }) | 2484 }) |
| OLD | NEW |