| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of debugger; | 5 part of debugger; |
| 6 | 6 |
| 7 class DebuggerLocation { | 7 class DebuggerLocation { |
| 8 DebuggerLocation.file(this.script, this.line, this.col); | 8 DebuggerLocation.file(this.script, this.line, this.col); |
| 9 DebuggerLocation.func(this.function); | 9 DebuggerLocation.func(this.function); |
| 10 DebuggerLocation.error(this.errorMessage); | 10 DebuggerLocation.error(this.errorMessage); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 static Future<DebuggerLocation> _currentLocation(Debugger debugger) { | 45 static Future<DebuggerLocation> _currentLocation(Debugger debugger) { |
| 46 ServiceMap stack = debugger.stack; | 46 ServiceMap stack = debugger.stack; |
| 47 if (stack == null || stack['frames'].length == 0) { | 47 if (stack == null || stack['frames'].length == 0) { |
| 48 return new Future.value(new DebuggerLocation.error( | 48 return new Future.value(new DebuggerLocation.error( |
| 49 'A script must be provided when the stack is empty')); | 49 'A script must be provided when the stack is empty')); |
| 50 } | 50 } |
| 51 var frame = stack['frames'][debugger.currentFrame]; | 51 var frame = stack['frames'][debugger.currentFrame]; |
| 52 Script script = frame.location.script; | 52 Script script = frame.location.script; |
| 53 return script.load().then((_) { | 53 return script.load().then((_) { |
| 54 var line = script.tokenToLine(frame.location.tokenPos); | 54 var line = script.tokenToLine(frame.location.tokenPos); |
| 55 // TODO(turnidge): Pass in the column here once the protocol supports it. | 55 var col = script.tokenToCol(frame.location.tokenPos); |
| 56 return new Future.value(new DebuggerLocation.file(script, line, null)); | 56 return new Future.value(new DebuggerLocation.file(script, line, col)); |
| 57 }); | 57 }); |
| 58 } | 58 } |
| 59 | 59 |
| 60 static Future<DebuggerLocation> _parseScriptLine(Debugger debugger, | 60 static Future<DebuggerLocation> _parseScriptLine(Debugger debugger, |
| 61 Match match) { | 61 Match match) { |
| 62 var scriptName = match.group(1); | 62 var scriptName = match.group(1); |
| 63 if (scriptName != null) { | 63 if (scriptName != null) { |
| 64 scriptName = scriptName.substring(0, scriptName.length - 1); | 64 scriptName = scriptName.substring(0, scriptName.length - 1); |
| 65 } | 65 } |
| 66 var lineStr = match.group(2); | 66 var lineStr = match.group(2); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 94 return new DebuggerLocation.error("Script '${scriptName}' is ambigous"
); | 94 return new DebuggerLocation.error("Script '${scriptName}' is ambigous"
); |
| 95 } | 95 } |
| 96 }); | 96 }); |
| 97 } else { | 97 } else { |
| 98 // No script provided. Default to top of stack for now. | 98 // No script provided. Default to top of stack for now. |
| 99 ServiceMap stack = debugger.stack; | 99 ServiceMap stack = debugger.stack; |
| 100 if (stack == null || stack['frames'].length == 0) { | 100 if (stack == null || stack['frames'].length == 0) { |
| 101 return new Future.value(new DebuggerLocation.error( | 101 return new Future.value(new DebuggerLocation.error( |
| 102 'A script must be provided when the stack is empty')); | 102 'A script must be provided when the stack is empty')); |
| 103 } | 103 } |
| 104 Script script = stack['frames'][0].location.script; | 104 var frame = stack['frames'][debugger.currentFrame]; |
| 105 return new Future.value(new DebuggerLocation.file(script, line, col)); | 105 Script script = frame.location.script; |
| 106 return script.load().then((_) { |
| 107 return new Future.value(new DebuggerLocation.file(script, line, col)); |
| 108 }); |
| 106 } | 109 } |
| 107 } | 110 } |
| 108 | 111 |
| 109 static Future<List<Script>> _lookupScript(Isolate isolate, | 112 static Future<List<Script>> _lookupScript(Isolate isolate, |
| 110 String name, | 113 String name, |
| 111 {bool allowPrefix: false}) { | 114 {bool allowPrefix: false}) { |
| 112 var pending = []; | 115 var pending = []; |
| 113 for (var lib in isolate.libraries) { | 116 for (var lib in isolate.libraries) { |
| 114 if (!lib.loaded) { | 117 if (!lib.loaded) { |
| 115 pending.add(lib.load()); | 118 pending.add(lib.load()); |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 357 return 'invalid source location (${errorMessage})'; | 360 return 'invalid source location (${errorMessage})'; |
| 358 } | 361 } |
| 359 | 362 |
| 360 Script script; | 363 Script script; |
| 361 int line; | 364 int line; |
| 362 int col; | 365 int col; |
| 363 ServiceFunction function; | 366 ServiceFunction function; |
| 364 String errorMessage; | 367 String errorMessage; |
| 365 bool get valid => (errorMessage == null); | 368 bool get valid => (errorMessage == null); |
| 366 } | 369 } |
| OLD | NEW |