diff --git a/pkg/dev_compiler/bin/devc.dart b/pkg/dev_compiler/bin/devc.dart index 204824577275..df0f31831682 100755 --- a/pkg/dev_compiler/bin/devc.dart +++ b/pkg/dev_compiler/bin/devc.dart @@ -9,8 +9,10 @@ library dev_compiler.bin.devc; import 'dart:io'; -import 'package:dev_compiler/src/compiler.dart' show validateOptions, compile; +import 'package:dev_compiler/src/compiler.dart' + show validateOptions, compile, setupLogger; import 'package:dev_compiler/src/options.dart'; +import 'package:dev_compiler/src/server/server.dart' show DevServer; void _showUsageAndExit() { print('usage: dartdevc [] ...\n'); @@ -24,6 +26,12 @@ main(List args) async { var options = validateOptions(args); if (options == null || options.help) _showUsageAndExit(); - bool success = await compile(options); - exit(success ? 0 : 1); + setupLogger(options.logLevel, print); + + if (options.serverMode) { + new DevServer(options).start(); + } else { + var success = compile(options); + exit(success ? 0 : 1); + } } diff --git a/pkg/dev_compiler/bin/devrun.dart b/pkg/dev_compiler/bin/devrun.dart index 18e8456c5cc9..7e0bbabf96b9 100755 --- a/pkg/dev_compiler/bin/devrun.dart +++ b/pkg/dev_compiler/bin/devrun.dart @@ -39,7 +39,7 @@ main(List args) async { } var runner = new V8Runner(options); - if (!await compile(options)) exit(1); + if (!compile(options)) exit(1); var files = await listOutputFiles(options); var startStatement = 'dart_library.start("${getMainModuleName(options)}");'; diff --git a/pkg/dev_compiler/lib/src/compiler.dart b/pkg/dev_compiler/lib/src/compiler.dart index 926e87412b20..6a97b1bd5580 100644 --- a/pkg/dev_compiler/lib/src/compiler.dart +++ b/pkg/dev_compiler/lib/src/compiler.dart @@ -34,7 +34,6 @@ import 'codegen/html_codegen.dart' as html_codegen; import 'codegen/js_codegen.dart'; import 'info.dart' show AnalyzerMessage, CheckerResults, LibraryInfo, LibraryUnit; -import 'server/server.dart' show DevServer; import 'options.dart'; import 'report.dart'; @@ -64,18 +63,12 @@ CompilerOptions validateOptions(List args, {bool forceOutDir: false}) { return options; } -Future compile(CompilerOptions options) async { - setupLogger(options.logLevel, print); - - if (options.serverMode) { - return new DevServer(options).start(); - } else { - var context = createAnalysisContextWithSources( - options.strongOptions, options.sourceOptions); - var reporter = createErrorReporter(context, options); - // Note: run returns a bool, turned into a future since this function is async. - return new BatchCompiler(context, options, reporter: reporter).run(); - } +bool compile(CompilerOptions options) { + assert(!options.serverMode); + var context = createAnalysisContextWithSources( + options.strongOptions, options.sourceOptions); + var reporter = createErrorReporter(context, options); + return new BatchCompiler(context, options, reporter: reporter).run(); } class BatchCompiler extends AbstractCompiler { diff --git a/pkg/dev_compiler/lib/src/options.dart b/pkg/dev_compiler/lib/src/options.dart index da65115e0f2a..b99dd019a691 100644 --- a/pkg/dev_compiler/lib/src/options.dart +++ b/pkg/dev_compiler/lib/src/options.dart @@ -311,8 +311,7 @@ final ArgParser argParser = StrongModeOptions.addArguments(new ArgParser() /// works when running devc from it's sources or from a snapshot that is /// activated via `pub global activate`. String _computeRuntimeDir() { - var scriptUri = Platform.script; - var scriptPath = scriptUri.path; + var scriptPath = path.fromUri(Platform.script); var file = path.basename(scriptPath); var dir = path.dirname(scriptPath); var lastdir = path.basename(dir); diff --git a/pkg/dev_compiler/lib/src/server/server.dart b/pkg/dev_compiler/lib/src/server/server.dart index 13b9b244df75..6e30a9cd3d29 100644 --- a/pkg/dev_compiler/lib/src/server/server.dart +++ b/pkg/dev_compiler/lib/src/server/server.dart @@ -246,7 +246,7 @@ class DevServer { ? SourceResolverOptions.implicitHtmlFile : entryPath; - Future start() async { + Future start() async { // Create output directory if needed. shelf_static will fail otherwise. var out = new Directory(outDir); if (!await out.exists()) await out.create(recursive: true); @@ -257,8 +257,11 @@ class DevServer { defaultDocument: _entryPath)); await shelf.serve(handler, host, port); print('Serving $_entryPath at http://$host:$port/'); - CheckerResults results = compiler.run(); - return !results.failure; + // Give the compiler a head start. This is not needed for correctness, + // but will likely speed up the first load. Regardless of whether compile + // succeeds we should still start the server. + compiler.run(); + // Server has started so this future will complete. } shelf.Handler rebuildAndCache(shelf.Handler handler) => (request) { @@ -285,11 +288,11 @@ class DevServer { } UriResolver _createImplicitEntryResolver(String entryPath) { - var entry = path.absolute(SourceResolverOptions.implicitHtmlFile); - var src = path.absolute(entryPath); + var entry = path.toUri(path.absolute(SourceResolverOptions.implicitHtmlFile)); + var src = path.toUri(path.absolute(entryPath)); var provider = new MemoryResourceProvider(); provider.newFile( - entry, ''); + entry.path, ''); return new _ExistingSourceUriResolver(new ResourceUriResolver(provider)); } diff --git a/pkg/dev_compiler/tool/patch_sdk.dart b/pkg/dev_compiler/tool/patch_sdk.dart index 62c8f5a1603f..276d5fd53e94 100755 --- a/pkg/dev_compiler/tool/patch_sdk.dart +++ b/pkg/dev_compiler/tool/patch_sdk.dart @@ -15,8 +15,8 @@ import 'package:path/path.dart' as path; void main(List argv) { if (argv.length < 2) { - var self = path.relative(Platform.script.path); - var toolDir = path.relative(path.dirname(Platform.script.path)); + var self = path.relative(path.fromUri(Platform.script)); + var toolDir = path.relative(path.dirname(path.fromUri(Platform.script))); var inputExample = path.join(toolDir, 'input_sdk'); var outExample = path.relative(