Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | |
| 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. | |
| 4 | |
| 5 import 'script.dart'; | |
| 6 import 'scope.dart'; | |
| 7 import 'source_location.dart'; | |
| 8 | |
| 9 VMSourceReport newSourceReport(Scope scope, Map json) { | |
| 10 if (json == null) return null; | |
| 11 assert(json["type"] == "SourceReport"); | |
| 12 | |
| 13 var scripts = (json['scripts'] as List) | |
| 14 .map((script) => newVMScriptRef(scope, script)) | |
| 15 .toList(); | |
| 16 | |
| 17 var ranges = new List<VMSourceReportRange>.unmodifiable( | |
| 18 (json['ranges'] as List).map((rangeItem) => | |
| 19 new VMSourceReportRange._fromJson(rangeItem, scripts))); | |
| 20 | |
| 21 return new VMSourceReport._(ranges); | |
| 22 } | |
| 23 | |
| 24 /// A report about ranges of source code. | |
| 25 /// | |
| 26 /// [ranges] exposes code coverage and information on possible breakpoints. | |
| 27 class VMSourceReport { | |
| 28 /// Ranges in the program source corresponding to ranges of executable code in | |
| 29 /// the user's program. | |
| 30 /// | |
| 31 /// Ranges can include members such as functions, methods, and | |
| 32 /// constructors. | |
| 33 /// | |
| 34 /// Note: ranges may nest in other ranges, in the case of nested functions. | |
| 35 /// Rranges may be duplicated, in the case of mixins. | |
|
nweiz
2016/05/11 23:03:31
"Rranges" -> "Ranges"
kevmoo
2016/05/12 05:22:34
Done.
| |
| 36 final List<VMSourceReportRange> ranges; | |
| 37 | |
| 38 VMSourceReport._(this.ranges); | |
| 39 } | |
| 40 | |
| 41 /// A range of executable code (function, method, constructor, etc) | |
| 42 /// in the running program. | |
| 43 /// | |
| 44 /// This is part of a [VMSourceReport]. | |
| 45 class VMSourceReportRange { | |
| 46 VMScriptRef get script => location.script; | |
| 47 | |
| 48 /// The location of the range in the target script. | |
| 49 final VMSourceLocation location; | |
| 50 | |
| 51 /// `true` if this range been compiled by the Dart VM. | |
| 52 /// | |
| 53 /// If `false`, `possibleBreakpoints`, `hits`, and `misses` will be `null`. | |
| 54 /// | |
| 55 /// Use `forceCompile` in `getSourceReport` to ensure the target scripts are | |
| 56 /// compiled. | |
| 57 final bool compiled; | |
| 58 | |
| 59 /// Token positions at which breakpoints can be set. | |
| 60 /// | |
| 61 /// Provided only when `includePossibleBreakpoints` in `getSourceReport` | |
| 62 /// is `true` and the range has been compiled. | |
| 63 final List<VMScriptToken> possibleBreakpoints; | |
| 64 | |
| 65 /// Token positions in a [VMSourceReportRange] which have been executed. | |
|
nweiz
2016/05/11 23:03:31
"a [VMSourceReportRange]" -> "this range"
same be
kevmoo
2016/05/12 05:22:35
Done.
| |
| 66 /// | |
| 67 /// Provided only when `includeCoverageReport` in `getSourceReport` is `true` | |
| 68 /// and the range has been compiled. | |
| 69 /// | |
| 70 /// Sorted by the position in the source file, starting with the first hit. | |
| 71 final List<VMScriptToken> hits; | |
| 72 | |
| 73 /// Token positions in a [VMSourceReportRange] which have not yet been | |
| 74 /// executed. | |
| 75 /// | |
| 76 /// Provided only when `includeCoverageReport` in `getSourceReport` is `true` | |
| 77 /// and the range has been compiled. | |
| 78 /// | |
| 79 /// Sorted by the location in the source file, starting with the first miss. | |
| 80 final List<VMScriptToken> misses; | |
| 81 | |
| 82 factory VMSourceReportRange._fromJson(Map json, List<VMScriptRef> scripts) { | |
|
nweiz
2016/05/11 23:03:31
Document this.
kevmoo
2016/05/12 05:22:35
Done.
| |
| 83 var script = scripts[json['scriptIndex']]; | |
| 84 | |
| 85 var location = newVMSourceLocationFromPosition( | |
| 86 script, json['startPos'], json['endPos']); | |
| 87 | |
| 88 var compiled = json['compiled']; | |
| 89 | |
| 90 var hits = json['coverage'] == null | |
| 91 ? null | |
| 92 : _getTokens(script, json['coverage']['hits']); | |
| 93 | |
| 94 var misses = json['coverage'] == null | |
| 95 ? null | |
| 96 : _getTokens(script, json['coverage']['misses']); | |
| 97 | |
| 98 var possibleBreakpoints = json['possibleBreakpoints'] == null | |
| 99 ? null | |
| 100 : _getTokens(script, json['possibleBreakpoints']); | |
| 101 | |
| 102 return new VMSourceReportRange._( | |
| 103 compiled, hits, misses, possibleBreakpoints, location); | |
| 104 } | |
| 105 | |
| 106 VMSourceReportRange._(this.compiled, this.hits, this.misses, | |
| 107 this.possibleBreakpoints, this.location); | |
| 108 | |
| 109 static List<VMScriptToken> _getTokens( | |
|
nweiz
2016/05/11 23:03:31
Document this as well.
kevmoo
2016/05/12 05:22:35
Done.
| |
| 110 VMScriptRef script, Iterable<int> locations) { | |
| 111 if (locations == null) return null; | |
|
nweiz
2016/05/11 23:03:31
It shouldn't be possible for this to be null. It's
kevmoo
2016/05/12 05:22:35
Acknowledged.
| |
| 112 | |
| 113 return new List<VMScriptToken>.unmodifiable(locations | |
| 114 .map((position) => newVMScriptTokenFromPosition(script, position))); | |
| 115 } | |
| 116 } | |
| OLD | NEW |