Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(731)

Side by Side Diff: lib/src/compiler/command.dart

Issue 2249233002: fix #626, add AMD module format and make it default (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: merged Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « lib/src/compiler/code_generator.dart ('k') | lib/src/compiler/compiler.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 import 'dart:convert' show JSON;
6 import 'dart:io'; 5 import 'dart:io';
7 import 'package:analyzer/src/generated/source.dart' show Source; 6 import 'package:analyzer/src/generated/source.dart' show Source;
8 import 'package:analyzer/src/summary/package_bundle_reader.dart' 7 import 'package:analyzer/src/summary/package_bundle_reader.dart'
9 show InSummarySource; 8 show InSummarySource;
10 import 'package:args/args.dart' show ArgParser, ArgResults; 9 import 'package:args/args.dart' show ArgParser, ArgResults;
11 import 'package:args/command_runner.dart' show UsageException; 10 import 'package:args/command_runner.dart' show UsageException;
12 import 'package:path/path.dart' as path; 11 import 'package:path/path.dart' as path;
13 12
13 import '../analyzer/context.dart' show AnalyzerOptions;
14 import 'compiler.dart' 14 import 'compiler.dart'
15 show BuildUnit, CompilerOptions, JSModuleFile, ModuleCompiler; 15 show BuildUnit, CompilerOptions, JSModuleFile, ModuleCompiler;
16 import '../analyzer/context.dart' show AnalyzerOptions; 16 import 'module_builder.dart';
17 17
18 final ArgParser _argParser = () { 18 final ArgParser _argParser = () {
19 var argParser = new ArgParser() 19 var argParser = new ArgParser()
20 ..addFlag('help', abbr: 'h', help: 'Display this message.') 20 ..addFlag('help', abbr: 'h', help: 'Display this message.')
21 ..addOption('out', abbr: 'o', help: 'Output file (required).') 21 ..addOption('out',
22 abbr: 'o', allowMultiple: true, help: 'Output file (required).')
22 ..addOption('module-root', 23 ..addOption('module-root',
23 help: 'Root module directory.\n' 24 help: 'Root module directory.\n'
24 'Generated module paths are relative to this root.') 25 'Generated module paths are relative to this root.')
25 ..addOption('library-root', 26 ..addOption('library-root',
26 help: 'Root of source files.\n' 27 help: 'Root of source files.\n'
27 'Generated library names are relative to this root.') 28 'Generated library names are relative to this root.')
28 ..addOption('build-root', 29 ..addOption('build-root',
29 help: 'Deprecated in favor of --library-root', hide: true); 30 help: 'Deprecated in favor of --library-root', hide: true);
31 addModuleFormatOptions(argParser, allowMultiple: true);
30 AnalyzerOptions.addArguments(argParser); 32 AnalyzerOptions.addArguments(argParser);
31 CompilerOptions.addArguments(argParser); 33 CompilerOptions.addArguments(argParser);
32 return argParser; 34 return argParser;
33 }(); 35 }();
34 36
35 /// Runs a single compile for dartdevc. 37 /// Runs a single compile for dartdevc.
36 /// 38 ///
37 /// This handles argument parsing, usage, error handling. 39 /// This handles argument parsing, usage, error handling.
38 /// See bin/dartdevc.dart for the actual entry point, which includes Bazel 40 /// See bin/dartdevc.dart for the actual entry point, which includes Bazel
39 /// worker support. 41 /// worker support.
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 } 83 }
82 84
83 void _compile(ArgResults argResults, void printFn(Object obj)) { 85 void _compile(ArgResults argResults, void printFn(Object obj)) {
84 var compiler = 86 var compiler =
85 new ModuleCompiler(new AnalyzerOptions.fromArguments(argResults)); 87 new ModuleCompiler(new AnalyzerOptions.fromArguments(argResults));
86 var compilerOpts = new CompilerOptions.fromArguments(argResults); 88 var compilerOpts = new CompilerOptions.fromArguments(argResults);
87 if (argResults['help']) { 89 if (argResults['help']) {
88 printFn(_usageMessage); 90 printFn(_usageMessage);
89 return; 91 return;
90 } 92 }
91 var outPath = argResults['out']; 93 var outPaths = argResults['out'] as List<String>;
94 var moduleFormats = parseModuleFormatOption(argResults);
92 95
93 if (outPath == null) { 96 if (outPaths.isEmpty) {
94 _usageException('Please include the output file location. For example:\n' 97 _usageException('Please include the output file location. For example:\n'
95 ' -o PATH/TO/OUTPUT_FILE.js'); 98 ' -o PATH/TO/OUTPUT_FILE.js');
99 } else if (outPaths.length != moduleFormats.length) {
100 _usageException('Number of output files (${outPaths.length}) must match '
101 'number of module formats (${moduleFormats.length}).');
96 } 102 }
97 103
104 // TODO(jmesserly): for now the first one is special. This will go away once
105 // we've removed the "root" and "module name" variables.
106 var outPath = outPaths[0];
107
98 var libraryRoot = argResults['library-root'] as String; 108 var libraryRoot = argResults['library-root'] as String;
99 libraryRoot ??= argResults['build-root'] as String; 109 libraryRoot ??= argResults['build-root'] as String;
100 if (libraryRoot != null) { 110 if (libraryRoot != null) {
101 libraryRoot = path.absolute(libraryRoot); 111 libraryRoot = path.absolute(libraryRoot);
102 } else { 112 } else {
103 libraryRoot = Directory.current.path; 113 libraryRoot = Directory.current.path;
104 } 114 }
105 var moduleRoot = argResults['module-root'] as String; 115 var moduleRoot = argResults['module-root'] as String;
106 String modulePath; 116 String modulePath;
107 if (moduleRoot != null) { 117 if (moduleRoot != null) {
(...skipping 11 matching lines...) Expand all
119 129
120 var unit = new BuildUnit(modulePath, libraryRoot, argResults.rest, 130 var unit = new BuildUnit(modulePath, libraryRoot, argResults.rest,
121 (source) => _moduleForLibrary(moduleRoot, source, compilerOpts)); 131 (source) => _moduleForLibrary(moduleRoot, source, compilerOpts));
122 132
123 JSModuleFile module = compiler.compile(unit, compilerOpts); 133 JSModuleFile module = compiler.compile(unit, compilerOpts);
124 module.errors.forEach(printFn); 134 module.errors.forEach(printFn);
125 135
126 if (!module.isValid) throw new CompileErrorException(); 136 if (!module.isValid) throw new CompileErrorException();
127 137
128 // Write JS file, as well as source map and summary (if requested). 138 // Write JS file, as well as source map and summary (if requested).
129 new File(outPath).writeAsStringSync(module.code); 139 for (var i = 0; i < outPaths.length; i++) {
130 if (module.sourceMap != null) { 140 module.writeCodeSync(moduleFormats[i], outPaths[i]);
131 var mapPath = outPath + '.map'; 141 if (module.summaryBytes != null) {
132 new File(mapPath) 142 var summaryPath =
133 .writeAsStringSync(JSON.encode(module.placeSourceMap(mapPath))); 143 path.withoutExtension(outPath) + '.${compilerOpts.summaryExtension}';
144 new File(summaryPath).writeAsBytesSync(module.summaryBytes);
145 }
134 } 146 }
135 if (module.summaryBytes != null) { 147
136 var summaryPath =
137 path.withoutExtension(outPath) + '.${compilerOpts.summaryExtension}';
138 new File(summaryPath).writeAsBytesSync(module.summaryBytes);
139 }
140 } 148 }
141 149
142 String _moduleForLibrary( 150 String _moduleForLibrary(
143 String moduleRoot, Source source, CompilerOptions compilerOpts) { 151 String moduleRoot, Source source, CompilerOptions compilerOpts) {
144 if (source is InSummarySource) { 152 if (source is InSummarySource) {
145 var summaryPath = source.summaryPath; 153 var summaryPath = source.summaryPath;
146 var ext = '.${compilerOpts.summaryExtension}'; 154 var ext = '.${compilerOpts.summaryExtension}';
147 if (path.isWithin(moduleRoot, summaryPath) && summaryPath.endsWith(ext)) { 155 if (path.isWithin(moduleRoot, summaryPath) && summaryPath.endsWith(ext)) {
148 var buildUnitPath = 156 var buildUnitPath =
149 summaryPath.substring(0, summaryPath.length - ext.length); 157 summaryPath.substring(0, summaryPath.length - ext.length);
(...skipping 16 matching lines...) Expand all
166 '\n\n${_argParser.usage}'; 174 '\n\n${_argParser.usage}';
167 175
168 void _usageException(String message) { 176 void _usageException(String message) {
169 throw new UsageException(message, _usageMessage); 177 throw new UsageException(message, _usageMessage);
170 } 178 }
171 179
172 /// Thrown when the input source code has errors. 180 /// Thrown when the input source code has errors.
173 class CompileErrorException implements Exception { 181 class CompileErrorException implements Exception {
174 toString() => '\nPlease fix all errors before compiling (warnings are okay).'; 182 toString() => '\nPlease fix all errors before compiling (warnings are okay).';
175 } 183 }
OLDNEW
« no previous file with comments | « lib/src/compiler/code_generator.dart ('k') | lib/src/compiler/compiler.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698