OLD | NEW |
1 #!/usr/bin/env dart | 1 #!/usr/bin/env dart |
2 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 2 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
3 // for details. All rights reserved. Use of this source code is governed by a | 3 // for details. All rights reserved. Use of this source code is governed by a |
4 // BSD-style license that can be found in the LICENSE file. | 4 // BSD-style license that can be found in the LICENSE file. |
5 | 5 |
6 import 'dart:async'; | 6 import 'dart:async'; |
7 import 'dart:io'; | 7 import 'dart:io'; |
8 | 8 |
9 import 'package:args/args.dart'; | 9 import 'package:args/args.dart'; |
| 10 import 'package:kernel/class_hierarchy.dart'; |
10 import 'package:kernel/core_types.dart'; | 11 import 'package:kernel/core_types.dart'; |
11 import 'package:kernel/kernel.dart'; | 12 import 'package:kernel/kernel.dart'; |
12 import 'package:kernel/target/targets.dart'; | 13 import 'package:kernel/target/targets.dart'; |
13 import 'package:kernel/transformations/closure_conversion.dart' as closures; | 14 import 'package:kernel/transformations/closure_conversion.dart' as closures; |
14 import 'package:kernel/transformations/continuation.dart' as cont; | 15 import 'package:kernel/transformations/continuation.dart' as cont; |
15 import 'package:kernel/transformations/empty.dart' as empty; | 16 import 'package:kernel/transformations/empty.dart' as empty; |
16 import 'package:kernel/transformations/method_call.dart' as method_call; | 17 import 'package:kernel/transformations/method_call.dart' as method_call; |
17 import 'package:kernel/transformations/mixin_full_resolution.dart' as mix; | 18 import 'package:kernel/transformations/mixin_full_resolution.dart' as mix; |
18 import 'package:kernel/transformations/treeshaker.dart' as treeshaker; | 19 import 'package:kernel/transformations/treeshaker.dart' as treeshaker; |
19 import 'package:kernel/verifier.dart'; | 20 import 'package:kernel/verifier.dart'; |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 output = '${input.substring(0, input.lastIndexOf('.'))}.transformed.dill'; | 71 output = '${input.substring(0, input.lastIndexOf('.'))}.transformed.dill'; |
71 } | 72 } |
72 | 73 |
73 List<String> embedderEntryPointManifests = | 74 List<String> embedderEntryPointManifests = |
74 options['embedder-entry-points-manifest'] as List<String>; | 75 options['embedder-entry-points-manifest'] as List<String>; |
75 List<treeshaker.ProgramRoot> programRoots = | 76 List<treeshaker.ProgramRoot> programRoots = |
76 parseProgramRoots(embedderEntryPointManifests); | 77 parseProgramRoots(embedderEntryPointManifests); |
77 | 78 |
78 var program = loadProgramFromBinary(input); | 79 var program = loadProgramFromBinary(input); |
79 var coreTypes = new CoreTypes(program); | 80 var coreTypes = new CoreTypes(program); |
| 81 var hierarchy = new ClosedWorldClassHierarchy(program); |
80 switch (options['transformation']) { | 82 switch (options['transformation']) { |
81 case 'continuation': | 83 case 'continuation': |
82 program = cont.transformProgram(coreTypes, program); | 84 program = cont.transformProgram(coreTypes, program); |
83 break; | 85 break; |
84 case 'resolve-mixins': | 86 case 'resolve-mixins': |
85 mix.transformLibraries( | 87 mix.transformLibraries( |
86 new NoneTarget(null), coreTypes, program.libraries); | 88 new NoneTarget(null), coreTypes, hierarchy, program.libraries); |
87 break; | 89 break; |
88 case 'closures': | 90 case 'closures': |
89 program = closures.transformProgram(coreTypes, program); | 91 program = closures.transformProgram(coreTypes, program); |
90 break; | 92 break; |
91 case 'treeshake': | 93 case 'treeshake': |
92 program = treeshaker.transformProgram(coreTypes, program, | 94 program = treeshaker.transformProgram(coreTypes, hierarchy, program, |
93 programRoots: programRoots); | 95 programRoots: programRoots); |
94 break; | 96 break; |
95 case 'methodcall': | 97 case 'methodcall': |
96 program = method_call.transformProgram(coreTypes, program); | 98 program = method_call.transformProgram(coreTypes, hierarchy, program); |
97 break; | 99 break; |
98 case 'empty': | 100 case 'empty': |
99 program = empty.transformProgram(program); | 101 program = empty.transformProgram(program); |
100 break; | 102 break; |
101 default: | 103 default: |
102 throw 'Unknown transformation'; | 104 throw 'Unknown transformation'; |
103 } | 105 } |
104 | 106 |
105 verifyProgram(program); | 107 verifyProgram(program); |
106 | 108 |
107 if (format == 'text') { | 109 if (format == 'text') { |
108 writeProgramToText(program, path: output); | 110 writeProgramToText(program, path: output); |
109 } else { | 111 } else { |
110 assert(format == 'bin'); | 112 assert(format == 'bin'); |
111 await writeProgramToBinary(program, output); | 113 await writeProgramToBinary(program, output); |
112 } | 114 } |
113 | 115 |
114 if (verbose) { | 116 if (verbose) { |
115 writeLibraryToText(program.mainMethod.parent as Library); | 117 writeLibraryToText(program.mainMethod.parent as Library); |
116 } | 118 } |
117 | 119 |
118 return CompilerOutcome.Ok; | 120 return CompilerOutcome.Ok; |
119 } | 121 } |
OLD | NEW |