| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 source_file_provider; | 5 library source_file_provider; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:convert'; | 8 import 'dart:convert'; |
| 9 import 'dart:io'; | 9 import 'dart:io'; |
| 10 import 'dart:math' as math; | 10 import 'dart:math' as math; |
| 11 | 11 |
| 12 import '../compiler.dart' as api show Diagnostic, DiagnosticHandler; | 12 import '../compiler.dart' as api show Diagnostic, DiagnosticHandler; |
| 13 import '../compiler_new.dart' as api show CompilerInput, CompilerDiagnostics; |
| 13 import 'dart2js.dart' show AbortLeg; | 14 import 'dart2js.dart' show AbortLeg; |
| 14 import 'colors.dart' as colors; | 15 import 'colors.dart' as colors; |
| 15 import 'io/source_file.dart'; | 16 import 'io/source_file.dart'; |
| 16 import 'filenames.dart'; | 17 import 'filenames.dart'; |
| 17 import 'util/uri_extras.dart'; | 18 import 'util/uri_extras.dart'; |
| 18 import 'dart:typed_data'; | 19 import 'dart:typed_data'; |
| 20 import '../compiler_new.dart'; |
| 19 | 21 |
| 20 List<int> readAll(String filename) { | 22 List<int> readAll(String filename) { |
| 21 var file = (new File(filename)).openSync(); | 23 var file = (new File(filename)).openSync(); |
| 22 var length = file.lengthSync(); | 24 var length = file.lengthSync(); |
| 23 // +1 to have a 0 terminated list, see [Scanner]. | 25 // +1 to have a 0 terminated list, see [Scanner]. |
| 24 var buffer = new Uint8List(length + 1); | 26 var buffer = new Uint8List(length + 1); |
| 25 file.readIntoSync(buffer, 0, length); | 27 file.readIntoSync(buffer, 0, length); |
| 26 file.closeSync(); | 28 file.closeSync(); |
| 27 return buffer; | 29 return buffer; |
| 28 } | 30 } |
| 29 | 31 |
| 30 abstract class SourceFileProvider { | 32 abstract class SourceFileProvider implements CompilerInput { |
| 31 bool isWindows = (Platform.operatingSystem == 'windows'); | 33 bool isWindows = (Platform.operatingSystem == 'windows'); |
| 32 Uri cwd = currentDirectory; | 34 Uri cwd = currentDirectory; |
| 33 Map<Uri, SourceFile> sourceFiles = <Uri, SourceFile>{}; | 35 Map<Uri, SourceFile> sourceFiles = <Uri, SourceFile>{}; |
| 34 int dartCharactersRead = 0; | 36 int dartCharactersRead = 0; |
| 35 | 37 |
| 36 Future<String> readStringFromUri(Uri resourceUri) { | 38 Future<String> readStringFromUri(Uri resourceUri) { |
| 37 return readUtf8BytesFromUri(resourceUri).then(UTF8.decode); | 39 return readUtf8BytesFromUri(resourceUri).then(UTF8.decode); |
| 38 } | 40 } |
| 39 | 41 |
| 40 Future<List<int>> readUtf8BytesFromUri(Uri resourceUri) { | 42 Future<List<int>> readUtf8BytesFromUri(Uri resourceUri) { |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 offset += contentPart.length; | 95 offset += contentPart.length; |
| 94 } | 96 } |
| 95 dartCharactersRead += totalLength; | 97 dartCharactersRead += totalLength; |
| 96 sourceFiles[resourceUri] = | 98 sourceFiles[resourceUri] = |
| 97 new CachingUtf8BytesSourceFile( | 99 new CachingUtf8BytesSourceFile( |
| 98 resourceUri, resourceUri.toString(), result); | 100 resourceUri, resourceUri.toString(), result); |
| 99 return result; | 101 return result; |
| 100 }); | 102 }); |
| 101 } | 103 } |
| 102 | 104 |
| 105 // TODO(johnniwinther): Remove this when no longer needed for the old compiler |
| 106 // API. |
| 103 Future/*<List<int> | String>*/ call(Uri resourceUri); | 107 Future/*<List<int> | String>*/ call(Uri resourceUri); |
| 104 | 108 |
| 105 relativizeUri(Uri uri) => relativize(cwd, uri, isWindows); | 109 relativizeUri(Uri uri) => relativize(cwd, uri, isWindows); |
| 106 | 110 |
| 107 SourceFile getSourceFile(Uri resourceUri) { | 111 SourceFile getSourceFile(Uri resourceUri) { |
| 108 return sourceFiles[resourceUri]; | 112 return sourceFiles[resourceUri]; |
| 109 } | 113 } |
| 110 } | 114 } |
| 111 | 115 |
| 112 class CompilerSourceFileProvider extends SourceFileProvider { | 116 class CompilerSourceFileProvider extends SourceFileProvider { |
| 113 Future<List<int>> call(Uri resourceUri) => readUtf8BytesFromUri(resourceUri); | 117 // TODO(johnniwinther): Remove this when no longer needed for the old compiler |
| 118 // API. |
| 119 Future<List<int>> call(Uri resourceUri) => readFromUri(resourceUri); |
| 120 |
| 121 @override |
| 122 Future readFromUri(Uri uri) => readUtf8BytesFromUri(uri); |
| 114 } | 123 } |
| 115 | 124 |
| 116 class FormattingDiagnosticHandler { | 125 class FormattingDiagnosticHandler implements CompilerDiagnostics { |
| 117 final SourceFileProvider provider; | 126 final SourceFileProvider provider; |
| 118 bool showWarnings = true; | 127 bool showWarnings = true; |
| 119 bool showHints = true; | 128 bool showHints = true; |
| 120 bool verbose = false; | 129 bool verbose = false; |
| 121 bool isAborting = false; | 130 bool isAborting = false; |
| 122 bool enableColors = false; | 131 bool enableColors = false; |
| 123 bool throwOnError = false; | 132 bool throwOnError = false; |
| 124 int throwOnErrorCount = 0; | 133 int throwOnErrorCount = 0; |
| 125 api.Diagnostic lastKind = null; | 134 api.Diagnostic lastKind = null; |
| 126 int fatalCount = 0; | 135 int fatalCount = 0; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 153 return 'Hint: $message'; | 162 return 'Hint: $message'; |
| 154 case api.Diagnostic.CRASH: | 163 case api.Diagnostic.CRASH: |
| 155 return 'Internal Error: $message'; | 164 return 'Internal Error: $message'; |
| 156 case api.Diagnostic.INFO: | 165 case api.Diagnostic.INFO: |
| 157 case api.Diagnostic.VERBOSE_INFO: | 166 case api.Diagnostic.VERBOSE_INFO: |
| 158 return 'Info: $message'; | 167 return 'Info: $message'; |
| 159 } | 168 } |
| 160 throw 'Unexpected diagnostic kind: $kind (${kind.ordinal})'; | 169 throw 'Unexpected diagnostic kind: $kind (${kind.ordinal})'; |
| 161 } | 170 } |
| 162 | 171 |
| 163 void diagnosticHandler(Uri uri, int begin, int end, String message, | 172 @override |
| 164 api.Diagnostic kind) { | 173 void report(Uri uri, int begin, int end, String message, |
| 174 api.Diagnostic kind) { |
| 165 // TODO(ahe): Remove this when source map is handled differently. | 175 // TODO(ahe): Remove this when source map is handled differently. |
| 166 if (identical(kind.name, 'source map')) return; | 176 if (identical(kind.name, 'source map')) return; |
| 167 | 177 |
| 168 if (isAborting) return; | 178 if (isAborting) return; |
| 169 isAborting = (kind == api.Diagnostic.CRASH); | 179 isAborting = (kind == api.Diagnostic.CRASH); |
| 170 | 180 |
| 171 bool fatal = (kind.ordinal & FATAL) != 0; | 181 bool fatal = (kind.ordinal & FATAL) != 0; |
| 172 bool isInfo = (kind.ordinal & INFO) != 0; | 182 bool isInfo = (kind.ordinal & INFO) != 0; |
| 173 if (isInfo && uri == null && kind != api.Diagnostic.INFO) { | 183 if (isInfo && uri == null && kind != api.Diagnostic.INFO) { |
| 174 info(message, kind); | 184 info(message, kind); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 print('${provider.relativizeUri(uri)}$position:\n' | 226 print('${provider.relativizeUri(uri)}$position:\n' |
| 217 '${color(message)}'); | 227 '${color(message)}'); |
| 218 } | 228 } |
| 219 } | 229 } |
| 220 if (fatal && ++fatalCount >= throwOnErrorCount && throwOnError) { | 230 if (fatal && ++fatalCount >= throwOnErrorCount && throwOnError) { |
| 221 isAborting = true; | 231 isAborting = true; |
| 222 throw new AbortLeg(message); | 232 throw new AbortLeg(message); |
| 223 } | 233 } |
| 224 } | 234 } |
| 225 | 235 |
| 236 // TODO(johnniwinther): Remove this when no longer needed for the old compiler |
| 237 // API. |
| 226 void call(Uri uri, int begin, int end, String message, api.Diagnostic kind) { | 238 void call(Uri uri, int begin, int end, String message, api.Diagnostic kind) { |
| 227 return diagnosticHandler(uri, begin, end, message, kind); | 239 return report(uri, begin, end, message, kind); |
| 228 } | 240 } |
| 229 } | 241 } |
| 230 | 242 |
| 231 typedef void MessageCallback(String message); | 243 typedef void MessageCallback(String message); |
| 232 | 244 |
| 233 class RandomAccessFileOutputProvider { | 245 class RandomAccessFileOutputProvider { |
| 234 final Uri out; | 246 final Uri out; |
| 235 final Uri sourceMapOut; | 247 final Uri sourceMapOut; |
| 236 final MessageCallback onInfo; | 248 final MessageCallback onInfo; |
| 237 final MessageCallback onFailure; | 249 final MessageCallback onFailure; |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 325 var onAdd, onClose; | 337 var onAdd, onClose; |
| 326 | 338 |
| 327 EventSinkWrapper(this.onAdd, this.onClose); | 339 EventSinkWrapper(this.onAdd, this.onClose); |
| 328 | 340 |
| 329 void add(String data) => onAdd(data); | 341 void add(String data) => onAdd(data); |
| 330 | 342 |
| 331 void addError(error, [StackTrace stackTrace]) => throw error; | 343 void addError(error, [StackTrace stackTrace]) => throw error; |
| 332 | 344 |
| 333 void close() => onClose(); | 345 void close() => onClose(); |
| 334 } | 346 } |
| OLD | NEW |