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

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

Issue 1431513010: Revert "Normalize type masks to use the least upper instantiated subclass/type." (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 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
« no previous file with comments | « pkg/compiler/lib/src/world.dart ('k') | tests/compiler/dart2js/mock_libraries.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 members_test; 5 library members_test;
6 6
7 import 'package:expect/expect.dart'; 7 import 'package:expect/expect.dart';
8 import "package:async_helper/async_helper.dart"; 8 import "package:async_helper/async_helper.dart";
9 import 'type_test_helper.dart'; 9 import 'type_test_helper.dart';
10 import 'package:compiler/src/dart_types.dart'; 10 import 'package:compiler/src/dart_types.dart';
11 import "package:compiler/src/elements/elements.dart" 11 import "package:compiler/src/elements/elements.dart"
12 show Element, ClassElement, MemberSignature, Name, PublicName, 12 show Element, ClassElement, MemberSignature, Name, PublicName,
13 DeclaredMember, Member; 13 DeclaredMember, Member;
14 import "package:compiler/src/resolution/class_members.dart" 14 import "package:compiler/src/resolution/class_members.dart"
15 show MembersCreator, DeclaredMember, ErroneousMember, SyntheticMember; 15 show DeclaredMember, ErroneousMember, SyntheticMember;
16 16
17 void main() { 17 void main() {
18 testClassMembers(); 18 testClassMembers();
19 testInterfaceMembers(); 19 testInterfaceMembers();
20 testClassVsInterfaceMembers(); 20 testClassVsInterfaceMembers();
21 testMixinMembers(); 21 testMixinMembers();
22 testMixinMembersWithoutImplements(); 22 testMixinMembersWithoutImplements();
23 } 23 }
24 24
25 MemberSignature getMember(InterfaceType cls, String name, 25 MemberSignature getMember(InterfaceType cls, String name,
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 type: int_, functionType: env.functionType(int_, [])); 205 type: int_, functionType: env.functionType(int_, []));
206 checkMember(Object_, 'noSuchMethod', 206 checkMember(Object_, 'noSuchMethod',
207 functionType: env.functionType(dynamic_, [Invocation_])); 207 functionType: env.functionType(dynamic_, [Invocation_]));
208 checkMember(Object_, 'runtimeType', 208 checkMember(Object_, 'runtimeType',
209 isGetter: true, 209 isGetter: true,
210 type: Type_, functionType: env.functionType(Type_, [])); 210 type: Type_, functionType: env.functionType(Type_, []));
211 checkMember(Object_, 'toString', 211 checkMember(Object_, 'toString',
212 functionType: env.functionType(String_, [])); 212 functionType: env.functionType(String_, []));
213 213
214 InterfaceType A = env['A']; 214 InterfaceType A = env['A'];
215 MembersCreator.computeAllClassMembers(env.compiler, A.element);
216
217 checkMemberCount(A, 5 /*inherited*/ + 9 /*non-static declared*/, 215 checkMemberCount(A, 5 /*inherited*/ + 9 /*non-static declared*/,
218 interfaceMembers: true); 216 interfaceMembers: true);
219 checkMemberCount(A, 5 /*inherited*/ + 9 /*non-abstract declared*/ + 217 checkMemberCount(A, 5 /*inherited*/ + 9 /*non-abstract declared*/ +
220 3 /* abstract declared */, 218 3 /* abstract declared */,
221 interfaceMembers: false); 219 interfaceMembers: false);
222 220
223 checkMember(A, '==', inheritedFrom: Object_); 221 checkMember(A, '==', inheritedFrom: Object_);
224 checkMember(A, 'hashCode', inheritedFrom: Object_); 222 checkMember(A, 'hashCode', inheritedFrom: Object_);
225 checkMember(A, 'noSuchMethod', inheritedFrom: Object_); 223 checkMember(A, 'noSuchMethod', inheritedFrom: Object_);
226 checkMember(A, 'runtimeType', inheritedFrom: Object_); 224 checkMember(A, 'runtimeType', inheritedFrom: Object_);
(...skipping 23 matching lines...) Expand all
250 functionType: env.functionType(dynamic_, [dynamic_])); 248 functionType: env.functionType(dynamic_, [dynamic_]));
251 249
252 checkMember(A, 'method', functionType: env.functionType(dynamic_, [])); 250 checkMember(A, 'method', functionType: env.functionType(dynamic_, []));
253 checkMember(A, 'abstractMethod', 251 checkMember(A, 'abstractMethod',
254 functionType: env.functionType(dynamic_, [])); 252 functionType: env.functionType(dynamic_, []));
255 checkMember(A, 'staticMethod', 253 checkMember(A, 'staticMethod',
256 checkType: CHECK_CLASS, 254 checkType: CHECK_CLASS,
257 isStatic: true, functionType: env.functionType(dynamic_, [])); 255 isStatic: true, functionType: env.functionType(dynamic_, []));
258 256
259 ClassElement B = env.getElement('B'); 257 ClassElement B = env.getElement('B');
260 MembersCreator.computeAllClassMembers(env.compiler, B);
261 InterfaceType B_this = B.thisType; 258 InterfaceType B_this = B.thisType;
262 TypeVariableType B_T = B_this.typeArguments.first; 259 TypeVariableType B_T = B_this.typeArguments.first;
263 checkMemberCount(B_this, 4 /*inherited*/ + 4 /*non-static declared*/, 260 checkMemberCount(B_this, 4 /*inherited*/ + 4 /*non-static declared*/,
264 interfaceMembers: true); 261 interfaceMembers: true);
265 checkMemberCount(B_this, 4 /*inherited*/ + 5 /*declared*/, 262 checkMemberCount(B_this, 4 /*inherited*/ + 5 /*declared*/,
266 interfaceMembers: false); 263 interfaceMembers: false);
267 264
268 checkMember(B_this, '==', inheritedFrom: Object_); 265 checkMember(B_this, '==', inheritedFrom: Object_);
269 checkMember(B_this, 'hashCode', inheritedFrom: Object_); 266 checkMember(B_this, 'hashCode', inheritedFrom: Object_);
270 checkMember(B_this, 'noSuchMethod', inheritedFrom: Object_); 267 checkMember(B_this, 'noSuchMethod', inheritedFrom: Object_);
271 checkMember(B_this, 'runtimeType', inheritedFrom: Object_); 268 checkMember(B_this, 'runtimeType', inheritedFrom: Object_);
272 269
273 checkMember(B_this, 'field', isGetter: true, 270 checkMember(B_this, 'field', isGetter: true,
274 type: B_T, functionType: env.functionType(B_T, [])); 271 type: B_T, functionType: env.functionType(B_T, []));
275 checkMember(B_this, 'field', isSetter: true, 272 checkMember(B_this, 'field', isSetter: true,
276 type: B_T, functionType: env.functionType(void_, [B_T])); 273 type: B_T, functionType: env.functionType(void_, [B_T]));
277 checkMember(B_this, 'method', functionType: env.functionType(void_, [B_T])); 274 checkMember(B_this, 'method', functionType: env.functionType(void_, [B_T]));
278 checkMember(B_this, 'staticMethod', 275 checkMember(B_this, 'staticMethod',
279 checkType: CHECK_CLASS, 276 checkType: CHECK_CLASS,
280 isStatic: true, functionType: env.functionType(dynamic_, [])); 277 isStatic: true, functionType: env.functionType(dynamic_, []));
281 checkMember(B_this, 'toString', 278 checkMember(B_this, 'toString',
282 functionType: env.functionType(dynamic_, [], 279 functionType: env.functionType(dynamic_, [],
283 optionalParameters: [B_T])); 280 optionalParameters: [B_T]));
284 281
285 ClassElement C = env.getElement('C'); 282 ClassElement C = env.getElement('C');
286 MembersCreator.computeAllClassMembers(env.compiler, C);
287 InterfaceType C_this = C.thisType; 283 InterfaceType C_this = C.thisType;
288 TypeVariableType C_S = C_this.typeArguments.first; 284 TypeVariableType C_S = C_this.typeArguments.first;
289 checkMemberCount(C_this, 8 /*inherited*/, interfaceMembers: true); 285 checkMemberCount(C_this, 8 /*inherited*/, interfaceMembers: true);
290 checkMemberCount(C_this, 8 /*inherited*/, interfaceMembers: false); 286 checkMemberCount(C_this, 8 /*inherited*/, interfaceMembers: false);
291 InterfaceType B_S = instantiate(B, [C_S]); 287 InterfaceType B_S = instantiate(B, [C_S]);
292 288
293 checkMember(C_this, '==', inheritedFrom: Object_); 289 checkMember(C_this, '==', inheritedFrom: Object_);
294 checkMember(C_this, 'hashCode', inheritedFrom: Object_); 290 checkMember(C_this, 'hashCode', inheritedFrom: Object_);
295 checkMember(C_this, 'noSuchMethod', inheritedFrom: Object_); 291 checkMember(C_this, 'noSuchMethod', inheritedFrom: Object_);
296 checkMember(C_this, 'runtimeType', inheritedFrom: Object_); 292 checkMember(C_this, 'runtimeType', inheritedFrom: Object_);
297 293
298 checkMember(C_this, 'field', isGetter: true, 294 checkMember(C_this, 'field', isGetter: true,
299 declarer: B_S, 295 declarer: B_S,
300 type: C_S, functionType: env.functionType(C_S, [])); 296 type: C_S, functionType: env.functionType(C_S, []));
301 checkMember(C_this, 'field', isSetter: true, 297 checkMember(C_this, 'field', isSetter: true,
302 declarer: B_S, 298 declarer: B_S,
303 type: C_S, functionType: env.functionType(void_, [C_S])); 299 type: C_S, functionType: env.functionType(void_, [C_S]));
304 checkMember(C_this, 'method', 300 checkMember(C_this, 'method',
305 declarer: B_S, 301 declarer: B_S,
306 functionType: env.functionType(void_, [C_S])); 302 functionType: env.functionType(void_, [C_S]));
307 checkMember(C_this, 'toString', 303 checkMember(C_this, 'toString',
308 declarer: B_S, 304 declarer: B_S,
309 functionType: env.functionType(dynamic_, [], 305 functionType: env.functionType(dynamic_, [],
310 optionalParameters: [C_S])); 306 optionalParameters: [C_S]));
311 307
312 InterfaceType D = env['D']; 308 InterfaceType D = env['D'];
313 MembersCreator.computeAllClassMembers(env.compiler, D.element);
314 checkMemberCount(D, 8 /*inherited*/, interfaceMembers: true); 309 checkMemberCount(D, 8 /*inherited*/, interfaceMembers: true);
315 checkMemberCount(D, 8 /*inherited*/, interfaceMembers: false); 310 checkMemberCount(D, 8 /*inherited*/, interfaceMembers: false);
316 InterfaceType B_int = instantiate(B, [int_]); 311 InterfaceType B_int = instantiate(B, [int_]);
317 312
318 checkMember(D, '==', inheritedFrom: Object_); 313 checkMember(D, '==', inheritedFrom: Object_);
319 checkMember(D, 'hashCode', inheritedFrom: Object_); 314 checkMember(D, 'hashCode', inheritedFrom: Object_);
320 checkMember(D, 'noSuchMethod', inheritedFrom: Object_); 315 checkMember(D, 'noSuchMethod', inheritedFrom: Object_);
321 checkMember(D, 'runtimeType', inheritedFrom: Object_); 316 checkMember(D, 'runtimeType', inheritedFrom: Object_);
322 317
323 checkMember(D, 'field', isGetter: true, 318 checkMember(D, 'field', isGetter: true,
324 declarer: B_int, 319 declarer: B_int,
325 type: int_, functionType: env.functionType(int_, [])); 320 type: int_, functionType: env.functionType(int_, []));
326 checkMember(D, 'field', isSetter: true, 321 checkMember(D, 'field', isSetter: true,
327 declarer: B_int, 322 declarer: B_int,
328 type: int_, functionType: env.functionType(void_, [int_])); 323 type: int_, functionType: env.functionType(void_, [int_]));
329 checkMember(D, 'method', 324 checkMember(D, 'method',
330 declarer: B_int, 325 declarer: B_int,
331 functionType: env.functionType(void_, [int_])); 326 functionType: env.functionType(void_, [int_]));
332 checkMember(D, 'toString', 327 checkMember(D, 'toString',
333 declarer: B_int, 328 declarer: B_int,
334 functionType: env.functionType(dynamic_, [], 329 functionType: env.functionType(dynamic_, [],
335 optionalParameters: [int_])); 330 optionalParameters: [int_]));
336 331
337 InterfaceType E = env['E']; 332 InterfaceType E = env['E'];
338 MembersCreator.computeAllClassMembers(env.compiler, E.element);
339 checkMemberCount(E, 8 /*inherited*/, interfaceMembers: true); 333 checkMemberCount(E, 8 /*inherited*/, interfaceMembers: true);
340 checkMemberCount(E, 8 /*inherited*/, interfaceMembers: false); 334 checkMemberCount(E, 8 /*inherited*/, interfaceMembers: false);
341 335
342 checkMember(E, '==', inheritedFrom: Object_); 336 checkMember(E, '==', inheritedFrom: Object_);
343 checkMember(E, 'hashCode', inheritedFrom: Object_); 337 checkMember(E, 'hashCode', inheritedFrom: Object_);
344 checkMember(E, 'noSuchMethod', inheritedFrom: Object_); 338 checkMember(E, 'noSuchMethod', inheritedFrom: Object_);
345 checkMember(E, 'runtimeType', inheritedFrom: Object_); 339 checkMember(E, 'runtimeType', inheritedFrom: Object_);
346 340
347 checkMember(E, 'field', isGetter: true, 341 checkMember(E, 'field', isGetter: true,
348 declarer: B_int, 342 declarer: B_int,
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 DynamicType dynamic_ = env['dynamic']; 404 DynamicType dynamic_ = env['dynamic'];
411 VoidType void_ = env['void']; 405 VoidType void_ = env['void'];
412 InterfaceType num_ = env['num']; 406 InterfaceType num_ = env['num'];
413 InterfaceType int_ = env['int']; 407 InterfaceType int_ = env['int'];
414 408
415 InterfaceType A = env['A']; 409 InterfaceType A = env['A'];
416 InterfaceType B = env['B']; 410 InterfaceType B = env['B'];
417 InterfaceType C = env['C']; 411 InterfaceType C = env['C'];
418 InterfaceType D = env['D']; 412 InterfaceType D = env['D'];
419 413
420 // Ensure that members have been computed on all classes.
421 MembersCreator.computeAllClassMembers(env.compiler, D.element);
422
423 // A: num method1() 414 // A: num method1()
424 // B: int method1() 415 // B: int method1()
425 // D: dynamic method1() -- synthesized from A and B. 416 // D: dynamic method1() -- synthesized from A and B.
426 checkMember(D, 'method1', 417 checkMember(D, 'method1',
427 synthesizedFrom: [A, B], 418 synthesizedFrom: [A, B],
428 functionType: env.functionType(dynamic_ , []), 419 functionType: env.functionType(dynamic_ , []),
429 checkType: NO_CLASS_MEMBER); 420 checkType: NO_CLASS_MEMBER);
430 421
431 // A: void method2() 422 // A: void method2()
432 // B: int method2() 423 // B: int method2()
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 569
579 DynamicType dynamic_ = env['dynamic']; 570 DynamicType dynamic_ = env['dynamic'];
580 VoidType void_ = env['void']; 571 VoidType void_ = env['void'];
581 InterfaceType num_ = env['num']; 572 InterfaceType num_ = env['num'];
582 InterfaceType int_ = env['int']; 573 InterfaceType int_ = env['int'];
583 574
584 InterfaceType A = env['A']; 575 InterfaceType A = env['A'];
585 InterfaceType B = env['B']; 576 InterfaceType B = env['B'];
586 InterfaceType C = env['C']; 577 InterfaceType C = env['C'];
587 578
588 // Ensure that members have been computed on all classes.
589 MembersCreator.computeAllClassMembers(env.compiler, C.element);
590
591 // A: method1() 579 // A: method1()
592 // B: method1() 580 // B: method1()
593 // C class: method1() -- inherited from A. 581 // C class: method1() -- inherited from A.
594 // C interface: dynamic method1() -- synthesized from A and B. 582 // C interface: dynamic method1() -- synthesized from A and B.
595 MemberSignature interfaceMember = 583 MemberSignature interfaceMember =
596 checkMember(C, 'method1', checkType: CHECK_INTERFACE, 584 checkMember(C, 'method1', checkType: CHECK_INTERFACE,
597 synthesizedFrom: [A, B], 585 synthesizedFrom: [A, B],
598 functionType: env.functionType(dynamic_ , [])); 586 functionType: env.functionType(dynamic_ , []));
599 MemberSignature classMember = 587 MemberSignature classMember =
600 checkMember(C, 'method1', checkType: CHECK_CLASS, inheritedFrom: A); 588 checkMember(C, 'method1', checkType: CHECK_CLASS, inheritedFrom: A);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 627
640 ClassElement A = env.getElement('A'); 628 ClassElement A = env.getElement('A');
641 ClassElement B = env.getElement('B'); 629 ClassElement B = env.getElement('B');
642 ClassElement C = env.getElement('C'); 630 ClassElement C = env.getElement('C');
643 InterfaceType C_this = C.thisType; 631 InterfaceType C_this = C.thisType;
644 TypeVariableType C_U = C_this.typeArguments[0]; 632 TypeVariableType C_U = C_this.typeArguments[0];
645 TypeVariableType C_V = C_this.typeArguments[1]; 633 TypeVariableType C_V = C_this.typeArguments[1];
646 InterfaceType A_U = instantiate(A, [C_U]); 634 InterfaceType A_U = instantiate(A, [C_U]);
647 InterfaceType B_V = instantiate(B, [C_V]); 635 InterfaceType B_V = instantiate(B, [C_V]);
648 636
649 // Ensure that members have been computed on all classes.
650 MembersCreator.computeAllClassMembers(env.compiler, C);
651
652 // A: method1() 637 // A: method1()
653 // B: method1() 638 // B: method1()
654 // C class: method1() -- inherited from A. 639 // C class: method1() -- inherited from A.
655 // C interface: dynamic method1() -- synthesized from A and B. 640 // C interface: dynamic method1() -- synthesized from A and B.
656 MemberSignature interfaceMember = 641 MemberSignature interfaceMember =
657 checkMember(C_this, 'method1', checkType: CHECK_INTERFACE, 642 checkMember(C_this, 'method1', checkType: CHECK_INTERFACE,
658 synthesizedFrom: [A_U, B_V], 643 synthesizedFrom: [A_U, B_V],
659 functionType: env.functionType(dynamic_ , [])); 644 functionType: env.functionType(dynamic_ , []));
660 MemberSignature classMember = 645 MemberSignature classMember =
661 checkMember(C_this, 'method1', checkType: CHECK_CLASS, 646 checkMember(C_this, 'method1', checkType: CHECK_CLASS,
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 695
711 DynamicType dynamic_ = env['dynamic']; 696 DynamicType dynamic_ = env['dynamic'];
712 VoidType void_ = env['void']; 697 VoidType void_ = env['void'];
713 InterfaceType num_ = env['num']; 698 InterfaceType num_ = env['num'];
714 InterfaceType int_ = env['int']; 699 InterfaceType int_ = env['int'];
715 700
716 InterfaceType A = env['A']; 701 InterfaceType A = env['A'];
717 InterfaceType B = env['B']; 702 InterfaceType B = env['B'];
718 InterfaceType C = env['C']; 703 InterfaceType C = env['C'];
719 704
720 // Ensure that members have been computed on all classes.
721 MembersCreator.computeAllClassMembers(env.compiler, C.element);
722
723 checkMember(C, 'm', checkType: NO_CLASS_MEMBER, 705 checkMember(C, 'm', checkType: NO_CLASS_MEMBER,
724 inheritedFrom: A, 706 inheritedFrom: A,
725 functionType: env.functionType(dynamic_ , [])); 707 functionType: env.functionType(dynamic_ , []));
726 })); 708 }));
727 } 709 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/world.dart ('k') | tests/compiler/dart2js/mock_libraries.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698