| 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 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 300 return false; | 300 return false; |
| 301 } | 301 } |
| 302 | 302 |
| 303 /// Whether we need to preserve [key]. This is true for keys that are not | 303 /// Whether we need to preserve [key]. This is true for keys that are not |
| 304 /// candidates for tree-shaking in the first place (primitives and non-type | 304 /// candidates for tree-shaking in the first place (primitives and non-type |
| 305 /// const values overriding equals) and keys that we have seen in the program. | 305 /// const values overriding equals) and keys that we have seen in the program. |
| 306 bool _shouldKeep(ConstantValue key) => | 306 bool _shouldKeep(ConstantValue key) => |
| 307 key.isPrimitive || _inUse.contains(key) || _overridesEquals(key); | 307 key.isPrimitive || _inUse.contains(key) || _overridesEquals(key); |
| 308 | 308 |
| 309 void _addClassUse(ClassEntity cls) { | 309 void _addClassUse(ClassEntity cls) { |
| 310 ConstantValue key = _typeConstants.putIfAbsent( | 310 TypeConstantValue f() => _constantSystem.createType( |
| 311 cls, | 311 _commonElements, _elementEnvironment.getRawType(cls)); |
| 312 () => _constantSystem.createType( | 312 ConstantValue key = _typeConstants.putIfAbsent(cls, f); |
| 313 _commonElements, _elementEnvironment.getRawType(cls))); | |
| 314 _addUse(key); | 313 _addUse(key); |
| 315 } | 314 } |
| 316 | 315 |
| 317 /// Record that [key] is used and update every lookup map that contains it. | 316 /// Record that [key] is used and update every lookup map that contains it. |
| 318 void _addUse(ConstantValue key) { | 317 void _addUse(ConstantValue key) { |
| 319 if (_inUse.add(key)) { | 318 if (_inUse.add(key)) { |
| 320 _pending[key]?.forEach((info) => info._markUsed(key)); | 319 _pending[key]?.forEach((info) => info._markUsed(key)); |
| 321 _pending.remove(key); | 320 _pending.remove(key); |
| 322 } | 321 } |
| 323 } | 322 } |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 516 original.fields[analysis._valueField] = keyValuePairs[1]; | 515 original.fields[analysis._valueField] = keyValuePairs[1]; |
| 517 } | 516 } |
| 518 } else { | 517 } else { |
| 519 original.fields[analysis._entriesField] = | 518 original.fields[analysis._entriesField] = |
| 520 new ListConstantValue(listType, keyValuePairs); | 519 new ListConstantValue(listType, keyValuePairs); |
| 521 } | 520 } |
| 522 } | 521 } |
| 523 } | 522 } |
| 524 | 523 |
| 525 final _validLookupMapVersionConstraint = new VersionConstraint.parse('^0.0.1'); | 524 final _validLookupMapVersionConstraint = new VersionConstraint.parse('^0.0.1'); |
| OLD | NEW |