| 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 library dart2js.resolution.tree_elements; | 5 library dart2js.resolution.tree_elements; |
| 6 | 6 |
| 7 import '../common.dart'; | 7 import '../common.dart'; |
| 8 import '../constants/expressions.dart'; | 8 import '../constants/expressions.dart'; |
| 9 import '../dart_types.dart'; | 9 import '../dart_types.dart'; |
| 10 import '../diagnostics/source_span.dart'; | 10 import '../diagnostics/source_span.dart'; |
| 11 import '../elements/elements.dart'; | 11 import '../elements/elements.dart'; |
| 12 import '../types/types.dart' show | 12 import '../types/types.dart' show TypeMask; |
| 13 TypeMask; | |
| 14 import '../tree/tree.dart'; | 13 import '../tree/tree.dart'; |
| 15 import '../util/util.dart'; | 14 import '../util/util.dart'; |
| 16 import '../universe/selector.dart' show | 15 import '../universe/selector.dart' show Selector; |
| 17 Selector; | |
| 18 | 16 |
| 19 import 'secret_tree_element.dart' show | 17 import 'secret_tree_element.dart' show getTreeElement, setTreeElement; |
| 20 getTreeElement, | |
| 21 setTreeElement; | |
| 22 import 'send_structure.dart'; | 18 import 'send_structure.dart'; |
| 23 | 19 |
| 24 abstract class TreeElements { | 20 abstract class TreeElements { |
| 25 AnalyzableElement get analyzedElement; | 21 AnalyzableElement get analyzedElement; |
| 26 Iterable<SourceSpan> get superUses; | 22 Iterable<SourceSpan> get superUses; |
| 27 | 23 |
| 28 void forEachConstantNode(f(Node n, ConstantExpression c)); | 24 void forEachConstantNode(f(Node n, ConstantExpression c)); |
| 29 | 25 |
| 30 Element operator[](Node node); | 26 Element operator [](Node node); |
| 31 Map<Node, DartType> get typesCache; | 27 Map<Node, DartType> get typesCache; |
| 32 | 28 |
| 33 /// Returns the [SendStructure] that describes the semantics of [node]. | 29 /// Returns the [SendStructure] that describes the semantics of [node]. |
| 34 SendStructure getSendStructure(Send node); | 30 SendStructure getSendStructure(Send node); |
| 35 | 31 |
| 36 /// Returns the [NewStructure] that describes the semantics of [node]. | 32 /// Returns the [NewStructure] that describes the semantics of [node]. |
| 37 NewStructure getNewStructure(NewExpression node); | 33 NewStructure getNewStructure(NewExpression node); |
| 38 | 34 |
| 39 // TODO(johnniwinther): Investigate whether [Node] could be a [Send]. | 35 // TODO(johnniwinther): Investigate whether [Node] could be a [Send]. |
| 40 Selector getSelector(Node node); | 36 Selector getSelector(Node node); |
| (...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 280 | 276 |
| 281 List<Node> getPotentialMutationsIn(Node node, VariableElement element) { | 277 List<Node> getPotentialMutationsIn(Node node, VariableElement element) { |
| 282 if (_potentiallyMutatedIn == null) return const <Node>[]; | 278 if (_potentiallyMutatedIn == null) return const <Node>[]; |
| 283 Map<VariableElement, List<Node>> mutationsIn = _potentiallyMutatedIn[node]; | 279 Map<VariableElement, List<Node>> mutationsIn = _potentiallyMutatedIn[node]; |
| 284 if (mutationsIn == null) return const <Node>[]; | 280 if (mutationsIn == null) return const <Node>[]; |
| 285 List<Node> mutations = mutationsIn[element]; | 281 List<Node> mutations = mutationsIn[element]; |
| 286 if (mutations == null) return const <Node>[]; | 282 if (mutations == null) return const <Node>[]; |
| 287 return mutations; | 283 return mutations; |
| 288 } | 284 } |
| 289 | 285 |
| 290 void registerPotentialMutationIn(Node contextNode, VariableElement element, | 286 void registerPotentialMutationIn( |
| 291 Node mutationNode) { | 287 Node contextNode, VariableElement element, Node mutationNode) { |
| 292 if (_potentiallyMutatedIn == null) { | 288 if (_potentiallyMutatedIn == null) { |
| 293 _potentiallyMutatedIn = | 289 _potentiallyMutatedIn = |
| 294 new Maplet<Node, Map<VariableElement, List<Node>>>(); | 290 new Maplet<Node, Map<VariableElement, List<Node>>>(); |
| 295 } | 291 } |
| 296 Map<VariableElement, List<Node>> mutationMap = | 292 Map<VariableElement, List<Node>> mutationMap = |
| 297 _potentiallyMutatedIn.putIfAbsent(contextNode, | 293 _potentiallyMutatedIn.putIfAbsent( |
| 298 () => new Maplet<VariableElement, List<Node>>()); | 294 contextNode, () => new Maplet<VariableElement, List<Node>>()); |
| 299 mutationMap.putIfAbsent(element, () => <Node>[]).add(mutationNode); | 295 mutationMap.putIfAbsent(element, () => <Node>[]).add(mutationNode); |
| 300 } | 296 } |
| 301 | 297 |
| 302 List<Node> getPotentialMutationsInClosure(VariableElement element) { | 298 List<Node> getPotentialMutationsInClosure(VariableElement element) { |
| 303 if (_potentiallyMutatedInClosure == null) return const <Node>[]; | 299 if (_potentiallyMutatedInClosure == null) return const <Node>[]; |
| 304 List<Node> mutations = _potentiallyMutatedInClosure[element]; | 300 List<Node> mutations = _potentiallyMutatedInClosure[element]; |
| 305 if (mutations == null) return const <Node>[]; | 301 if (mutations == null) return const <Node>[]; |
| 306 return mutations; | 302 return mutations; |
| 307 } | 303 } |
| 308 | 304 |
| 309 void registerPotentialMutationInClosure(VariableElement element, | 305 void registerPotentialMutationInClosure( |
| 310 Node mutationNode) { | 306 VariableElement element, Node mutationNode) { |
| 311 if (_potentiallyMutatedInClosure == null) { | 307 if (_potentiallyMutatedInClosure == null) { |
| 312 _potentiallyMutatedInClosure = new Maplet<VariableElement, List<Node>>(); | 308 _potentiallyMutatedInClosure = new Maplet<VariableElement, List<Node>>(); |
| 313 } | 309 } |
| 314 _potentiallyMutatedInClosure.putIfAbsent( | 310 _potentiallyMutatedInClosure |
| 315 element, () => <Node>[]).add(mutationNode); | 311 .putIfAbsent(element, () => <Node>[]) |
| 312 .add(mutationNode); |
| 316 } | 313 } |
| 317 | 314 |
| 318 List<Node> getAccessesByClosureIn(Node node, VariableElement element) { | 315 List<Node> getAccessesByClosureIn(Node node, VariableElement element) { |
| 319 if (_accessedByClosureIn == null) return const <Node>[]; | 316 if (_accessedByClosureIn == null) return const <Node>[]; |
| 320 Map<VariableElement, List<Node>> accessesIn = _accessedByClosureIn[node]; | 317 Map<VariableElement, List<Node>> accessesIn = _accessedByClosureIn[node]; |
| 321 if (accessesIn == null) return const <Node>[]; | 318 if (accessesIn == null) return const <Node>[]; |
| 322 List<Node> accesses = accessesIn[element]; | 319 List<Node> accesses = accessesIn[element]; |
| 323 if (accesses == null) return const <Node>[]; | 320 if (accesses == null) return const <Node>[]; |
| 324 return accesses; | 321 return accesses; |
| 325 } | 322 } |
| 326 | 323 |
| 327 void setAccessedByClosureIn(Node contextNode, VariableElement element, | 324 void setAccessedByClosureIn( |
| 328 Node accessNode) { | 325 Node contextNode, VariableElement element, Node accessNode) { |
| 329 if (_accessedByClosureIn == null) { | 326 if (_accessedByClosureIn == null) { |
| 330 _accessedByClosureIn = new Map<Node, Map<VariableElement, List<Node>>>(); | 327 _accessedByClosureIn = new Map<Node, Map<VariableElement, List<Node>>>(); |
| 331 } | 328 } |
| 332 Map<VariableElement, List<Node>> accessMap = | 329 Map<VariableElement, List<Node>> accessMap = |
| 333 _accessedByClosureIn.putIfAbsent(contextNode, | 330 _accessedByClosureIn.putIfAbsent( |
| 334 () => new Maplet<VariableElement, List<Node>>()); | 331 contextNode, () => new Maplet<VariableElement, List<Node>>()); |
| 335 accessMap.putIfAbsent(element, () => <Node>[]).add(accessNode); | 332 accessMap.putIfAbsent(element, () => <Node>[]).add(accessNode); |
| 336 } | 333 } |
| 337 | 334 |
| 338 String toString() => 'TreeElementMapping($analyzedElement)'; | 335 String toString() => 'TreeElementMapping($analyzedElement)'; |
| 339 | 336 |
| 340 void forEachConstantNode(f(Node n, ConstantExpression c)) { | 337 void forEachConstantNode(f(Node n, ConstantExpression c)) { |
| 341 if (_constants != null) { | 338 if (_constants != null) { |
| 342 _constants.forEach(f); | 339 _constants.forEach(f); |
| 343 } | 340 } |
| 344 } | 341 } |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 470 } | 467 } |
| 471 | 468 |
| 472 void setCurrentTypeMask(ForIn node, TypeMask mask) { | 469 void setCurrentTypeMask(ForIn node, TypeMask mask) { |
| 473 _setTypeMask(node.inToken, mask); | 470 _setTypeMask(node.inToken, mask); |
| 474 } | 471 } |
| 475 | 472 |
| 476 TypeMask getCurrentTypeMask(ForIn node) { | 473 TypeMask getCurrentTypeMask(ForIn node) { |
| 477 return _getTypeMask(node.inToken); | 474 return _getTypeMask(node.inToken); |
| 478 } | 475 } |
| 479 } | 476 } |
| OLD | NEW |