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

Side by Side Diff: pkg/compiler/lib/src/source_file_provider.dart

Issue 925943002: Refactor SourceFile, SourceFileProvider and SourceLocation. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Updated cf. comments. Created 5 years, 10 months 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « pkg/compiler/lib/src/io/source_map_builder.dart ('k') | pkg/compiler/lib/src/ssa/builder.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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;
(...skipping 12 matching lines...) Expand all
23 // +1 to have a 0 terminated list, see [Scanner]. 23 // +1 to have a 0 terminated list, see [Scanner].
24 var buffer = new Uint8List(length + 1); 24 var buffer = new Uint8List(length + 1);
25 var bytes = file.readIntoSync(buffer, 0, length); 25 var bytes = file.readIntoSync(buffer, 0, length);
26 file.closeSync(); 26 file.closeSync();
27 return buffer; 27 return buffer;
28 } 28 }
29 29
30 abstract class SourceFileProvider { 30 abstract class SourceFileProvider {
31 bool isWindows = (Platform.operatingSystem == 'windows'); 31 bool isWindows = (Platform.operatingSystem == 'windows');
32 Uri cwd = currentDirectory; 32 Uri cwd = currentDirectory;
33 Map<String, SourceFile> sourceFiles = <String, SourceFile>{}; 33 Map<Uri, SourceFile> sourceFiles = <Uri, SourceFile>{};
34 int dartCharactersRead = 0; 34 int dartCharactersRead = 0;
35 35
36 Future<String> readStringFromUri(Uri resourceUri) { 36 Future<String> readStringFromUri(Uri resourceUri) {
37 return readUtf8BytesFromUri(resourceUri).then(UTF8.decode); 37 return readUtf8BytesFromUri(resourceUri).then(UTF8.decode);
38 } 38 }
39 39
40 Future<List<int>> readUtf8BytesFromUri(Uri resourceUri) { 40 Future<List<int>> readUtf8BytesFromUri(Uri resourceUri) {
41 if (resourceUri.scheme == 'file') { 41 if (resourceUri.scheme == 'file') {
42 return _readFromFile(resourceUri); 42 return _readFromFile(resourceUri);
43 } else if (resourceUri.scheme == 'http' || resourceUri.scheme == 'https') { 43 } else if (resourceUri.scheme == 'http' || resourceUri.scheme == 'https') {
(...skipping 11 matching lines...) Expand all
55 } on FileSystemException catch (ex) { 55 } on FileSystemException catch (ex) {
56 OSError ose = ex.osError; 56 OSError ose = ex.osError;
57 String detail = (ose != null && ose.message != null) 57 String detail = (ose != null && ose.message != null)
58 ? ' (${ose.message})' 58 ? ' (${ose.message})'
59 : ''; 59 : '';
60 return new Future.error( 60 return new Future.error(
61 "Error reading '${relativize(cwd, resourceUri, isWindows)}'" 61 "Error reading '${relativize(cwd, resourceUri, isWindows)}'"
62 "$detail"); 62 "$detail");
63 } 63 }
64 dartCharactersRead += source.length; 64 dartCharactersRead += source.length;
65 sourceFiles[resourceUri.toString()] = 65 sourceFiles[resourceUri] =
66 new CachingUtf8BytesSourceFile(relativizeUri(resourceUri), source); 66 new CachingUtf8BytesSourceFile(
67 resourceUri, relativizeUri(resourceUri), source);
67 return new Future.value(source); 68 return new Future.value(source);
68 } 69 }
69 70
70 Future<List<int>> _readFromHttp(Uri resourceUri) { 71 Future<List<int>> _readFromHttp(Uri resourceUri) {
71 assert(resourceUri.scheme == 'http'); 72 assert(resourceUri.scheme == 'http');
72 HttpClient client = new HttpClient(); 73 HttpClient client = new HttpClient();
73 return client.getUrl(resourceUri) 74 return client.getUrl(resourceUri)
74 .then((HttpClientRequest request) => request.close()) 75 .then((HttpClientRequest request) => request.close())
75 .then((HttpClientResponse response) { 76 .then((HttpClientResponse response) {
76 if (response.statusCode != HttpStatus.OK) { 77 if (response.statusCode != HttpStatus.OK) {
77 String msg = 'Failure getting $resourceUri: ' 78 String msg = 'Failure getting $resourceUri: '
78 '${response.statusCode} ${response.reasonPhrase}'; 79 '${response.statusCode} ${response.reasonPhrase}';
79 throw msg; 80 throw msg;
80 } 81 }
81 return response.toList(); 82 return response.toList();
82 }) 83 })
83 .then((List<List<int>> splitContent) { 84 .then((List<List<int>> splitContent) {
84 int totalLength = splitContent.fold(0, (int old, List list) { 85 int totalLength = splitContent.fold(0, (int old, List list) {
85 return old + list.length; 86 return old + list.length;
86 }); 87 });
87 Uint8List result = new Uint8List(totalLength); 88 Uint8List result = new Uint8List(totalLength);
88 int offset = 0; 89 int offset = 0;
89 for (List<int> contentPart in splitContent) { 90 for (List<int> contentPart in splitContent) {
90 result.setRange( 91 result.setRange(
91 offset, offset + contentPart.length, contentPart); 92 offset, offset + contentPart.length, contentPart);
92 offset += contentPart.length; 93 offset += contentPart.length;
93 } 94 }
94 dartCharactersRead += totalLength; 95 dartCharactersRead += totalLength;
95 sourceFiles[resourceUri.toString()] = 96 sourceFiles[resourceUri] =
96 new CachingUtf8BytesSourceFile(resourceUri.toString(), result); 97 new CachingUtf8BytesSourceFile(
98 resourceUri, resourceUri.toString(), result);
97 return result; 99 return result;
98 }); 100 });
99 } 101 }
100 102
101 Future/*<List<int> | String>*/ call(Uri resourceUri); 103 Future/*<List<int> | String>*/ call(Uri resourceUri);
102 104
103 relativizeUri(Uri uri) => relativize(cwd, uri, isWindows); 105 relativizeUri(Uri uri) => relativize(cwd, uri, isWindows);
104 } 106 }
105 107
106 class CompilerSourceFileProvider extends SourceFileProvider { 108 class CompilerSourceFileProvider extends SourceFileProvider {
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 color = colors.green; 197 color = colors.green;
196 } else { 198 } else {
197 throw 'Unknown kind: $kind (${kind.ordinal})'; 199 throw 'Unknown kind: $kind (${kind.ordinal})';
198 } 200 }
199 if (!enableColors) { 201 if (!enableColors) {
200 color = (x) => x; 202 color = (x) => x;
201 } 203 }
202 if (uri == null) { 204 if (uri == null) {
203 print('${color(message)}'); 205 print('${color(message)}');
204 } else { 206 } else {
205 SourceFile file = provider.sourceFiles[uri.toString()]; 207 SourceFile file = provider.sourceFiles[uri];
206 if (file != null) { 208 if (file != null) {
207 print(file.getLocationMessage( 209 print(file.getLocationMessage(
208 color(message), begin, end, colorize: color)); 210 color(message), begin, end, colorize: color));
209 } else { 211 } else {
210 String position = end - begin > 0 ? '@$begin+${end - begin}' : ''; 212 String position = end - begin > 0 ? '@$begin+${end - begin}' : '';
211 print('${provider.relativizeUri(uri)}$position:\n' 213 print('${provider.relativizeUri(uri)}$position:\n'
212 '${color(message)}'); 214 '${color(message)}');
213 } 215 }
214 } 216 }
215 if (fatal && ++fatalCount >= throwOnErrorCount && throwOnError) { 217 if (fatal && ++fatalCount >= throwOnErrorCount && throwOnError) {
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 var onAdd, onClose; 325 var onAdd, onClose;
324 326
325 EventSinkWrapper(this.onAdd, this.onClose); 327 EventSinkWrapper(this.onAdd, this.onClose);
326 328
327 void add(String data) => onAdd(data); 329 void add(String data) => onAdd(data);
328 330
329 void addError(error, [StackTrace stackTrace]) => throw error; 331 void addError(error, [StackTrace stackTrace]) => throw error;
330 332
331 void close() => onClose(); 333 void close() => onClose();
332 } 334 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/io/source_map_builder.dart ('k') | pkg/compiler/lib/src/ssa/builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698