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

Side by Side Diff: pkg/compiler/lib/src/resolution/tree_elements.dart

Issue 2468303003: dart2js: move type-mask intermediate data from tree-elements into the global (Closed)
Patch Set: Created 4 years, 1 month 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) 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 '../tree/tree.dart'; 12 import '../tree/tree.dart';
13 import '../types/types.dart' show TypeMask;
Johnni Winther 2016/11/03 08:50:21 Nice!!
14 import '../universe/selector.dart' show Selector; 13 import '../universe/selector.dart' show Selector;
15 import '../util/util.dart'; 14 import '../util/util.dart';
16 import 'secret_tree_element.dart' show getTreeElement, setTreeElement; 15 import 'secret_tree_element.dart' show getTreeElement, setTreeElement;
17 import 'send_structure.dart'; 16 import 'send_structure.dart';
18 17
19 abstract class TreeElements { 18 abstract class TreeElements {
20 AnalyzableElement get analyzedElement; 19 AnalyzableElement get analyzedElement;
21 Iterable<SourceSpan> get superUses; 20 Iterable<SourceSpan> get superUses;
22 21
23 void forEachConstantNode(f(Node n, ConstantExpression c)); 22 void forEachConstantNode(f(Node n, ConstantExpression c));
24 23
25 Element operator [](Node node); 24 Element operator [](Node node);
26 Map<Node, DartType> get typesCache; 25 Map<Node, DartType> get typesCache;
27 26
28 /// Returns the [SendStructure] that describes the semantics of [node]. 27 /// Returns the [SendStructure] that describes the semantics of [node].
29 SendStructure getSendStructure(Send node); 28 SendStructure getSendStructure(Send node);
30 29
31 /// Returns the [NewStructure] that describes the semantics of [node]. 30 /// Returns the [NewStructure] that describes the semantics of [node].
32 NewStructure getNewStructure(NewExpression node); 31 NewStructure getNewStructure(NewExpression node);
33 32
34 // TODO(johnniwinther): Investigate whether [Node] could be a [Send]. 33 // TODO(johnniwinther): Investigate whether [Node] could be a [Send].
35 Selector getSelector(Node node); 34 Selector getSelector(Node node);
36 Selector getGetterSelectorInComplexSendSet(SendSet node); 35 Selector getGetterSelectorInComplexSendSet(SendSet node);
37 Selector getOperatorSelectorInComplexSendSet(SendSet node); 36 Selector getOperatorSelectorInComplexSendSet(SendSet node);
38 DartType getType(Node node); 37 DartType getType(Node node);
39 TypeMask getTypeMask(Node node);
40 TypeMask getGetterTypeMaskInComplexSendSet(SendSet node);
41 TypeMask getOperatorTypeMaskInComplexSendSet(SendSet node);
42 void setTypeMask(Node node, TypeMask mask);
43 void setGetterTypeMaskInComplexSendSet(SendSet node, TypeMask mask);
44 void setOperatorTypeMaskInComplexSendSet(SendSet node, TypeMask mask);
45 38
46 /// Returns the for-in loop variable for [node]. 39 /// Returns the for-in loop variable for [node].
47 Element getForInVariable(ForIn node); 40 Element getForInVariable(ForIn node);
48 TypeMask getIteratorTypeMask(ForIn node);
49 TypeMask getMoveNextTypeMask(ForIn node);
50 TypeMask getCurrentTypeMask(ForIn node);
51 void setIteratorTypeMask(ForIn node, TypeMask mask);
52 void setMoveNextTypeMask(ForIn node, TypeMask mask);
53 void setCurrentTypeMask(ForIn node, TypeMask mask);
54 void setConstant(Node node, ConstantExpression constant); 41 void setConstant(Node node, ConstantExpression constant);
55 ConstantExpression getConstant(Node node); 42 ConstantExpression getConstant(Node node);
56 43
57 /// Returns the [FunctionElement] defined by [node]. 44 /// Returns the [FunctionElement] defined by [node].
58 FunctionElement getFunctionDefinition(FunctionExpression node); 45 FunctionElement getFunctionDefinition(FunctionExpression node);
59 46
60 /// Returns target constructor for the redirecting factory body [node]. 47 /// Returns target constructor for the redirecting factory body [node].
61 ConstructorElement getRedirectingTargetConstructor( 48 ConstructorElement getRedirectingTargetConstructor(
62 RedirectingFactoryBody node); 49 RedirectingFactoryBody node);
63 50
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 /// `true` if the [analyzedElement]'s source code contains a [TryStatement]. 87 /// `true` if the [analyzedElement]'s source code contains a [TryStatement].
101 bool get containsTryStatement; 88 bool get containsTryStatement;
102 89
103 /// Returns native data stored with [node]. 90 /// Returns native data stored with [node].
104 getNativeData(Node node); 91 getNativeData(Node node);
105 } 92 }
106 93
107 class TreeElementMapping extends TreeElements { 94 class TreeElementMapping extends TreeElements {
108 final AnalyzableElement analyzedElement; 95 final AnalyzableElement analyzedElement;
109 Map<Spannable, Selector> _selectors; 96 Map<Spannable, Selector> _selectors;
110 Map<Spannable, TypeMask> _typeMasks;
111 Map<Node, DartType> _types; 97 Map<Node, DartType> _types;
112 98
113 Map<Node, DartType> _typesCache; 99 Map<Node, DartType> _typesCache;
114 Map<Node, DartType> get typesCache => _typesCache ??= <Node, DartType>{}; 100 Map<Node, DartType> get typesCache => _typesCache ??= <Node, DartType>{};
115 101
116 Setlet<SourceSpan> _superUses; 102 Setlet<SourceSpan> _superUses;
117 Map<Node, ConstantExpression> _constants; 103 Map<Node, ConstantExpression> _constants;
118 Map<VariableElement, List<Node>> _potentiallyMutated; 104 Map<VariableElement, List<Node>> _potentiallyMutated;
119 Map<Node, Map<VariableElement, List<Node>>> _potentiallyMutatedIn; 105 Map<Node, Map<VariableElement, List<Node>>> _potentiallyMutatedIn;
120 Map<VariableElement, List<Node>> _potentiallyMutatedInClosure; 106 Map<VariableElement, List<Node>> _potentiallyMutatedInClosure;
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 } 421 }
436 _targetLabels[node] = label; 422 _targetLabels[node] = label;
437 } 423 }
438 424
439 @override 425 @override
440 LabelDefinition getTargetLabel(GotoStatement node) { 426 LabelDefinition getTargetLabel(GotoStatement node) {
441 assert(node.target != null); 427 assert(node.target != null);
442 return _targetLabels != null ? _targetLabels[node] : null; 428 return _targetLabels != null ? _targetLabels[node] : null;
443 } 429 }
444 430
445 TypeMask _getTypeMask(Spannable node) {
446 return _typeMasks != null ? _typeMasks[node] : null;
447 }
448
449 void _setTypeMask(Spannable node, TypeMask mask) {
450 if (_typeMasks == null) {
451 _typeMasks = new Maplet<Spannable, TypeMask>();
452 }
453 _typeMasks[node] = mask;
454 }
455
456 @override
457 void setTypeMask(Node node, TypeMask mask) {
458 _setTypeMask(node, mask);
459 }
460
461 @override
462 TypeMask getTypeMask(Node node) => _getTypeMask(node);
463
464 @override
465 void setGetterTypeMaskInComplexSendSet(SendSet node, TypeMask mask) {
466 _setTypeMask(node.selector, mask);
467 }
468
469 @override
470 TypeMask getGetterTypeMaskInComplexSendSet(SendSet node) {
471 return _getTypeMask(node.selector);
472 }
473
474 @override
475 void setOperatorTypeMaskInComplexSendSet(SendSet node, TypeMask mask) {
476 _setTypeMask(node.assignmentOperator, mask);
477 }
478
479 @override
480 TypeMask getOperatorTypeMaskInComplexSendSet(SendSet node) {
481 return _getTypeMask(node.assignmentOperator);
482 }
483
484 // The following methods set selectors on the "for in" node. Since
485 // we're using three selectors, we need to use children of the node,
486 // and we arbitrarily choose which ones.
487
488 @override
489 void setIteratorTypeMask(ForIn node, TypeMask mask) {
490 _setTypeMask(node, mask);
491 }
492
493 @override
494 TypeMask getIteratorTypeMask(ForIn node) {
495 return _getTypeMask(node);
496 }
497
498 @override
499 void setMoveNextTypeMask(ForIn node, TypeMask mask) {
500 _setTypeMask(node.forToken, mask);
501 }
502
503 @override
504 TypeMask getMoveNextTypeMask(ForIn node) {
505 return _getTypeMask(node.forToken);
506 }
507
508 @override
509 void setCurrentTypeMask(ForIn node, TypeMask mask) {
510 _setTypeMask(node.inToken, mask);
511 }
512
513 @override
514 TypeMask getCurrentTypeMask(ForIn node) {
515 return _getTypeMask(node.inToken);
516 }
517
518 void registerNativeData(Node node, dynamic nativeData) { 431 void registerNativeData(Node node, dynamic nativeData) {
519 if (_nativeData == null) { 432 if (_nativeData == null) {
520 _nativeData = <Node, dynamic>{}; 433 _nativeData = <Node, dynamic>{};
521 } 434 }
522 _nativeData[node] = nativeData; 435 _nativeData[node] = nativeData;
523 } 436 }
524 437
525 @override 438 @override
526 dynamic getNativeData(Node node) { 439 dynamic getNativeData(Node node) {
527 return _nativeData != null ? _nativeData[node] : null; 440 return _nativeData != null ? _nativeData[node] : null;
528 } 441 }
529 } 442 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698