| 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 |