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

Side by Side Diff: tests/compiler/dart2js/serialization/helper.dart

Issue 1970703002: Store ResolvedAst on AstElement (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments. Created 4 years, 7 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
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 dart2js.serialization_helper; 5 library dart2js.serialization_helper;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:io'; 8 import 'dart:io';
9 9
10 import 'package:compiler/src/commandline_options.dart'; 10 import 'package:compiler/src/commandline_options.dart';
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 .then((Script newScript) { 223 .then((Script newScript) {
224 script.file = newScript.file; 224 script.file = newScript.file;
225 _resolvedAstDeserializer.sourceFiles[script.resourceUri] = 225 _resolvedAstDeserializer.sourceFiles[script.resourceUri] =
226 newScript.file; 226 newScript.file;
227 }); 227 });
228 }).then((_) => library); 228 }).then((_) => library);
229 } 229 }
230 return new Future<LibraryElement>.value(library); 230 return new Future<LibraryElement>.value(library);
231 } 231 }
232 232
233 // TODO(johnniwinther): Remove the need for this method.
233 @override 234 @override
234 bool hasResolvedAst(ExecutableElement element) { 235 bool hasResolvedAst(ExecutableElement element) {
235 return _resolvedAstDeserializer.hasResolvedAst(element); 236 return getResolvedAst(element) != null;
236 } 237 }
237 238
238 @override 239 @override
239 ResolvedAst getResolvedAst(ExecutableElement element) { 240 ResolvedAst getResolvedAst(ExecutableElement element) {
240 return _resolvedAstDeserializer.getResolvedAst(element); 241 return _resolvedAstDeserializer.getResolvedAst(element);
241 } 242 }
242 243
243 @override 244 @override
244 bool hasResolutionImpact(Element element) { 245 bool hasResolutionImpact(Element element) {
245 if (element.isConstructor && 246 if (element.isConstructor &&
(...skipping 22 matching lines...) Expand all
268 }); 269 });
269 } 270 }
270 return _resolutionImpactDeserializer.impactMap[element]; 271 return _resolutionImpactDeserializer.impactMap[element];
271 } 272 }
272 273
273 @override 274 @override
274 WorldImpact computeWorldImpact(Element element) { 275 WorldImpact computeWorldImpact(Element element) {
275 ResolutionImpact resolutionImpact = getResolutionImpact(element); 276 ResolutionImpact resolutionImpact = getResolutionImpact(element);
276 assert(invariant(element, resolutionImpact != null, 277 assert(invariant(element, resolutionImpact != null,
277 message: 'No impact found for $element (${element.library})')); 278 message: 'No impact found for $element (${element.library})'));
279 if (element is ExecutableElement) {
280 getResolvedAst(element);
281 }
278 return _impactTransformer.transformResolutionImpact(resolutionImpact); 282 return _impactTransformer.transformResolutionImpact(resolutionImpact);
279 } 283 }
280 284
281 @override 285 @override
282 bool isDeserialized(Element element) { 286 bool isDeserialized(Element element) {
283 return deserializedLibraries.contains(element.library); 287 return deserializedLibraries.contains(element.library);
284 } 288 }
285 } 289 }
286 290
287 const String RESOLVED_AST_TAG = 'resolvedAst'; 291 const String RESOLVED_AST_TAG = 'resolvedAst';
(...skipping 19 matching lines...) Expand all
307 nativeDataSerializer).serialize(); 311 nativeDataSerializer).serialize();
308 } 312 }
309 } 313 }
310 } 314 }
311 315
312 class ResolvedAstDeserializerPlugin extends DeserializerPlugin { 316 class ResolvedAstDeserializerPlugin extends DeserializerPlugin {
313 final ParsingContext parsingContext; 317 final ParsingContext parsingContext;
314 final DeserializerPlugin nativeDataDeserializer; 318 final DeserializerPlugin nativeDataDeserializer;
315 final Map<Uri, SourceFile> sourceFiles = <Uri, SourceFile>{}; 319 final Map<Uri, SourceFile> sourceFiles = <Uri, SourceFile>{};
316 320
317 Map<ExecutableElement, ResolvedAst> _resolvedAstMap =
318 <ExecutableElement, ResolvedAst>{};
319 Map<MemberElement, ObjectDecoder> _decoderMap = 321 Map<MemberElement, ObjectDecoder> _decoderMap =
320 <MemberElement, ObjectDecoder>{}; 322 <MemberElement, ObjectDecoder>{};
321 Map<Uri, Token> beginTokenMap = <Uri, Token>{}; 323 Map<Uri, Token> beginTokenMap = <Uri, Token>{};
322 324
323 ResolvedAstDeserializerPlugin( 325 ResolvedAstDeserializerPlugin(
324 this.parsingContext, this.nativeDataDeserializer); 326 this.parsingContext, this.nativeDataDeserializer);
325 327
326 bool hasResolvedAst(ExecutableElement element) { 328 bool hasResolvedAst(ExecutableElement element) {
327 return _resolvedAstMap.containsKey(element) || 329 return getResolvedAst(element) != null;
328 _decoderMap.containsKey(element.memberContext);
329 } 330 }
330 331
331 ResolvedAst getResolvedAst(ExecutableElement element) { 332 ResolvedAst getResolvedAst(ExecutableElement element) {
332 ResolvedAst resolvedAst = _resolvedAstMap[element]; 333 if (element.hasResolvedAst) {
333 if (resolvedAst == null) { 334 return element.resolvedAst;
334 ObjectDecoder decoder = _decoderMap[element.memberContext];
335 if (decoder != null) {
336 ResolvedAstDeserializer.deserialize(
337 element.memberContext, decoder, parsingContext, findToken,
338 nativeDataDeserializer,
339 _resolvedAstMap);
340 _decoderMap.remove(element);
341 resolvedAst = _resolvedAstMap[element];
342 }
343 } 335 }
344 return resolvedAst; 336
337 ObjectDecoder decoder = _decoderMap[element.memberContext];
338 if (decoder != null) {
339 ResolvedAstDeserializer.deserialize(
340 element.memberContext, decoder, parsingContext, findToken,
341 nativeDataDeserializer);
342 _decoderMap.remove(element);
343 assert(invariant(element, element.hasResolvedAst,
344 message: "ResolvedAst not computed for $element."));
345 return element.resolvedAst;
346 }
347 return null;
345 } 348 }
346 349
347 Token findToken(Uri uri, int offset) { 350 Token findToken(Uri uri, int offset) {
348 Token beginToken = beginTokenMap.putIfAbsent(uri, () { 351 Token beginToken = beginTokenMap.putIfAbsent(uri, () {
349 SourceFile sourceFile = sourceFiles[uri]; 352 SourceFile sourceFile = sourceFiles[uri];
350 if (sourceFile == null) { 353 if (sourceFile == null) {
351 throw 'No source file found for $uri in:\n ' 354 throw 'No source file found for $uri in:\n '
352 '${sourceFiles.keys.join('\n ')}'; 355 '${sourceFiles.keys.join('\n ')}';
353 } 356 }
354 return new Scanner(sourceFile).tokenize(); 357 return new Scanner(sourceFile).tokenize();
355 }); 358 });
356 return ResolvedAstDeserializer.findTokenInStream(beginToken, offset); 359 return ResolvedAstDeserializer.findTokenInStream(beginToken, offset);
357 } 360 }
358 361
359 @override 362 @override
360 void onElement(Element element, ObjectDecoder getDecoder(String tag)) { 363 void onElement(Element element, ObjectDecoder getDecoder(String tag)) {
361 ObjectDecoder decoder = getDecoder(RESOLVED_AST_TAG); 364 ObjectDecoder decoder = getDecoder(RESOLVED_AST_TAG);
362 if (decoder != null) { 365 if (decoder != null) {
363 _decoderMap[element] = decoder; 366 _decoderMap[element] = decoder;
364 } 367 }
365 } 368 }
366 } 369 }
367 370
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/ssa/builder.dart ('k') | tests/compiler/dart2js/serialization/model_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698