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.serialization_model_test; | 5 library dart2js.serialization_model_test; |
| 6 |
6 import 'dart:async'; | 7 import 'dart:async'; |
7 import 'dart:io'; | 8 import 'dart:io'; |
8 import 'package:async_helper/async_helper.dart'; | 9 import 'package:async_helper/async_helper.dart'; |
9 import 'package:expect/expect.dart'; | 10 import 'package:expect/expect.dart'; |
10 import 'package:compiler/src/closure.dart'; | 11 import 'package:compiler/src/closure.dart'; |
11 import 'package:compiler/src/commandline_options.dart'; | 12 import 'package:compiler/src/commandline_options.dart'; |
12 import 'package:compiler/src/compiler.dart'; | 13 import 'package:compiler/src/compiler.dart'; |
13 import 'package:compiler/src/elements/elements.dart'; | 14 import 'package:compiler/src/elements/elements.dart'; |
14 import 'package:compiler/src/filenames.dart'; | 15 import 'package:compiler/src/filenames.dart'; |
| 16 import 'package:compiler/src/js_backend/js_backend.dart'; |
15 import 'package:compiler/src/serialization/equivalence.dart'; | 17 import 'package:compiler/src/serialization/equivalence.dart'; |
16 import 'package:compiler/src/tree/nodes.dart'; | 18 import 'package:compiler/src/tree/nodes.dart'; |
17 import 'package:compiler/src/universe/class_set.dart'; | 19 import 'package:compiler/src/universe/class_set.dart'; |
18 import '../memory_compiler.dart'; | 20 import '../memory_compiler.dart'; |
19 import 'helper.dart'; | 21 import 'helper.dart'; |
20 import 'test_data.dart'; | 22 import 'test_data.dart'; |
21 import 'test_helper.dart'; | 23 import 'test_helper.dart'; |
22 | 24 |
23 main(List<String> args) { | 25 main(List<String> args) { |
24 asyncTest(() async { | 26 asyncTest(() async { |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 verbose: verbose); | 110 verbose: verbose); |
109 | 111 |
110 checkClassHierarchyNodes( | 112 checkClassHierarchyNodes( |
111 compilerNormal, | 113 compilerNormal, |
112 compilerDeserialized, | 114 compilerDeserialized, |
113 compilerNormal.world.getClassHierarchyNode( | 115 compilerNormal.world.getClassHierarchyNode( |
114 compilerNormal.coreClasses.objectClass), | 116 compilerNormal.coreClasses.objectClass), |
115 compilerDeserialized.world.getClassHierarchyNode( | 117 compilerDeserialized.world.getClassHierarchyNode( |
116 compilerDeserialized.coreClasses.objectClass), | 118 compilerDeserialized.coreClasses.objectClass), |
117 verbose: verbose); | 119 verbose: verbose); |
| 120 |
| 121 Expect.equals(compilerNormal.enabledInvokeOn, |
| 122 compilerDeserialized.enabledInvokeOn, |
| 123 "Compiler.enabledInvokeOn mismatch"); |
| 124 Expect.equals(compilerNormal.enabledFunctionApply, |
| 125 compilerDeserialized.enabledFunctionApply, |
| 126 "Compiler.enabledFunctionApply mismatch"); |
| 127 Expect.equals(compilerNormal.enabledRuntimeType, |
| 128 compilerDeserialized.enabledRuntimeType, |
| 129 "Compiler.enabledRuntimeType mismatch"); |
| 130 Expect.equals(compilerNormal.hasIsolateSupport, |
| 131 compilerDeserialized.hasIsolateSupport, |
| 132 "Compiler.hasIsolateSupport mismatch"); |
118 } | 133 } |
119 | 134 |
120 void checkElements( | 135 void checkElements( |
121 Compiler compiler1, Compiler compiler2, | 136 Compiler compiler1, Compiler compiler2, |
122 Element element1, Element element2, | 137 Element element1, Element element2, |
123 {bool verbose: false}) { | 138 {bool verbose: false}) { |
124 if (element1.isFunction || | 139 if (element1.isFunction || |
125 element1.isConstructor || | 140 element1.isConstructor || |
126 (element1.isField && element1.isInstanceMember)) { | 141 (element1.isField && element1.isInstanceMember)) { |
127 AstElement astElement1 = element1; | 142 AstElement astElement1 = element1; |
128 AstElement astElement2 = element2; | 143 AstElement astElement2 = element2; |
129 ClosureClassMap closureData1 = | 144 ClosureClassMap closureData1 = |
130 compiler1.closureToClassMapper.computeClosureToClassMapping( | 145 compiler1.closureToClassMapper.computeClosureToClassMapping( |
131 astElement1.resolvedAst); | 146 astElement1.resolvedAst); |
132 ClosureClassMap closureData2 = | 147 ClosureClassMap closureData2 = |
133 compiler2.closureToClassMapper.computeClosureToClassMapping( | 148 compiler2.closureToClassMapper.computeClosureToClassMapping( |
134 astElement2.resolvedAst); | 149 astElement2.resolvedAst); |
135 | 150 |
136 checkElementIdentities(closureData1, closureData2, | 151 checkElementIdentities(closureData1, closureData2, |
137 '$element1.closureElement', | 152 '$element1.closureElement', |
138 closureData1.closureElement, closureData2.closureElement); | 153 closureData1.closureElement, closureData2.closureElement); |
139 checkElementIdentities(closureData1, closureData2, | 154 checkElementIdentities(closureData1, closureData2, |
140 '$element1.closureClassElement', | 155 '$element1.closureClassElement', |
141 closureData1.closureClassElement, closureData2.closureClassElement); | 156 closureData1.closureClassElement, closureData2.closureClassElement); |
142 checkElementIdentities(closureData1, closureData2, | 157 checkElementIdentities(closureData1, closureData2, |
143 '$element1.callElement', | 158 '$element1.callElement', |
144 closureData1.callElement, closureData2.callElement); | 159 closureData1.callElement, closureData2.callElement); |
(...skipping 16 matching lines...) Expand all Loading... |
161 areClosureScopesEquivalent, | 176 areClosureScopesEquivalent, |
162 verbose: verbose, | 177 verbose: verbose, |
163 keyToString: nodeToString); | 178 keyToString: nodeToString); |
164 checkSets( | 179 checkSets( |
165 closureData1.variablesUsedInTryOrGenerator, | 180 closureData1.variablesUsedInTryOrGenerator, |
166 closureData2.variablesUsedInTryOrGenerator, | 181 closureData2.variablesUsedInTryOrGenerator, |
167 "$element1.variablesUsedInTryOrGenerator", | 182 "$element1.variablesUsedInTryOrGenerator", |
168 areLocalsEquivalent, | 183 areLocalsEquivalent, |
169 verbose: verbose); | 184 verbose: verbose); |
170 } | 185 } |
| 186 JavaScriptBackend backend1 = compiler1.backend; |
| 187 JavaScriptBackend backend2 = compiler2.backend; |
| 188 Expect.equals( |
| 189 backend1.inlineCache.getCurrentCacheDecisionForTesting(element1), |
| 190 backend2.inlineCache.getCurrentCacheDecisionForTesting(element2), |
| 191 "Inline cache decision mismatch for $element1 vs $element2"); |
171 } | 192 } |
172 | 193 |
173 void checkMixinUses( | 194 void checkMixinUses( |
174 Compiler compiler1, Compiler compiler2, | 195 Compiler compiler1, Compiler compiler2, |
175 ClassElement class1, ClassElement class2, | 196 ClassElement class1, ClassElement class2, |
176 {bool verbose: false}) { | 197 {bool verbose: false}) { |
177 | 198 |
178 checkSets( | 199 checkSets( |
179 compiler1.world.mixinUsesOf(class1), | 200 compiler1.world.mixinUsesOf(class1), |
180 compiler2.world.mixinUsesOf(class2), | 201 compiler2.world.mixinUsesOf(class2), |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 return true; | 296 return true; |
276 } | 297 } |
277 | 298 |
278 String nodeToString(Node node) { | 299 String nodeToString(Node node) { |
279 String text = '$node'; | 300 String text = '$node'; |
280 if (text.length > 40) { | 301 if (text.length > 40) { |
281 return '(${node.runtimeType}) ${text.substring(0, 37)}...'; | 302 return '(${node.runtimeType}) ${text.substring(0, 37)}...'; |
282 } | 303 } |
283 return '(${node.runtimeType}) $text'; | 304 return '(${node.runtimeType}) $text'; |
284 } | 305 } |
OLD | NEW |