| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 /// Analysis to determine how to generate code for `LookupMap`s. | 5 /// Analysis to determine how to generate code for `LookupMap`s. |
| 6 library compiler.src.js_backend.lookup_map_analysis; | 6 library compiler.src.js_backend.lookup_map_analysis; |
| 7 | 7 |
| 8 import 'package:pub_semver/pub_semver.dart'; | 8 import 'package:pub_semver/pub_semver.dart'; |
| 9 | 9 |
| 10 import '../common.dart'; | 10 import '../common.dart'; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 import 'backend_helpers.dart'; | 30 import 'backend_helpers.dart'; |
| 31 | 31 |
| 32 /// Lookup map handling for resolution. | 32 /// Lookup map handling for resolution. |
| 33 /// | 33 /// |
| 34 /// This analysis checks for the import of `package:lookup_map/lookup_map.dart`, | 34 /// This analysis checks for the import of `package:lookup_map/lookup_map.dart`, |
| 35 /// and if found, read the `_version` variable from it. | 35 /// and if found, read the `_version` variable from it. |
| 36 /// | 36 /// |
| 37 /// In [LookupMapAnalysis] the value of `_version` is checked to ensure that it | 37 /// In [LookupMapAnalysis] the value of `_version` is checked to ensure that it |
| 38 /// is valid to perform the optimization of `LookupMap`. The actual optimization | 38 /// is valid to perform the optimization of `LookupMap`. The actual optimization |
| 39 /// is performed by [LookupMapAnalysis]. | 39 /// is performed by [LookupMapAnalysis]. |
| 40 class LookupMapLibraryAccess { | 40 class LookupMapResolutionAnalysis { |
| 41 static final Uri PACKAGE_LOOKUP_MAP = | 41 static final Uri PACKAGE_LOOKUP_MAP = |
| 42 new Uri(scheme: 'package', path: 'lookup_map/lookup_map.dart'); | 42 new Uri(scheme: 'package', path: 'lookup_map/lookup_map.dart'); |
| 43 | 43 |
| 44 /// Reference the diagnostic reporting system for logging and reporting issues | 44 /// Reference the diagnostic reporting system for logging and reporting issues |
| 45 /// to the end-user. | 45 /// to the end-user. |
| 46 final DiagnosticReporter _reporter; | 46 final DiagnosticReporter _reporter; |
| 47 | 47 |
| 48 final ElementEnvironment _elementEnvironment; | 48 final ElementEnvironment _elementEnvironment; |
| 49 | 49 |
| 50 /// The resolved [FieldEntity] associated with the top-level `_version`. | 50 /// The resolved [FieldEntity] associated with the top-level `_version`. |
| 51 FieldEntity lookupMapVersionVariable; | 51 FieldEntity lookupMapVersionVariable; |
| 52 | 52 |
| 53 /// The resolved [LibraryEntity] associated with | 53 /// The resolved [LibraryEntity] associated with |
| 54 /// `package:lookup_map/lookup_map.dart`. | 54 /// `package:lookup_map/lookup_map.dart`. |
| 55 LibraryEntity lookupMapLibrary; | 55 LibraryEntity lookupMapLibrary; |
| 56 | 56 |
| 57 final StagedWorldImpactBuilder _impactBuilder = | 57 final StagedWorldImpactBuilder _impactBuilder = |
| 58 new StagedWorldImpactBuilder(); | 58 new StagedWorldImpactBuilder(); |
| 59 | 59 |
| 60 LookupMapLibraryAccess(this._reporter, this._elementEnvironment); | 60 LookupMapResolutionAnalysis(this._reporter, this._elementEnvironment); |
| 61 | 61 |
| 62 /// Compute the [WorldImpact] for the constants registered since last flush. | 62 /// Compute the [WorldImpact] for the constants registered since last flush. |
| 63 WorldImpact flush() { | 63 WorldImpact flush() { |
| 64 return _impactBuilder.flush(); | 64 return _impactBuilder.flush(); |
| 65 } | 65 } |
| 66 | 66 |
| 67 /// Initializes this analysis by providing the resolved library. This is | 67 /// Initializes this analysis by providing the resolved library. This is |
| 68 /// invoked during resolution when the `lookup_map` library is discovered. | 68 /// invoked during resolution when the `lookup_map` library is discovered. |
| 69 void init(LibraryEntity library) { | 69 void init(LibraryEntity library) { |
| 70 lookupMapLibrary = library; | 70 lookupMapLibrary = library; |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 const LookupMapAnalysis._(); | 124 const LookupMapAnalysis._(); |
| 125 | 125 |
| 126 factory LookupMapAnalysis( | 126 factory LookupMapAnalysis( |
| 127 DiagnosticReporter reporter, | 127 DiagnosticReporter reporter, |
| 128 ConstantSystem constantSystem, | 128 ConstantSystem constantSystem, |
| 129 ConstantEnvironment constants, | 129 ConstantEnvironment constants, |
| 130 ElementEnvironment elementEnvironment, | 130 ElementEnvironment elementEnvironment, |
| 131 CommonElements commonElements, | 131 CommonElements commonElements, |
| 132 BackendHelpers helpers, | 132 BackendHelpers helpers, |
| 133 BackendClasses backendClasses, | 133 BackendClasses backendClasses, |
| 134 LookupMapLibraryAccess analysis) { | 134 LookupMapResolutionAnalysis analysis) { |
| 135 /// Checks if the version of lookup_map is valid, and if so, enable this | 135 /// Checks if the version of lookup_map is valid, and if so, enable this |
| 136 /// analysis during codegen. | 136 /// analysis during codegen. |
| 137 FieldElement lookupMapVersionVariable = analysis.lookupMapVersionVariable; | 137 FieldElement lookupMapVersionVariable = analysis.lookupMapVersionVariable; |
| 138 if (lookupMapVersionVariable == null) return const LookupMapAnalysis._(); | 138 if (lookupMapVersionVariable == null) return const LookupMapAnalysis._(); |
| 139 | 139 |
| 140 // At this point, the lookupMapVersionVariable should be resolved and it's | 140 // At this point, the lookupMapVersionVariable should be resolved and it's |
| 141 // constant value should be available. | 141 // constant value should be available. |
| 142 StringConstantValue value = | 142 StringConstantValue value = |
| 143 constants.getConstantValue(lookupMapVersionVariable.constant); | 143 constants.getConstantValue(lookupMapVersionVariable.constant); |
| 144 if (value == null) { | 144 if (value == null) { |
| (...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 510 original.fields[analysis._valueField] = keyValuePairs[1]; | 510 original.fields[analysis._valueField] = keyValuePairs[1]; |
| 511 } | 511 } |
| 512 } else { | 512 } else { |
| 513 original.fields[analysis._entriesField] = | 513 original.fields[analysis._entriesField] = |
| 514 new ListConstantValue(listType, keyValuePairs); | 514 new ListConstantValue(listType, keyValuePairs); |
| 515 } | 515 } |
| 516 } | 516 } |
| 517 } | 517 } |
| 518 | 518 |
| 519 final _validLookupMapVersionConstraint = new VersionConstraint.parse('^0.0.1'); | 519 final _validLookupMapVersionConstraint = new VersionConstraint.parse('^0.0.1'); |
| OLD | NEW |