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 /// This tools verifies that all elements that are included in the output are | 5 /// This tools verifies that all elements that are included in the output are |
6 /// reachable from the program entrypoint. If there are elements that are not | 6 /// reachable from the program entrypoint. If there are elements that are not |
7 /// reachable from the entrypoint, then this indicates that we are missing | 7 /// reachable from the entrypoint, then this indicates that we are missing |
8 /// dependencies. If all functions are reachable from the entrypoint, this | 8 /// dependencies. If all functions are reachable from the entrypoint, this |
9 /// script will return with exitcode 0. Otherwise it will list the unreachable | 9 /// script will return with exitcode 0. Otherwise it will list the unreachable |
10 /// functions and return with exitcode 1. | 10 /// functions and return with exitcode 1. |
(...skipping 11 matching lines...) Expand all Loading... |
22 if (args.length > 1) { | 22 if (args.length > 1) { |
23 printUsage(); | 23 printUsage(); |
24 exit(1); | 24 exit(1); |
25 } | 25 } |
26 var json = JSON.decode(await new File(args[0]).readAsString()); | 26 var json = JSON.decode(await new File(args[0]).readAsString()); |
27 var info = new AllInfoJsonCodec().decode(json); | 27 var info = new AllInfoJsonCodec().decode(json); |
28 var graph = graphFromInfo(info); | 28 var graph = graphFromInfo(info); |
29 var entrypoint = info.program.entrypoint; | 29 var entrypoint = info.program.entrypoint; |
30 var reachables = findReachable(graph, entrypoint); | 30 var reachables = findReachable(graph, entrypoint); |
31 | 31 |
32 var unreachables = info.functions.where((func) => !reachables.contains(func)); | 32 var functionsAndFields = []..addAll(info.functions)..addAll(info.fields); |
| 33 var unreachables = |
| 34 functionsAndFields.where((func) => !reachables.contains(func)); |
33 if (unreachables.isNotEmpty) { | 35 if (unreachables.isNotEmpty) { |
34 unreachables.forEach(print); | 36 unreachables.forEach((x) => print(longName(x))); |
35 exit(1); | 37 exit(1); |
36 } else { | 38 } else { |
37 print('all elements are reachable from the entrypoint'); | 39 print('all elements are reachable from the entrypoint'); |
38 } | 40 } |
39 } | 41 } |
40 | 42 |
41 /// Finds the set of nodes reachable from [start] in [graph]. | 43 /// Finds the set of nodes reachable from [start] in [graph]. |
42 Set<Info> findReachable(Graph<Info> graph, Info start) { | 44 Set<Info> findReachable(Graph<Info> graph, Info start) => |
43 var visited = new Set<Info>(); | 45 new Set.from(graph.preOrder(start)); |
44 var stack = <Info>[start]; | |
45 while (stack.isNotEmpty) { | |
46 var next = stack.removeLast(); | |
47 visited.add(next); | |
48 stack.addAll( | |
49 graph.targetsOf(next).where((target) => !visited.contains(target))); | |
50 } | |
51 return visited; | |
52 } | |
53 | 46 |
54 void printUsage() { | 47 void printUsage() { |
55 print('usage: dart2js_info_verify_deps <info file>'); | 48 print('usage: dart2js_info_verify_deps <info file>'); |
56 } | 49 } |
OLD | NEW |