| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 /// Library for debugging helpers. The unittest analyze_unused_test checks that | |
| 6 /// the helper are not used in production code. | |
| 7 | |
| 8 library dart2js.helpers; | |
| 9 | |
| 10 import 'dart:async' show EventSink; | |
| 11 import 'dart:collection'; | |
| 12 import 'dart:convert'; | |
| 13 | |
| 14 import '../../compiler.dart'; | |
| 15 import '../dart2jslib.dart'; | |
| 16 import '../util/util.dart'; | |
| 17 | |
| 18 part 'debug_collection.dart'; | |
| 19 part 'trace.dart'; | |
| 20 part 'expensive_map.dart'; | |
| 21 part 'expensive_set.dart'; | |
| 22 part 'stats.dart'; | |
| 23 part 'track_map.dart'; | |
| 24 | |
| 25 /// Global flag to enable [debugPrint]. This should always be `true` by default | |
| 26 /// and be set to `false` as a means to temporarily turn off all debugging | |
| 27 /// printouts. | |
| 28 const bool DEBUG_PRINT_ENABLED = true; | |
| 29 | |
| 30 /// Enables debug mode. | |
| 31 /// | |
| 32 /// Sets the [DEBUG_MODE] to `true`. | |
| 33 void enableDebugMode() { | |
| 34 DEBUG_MODE = true; | |
| 35 } | |
| 36 | |
| 37 class _DebugIndentation extends Indentation { | |
| 38 final String indentationUnit = " "; | |
| 39 } | |
| 40 _DebugIndentation _indentation = new _DebugIndentation(); | |
| 41 | |
| 42 /// Function signature of [debugPrint]. | |
| 43 typedef DebugPrint(s); | |
| 44 | |
| 45 /// If [DEBUG_PRINT_ENABLED] is `true` print [s] using the current identation. | |
| 46 DebugPrint get debugPrint { | |
| 47 enableDebugMode(); | |
| 48 // TODO(johnniwinther): Maybe disable debug mode after the call. | |
| 49 return _debugPrint; | |
| 50 } | |
| 51 | |
| 52 /// Implementation of [debugPrint]. | |
| 53 _debugPrint(s) { | |
| 54 if (DEBUG_PRINT_ENABLED) print('${_indentation.indentation}$s'); | |
| 55 } | |
| 56 | |
| 57 /// Function signature of [debugWrapPrint]. | |
| 58 typedef DebugWrapPrint(s, f()); | |
| 59 | |
| 60 /// Wraps the call to [f] with a print of 'start:$s' and 'end:$s' incrementing | |
| 61 /// the current indentation used by [debugPrint] during the execution of [f]. | |
| 62 /// | |
| 63 /// Use this to get a tree-like debug printout for nested calls. | |
| 64 DebugWrapPrint get debugWrapPrint { | |
| 65 enableDebugMode(); | |
| 66 return _debugWrapPrint; | |
| 67 } | |
| 68 | |
| 69 /// Implementation of [debugWrapPrint]. | |
| 70 DebugWrapPrint _debugWrapPrint(s, f()) { | |
| 71 debugPrint('start:$s'); | |
| 72 var result = _indentation.indentBlock(f); | |
| 73 debugPrint('end:$s'); | |
| 74 return result; | |
| 75 } | |
| 76 | |
| 77 /// Dummy method to mark breakpoints. | |
| 78 debugBreak() { | |
| 79 enableDebugMode(); | |
| 80 } | |
| 81 | |
| 82 /// Function signature of [reportHere]. | |
| 83 typedef ReportHere(Compiler compiler, Spannable node, String debugMessage); | |
| 84 | |
| 85 /// Print a message with a source location. | |
| 86 ReportHere get reportHere { | |
| 87 enableDebugMode(); | |
| 88 return _reportHere; | |
| 89 } | |
| 90 | |
| 91 /// Implementation of [reportHere] | |
| 92 _reportHere(Compiler compiler, Spannable node, String debugMessage) { | |
| 93 compiler.reportInfo(node, | |
| 94 MessageKind.GENERIC, {'text': 'HERE: $debugMessage'}); | |
| 95 } | |
| OLD | NEW |