OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 leg_apiimpl; | 5 library leg_apiimpl; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 | 8 |
9 import '../compiler.dart' as api; | 9 import '../compiler.dart' as api; |
10 import 'dart2jslib.dart' as leg; | 10 import 'dart2jslib.dart' as leg; |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
213 withCurrentElement(element, () { | 213 withCurrentElement(element, () { |
214 reportError( | 214 reportError( |
215 node, | 215 node, |
216 leg.MessageKind.READ_SCRIPT_ERROR, | 216 leg.MessageKind.READ_SCRIPT_ERROR, |
217 {'uri': readableUri, 'exception': exception}); | 217 {'uri': readableUri, 'exception': exception}); |
218 }); | 218 }); |
219 } | 219 } |
220 } | 220 } |
221 | 221 |
222 Uri resourceUri = translateUri(node, readableUri); | 222 Uri resourceUri = translateUri(node, readableUri); |
223 String resourceUriString = '$resourceUri'; | |
224 if (resourceUri.scheme == 'dart-ext') { | 223 if (resourceUri.scheme == 'dart-ext') { |
225 if (!allowNativeExtensions) { | 224 if (!allowNativeExtensions) { |
226 withCurrentElement(element, () { | 225 withCurrentElement(element, () { |
227 reportError(node, leg.MessageKind.DART_EXT_NOT_SUPPORTED); | 226 reportError(node, leg.MessageKind.DART_EXT_NOT_SUPPORTED); |
228 }); | 227 }); |
229 } | 228 } |
230 return synthesizeScript(node, readableUri); | 229 return synthesizeScript(node, readableUri); |
231 } | 230 } |
232 | 231 |
233 // TODO(johnniwinther): Wrap the result from [provider] in a specialized | 232 // TODO(johnniwinther): Wrap the result from [provider] in a specialized |
234 // [Future] to ensure that we never execute an asynchronous action without | 233 // [Future] to ensure that we never execute an asynchronous action without |
235 // setting up the current element of the compiler. | 234 // setting up the current element of the compiler. |
236 return new Future.sync(() => callUserProvider(resourceUri)).then((data) { | 235 return new Future.sync(() => callUserProvider(resourceUri)).then((data) { |
237 SourceFile sourceFile; | 236 SourceFile sourceFile; |
238 if (data is List<int>) { | 237 if (data is List<int>) { |
239 sourceFile = new Utf8BytesSourceFile(resourceUriString, data); | 238 sourceFile = new Utf8BytesSourceFile(resourceUri, data); |
240 } else if (data is String) { | 239 } else if (data is String) { |
241 sourceFile = new StringSourceFile(resourceUriString, data); | 240 sourceFile = new StringSourceFile.fromUri(resourceUri, data); |
242 } else { | 241 } else { |
243 String message = "Expected a 'String' or a 'List<int>' from the input " | 242 String message = "Expected a 'String' or a 'List<int>' from the input " |
244 "provider, but got: ${Error.safeToString(data)}."; | 243 "provider, but got: ${Error.safeToString(data)}."; |
245 reportReadError(message); | 244 reportReadError(message); |
246 } | 245 } |
247 // We use [readableUri] as the URI for the script since need to preserve | 246 // We use [readableUri] as the URI for the script since need to preserve |
248 // the scheme in the script because [Script.uri] is used for resolving | 247 // the scheme in the script because [Script.uri] is used for resolving |
249 // relative URIs mentioned in the script. See the comment on | 248 // relative URIs mentioned in the script. See the comment on |
250 // [LibraryLoader] for more details. | 249 // [LibraryLoader] for more details. |
251 return new leg.Script(readableUri, resourceUri, sourceFile); | 250 return new leg.Script(readableUri, resourceUri, sourceFile); |
252 }).catchError((error) { | 251 }).catchError((error) { |
253 reportReadError(error); | 252 reportReadError(error); |
254 return synthesizeScript(node, readableUri); | 253 return synthesizeScript(node, readableUri); |
255 }); | 254 }); |
256 } | 255 } |
257 | 256 |
258 Future<leg.Script> synthesizeScript(leg.Spannable node, Uri readableUri) { | 257 Future<leg.Script> synthesizeScript(leg.Spannable node, Uri readableUri) { |
259 Uri resourceUri = translateUri(node, readableUri); | 258 Uri resourceUri = translateUri(node, readableUri); |
260 return new Future.value( | 259 return new Future.value( |
261 new leg.Script( | 260 new leg.Script( |
262 readableUri, resourceUri, | 261 readableUri, resourceUri, |
263 new StringSourceFile( | 262 new StringSourceFile.fromUri( |
264 '$resourceUri', | 263 resourceUri, |
265 "// Synthetic source file generated for '$readableUri'."), | 264 "// Synthetic source file generated for '$readableUri'."), |
266 isSynthesized: true)); | 265 isSynthesized: true)); |
267 } | 266 } |
268 | 267 |
269 /** | 268 /** |
270 * Translates a readable URI into a resource URI. | 269 * Translates a readable URI into a resource URI. |
271 * | 270 * |
272 * See [LibraryLoader] for terminology on URIs. | 271 * See [LibraryLoader] for terminology on URIs. |
273 */ | 272 */ |
274 Uri translateUri(leg.Spannable node, Uri readableUri) { | 273 Uri translateUri(leg.Spannable node, Uri readableUri) { |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
400 print('$message: ${tryToString(exception)}'); | 399 print('$message: ${tryToString(exception)}'); |
401 print(tryToString(stackTrace)); | 400 print(tryToString(stackTrace)); |
402 } | 401 } |
403 | 402 |
404 fromEnvironment(String name) => environment[name]; | 403 fromEnvironment(String name) => environment[name]; |
405 | 404 |
406 LibraryInfo lookupLibraryInfo(String libraryName) { | 405 LibraryInfo lookupLibraryInfo(String libraryName) { |
407 return library_info.LIBRARIES[libraryName]; | 406 return library_info.LIBRARIES[libraryName]; |
408 } | 407 } |
409 } | 408 } |
OLD | NEW |