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

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

Issue 2279833002: fix writing summaries (Closed)
Patch Set: 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 | « no previous file | no next file » | 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:io'; 5 import 'dart:io';
6 import 'package:analyzer/src/generated/source.dart' show Source; 6 import 'package:analyzer/src/generated/source.dart' show Source;
7 import 'package:analyzer/src/summary/package_bundle_reader.dart' 7 import 'package:analyzer/src/summary/package_bundle_reader.dart'
8 show InSummarySource; 8 show InSummarySource;
9 import 'package:args/args.dart' show ArgParser, ArgResults; 9 import 'package:args/args.dart' show ArgParser, ArgResults;
10 import 'package:args/command_runner.dart' show UsageException; 10 import 'package:args/command_runner.dart' show UsageException;
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 if (outPaths.isEmpty) { 96 if (outPaths.isEmpty) {
97 _usageException('Please include the output file location. For example:\n' 97 _usageException('Please include the output file location. For example:\n'
98 ' -o PATH/TO/OUTPUT_FILE.js'); 98 ' -o PATH/TO/OUTPUT_FILE.js');
99 } else if (outPaths.length != moduleFormats.length) { 99 } else if (outPaths.length != moduleFormats.length) {
100 _usageException('Number of output files (${outPaths.length}) must match ' 100 _usageException('Number of output files (${outPaths.length}) must match '
101 'number of module formats (${moduleFormats.length}).'); 101 'number of module formats (${moduleFormats.length}).');
102 } 102 }
103 103
104 // TODO(jmesserly): for now the first one is special. This will go away once 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. 105 // we've removed the "root" and "module name" variables.
106 var outPath = outPaths[0]; 106 var firstOutPath = outPaths[0];
107 107
108 var libraryRoot = argResults['library-root'] as String; 108 var libraryRoot = argResults['library-root'] as String;
109 libraryRoot ??= argResults['build-root'] as String; 109 libraryRoot ??= argResults['build-root'] as String;
110 if (libraryRoot != null) { 110 if (libraryRoot != null) {
111 libraryRoot = path.absolute(libraryRoot); 111 libraryRoot = path.absolute(libraryRoot);
112 } else { 112 } else {
113 libraryRoot = Directory.current.path; 113 libraryRoot = Directory.current.path;
114 } 114 }
115 var moduleRoot = argResults['module-root'] as String; 115 var moduleRoot = argResults['module-root'] as String;
116 String modulePath; 116 String modulePath;
117 if (moduleRoot != null) { 117 if (moduleRoot != null) {
118 moduleRoot = path.absolute(moduleRoot); 118 moduleRoot = path.absolute(moduleRoot);
119 if (!path.isWithin(moduleRoot, outPath)) { 119 if (!path.isWithin(moduleRoot, firstOutPath)) {
120 _usageException('Output file $outPath must be within the module root ' 120 _usageException('Output file $firstOutPath must be within the module '
121 'directory $moduleRoot'); 121 'root directory $moduleRoot');
122 } 122 }
123 modulePath = 123 modulePath =
124 path.withoutExtension(path.relative(outPath, from: moduleRoot)); 124 path.withoutExtension(path.relative(firstOutPath, from: moduleRoot));
125 } else { 125 } else {
126 moduleRoot = path.dirname(outPath); 126 moduleRoot = path.dirname(firstOutPath);
127 modulePath = path.basenameWithoutExtension(outPath); 127 modulePath = path.basenameWithoutExtension(firstOutPath);
128 } 128 }
129 129
130 var unit = new BuildUnit(modulePath, libraryRoot, argResults.rest, 130 var unit = new BuildUnit(modulePath, libraryRoot, argResults.rest,
131 (source) => _moduleForLibrary(moduleRoot, source, compilerOpts)); 131 (source) => _moduleForLibrary(moduleRoot, source, compilerOpts));
132 132
133 JSModuleFile module = compiler.compile(unit, compilerOpts); 133 var module = compiler.compile(unit, compilerOpts);
134 module.errors.forEach(printFn); 134 module.errors.forEach(printFn);
135 135
136 if (!module.isValid) throw new CompileErrorException(); 136 if (!module.isValid) throw new CompileErrorException();
137 137
138 // 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).
139 for (var i = 0; i < outPaths.length; i++) { 139 for (var i = 0; i < outPaths.length; i++) {
140 module.writeCodeSync(moduleFormats[i], outPaths[i]); 140 var outPath = outPaths[i];
141 module.writeCodeSync(moduleFormats[i], outPath);
141 if (module.summaryBytes != null) { 142 if (module.summaryBytes != null) {
142 var summaryPath = 143 var summaryPath =
143 path.withoutExtension(outPath) + '.${compilerOpts.summaryExtension}'; 144 path.withoutExtension(outPath) + '.${compilerOpts.summaryExtension}';
144 new File(summaryPath).writeAsBytesSync(module.summaryBytes); 145 new File(summaryPath).writeAsBytesSync(module.summaryBytes);
145 } 146 }
146 } 147 }
147
148 } 148 }
149 149
150 String _moduleForLibrary( 150 String _moduleForLibrary(
151 String moduleRoot, Source source, CompilerOptions compilerOpts) { 151 String moduleRoot, Source source, CompilerOptions compilerOpts) {
152 if (source is InSummarySource) { 152 if (source is InSummarySource) {
153 var summaryPath = source.summaryPath; 153 var summaryPath = source.summaryPath;
154 var ext = '.${compilerOpts.summaryExtension}'; 154 var ext = '.${compilerOpts.summaryExtension}';
155 if (path.isWithin(moduleRoot, summaryPath) && summaryPath.endsWith(ext)) { 155 if (path.isWithin(moduleRoot, summaryPath) && summaryPath.endsWith(ext)) {
156 var buildUnitPath = 156 var buildUnitPath =
157 summaryPath.substring(0, summaryPath.length - ext.length); 157 summaryPath.substring(0, summaryPath.length - ext.length);
(...skipping 16 matching lines...) Expand all
174 '\n\n${_argParser.usage}'; 174 '\n\n${_argParser.usage}';
175 175
176 void _usageException(String message) { 176 void _usageException(String message) {
177 throw new UsageException(message, _usageMessage); 177 throw new UsageException(message, _usageMessage);
178 } 178 }
179 179
180 /// Thrown when the input source code has errors. 180 /// Thrown when the input source code has errors.
181 class CompileErrorException implements Exception { 181 class CompileErrorException implements Exception {
182 toString() => '\nPlease fix all errors before compiling (warnings are okay).'; 182 toString() => '\nPlease fix all errors before compiling (warnings are okay).';
183 } 183 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698