| OLD | NEW |
| 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, 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.kernel.env; | 5 library dart2js.kernel.env; |
| 6 | 6 |
| 7 import 'package:kernel/ast.dart' as ir; | 7 import 'package:kernel/ast.dart' as ir; |
| 8 import 'package:kernel/clone.dart'; | 8 import 'package:kernel/clone.dart'; |
| 9 import 'package:kernel/type_algebra.dart'; | 9 import 'package:kernel/type_algebra.dart'; |
| 10 | 10 |
| 11 import '../common.dart'; | 11 import '../common.dart'; |
| 12 import '../common/resolution.dart'; | 12 import '../common/resolution.dart'; |
| 13 import '../constants/constructors.dart'; | 13 import '../constants/constructors.dart'; |
| 14 import '../constants/expressions.dart'; | 14 import '../constants/expressions.dart'; |
| 15 import '../constants/values.dart'; | 15 import '../constants/values.dart'; |
| 16 import '../elements/entities.dart'; | 16 import '../elements/entities.dart'; |
| 17 import '../elements/types.dart'; | 17 import '../elements/types.dart'; |
| 18 import '../ordered_typeset.dart'; | 18 import '../ordered_typeset.dart'; |
| 19 import '../ssa/kernel_impact.dart'; | 19 import '../ssa/kernel_impact.dart'; |
| 20 import 'element_map.dart'; | 20 import 'element_map.dart'; |
| 21 import 'element_map_impl.dart'; | 21 import 'element_map_impl.dart'; |
| 22 import 'element_map_mixins.dart'; | 22 import 'element_map_mixins.dart'; |
| 23 | 23 |
| 24 /// Environment for fast lookup of program libraries. | 24 /// Environment for fast lookup of program libraries. |
| 25 class ProgramEnv { | 25 class ProgramEnv { |
| 26 final Set<ir.Program> programs = new Set<ir.Program>(); | 26 final Set<ir.Program> _programs = new Set<ir.Program>(); |
| 27 | 27 |
| 28 Map<Uri, LibraryEnv> _libraryMap; | 28 Map<Uri, LibraryEnv> _libraryMap; |
| 29 | 29 |
| 30 /// TODO(johnniwinther): Handle arbitrary load order if needed. | 30 /// TODO(johnniwinther): Handle arbitrary load order if needed. |
| 31 ir.Member get mainMethod => programs.first?.mainMethod; | 31 ir.Member get mainMethod => _programs.first?.mainMethod; |
| 32 | 32 |
| 33 void addProgram(ir.Program program) { | 33 void addProgram(ir.Program program) { |
| 34 if (programs.add(program)) { | 34 if (_programs.add(program)) { |
| 35 if (_libraryMap != null) { | 35 if (_libraryMap != null) { |
| 36 _addLibraries(program); | 36 _addLibraries(program); |
| 37 } | 37 } |
| 38 } | 38 } |
| 39 } | 39 } |
| 40 | 40 |
| 41 void _addLibraries(ir.Program program) { | 41 void _addLibraries(ir.Program program) { |
| 42 for (ir.Library library in program.libraries) { | 42 for (ir.Library library in program.libraries) { |
| 43 _libraryMap[library.importUri] = new LibraryEnv(library); | 43 _libraryMap[library.importUri] = new LibraryEnv(library); |
| 44 } | 44 } |
| 45 } | 45 } |
| 46 | 46 |
| 47 void _ensureLibraryMap() { | 47 void _ensureLibraryMap() { |
| 48 if (_libraryMap == null) { | 48 if (_libraryMap == null) { |
| 49 _libraryMap = <Uri, LibraryEnv>{}; | 49 _libraryMap = <Uri, LibraryEnv>{}; |
| 50 for (ir.Program program in programs) { | 50 for (ir.Program program in _programs) { |
| 51 _addLibraries(program); | 51 _addLibraries(program); |
| 52 } | 52 } |
| 53 } | 53 } |
| 54 } | 54 } |
| 55 | 55 |
| 56 /// Return the [LibraryEnv] for the library with the canonical [uri]. | 56 /// Return the [LibraryEnv] for the library with the canonical [uri]. |
| 57 LibraryEnv lookupLibrary(Uri uri) { | 57 LibraryEnv lookupLibrary(Uri uri) { |
| 58 _ensureLibraryMap(); | 58 _ensureLibraryMap(); |
| 59 return _libraryMap[uri]; | 59 return _libraryMap[uri]; |
| 60 } | 60 } |
| (...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 400 } else { | 400 } else { |
| 401 throw new SpannableAssertionFailure( | 401 throw new SpannableAssertionFailure( |
| 402 field, | 402 field, |
| 403 "Unexpected field $field in " | 403 "Unexpected field $field in " |
| 404 "KernelWorldBuilder._getConstructorConstant"); | 404 "KernelWorldBuilder._getConstructorConstant"); |
| 405 } | 405 } |
| 406 } | 406 } |
| 407 return _constant; | 407 return _constant; |
| 408 } | 408 } |
| 409 } | 409 } |
| OLD | NEW |