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

Side by Side Diff: tests/compiler/dart2js/needs_no_such_method_test.dart

Issue 2428543002: Optimize needNoSuchMethodHandling computation (Closed)
Patch Set: Created 4 years, 2 months 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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 import 'dart:async'; 5 import 'dart:async';
6 import 'package:async_helper/async_helper.dart'; 6 import 'package:async_helper/async_helper.dart';
7 import 'package:expect/expect.dart'; 7 import 'package:expect/expect.dart';
8 import 'package:compiler/src/common.dart'; 8 import 'package:compiler/src/common.dart';
9 import 'package:compiler/src/elements/elements.dart' 9 import 'package:compiler/src/elements/elements.dart'
10 show Element, ClassElement, PublicName; 10 show Element, ClassElement, PublicName;
(...skipping 17 matching lines...) Expand all
28 } 28 }
29 class Subtype implements Superclass { 29 class Subtype implements Superclass {
30 bar() {} 30 bar() {}
31 } 31 }
32 """; 32 """;
33 33
34 testClassSets() async { 34 testClassSets() async {
35 Selector foo, bar, baz; 35 Selector foo, bar, baz;
36 ClosedWorld closedWorld; 36 ClosedWorld closedWorld;
37 ClassElement superclass, subclass, subtype; 37 ClassElement superclass, subclass, subtype;
38 String testMode;
38 39
39 Future run(List<String> instantiated) async { 40 Future run(List<String> instantiated) async {
40 StringBuffer main = new StringBuffer(); 41 StringBuffer main = new StringBuffer();
41 main.write('main() {'); 42 main.write('main() {');
42 for (String cls in instantiated) { 43 for (String cls in instantiated) {
43 main.write('new $cls();'); 44 main.write('new $cls();');
44 } 45 }
45 main.write('}'); 46 main.write('}');
47 testMode = '$instantiated';
46 48
47 var env = await TypeEnvironment.create(CLASSES, 49 var env = await TypeEnvironment.create(CLASSES,
48 mainSource: main.toString(), useMockCompiler: false); 50 mainSource: main.toString(), useMockCompiler: false);
49 foo = new Selector.call(const PublicName('foo'), CallStructure.NO_ARGS); 51 foo = new Selector.call(const PublicName('foo'), CallStructure.NO_ARGS);
50 bar = new Selector.call(const PublicName('bar'), CallStructure.NO_ARGS); 52 bar = new Selector.call(const PublicName('bar'), CallStructure.NO_ARGS);
51 baz = new Selector.call(const PublicName('baz'), CallStructure.NO_ARGS); 53 baz = new Selector.call(const PublicName('baz'), CallStructure.NO_ARGS);
52 54
53 closedWorld = env.compiler.closedWorld; 55 closedWorld = env.compiler.closedWorld;
54 superclass = env.getElement('Superclass'); 56 superclass = env.getElement('Superclass');
55 subclass = env.getElement('Subclass'); 57 subclass = env.getElement('Subclass');
56 subtype = env.getElement('Subtype'); 58 subtype = env.getElement('Subtype');
57 } 59 }
58 60
59 void check(ClassElement cls, ClassQuery query, Selector selector, 61 void check(ClassElement cls, ClassQuery query, Selector selector,
60 bool expectedResult) { 62 bool expectedResult) {
61 bool result = closedWorld.needsNoSuchMethod(cls, selector, query); 63 bool result = closedWorld.needsNoSuchMethod(cls, selector, query);
62 Expect.equals(expectedResult, result, 64 Expect.equals(
63 'Unexpected result for $selector in $cls ($query)'); 65 expectedResult,
66 result,
67 'Unexpected result for $selector in $cls ($query)'
68 'for instantiations $testMode');
64 } 69 }
65 70
66 await run([]); 71 await run([]);
67 72
68 Expect.isFalse(closedWorld.isDirectlyInstantiated(superclass)); 73 Expect.isFalse(closedWorld.isDirectlyInstantiated(superclass));
69 Expect.isFalse(closedWorld.isIndirectlyInstantiated(superclass)); 74 Expect.isFalse(closedWorld.isIndirectlyInstantiated(superclass));
70 Expect.isFalse(closedWorld.isImplemented(superclass)); 75 Expect.isFalse(closedWorld.isImplemented(superclass));
71 76
72 Expect.isFalse(closedWorld.isDirectlyInstantiated(subclass)); 77 Expect.isFalse(closedWorld.isDirectlyInstantiated(subclass));
73 Expect.isFalse(closedWorld.isIndirectlyInstantiated(subclass)); 78 Expect.isFalse(closedWorld.isIndirectlyInstantiated(subclass));
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 164
160 Expect.isTrue(closedWorld.isDirectlyInstantiated(subclass)); 165 Expect.isTrue(closedWorld.isDirectlyInstantiated(subclass));
161 Expect.isFalse(closedWorld.isIndirectlyInstantiated(subclass)); 166 Expect.isFalse(closedWorld.isIndirectlyInstantiated(subclass));
162 Expect.isTrue(closedWorld.isImplemented(subclass)); 167 Expect.isTrue(closedWorld.isImplemented(subclass));
163 168
164 Expect.isFalse(closedWorld.isDirectlyInstantiated(subtype)); 169 Expect.isFalse(closedWorld.isDirectlyInstantiated(subtype));
165 Expect.isFalse(closedWorld.isIndirectlyInstantiated(subtype)); 170 Expect.isFalse(closedWorld.isIndirectlyInstantiated(subtype));
166 Expect.isFalse(closedWorld.isImplemented(subtype)); 171 Expect.isFalse(closedWorld.isImplemented(subtype));
167 172
168 check(superclass, ClassQuery.EXACT, foo, false); 173 check(superclass, ClassQuery.EXACT, foo, false);
169 // Should be false since the class is not directly instantiated: 174 check(superclass, ClassQuery.EXACT, bar, false);
Siggi Cherem (dart-lang) 2016/10/17 19:30:34 consider updating the description of the CL to ind
170 check(superclass, ClassQuery.EXACT, bar, true); 175 check(superclass, ClassQuery.EXACT, baz, false);
171 // Should be false since the class is not directly instantiated:
172 check(superclass, ClassQuery.EXACT, baz, true);
173 check(superclass, ClassQuery.SUBCLASS, foo, false); 176 check(superclass, ClassQuery.SUBCLASS, foo, false);
174 // Should be false since all live subclasses have a concrete implementation: 177 check(superclass, ClassQuery.SUBCLASS, bar, false);
175 check(superclass, ClassQuery.SUBCLASS, bar, true);
176 check(superclass, ClassQuery.SUBCLASS, baz, true); 178 check(superclass, ClassQuery.SUBCLASS, baz, true);
177 check(superclass, ClassQuery.SUBTYPE, foo, false); 179 check(superclass, ClassQuery.SUBTYPE, foo, false);
178 // Should be false since all live subtypes have a concrete implementation: 180 check(superclass, ClassQuery.SUBTYPE, bar, false);
179 check(superclass, ClassQuery.SUBTYPE, bar, true);
180 check(superclass, ClassQuery.SUBTYPE, baz, true); 181 check(superclass, ClassQuery.SUBTYPE, baz, true);
181 182
182 check(subclass, ClassQuery.EXACT, foo, false); 183 check(subclass, ClassQuery.EXACT, foo, false);
183 check(subclass, ClassQuery.EXACT, bar, false); 184 check(subclass, ClassQuery.EXACT, bar, false);
184 check(subclass, ClassQuery.EXACT, baz, true); 185 check(subclass, ClassQuery.EXACT, baz, true);
185 check(subclass, ClassQuery.SUBCLASS, foo, false); 186 check(subclass, ClassQuery.SUBCLASS, foo, false);
186 check(subclass, ClassQuery.SUBCLASS, bar, false); 187 check(subclass, ClassQuery.SUBCLASS, bar, false);
187 check(subclass, ClassQuery.SUBCLASS, baz, true); 188 check(subclass, ClassQuery.SUBCLASS, baz, true);
188 check(subclass, ClassQuery.SUBTYPE, foo, false); 189 check(subclass, ClassQuery.SUBTYPE, foo, false);
189 check(subclass, ClassQuery.SUBTYPE, bar, false); 190 check(subclass, ClassQuery.SUBTYPE, bar, false);
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 252
252 Expect.isTrue(closedWorld.isDirectlyInstantiated(subclass)); 253 Expect.isTrue(closedWorld.isDirectlyInstantiated(subclass));
253 Expect.isFalse(closedWorld.isIndirectlyInstantiated(subclass)); 254 Expect.isFalse(closedWorld.isIndirectlyInstantiated(subclass));
254 Expect.isTrue(closedWorld.isImplemented(subclass)); 255 Expect.isTrue(closedWorld.isImplemented(subclass));
255 256
256 Expect.isTrue(closedWorld.isDirectlyInstantiated(subtype)); 257 Expect.isTrue(closedWorld.isDirectlyInstantiated(subtype));
257 Expect.isFalse(closedWorld.isIndirectlyInstantiated(subtype)); 258 Expect.isFalse(closedWorld.isIndirectlyInstantiated(subtype));
258 Expect.isTrue(closedWorld.isImplemented(subtype)); 259 Expect.isTrue(closedWorld.isImplemented(subtype));
259 260
260 check(superclass, ClassQuery.EXACT, foo, false); 261 check(superclass, ClassQuery.EXACT, foo, false);
261 // Should be false since the class is not directly instantiated: 262 check(superclass, ClassQuery.EXACT, bar, false);
262 check(superclass, ClassQuery.EXACT, bar, true); 263 check(superclass, ClassQuery.EXACT, baz, false);
263 // Should be false since the class is not directly instantiated:
264 check(superclass, ClassQuery.EXACT, baz, true);
265 check(superclass, ClassQuery.SUBCLASS, foo, false); 264 check(superclass, ClassQuery.SUBCLASS, foo, false);
266 // Should be false since all live subclasses have a concrete implementation: 265 check(superclass, ClassQuery.SUBCLASS, bar, false);
267 check(superclass, ClassQuery.SUBCLASS, bar, true);
268 check(superclass, ClassQuery.SUBCLASS, baz, true); 266 check(superclass, ClassQuery.SUBCLASS, baz, true);
269 check(superclass, ClassQuery.SUBTYPE, foo, true); 267 check(superclass, ClassQuery.SUBTYPE, foo, true);
270 // Should be false since all live subtypes have a concrete implementation: 268 check(superclass, ClassQuery.SUBTYPE, bar, false);
271 check(superclass, ClassQuery.SUBTYPE, bar, true);
272 check(superclass, ClassQuery.SUBTYPE, baz, true); 269 check(superclass, ClassQuery.SUBTYPE, baz, true);
273 270
274 check(subclass, ClassQuery.EXACT, foo, false); 271 check(subclass, ClassQuery.EXACT, foo, false);
275 check(subclass, ClassQuery.EXACT, bar, false); 272 check(subclass, ClassQuery.EXACT, bar, false);
276 check(subclass, ClassQuery.EXACT, baz, true); 273 check(subclass, ClassQuery.EXACT, baz, true);
277 check(subclass, ClassQuery.SUBCLASS, foo, false); 274 check(subclass, ClassQuery.SUBCLASS, foo, false);
278 check(subclass, ClassQuery.SUBCLASS, bar, false); 275 check(subclass, ClassQuery.SUBCLASS, bar, false);
279 check(subclass, ClassQuery.SUBCLASS, baz, true); 276 check(subclass, ClassQuery.SUBCLASS, baz, true);
280 check(subclass, ClassQuery.SUBTYPE, foo, false); 277 check(subclass, ClassQuery.SUBTYPE, foo, false);
281 check(subclass, ClassQuery.SUBTYPE, bar, false); 278 check(subclass, ClassQuery.SUBTYPE, bar, false);
282 check(subclass, ClassQuery.SUBTYPE, baz, true); 279 check(subclass, ClassQuery.SUBTYPE, baz, true);
283 280
284 check(subtype, ClassQuery.EXACT, foo, true); 281 check(subtype, ClassQuery.EXACT, foo, true);
285 check(subtype, ClassQuery.EXACT, bar, false); 282 check(subtype, ClassQuery.EXACT, bar, false);
286 check(subtype, ClassQuery.EXACT, baz, true); 283 check(subtype, ClassQuery.EXACT, baz, true);
287 check(subtype, ClassQuery.SUBCLASS, foo, true); 284 check(subtype, ClassQuery.SUBCLASS, foo, true);
288 check(subtype, ClassQuery.SUBCLASS, bar, false); 285 check(subtype, ClassQuery.SUBCLASS, bar, false);
289 check(subtype, ClassQuery.SUBCLASS, baz, true); 286 check(subtype, ClassQuery.SUBCLASS, baz, true);
290 check(subtype, ClassQuery.SUBTYPE, foo, true); 287 check(subtype, ClassQuery.SUBTYPE, foo, true);
291 check(subtype, ClassQuery.SUBTYPE, bar, false); 288 check(subtype, ClassQuery.SUBTYPE, bar, false);
292 check(subtype, ClassQuery.SUBTYPE, baz, true); 289 check(subtype, ClassQuery.SUBTYPE, baz, true);
293 } 290 }
OLDNEW
« pkg/compiler/lib/src/world.dart ('K') | « pkg/compiler/lib/src/world.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698