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

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

Issue 12434002: Infer SendSet node correctly. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 9 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 '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
9 if (a) return 1; 10 class A {
10 else return 2.0; 11 get foo => 'string';
12 set foo(value) {}
13 operator[](index) => 'string';
14 operator[]=(index, value) {}
15
16 returnString1() => foo--;
17 returnNum1() => --foo;
18 returnNum2() => foo -= 42;
19
20 returnDynamic1() => this[index]--;
21 returnNum3() => --this[index];
22 returnNum4() => this[index] -= 42;
23
24 returnDynamic2() => this.bar--;
25 returnNum5() => --this.bar;
26 returnNum6() => this.bar -= 42;
11 } 27 }
12 28
13 returnNum2(a) { 29 class B extends A {
14 if (a) return 1.0; 30 returnString1() => super.foo--;
15 else return 2; 31 returnNum1() => --super.foo;
16 } 32 returnNum2() => super.foo -= 42;
17 33
18 returnInt(a) { 34 returnDynamic1() => super[index]--;
19 if (a) return 1; 35 returnNum3() => --super[index];
20 else return 2; 36 returnNum4() => super[index] -= 42;
21 }
22
23 returnDouble(a) {
24 if (a) return 1.0;
25 else return 2.0;
26 }
27
28 returnGiveUp(a) {
29 if (a) return 1;
30 else return 'foo';
31 } 37 }
32 38
33 main() { 39 main() {
34 returnNum1(true); 40 new A()..returnNum1()
35 returnNum2(true); 41 ..returnNum2()
36 returnInt(true); 42 ..returnNum3()
37 returnDouble(true); 43 ..returnNum4()
38 returnGiveUp(true); 44 ..returnNum5()
45 ..returnNum6()
46 ..returnString1()
47 ..returnDynamic1()
48 ..returnDynamic2();
49
50 new B()..returnNum1()
51 ..returnNum2()
52 ..returnNum3()
53 ..returnNum4()
54 ..returnString1()
55 ..returnDynamic1();
39 } 56 }
40 """; 57 """;
41 58
42 void main() { 59 void main() {
43 Uri uri = new Uri.fromComponents(scheme: 'source'); 60 Uri uri = new Uri.fromComponents(scheme: 'source');
44 var compiler = compilerFor(TEST, uri); 61 var compiler = compilerFor(TEST, uri);
45 compiler.runCompiler(uri); 62 compiler.runCompiler(uri);
46 var typesInferrer = compiler.typesTask.typesInferrer; 63 var typesInferrer = compiler.typesTask.typesInferrer;
47 64
48 var element = findElement(compiler, 'returnNum1'); 65 checkReturnInClass(String className, String methodName, type) {
49 Expect.equals(compiler.numClass, typesInferrer.returnTypeOf[element]); 66 var cls = findElement(compiler, className);
67 var element = cls.lookupLocalMember(buildSourceString(methodName));
68 Expect.equals(type, typesInferrer.returnTypeOf[element]);
69 }
50 70
51 element = findElement(compiler, 'returnNum2'); 71 checkReturnInClass('A', 'returnNum1', compiler.numClass);
52 Expect.equals(compiler.numClass, typesInferrer.returnTypeOf[element]); 72 checkReturnInClass('A', 'returnNum2', compiler.numClass);
73 checkReturnInClass('A', 'returnNum3', compiler.numClass);
74 checkReturnInClass('A', 'returnNum4', compiler.numClass);
75 checkReturnInClass('A', 'returnNum5', compiler.numClass);
76 checkReturnInClass('A', 'returnNum6', compiler.numClass);
77 checkReturnInClass('A', 'returnDynamic1', compiler.dynamicClass);
78 checkReturnInClass('A', 'returnDynamic2', compiler.dynamicClass);
79 checkReturnInClass('A', 'returnString1', compiler.stringClass);
53 80
54 element = findElement(compiler, 'returnInt'); 81 checkReturnInClass('B', 'returnNum1', compiler.numClass);
55 Expect.equals(compiler.intClass, typesInferrer.returnTypeOf[element]); 82 checkReturnInClass('B', 'returnNum2', compiler.numClass);
56 83 checkReturnInClass('B', 'returnNum3', compiler.numClass);
57 element = findElement(compiler, 'returnDouble'); 84 checkReturnInClass('B', 'returnNum4', compiler.numClass);
58 Expect.equals(compiler.doubleClass, typesInferrer.returnTypeOf[element]); 85 checkReturnInClass('B', 'returnString1', compiler.stringClass);
59 86 checkReturnInClass('B', 'returnDynamic1', compiler.dynamicClass);
60 element = findElement(compiler, 'returnGiveUp');
61 Expect.equals(typesInferrer.giveUpType, typesInferrer.returnTypeOf[element]);
62 } 87 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698