OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 compiler.src.inferrer.map_tracer; | 5 library compiler.src.inferrer.map_tracer; |
6 | 6 |
7 import '../elements/elements.dart'; | 7 import '../elements/entities.dart'; |
8 import '../js_backend/backend.dart' show JavaScriptBackend; | 8 import '../js_backend/backend.dart' show JavaScriptBackend; |
9 import '../universe/selector.dart' show Selector; | 9 import '../universe/selector.dart' show Selector; |
10 import 'node_tracer.dart'; | 10 import 'node_tracer.dart'; |
11 import 'type_graph_nodes.dart'; | 11 import 'type_graph_nodes.dart'; |
12 | 12 |
13 Set<String> okMapSelectorsSet = new Set.from(const <String>[ | 13 Set<String> okMapSelectorsSet = new Set.from(const <String>[ |
14 // From Object. | 14 // From Object. |
15 "==", | 15 "==", |
16 "hashCode", | 16 "hashCode", |
17 "toString", | 17 "toString", |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 keyAssignments = valueAssignments = mapAssignments = null; | 59 keyAssignments = valueAssignments = mapAssignments = null; |
60 return false; | 60 return false; |
61 } | 61 } |
62 | 62 |
63 visitClosureCallSiteTypeInformation(ClosureCallSiteTypeInformation info) { | 63 visitClosureCallSiteTypeInformation(ClosureCallSiteTypeInformation info) { |
64 bailout('Passed to a closure'); | 64 bailout('Passed to a closure'); |
65 } | 65 } |
66 | 66 |
67 visitStaticCallSiteTypeInformation(StaticCallSiteTypeInformation info) { | 67 visitStaticCallSiteTypeInformation(StaticCallSiteTypeInformation info) { |
68 super.visitStaticCallSiteTypeInformation(info); | 68 super.visitStaticCallSiteTypeInformation(info); |
69 Element called = info.calledElement; | 69 MemberEntity called = info.calledElement; |
70 if (compiler.backend | 70 if (inferrer.closedWorld.commonElements.isForeign(called) && |
71 .isForeign(inferrer.closedWorld.commonElements, called) && | |
72 called.name == JavaScriptBackend.JS) { | 71 called.name == JavaScriptBackend.JS) { |
73 bailout('Used in JS ${info.call}'); | 72 bailout('Used in JS ${info.call}'); |
74 } | 73 } |
75 } | 74 } |
76 | 75 |
77 visitDynamicCallSiteTypeInformation(DynamicCallSiteTypeInformation info) { | 76 visitDynamicCallSiteTypeInformation(DynamicCallSiteTypeInformation info) { |
78 super.visitDynamicCallSiteTypeInformation(info); | 77 super.visitDynamicCallSiteTypeInformation(info); |
79 Selector selector = info.selector; | 78 Selector selector = info.selector; |
80 String selectorName = selector.name; | 79 String selectorName = selector.name; |
81 if (currentUser == info.receiver) { | 80 if (currentUser == info.receiver) { |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 return; | 121 return; |
123 } | 122 } |
124 } | 123 } |
125 } else if (selector.isCall && | 124 } else if (selector.isCall && |
126 !info.targets.every((element) => element.isFunction)) { | 125 !info.targets.every((element) => element.isFunction)) { |
127 bailout('Passed to a closure'); | 126 bailout('Passed to a closure'); |
128 return; | 127 return; |
129 } | 128 } |
130 } | 129 } |
131 } | 130 } |
OLD | NEW |