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/core_types.dart'; |
10 import 'package:kernel/kernel.dart'; | 11 import 'package:kernel/kernel.dart'; |
11 import 'package:kernel/transformations/closure_conversion.dart' as closures; | 12 import 'package:kernel/transformations/closure_conversion.dart' as closures; |
12 import 'package:kernel/transformations/continuation.dart' as cont; | 13 import 'package:kernel/transformations/continuation.dart' as cont; |
13 import 'package:kernel/transformations/empty.dart' as empty; | 14 import 'package:kernel/transformations/empty.dart' as empty; |
14 import 'package:kernel/transformations/method_call.dart' as method_call; | 15 import 'package:kernel/transformations/method_call.dart' as method_call; |
15 import 'package:kernel/transformations/mixin_full_resolution.dart' as mix; | 16 import 'package:kernel/transformations/mixin_full_resolution.dart' as mix; |
16 import 'package:kernel/transformations/treeshaker.dart' as treeshaker; | 17 import 'package:kernel/transformations/treeshaker.dart' as treeshaker; |
17 import 'package:kernel/verifier.dart'; | 18 import 'package:kernel/verifier.dart'; |
18 | 19 |
19 import 'batch_util.dart'; | 20 import 'batch_util.dart'; |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 if (output == null) { | 68 if (output == null) { |
68 output = '${input.substring(0, input.lastIndexOf('.'))}.transformed.dill'; | 69 output = '${input.substring(0, input.lastIndexOf('.'))}.transformed.dill'; |
69 } | 70 } |
70 | 71 |
71 List<String> embedderEntryPointManifests = | 72 List<String> embedderEntryPointManifests = |
72 options['embedder-entry-points-manifest'] as List<String>; | 73 options['embedder-entry-points-manifest'] as List<String>; |
73 List<treeshaker.ProgramRoot> programRoots = | 74 List<treeshaker.ProgramRoot> programRoots = |
74 parseProgramRoots(embedderEntryPointManifests); | 75 parseProgramRoots(embedderEntryPointManifests); |
75 | 76 |
76 var program = loadProgramFromBinary(input); | 77 var program = loadProgramFromBinary(input); |
| 78 var coreTypes = new CoreTypes(program); |
77 switch (options['transformation']) { | 79 switch (options['transformation']) { |
78 case 'continuation': | 80 case 'continuation': |
79 program = cont.transformProgram(program); | 81 program = cont.transformProgram(coreTypes, program); |
80 break; | 82 break; |
81 case 'resolve-mixins': | 83 case 'resolve-mixins': |
82 program = mix.transformProgram(program); | 84 program = mix.transformProgram(coreTypes, program); |
83 break; | 85 break; |
84 case 'closures': | 86 case 'closures': |
85 program = closures.transformProgram(program); | 87 program = closures.transformProgram(coreTypes, program); |
86 break; | 88 break; |
87 case 'treeshake': | 89 case 'treeshake': |
88 program = | 90 program = treeshaker.transformProgram(coreTypes, program, |
89 treeshaker.transformProgram(program, programRoots: programRoots); | 91 programRoots: programRoots); |
90 break; | 92 break; |
91 case 'methodcall': | 93 case 'methodcall': |
92 program = method_call.transformProgram(program); | 94 program = method_call.transformProgram(coreTypes, program); |
93 break; | 95 break; |
94 case 'empty': | 96 case 'empty': |
95 program = empty.transformProgram(program); | 97 program = empty.transformProgram(program); |
96 break; | 98 break; |
97 default: | 99 default: |
98 throw 'Unknown transformation'; | 100 throw 'Unknown transformation'; |
99 } | 101 } |
100 | 102 |
101 verifyProgram(program); | 103 verifyProgram(program); |
102 | 104 |
103 if (format == 'text') { | 105 if (format == 'text') { |
104 writeProgramToText(program, path: output); | 106 writeProgramToText(program, path: output); |
105 } else { | 107 } else { |
106 assert(format == 'bin'); | 108 assert(format == 'bin'); |
107 await writeProgramToBinary(program, output); | 109 await writeProgramToBinary(program, output); |
108 } | 110 } |
109 | 111 |
110 if (verbose) { | 112 if (verbose) { |
111 writeLibraryToText(program.mainMethod.parent as Library); | 113 writeLibraryToText(program.mainMethod.parent as Library); |
112 } | 114 } |
113 | 115 |
114 return CompilerOutcome.Ok; | 116 return CompilerOutcome.Ok; |
115 } | 117 } |
OLD | NEW |