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

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

Issue 17502003: Doing a call on a getter does not yield the return type of that getter. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 6 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 'package:expect/expect.dart'; 5 import 'package:expect/expect.dart';
6 import 6 import
7 '../../../sdk/lib/_internal/compiler/implementation/types/types.dart' 7 '../../../sdk/lib/_internal/compiler/implementation/types/types.dart'
8 show TypeMask; 8 show TypeMask;
9 9
10 import 'compiler_helper.dart'; 10 import 'compiler_helper.dart';
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 357
358 testReturnElementOfConstList2() { 358 testReturnElementOfConstList2() {
359 return topLevelConstList[0]; 359 return topLevelConstList[0];
360 } 360 }
361 361
362 testReturnItselfOrInt(a) { 362 testReturnItselfOrInt(a) {
363 if (a) return 42; 363 if (a) return 42;
364 return testReturnItselfOrInt(a); 364 return testReturnItselfOrInt(a);
365 } 365 }
366 366
367 testReturnInvokeDynamicGetter() => new A().myFactory();
kasperl 2013/06/21 05:58:00 Extend test case with calling a field.
368
367 var topLevelConstList = const [42]; 369 var topLevelConstList = const [42];
368 370
369 get topLevelGetter => 42; 371 get topLevelGetter => 42;
370 returnDynamic() => topLevelGetter(42); 372 returnDynamic() => topLevelGetter(42);
371 returnTopLevelGetter() => topLevelGetter; 373 returnTopLevelGetter() => topLevelGetter;
372 374
373 class A { 375 class A {
374 factory A() = A.generative; 376 factory A() = A.generative;
375 A.generative(); 377 A.generative();
376 operator==(other) => 42; 378 operator==(other) => 42;
377 379
378 get myField => 42; 380 get myField => 42;
379 set myField(a) {} 381 set myField(a) {}
380 returnInt1() => ++myField; 382 returnInt1() => ++myField;
381 returnInt2() => ++this.myField; 383 returnInt2() => ++this.myField;
382 returnInt3() => this.myField += 42; 384 returnInt3() => this.myField += 42;
383 returnInt4() => myField += 42; 385 returnInt4() => myField += 42;
384 operator[](index) => 42; 386 operator[](index) => 42;
385 operator[]= (index, value) {} 387 operator[]= (index, value) {}
386 returnInt5() => ++this[0]; 388 returnInt5() => ++this[0];
387 returnInt6() => this[0] += 1; 389 returnInt6() => this[0] += 1;
390
391 get myFactory => () => 42;
kasperl 2013/06/21 05:58:00 var myFactory2 = () => 87;
388 } 392 }
389 393
390 class B extends A { 394 class B extends A {
391 B() : super.generative(); 395 B() : super.generative();
392 returnInt1() => ++new A().myField; 396 returnInt1() => ++new A().myField;
393 returnInt2() => new A().myField += 4; 397 returnInt2() => new A().myField += 4;
394 returnInt3() => ++new A()[0]; 398 returnInt3() => ++new A()[0];
395 returnInt4() => new A()[0] += 42; 399 returnInt4() => new A()[0] += 42;
396 returnInt5() => ++super.myField; 400 returnInt5() => ++super.myField;
397 returnInt6() => super.myField += 4; 401 returnInt6() => super.myField += 4;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 ..returnInt3() 470 ..returnInt3()
467 ..returnInt4() 471 ..returnInt4()
468 ..returnInt5() 472 ..returnInt5()
469 ..returnInt6() 473 ..returnInt6()
470 ..returnInt7() 474 ..returnInt7()
471 ..returnInt8() 475 ..returnInt8()
472 ..returnInt9(); 476 ..returnInt9();
473 testReturnElementOfConstList1(); 477 testReturnElementOfConstList1();
474 testReturnElementOfConstList2(); 478 testReturnElementOfConstList2();
475 testReturnItselfOrInt(topLevelGetter()); 479 testReturnItselfOrInt(topLevelGetter());
480 testReturnInvokeDynamicGetter();
476 } 481 }
477 """; 482 """;
478 483
479 void main() { 484 void main() {
480 Uri uri = new Uri(scheme: 'source'); 485 Uri uri = new Uri(scheme: 'source');
481 var compiler = compilerFor(TEST, uri); 486 var compiler = compilerFor(TEST, uri);
482 compiler.runCompiler(uri); 487 compiler.runCompiler(uri);
483 var typesInferrer = compiler.typesTask.typesInferrer; 488 var typesInferrer = compiler.typesTask.typesInferrer;
484 489
485 checkReturn(String name, type) { 490 checkReturn(String name, type) {
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 checkReturn('testSwitch2', typesInferrer.intType); 546 checkReturn('testSwitch2', typesInferrer.intType);
542 checkReturn('testSwitch3', interceptorType.nullable()); 547 checkReturn('testSwitch3', interceptorType.nullable());
543 checkReturn('testSwitch4', typesInferrer.intType); 548 checkReturn('testSwitch4', typesInferrer.intType);
544 checkReturn('testContinue1', interceptorType.nullable()); 549 checkReturn('testContinue1', interceptorType.nullable());
545 checkReturn('testBreak1', interceptorType.nullable()); 550 checkReturn('testBreak1', interceptorType.nullable());
546 checkReturn('testContinue2', interceptorType.nullable()); 551 checkReturn('testContinue2', interceptorType.nullable());
547 checkReturn('testBreak2', typesInferrer.intType.nullable()); 552 checkReturn('testBreak2', typesInferrer.intType.nullable());
548 checkReturn('testReturnElementOfConstList1', typesInferrer.intType); 553 checkReturn('testReturnElementOfConstList1', typesInferrer.intType);
549 checkReturn('testReturnElementOfConstList2', typesInferrer.intType); 554 checkReturn('testReturnElementOfConstList2', typesInferrer.intType);
550 checkReturn('testReturnItselfOrInt', typesInferrer.intType); 555 checkReturn('testReturnItselfOrInt', typesInferrer.intType);
556 checkReturn('testReturnInvokeDynamicGetter', typesInferrer.dynamicType);
551 557
552 checkReturnInClass(String className, String methodName, type) { 558 checkReturnInClass(String className, String methodName, type) {
553 var cls = findElement(compiler, className); 559 var cls = findElement(compiler, className);
554 var element = cls.lookupLocalMember(buildSourceString(methodName)); 560 var element = cls.lookupLocalMember(buildSourceString(methodName));
555 Expect.equals(type, 561 Expect.equals(type,
556 typesInferrer.internal.returnTypeOf[element].simplify(compiler)); 562 typesInferrer.internal.returnTypeOf[element].simplify(compiler));
557 } 563 }
558 564
559 checkReturnInClass('A', 'returnInt1', typesInferrer.intType); 565 checkReturnInClass('A', 'returnInt1', typesInferrer.intType);
560 checkReturnInClass('A', 'returnInt2', typesInferrer.intType); 566 checkReturnInClass('A', 'returnInt2', typesInferrer.intType);
(...skipping 14 matching lines...) Expand all
575 checkReturnInClass('B', 'returnInt9', typesInferrer.intType); 581 checkReturnInClass('B', 'returnInt9', typesInferrer.intType);
576 582
577 checkFactoryConstructor(String className) { 583 checkFactoryConstructor(String className) {
578 var cls = findElement(compiler, className); 584 var cls = findElement(compiler, className);
579 var element = cls.localLookup(buildSourceString(className)); 585 var element = cls.localLookup(buildSourceString(className));
580 Expect.equals(new TypeMask.nonNullExact(cls.rawType), 586 Expect.equals(new TypeMask.nonNullExact(cls.rawType),
581 typesInferrer.internal.returnTypeOf[element]); 587 typesInferrer.internal.returnTypeOf[element]);
582 } 588 }
583 checkFactoryConstructor('A'); 589 checkFactoryConstructor('A');
584 } 590 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698