OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 /// Library for debugging helpers. The unittest analyze_unused_test checks that | 5 /// Library for debugging helpers. The unittest analyze_unused_test checks that |
6 /// the helper are not used in production code. | 6 /// the helper are not used in production code. |
7 | 7 |
8 library dart2js.helpers; | 8 library dart2js.helpers; |
9 | 9 |
10 import 'dart:async' show EventSink; | 10 import 'dart:async' show EventSink; |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 ReportHere get reportHere { | 86 ReportHere get reportHere { |
87 enableDebugMode(); | 87 enableDebugMode(); |
88 return _reportHere; | 88 return _reportHere; |
89 } | 89 } |
90 | 90 |
91 /// Implementation of [reportHere] | 91 /// Implementation of [reportHere] |
92 _reportHere(Compiler compiler, Spannable node, String debugMessage) { | 92 _reportHere(Compiler compiler, Spannable node, String debugMessage) { |
93 compiler.reportInfo(node, | 93 compiler.reportInfo(node, |
94 MessageKind.GENERIC, {'text': 'HERE: $debugMessage'}); | 94 MessageKind.GENERIC, {'text': 'HERE: $debugMessage'}); |
95 } | 95 } |
| 96 |
| 97 /// Set of tracked objects used by [track] and [ifTracked]. |
| 98 var _trackedObjects = new Set(); |
| 99 |
| 100 /// Global default value for the `printTrace` option of [track] and [ifTracked]. |
| 101 bool trackWithTrace = false; |
| 102 |
| 103 /// If [doTrack] is `true`, add [object] to the set of tracked objects. |
| 104 /// |
| 105 /// If tracked, [message] is printed along the hash code and toString of |
| 106 /// [object]. If [printTrace] is `true` a trace printed additionally. |
| 107 /// If [printTrace] is `null`, [trackWithTrace] determines whether a trace is |
| 108 /// printed. |
| 109 /// |
| 110 /// [object] is returned as the result of the method. |
| 111 track(bool doTrack, Object object, String message, {bool printTrace}) { |
| 112 if (!doTrack) return object; |
| 113 _trackedObjects.add(object); |
| 114 String msg = 'track: ${object.hashCode}:$object:$message'; |
| 115 if (printTrace == null) printTrace = trackWithTrace; |
| 116 if (printTrace) { |
| 117 trace(msg); |
| 118 } else { |
| 119 debugPrint(msg); |
| 120 } |
| 121 return object; |
| 122 } |
| 123 |
| 124 /// Returns `true` if [object] is in the set of tracked objects. |
| 125 /// |
| 126 /// If [message] is provided it is printed along the hash code and toString of |
| 127 /// [object]. If [printTrace] is `true` a trace printed additionally. If |
| 128 /// [printTrace] is `null`, [trackWithTrace] determines whether a trace is |
| 129 /// printed. |
| 130 bool ifTracked(Object object, {String message, bool printTrace}) { |
| 131 if (_trackedObjects.contains(object)) { |
| 132 if (message != null) { |
| 133 String msg = 'tracked: ${object.hashCode}:$object:$message'; |
| 134 if (printTrace == null) printTrace = trackWithTrace; |
| 135 if (printTrace) { |
| 136 trace(msg); |
| 137 } else { |
| 138 debugPrint(msg); |
| 139 } |
| 140 } |
| 141 return true; |
| 142 } |
| 143 return false; |
| 144 } |
OLD | NEW |