| OLD | NEW |
| 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 'compiler_helper.dart'; | 5 import 'compiler_helper.dart'; |
| 6 import 'parser_helper.dart'; |
| 6 | 7 |
| 7 const String TEST = """ | 8 const String TEST = """ |
| 8 returnNum1(a) { | 9 returnNum1(a) { |
| 9 if (a) return 1; | 10 if (a) return 1; |
| 10 else return 2.0; | 11 else return 2.0; |
| 11 } | 12 } |
| 12 | 13 |
| 13 returnNum2(a) { | 14 returnNum2(a) { |
| 14 if (a) return 1.0; | 15 if (a) return 1.0; |
| 15 else return 2; | 16 else return 2; |
| 16 } | 17 } |
| 17 | 18 |
| 18 returnInt(a) { | 19 returnInt1(a) { |
| 19 if (a) return 1; | 20 if (a) return 1; |
| 20 else return 2; | 21 else return 2; |
| 21 } | 22 } |
| 22 | 23 |
| 23 returnDouble(a) { | 24 returnDouble(a) { |
| 24 if (a) return 1.0; | 25 if (a) return 1.0; |
| 25 else return 2.0; | 26 else return 2.0; |
| 26 } | 27 } |
| 27 | 28 |
| 28 returnGiveUp(a) { | 29 returnGiveUp(a) { |
| 29 if (a) return 1; | 30 if (a) return 1; |
| 30 else return 'foo'; | 31 else return 'foo'; |
| 31 } | 32 } |
| 32 | 33 |
| 34 returnInt2() { |
| 35 var a = 42; |
| 36 return a++; |
| 37 } |
| 38 |
| 39 returnNum3() { |
| 40 var a = 42; |
| 41 return ++a; |
| 42 } |
| 43 |
| 44 returnNum4() { |
| 45 var a = 42; |
| 46 a++; |
| 47 return a; |
| 48 } |
| 49 |
| 50 class A { |
| 51 get myField => 42; |
| 52 set myField(a) {} |
| 53 returnNum1() => ++myField; |
| 54 returnNum2() => ++this.myField; |
| 55 returnNum3() => this.myField += 42; |
| 56 returnNum4() => myField += 42; |
| 57 operator[](index) => 42; |
| 58 operator[]= (index, value) {} |
| 59 returnNum5() => ++this[0]; |
| 60 returnNum6() => this[0] += 1; |
| 61 } |
| 62 |
| 63 class B extends A { |
| 64 returnNum1() => ++new A().myField; |
| 65 returnNum2() => new A().myField += 4; |
| 66 returnNum3() => ++new A()[0]; |
| 67 returnNum4() => new A()[0] += 42; |
| 68 returnNum5() => ++super.myField; |
| 69 returnNum6() => super.myField += 4; |
| 70 returnNum7() => ++super[0]; |
| 71 returnNum8() => super[0] += 54; |
| 72 } |
| 73 |
| 33 main() { | 74 main() { |
| 34 returnNum1(true); | 75 returnNum1(true); |
| 35 returnNum2(true); | 76 returnNum2(true); |
| 36 returnInt(true); | 77 returnInt1(true); |
| 78 returnInt2(true); |
| 37 returnDouble(true); | 79 returnDouble(true); |
| 38 returnGiveUp(true); | 80 returnGiveUp(true); |
| 81 returnNum3(); |
| 82 returnNum4(); |
| 83 new A()..returnNum1() |
| 84 ..returnNum2() |
| 85 ..returnNum3() |
| 86 ..returnNum4() |
| 87 ..returnNum5() |
| 88 ..returnNum6(); |
| 89 |
| 90 new B()..returnNum1() |
| 91 ..returnNum2() |
| 92 ..returnNum3() |
| 93 ..returnNum4() |
| 94 ..returnNum5() |
| 95 ..returnNum6() |
| 96 ..returnNum7() |
| 97 ..returnNum8(); |
| 39 } | 98 } |
| 40 """; | 99 """; |
| 41 | 100 |
| 42 void main() { | 101 void main() { |
| 43 Uri uri = new Uri.fromComponents(scheme: 'source'); | 102 Uri uri = new Uri.fromComponents(scheme: 'source'); |
| 44 var compiler = compilerFor(TEST, uri); | 103 var compiler = compilerFor(TEST, uri); |
| 45 compiler.runCompiler(uri); | 104 compiler.runCompiler(uri); |
| 46 var typesInferrer = compiler.typesTask.typesInferrer; | 105 var typesInferrer = compiler.typesTask.typesInferrer; |
| 47 | 106 |
| 48 var element = findElement(compiler, 'returnNum1'); | 107 checkReturn(String name, type) { |
| 49 Expect.equals(compiler.numClass, typesInferrer.returnTypeOf[element]); | 108 var element = findElement(compiler, name); |
| 109 Expect.equals(type, typesInferrer.returnTypeOf[element]); |
| 110 } |
| 111 checkReturn('returnNum1', compiler.numClass); |
| 112 checkReturn('returnNum2', compiler.numClass); |
| 113 checkReturn('returnInt1', compiler.intClass); |
| 114 checkReturn('returnInt2', compiler.intClass); |
| 115 checkReturn('returnDouble', compiler.doubleClass); |
| 116 checkReturn('returnGiveUp', typesInferrer.giveUpType); |
| 117 checkReturn('returnNum3', compiler.numClass); |
| 118 checkReturn('returnNum4', compiler.numClass); |
| 50 | 119 |
| 51 element = findElement(compiler, 'returnNum2'); | 120 checkReturnInClass(String className, String methodName, type) { |
| 52 Expect.equals(compiler.numClass, typesInferrer.returnTypeOf[element]); | 121 var cls = findElement(compiler, className); |
| 122 var element = cls.lookupLocalMember(buildSourceString(methodName)); |
| 123 Expect.equals(type, typesInferrer.returnTypeOf[element]); |
| 124 } |
| 53 | 125 |
| 54 element = findElement(compiler, 'returnInt'); | 126 checkReturnInClass('A', 'returnNum1', compiler.numClass); |
| 55 Expect.equals(compiler.intClass, typesInferrer.returnTypeOf[element]); | 127 checkReturnInClass('A', 'returnNum2', compiler.numClass); |
| 128 checkReturnInClass('A', 'returnNum3', compiler.numClass); |
| 129 checkReturnInClass('A', 'returnNum4', compiler.numClass); |
| 130 checkReturnInClass('A', 'returnNum5', compiler.numClass); |
| 131 checkReturnInClass('A', 'returnNum6', compiler.numClass); |
| 56 | 132 |
| 57 element = findElement(compiler, 'returnDouble'); | 133 checkReturnInClass('B', 'returnNum1', compiler.numClass); |
| 58 Expect.equals(compiler.doubleClass, typesInferrer.returnTypeOf[element]); | 134 checkReturnInClass('B', 'returnNum2', compiler.numClass); |
| 59 | 135 checkReturnInClass('B', 'returnNum3', compiler.numClass); |
| 60 element = findElement(compiler, 'returnGiveUp'); | 136 checkReturnInClass('B', 'returnNum4', compiler.numClass); |
| 61 Expect.equals(typesInferrer.giveUpType, typesInferrer.returnTypeOf[element]); | 137 checkReturnInClass('B', 'returnNum5', compiler.numClass); |
| 138 checkReturnInClass('B', 'returnNum6', compiler.numClass); |
| 139 checkReturnInClass('B', 'returnNum7', compiler.numClass); |
| 140 checkReturnInClass('B', 'returnNum8', compiler.numClass); |
| 62 } | 141 } |
| OLD | NEW |