OLD | NEW |
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 library fasta; | 5 library fasta; |
6 | 6 |
7 import 'dart:async' show Future; | 7 import 'dart:async' show Future; |
8 | 8 |
9 import 'dart:convert' show JSON; | 9 import 'dart:convert' show JSON; |
10 | 10 |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 } | 104 } |
105 | 105 |
106 class CompileTask { | 106 class CompileTask { |
107 final CompilerContext c; | 107 final CompilerContext c; |
108 final Ticker ticker; | 108 final Ticker ticker; |
109 | 109 |
110 CompileTask(this.c, this.ticker); | 110 CompileTask(this.c, this.ticker); |
111 | 111 |
112 KernelTarget createKernelTarget( | 112 KernelTarget createKernelTarget( |
113 DillTarget dillTarget, TranslateUri uriTranslator, bool strongMode) { | 113 DillTarget dillTarget, TranslateUri uriTranslator, bool strongMode) { |
114 return new KernelTarget( | 114 return new KernelTarget(dillTarget, uriTranslator, strongMode, |
115 dillTarget, uriTranslator, strongMode, c.uriToSource); | 115 c.options.targetDart2js, c.uriToSource); |
116 } | 116 } |
117 | 117 |
118 Future<KernelTarget> buildOutline([Uri output]) async { | 118 Future<KernelTarget> buildOutline([Uri output]) async { |
119 TranslateUri uriTranslator = | 119 TranslateUri uriTranslator = |
120 await TranslateUri.parse(c.options.sdk, c.options.packages); | 120 await TranslateUri.parse(c.options.sdk, c.options.packages); |
121 ticker.logMs("Read packages file"); | 121 ticker.logMs("Read packages file"); |
122 DillTarget dillTarget = new DillTarget(ticker, uriTranslator); | 122 DillTarget dillTarget = |
| 123 new DillTarget(ticker, uriTranslator, c.options.targetDart2js); |
123 KernelTarget kernelTarget = | 124 KernelTarget kernelTarget = |
124 createKernelTarget(dillTarget, uriTranslator, c.options.strongMode); | 125 createKernelTarget(dillTarget, uriTranslator, c.options.strongMode); |
125 if (c.options.strongMode) { | 126 if (c.options.strongMode) { |
126 print("Note: strong mode support is preliminary and may not work."); | 127 print("Note: strong mode support is preliminary and may not work."); |
127 } | 128 } |
128 Uri platform = c.options.platform; | 129 Uri platform = c.options.platform; |
129 if (platform != null) { | 130 if (platform != null) { |
130 dillTarget.read(platform); | 131 dillTarget.read(platform); |
131 } | 132 } |
132 String argument = c.options.arguments.first; | 133 String argument = c.options.arguments.first; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 return new CompilationResult.error( | 168 return new CompilationResult.error( |
168 formatUnexpected(patchedSdk, -1, "Patched sdk directory not found.")); | 169 formatUnexpected(patchedSdk, -1, "Patched sdk directory not found.")); |
169 } | 170 } |
170 | 171 |
171 Target target = getTarget("vm", new TargetFlags(strongMode: false)); | 172 Target target = getTarget("vm", new TargetFlags(strongMode: false)); |
172 | 173 |
173 Program program; | 174 Program program; |
174 try { | 175 try { |
175 TranslateUri uriTranslator = await TranslateUri.parse(null, packages); | 176 TranslateUri uriTranslator = await TranslateUri.parse(null, packages); |
176 final Ticker ticker = new Ticker(isVerbose: verbose); | 177 final Ticker ticker = new Ticker(isVerbose: verbose); |
177 final DillTarget dillTarget = new DillTarget(ticker, uriTranslator); | 178 final DillTarget dillTarget = |
| 179 new DillTarget(ticker, uriTranslator, false); |
178 dillTarget.read(patchedSdk.resolve('platform.dill')); | 180 dillTarget.read(patchedSdk.resolve('platform.dill')); |
179 final KernelTarget kernelTarget = | 181 final KernelTarget kernelTarget = |
180 new KernelTarget(dillTarget, uriTranslator, strongMode); | 182 new KernelTarget(dillTarget, uriTranslator, strongMode, false); |
181 kernelTarget.read(fileName); | 183 kernelTarget.read(fileName); |
182 await dillTarget.writeOutline(null); | 184 await dillTarget.writeOutline(null); |
183 program = await kernelTarget.writeOutline(null); | 185 program = await kernelTarget.writeOutline(null); |
184 program = await kernelTarget.writeProgram(null); | 186 program = await kernelTarget.writeProgram(null); |
185 if (kernelTarget.errors.isNotEmpty) { | 187 if (kernelTarget.errors.isNotEmpty) { |
186 return new CompilationResult.errors(kernelTarget.errors | 188 return new CompilationResult.errors(kernelTarget.errors |
187 .map((err) => err.toString()) | 189 .map((err) => err.toString()) |
188 .toList(growable: false)); | 190 .toList(growable: false)); |
189 } | 191 } |
190 } on InputError catch (e) { | 192 } on InputError catch (e) { |
(...skipping 11 matching lines...) Expand all Loading... |
202 // Write the program to a list of bytes and return it. | 204 // Write the program to a list of bytes and return it. |
203 var sink = new ByteSink(); | 205 var sink = new ByteSink(); |
204 new BinaryPrinter(sink).writeProgramFile(program); | 206 new BinaryPrinter(sink).writeProgramFile(program); |
205 return new CompilationResult.ok(sink.builder.takeBytes()); | 207 return new CompilationResult.ok(sink.builder.takeBytes()); |
206 } catch (e, s) { | 208 } catch (e, s) { |
207 return reportCrash(e, s, fileName); | 209 return reportCrash(e, s, fileName); |
208 } | 210 } |
209 } | 211 } |
210 | 212 |
211 Future compilePlatform(Uri patchedSdk, Uri output, | 213 Future compilePlatform(Uri patchedSdk, Uri output, |
212 {Uri packages, bool verbose: false}) async { | 214 {Uri packages, bool verbose: false, bool targetDart2js: false}) async { |
213 Ticker ticker = new Ticker(isVerbose: verbose); | 215 Ticker ticker = new Ticker(isVerbose: verbose); |
214 await CompilerCommandLine.withGlobalOptions("", [""], (CompilerContext c) { | 216 await CompilerCommandLine.withGlobalOptions("", [""], (CompilerContext c) { |
215 c.options.options["--packages"] = packages; | 217 c.options.options["--packages"] = packages; |
216 if (verbose) { | 218 if (verbose) { |
217 c.options.options["--verbose"] = true; | 219 c.options.options["--verbose"] = true; |
218 } | 220 } |
| 221 if (targetDart2js) { |
| 222 c.options.options["--target"] = "dart2js"; |
| 223 } |
219 return compilePlatformInternal(c, ticker, patchedSdk, output); | 224 return compilePlatformInternal(c, ticker, patchedSdk, output); |
220 }); | 225 }); |
221 } | 226 } |
222 | 227 |
223 Future writeDepsFile(Uri script, Uri depsFile, Uri output, | 228 Future writeDepsFile(Uri script, Uri depsFile, Uri output, |
224 {Uri packages, | 229 {Uri packages, |
225 Uri platform, | 230 Uri platform, |
226 Iterable<Uri> extraDependencies, | 231 Iterable<Uri> extraDependencies, |
227 bool verbose: false}) async { | 232 bool verbose: false, |
| 233 bool targetDart2js: false}) async { |
228 Ticker ticker = new Ticker(isVerbose: verbose); | 234 Ticker ticker = new Ticker(isVerbose: verbose); |
229 await CompilerCommandLine.withGlobalOptions("", [""], | 235 await CompilerCommandLine.withGlobalOptions("", [""], |
230 (CompilerContext c) async { | 236 (CompilerContext c) async { |
231 c.options.options["--packages"] = packages; | 237 c.options.options["--packages"] = packages; |
232 if (verbose) { | 238 if (verbose) { |
233 c.options.options["--verbose"] = true; | 239 c.options.options["--verbose"] = true; |
234 } | 240 } |
| 241 if (targetDart2js) { |
| 242 c.options.options["--target"] = "dart2js"; |
| 243 } |
235 | 244 |
236 TranslateUri uriTranslator = | 245 TranslateUri uriTranslator = |
237 await TranslateUri.parse(c.options.sdk, c.options.packages); | 246 await TranslateUri.parse(c.options.sdk, c.options.packages); |
238 ticker.logMs("Read packages file"); | 247 ticker.logMs("Read packages file"); |
239 DillTarget dillTarget = new DillTarget(ticker, uriTranslator) | 248 DillTarget dillTarget = new DillTarget(ticker, uriTranslator, targetDart2js) |
240 ..read(platform); | 249 ..read(platform); |
241 KernelTarget kernelTarget = | 250 KernelTarget kernelTarget = new KernelTarget( |
242 new KernelTarget(dillTarget, uriTranslator, false, c.uriToSource); | 251 dillTarget, uriTranslator, false, targetDart2js, c.uriToSource); |
243 | 252 |
244 kernelTarget.read(script); | 253 kernelTarget.read(script); |
245 await dillTarget.writeOutline(null); | 254 await dillTarget.writeOutline(null); |
246 await kernelTarget.loader.buildOutlines(); | 255 await kernelTarget.loader.buildOutlines(); |
247 await kernelTarget.writeDepsFile(output, depsFile, | 256 await kernelTarget.writeDepsFile(output, depsFile, |
248 extraDependencies: extraDependencies); | 257 extraDependencies: extraDependencies); |
249 }); | 258 }); |
250 } | 259 } |
251 | 260 |
252 // TODO(ahe): https://github.com/dart-lang/sdk/issues/28316 | 261 // TODO(ahe): https://github.com/dart-lang/sdk/issues/28316 |
253 class ByteSink implements Sink<List<int>> { | 262 class ByteSink implements Sink<List<int>> { |
254 final BytesBuilder builder = new BytesBuilder(); | 263 final BytesBuilder builder = new BytesBuilder(); |
255 | 264 |
256 void add(List<int> data) { | 265 void add(List<int> data) { |
257 builder.add(data); | 266 builder.add(data); |
258 } | 267 } |
259 | 268 |
260 void close() { | 269 void close() { |
261 // Nothing to do. | 270 // Nothing to do. |
262 } | 271 } |
263 } | 272 } |
OLD | NEW |