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

Side by Side Diff: pkg/front_end/lib/src/fasta/source/source_loader.dart

Issue 2709573005: fasta: Cache source bytes to ensure we use the same bytes for outline and bodies, Gives also around… (Closed)
Patch Set: Created 3 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
« no previous file with comments | « no previous file | no next file » | 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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 fasta.source_loader; 5 library fasta.source_loader;
6 6
7 import 'dart:async' show 7 import 'dart:async' show
8 Future; 8 Future;
9 9
10 import 'dart:io' show 10 import 'dart:io' show
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 import 'diet_parser.dart' show 64 import 'diet_parser.dart' show
65 DietParser; 65 DietParser;
66 66
67 import 'source_library_builder.dart' show 67 import 'source_library_builder.dart' show
68 SourceLibraryBuilder; 68 SourceLibraryBuilder;
69 69
70 import '../ast_kind.dart' show 70 import '../ast_kind.dart' show
71 AstKind; 71 AstKind;
72 72
73 class SourceLoader<L> extends Loader<L> { 73 class SourceLoader<L> extends Loader<L> {
74 final Map<Uri, List<int>> sourceBytes = <Uri, List<int>>{};
75
74 // Used when building directly to kernel. 76 // Used when building directly to kernel.
75 ClassHierarchy hierarchy; 77 ClassHierarchy hierarchy;
76 CoreTypes coreTypes; 78 CoreTypes coreTypes;
77 79
78 // Used when building analyzer ASTs. 80 // Used when building analyzer ASTs.
79 ElementStore elementStore; 81 ElementStore elementStore;
80 82
81 SourceLoader(TargetImplementation target) 83 SourceLoader(TargetImplementation target)
82 : super(target); 84 : super(target);
83 85
84 Future<Token> tokenize(SourceLibraryBuilder library, 86 Future<Token> tokenize(SourceLibraryBuilder library,
85 {bool suppressLexicalErrors: false}) async { 87 {bool suppressLexicalErrors: false}) async {
86 Uri uri = library.fileUri; 88 Uri uri = library.fileUri;
87 if (uri == null || uri.scheme != "file") { 89 if (uri == null || uri.scheme != "file") {
88 return inputError(library.uri, -1, "Not found: ${library.uri}."); 90 return inputError(library.uri, -1, "Not found: ${library.uri}.");
89 } 91 }
90 try { 92 try {
91 List<int> bytes = await readBytesFromFile(uri); 93 List<int> bytes = sourceBytes[uri];
94 if (bytes == null) {
95 bytes = sourceBytes[uri] = await readBytesFromFile(uri);
96 }
92 byteCount += bytes.length - 1; 97 byteCount += bytes.length - 1;
93 ScannerResult result = scan(bytes); 98 ScannerResult result = scan(bytes);
94 Token token = result.tokens; 99 Token token = result.tokens;
95 if (!suppressLexicalErrors) { 100 if (!suppressLexicalErrors) {
96 target.addLineStarts(library.fileUri, result.lineStarts); 101 target.addLineStarts(library.fileUri, result.lineStarts);
97 } 102 }
98 while (token is ErrorToken) { 103 while (token is ErrorToken) {
99 if (!suppressLexicalErrors) { 104 if (!suppressLexicalErrors) {
100 ErrorToken error = token; 105 ErrorToken error = token;
101 print(new InputError(uri, token.charOffset, error.assertionMessage) 106 print(new InputError(uri, token.charOffset, error.assertionMessage)
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 ticker.logMs("Built analyzer element model."); 369 ticker.logMs("Built analyzer element model.");
365 } 370 }
366 371
367 void computeHierarchy(Program program) { 372 void computeHierarchy(Program program) {
368 hierarchy = new ClassHierarchy(program); 373 hierarchy = new ClassHierarchy(program);
369 ticker.logMs("Computed class hierarchy"); 374 ticker.logMs("Computed class hierarchy");
370 coreTypes = new CoreTypes(program); 375 coreTypes = new CoreTypes(program);
371 ticker.logMs("Computed core types"); 376 ticker.logMs("Computed core types");
372 } 377 }
373 } 378 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698