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

Unified Diff: sdk/lib/_internal/pub/lib/src/dart.dart

Issue 105673003: Output all files generated by dart2js, not just the main one. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years 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 side-by-side diff with in-line comments
Download patch
Index: sdk/lib/_internal/pub/lib/src/dart.dart
diff --git a/sdk/lib/_internal/pub/lib/src/dart.dart b/sdk/lib/_internal/pub/lib/src/dart.dart
index 7c5e0fa913142f9c33fa6bd320010b9f8fd539bd..f9e5b18c64710f0fa33ce744f26035470189c45c 100644
--- a/sdk/lib/_internal/pub/lib/src/dart.dart
+++ b/sdk/lib/_internal/pub/lib/src/dart.dart
@@ -21,21 +21,38 @@ import 'io.dart';
import 'sdk.dart' as sdk;
import 'utils.dart';
-/// Returns [entrypoint] compiled to JavaScript (or to Dart if [toDart] is
-/// true).
+/// Interface to communicate with dart2js.
+///
+/// This is basically an amalgamation of dart2js's
+/// [compiler.CompilerInputProvider], [compiler.CompilerOutputProvider], and
+/// [compiler.DiagnosticHandler] function types so that we can provide them
+/// as a single unit.
+abstract class CompilerProvider {
+ /// Given [uri], responds with a future that completes to the contents of
+ /// the input file at that URI.
+ ///
+ /// The future can complete to a string or a list of bytes.
+ Future/*<String | List<int>>*/ provideInput(Uri uri);
+
+ /// Reports a diagnostic message from dart2js to the user.
+ void handleDiagnostic(Uri uri, int begin, int end, String message,
+ compiler.Diagnostic kind);
+
+ /// Given a [name] (which will be "" for the entrypoint) and a file extension,
+ /// returns an [EventSink] that dart2js can write to to emit an output file.
+ EventSink<String> provideOutput(String name, String extension);
+}
+
+/// Compiles [entrypoint] to JavaScript (or to Dart if [toDart] is true) as
+/// well as any ancillary outputs dart2js creates.
+///
+/// Uses [provider] to communcate between dart2js and the caller. Returns a
+/// future that completes when compilation is done.
///
/// By default, the package root is assumed to be adjacent to [entrypoint], but
/// if [packageRoot] is passed that will be used instead.
-///
-/// If [inputProvider] and [diagnosticHandler] are omitted, uses a default
-/// [compiler.CompilerInputProvider] that loads directly from the filesystem.
-/// If either is provided, both must be.
-Future<String> compile(String entrypoint, {
- String packageRoot,
- bool toDart: false,
- bool minify: true,
- compiler.CompilerInputProvider inputProvider,
- compiler.DiagnosticHandler diagnosticHandler}) {
+Future compile(String entrypoint, CompilerProvider provider, {
+ String packageRoot, bool toDart: false, bool minify: true}) {
return new Future.sync(() {
var options = <String>['--categories=Client,Server'];
if (toDart) options.add('--output-type=dart');
@@ -45,27 +62,14 @@ Future<String> compile(String entrypoint, {
packageRoot = path.join(path.dirname(entrypoint), 'packages');
}
- // Must either pass both of these or neither.
- if ((inputProvider == null) != (diagnosticHandler == null)) {
- throw new ArgumentError("If either inputProvider or diagnosticHandler "
- "is passed, then both must be.");
- }
-
- if (inputProvider == null) {
- var provider = new CompilerSourceFileProvider();
- inputProvider = provider.readStringFromUri;
- diagnosticHandler = new FormattingDiagnosticHandler(provider)
- .diagnosticHandler;
- }
-
return compiler.compile(
path.toUri(entrypoint),
path.toUri(appendSlash(_libPath)),
path.toUri(appendSlash(packageRoot)),
- inputProvider, diagnosticHandler, options).then((js) {
- if (js == null) throw new CompilerException(entrypoint);
- return js;
- });
+ provider.provideInput,
+ provider.handleDiagnostic,
+ options,
+ provider.provideOutput);
});
}
@@ -182,9 +186,3 @@ class CrossIsolateException implements Exception {
String toString() => "$message\n$stackTrace";
}
-
-/// An exception thrown when dart2js generates compiler errors.
-class CompilerException extends ApplicationException {
- CompilerException(String entrypoint)
- : super('Failed to compile "$entrypoint".');
-}

Powered by Google App Engine
This is Rietveld 408576698