| // Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| /*element: returnNum1:Union([exact=JSDouble], [exact=JSUInt31])*/ |
| returnNum1(/*Value([exact=JSBool], value: true)*/ a) { |
| if (a) |
| return 1; |
| else |
| return 2.5; |
| } |
| |
| /*element: returnNum2:Union([exact=JSDouble], [exact=JSUInt31])*/ |
| returnNum2(/*Value([exact=JSBool], value: true)*/ a) { |
| if (a) |
| return 1.4; |
| else |
| return 2; |
| } |
| |
| /*element: returnInt1:[exact=JSUInt31]*/ |
| returnInt1(/*Value([exact=JSBool], value: true)*/ a) { |
| if (a) |
| return 1; |
| else |
| return 2; |
| } |
| |
| /*element: returnDouble:[exact=JSDouble]*/ |
| returnDouble(/*Value([exact=JSBool], value: true)*/ a) { |
| if (a) |
| return 1.5; |
| else |
| return 2.5; |
| } |
| |
| /*element: returnGiveUp:Union([exact=JSString], [exact=JSUInt31])*/ |
| returnGiveUp(/*Value([exact=JSBool], value: true)*/ a) { |
| if (a) |
| return 1; |
| else |
| return 'foo'; |
| } |
| |
| /*element: returnInt2:[exact=JSUInt31]*/ |
| returnInt2() { |
| var a = 42; |
| return a /*invoke: [exact=JSUInt31]*/ ++; |
| } |
| |
| /*element: returnInt5:[subclass=JSUInt32]*/ |
| returnInt5() { |
| var a = 42; |
| return /*invoke: [exact=JSUInt31]*/ ++a; |
| } |
| |
| /*element: returnInt6:[subclass=JSUInt32]*/ |
| returnInt6() { |
| var a = 42; |
| a /*invoke: [exact=JSUInt31]*/ ++; |
| return a; |
| } |
| |
| /*element: returnIntOrNull:[null|exact=JSUInt31]*/ |
| returnIntOrNull(/*Value([exact=JSBool], value: true)*/ a) { |
| if (a) return 42; |
| } |
| |
| /*element: returnInt3:[exact=JSUInt31]*/ |
| returnInt3(/*Value([exact=JSBool], value: true)*/ a) { |
| if (a) return 42; |
| throw 42; |
| } |
| |
| /*element: returnInt4:[exact=JSUInt31]*/ |
| returnInt4() { |
| return (42); |
| } |
| |
| /*element: returnInt7:[subclass=JSPositiveInt]*/ |
| returnInt7() { |
| return 42. /*invoke: [exact=JSUInt31]*/ abs(); |
| } |
| |
| /*element: returnInt8:[subclass=JSPositiveInt]*/ |
| returnInt8() { |
| return 42. /*invoke: [exact=JSUInt31]*/ remainder(54); |
| } |
| |
| /*element: returnEmpty1:[empty]*/ |
| returnEmpty1() { |
| // Ensure that we don't intrisify a wrong call to [int.remainder]. |
| dynamic a = 42; |
| return a. /*invoke: [exact=JSUInt31]*/ remainder(); |
| } |
| |
| /*element: returnEmpty2:[empty]*/ |
| returnEmpty2() { |
| // Ensure that we don't intrisify a wrong call to [int.abs]. |
| dynamic a = 42; |
| return a. /*invoke: [exact=JSUInt31]*/ abs(42); |
| } |
| |
| /*element: testIsCheck1:[subclass=JSInt]*/ |
| testIsCheck1(/*[null|subclass=Object]*/ a) { |
| if (a is int) { |
| return a; |
| } else { |
| return 42; |
| } |
| } |
| |
| /*element: testIsCheck2:[subclass=JSInt]*/ |
| testIsCheck2(/*[null|subclass=Object]*/ a) { |
| if (a is! int) { |
| return 0; |
| } else { |
| return a; |
| } |
| } |
| |
| /*element: testIsCheck3:[null|subclass=JSInt]*/ |
| testIsCheck3(/*[null|subclass=Object]*/ a) { |
| if (a is! int) { |
| print('hello'); |
| } else { |
| return a; |
| } |
| } |
| |
| /*element: testIsCheck4:[subclass=JSInt]*/ |
| testIsCheck4(/*[null|subclass=Object]*/ a) { |
| if (a is int) { |
| return a; |
| } else { |
| return 42; |
| } |
| } |
| |
| /*element: testIsCheck5:[subclass=JSInt]*/ |
| testIsCheck5(/*[null|subclass=Object]*/ a) { |
| if (a is! int) { |
| return 42; |
| } else { |
| return a; |
| } |
| } |
| |
| /*element: testIsCheck6:[null|subclass=Object]*/ |
| testIsCheck6(/*[null|subclass=Object]*/ a) { |
| if (a is! int) { |
| return a; |
| } else { |
| return 42; |
| } |
| } |
| |
| /*element: testIsCheck7:[subclass=JSInt]*/ |
| testIsCheck7(/*[null|subclass=Object]*/ a) { |
| if (a == 'foo' && a is int) { |
| return a; |
| } else { |
| return 42; |
| } |
| } |
| |
| /*element: testIsCheck8:[null|subclass=Object]*/ |
| testIsCheck8(/*[null|subclass=Object]*/ a) { |
| if (a == 'foo' || a is int) { |
| return a; |
| } else { |
| return 42; |
| } |
| } |
| |
| /*element: testIsCheck9:[subclass=JSInt]*/ |
| testIsCheck9(/*[null|subclass=Object]*/ a) { |
| return a is int ? a : 42; |
| } |
| |
| /*element: testIsCheck10:[null|subclass=Object]*/ |
| testIsCheck10(/*[null|subclass=Object]*/ a) { |
| return a is! int ? a : 42; |
| } |
| |
| /*element: testIsCheck11:[subclass=JSInt]*/ |
| testIsCheck11(/*[null|subclass=Object]*/ a) { |
| return a is! int ? 42 : a; |
| } |
| |
| /*element: testIsCheck12:[null|subclass=Object]*/ |
| testIsCheck12(/*[null|subclass=Object]*/ a) { |
| return a is int ? 42 : a; |
| } |
| |
| /*element: testIsCheck13:[subclass=JSInt]*/ |
| testIsCheck13(/*[null|subclass=Object]*/ a) { |
| while (a is int) { |
| return a; |
| } |
| return 42; |
| } |
| |
| /*element: testIsCheck14:[null|subclass=Object]*/ |
| testIsCheck14(/*[null|subclass=Object]*/ a) { |
| while (a is! int) { |
| return 42; |
| } |
| return a; |
| } |
| |
| // TODO(29309): Change to [subclass=JSInt] when 29309 is fixed. |
| /*element: testIsCheck15:[null|subclass=Object]*/ |
| testIsCheck15(/*[null|subclass=Object]*/ a) { |
| dynamic c = 42; |
| do { |
| if (a) return c; |
| c = topLevelGetter(); |
| } while (c is int); |
| return 42; |
| } |
| |
| /*element: testIsCheck16:[null|subclass=Object]*/ |
| testIsCheck16(/*[null|subclass=Object]*/ a) { |
| dynamic c = 42; |
| do { |
| if (a) return c; |
| c = topLevelGetter(); |
| } while (c is! int); |
| return 42; |
| } |
| |
| /*element: testIsCheck17:[subclass=JSInt]*/ |
| testIsCheck17(/*[null|subclass=Object]*/ a) { |
| dynamic c = 42; |
| for (; c is int;) { |
| if (a) return c; |
| c = topLevelGetter(); |
| } |
| return 42; |
| } |
| |
| /*element: testIsCheck18:[null|subclass=Object]*/ |
| testIsCheck18(/*[null|subclass=Object]*/ a) { |
| dynamic c = 42; |
| for (; c is int;) { |
| if (a) return c; |
| c = topLevelGetter(); |
| } |
| return c; |
| } |
| |
| /*element: testIsCheck19:[null|subclass=Object]*/ |
| testIsCheck19(/*[null|subclass=Object]*/ a) { |
| dynamic c = 42; |
| for (; c is! int;) { |
| if (a) return c; |
| c = topLevelGetter(); |
| } |
| return 42; |
| } |
| |
| /*element: testIsCheck20:[exact=JSUInt31]*/ |
| testIsCheck20() { |
| var c = topLevelGetter(); |
| if (c != null && c is! bool && c is! int) { |
| return 42; |
| } else if (c is String) { |
| return c; |
| } else { |
| return 68; |
| } |
| } |
| |
| /*element: testIsCheck21:Union([subclass=JSArray], [subclass=JSInt])*/ |
| testIsCheck21(/*[null|subclass=Object]*/ a) { |
| if (a is int || a is List) { |
| return a; |
| } else { |
| return 42; |
| } |
| } |
| |
| /*element: testIsCheck22:Union([subclass=JSArray], [subclass=JSInt])*/ |
| testIsCheck22(/*[null|subclass=Object]*/ a) { |
| return (a is int || a is List) ? a : 42; |
| } |
| |
| /*element: testIsCheck23:[subclass=JSInt]*/ |
| testIsCheck23(/*[null|subclass=Object]*/ a) { |
| if (a is! int) throw 'foo'; |
| return a; |
| } |
| |
| /*element: testIsCheck24:[subclass=JSInt]*/ |
| testIsCheck24(/*[null|subclass=Object]*/ a) { |
| if (a is! int) return 42; |
| return a; |
| } |
| |
| /*element: testIsCheck25:[null|subclass=Object]*/ |
| testIsCheck25(/*[null|subclass=Object]*/ a) { |
| if (a is int) throw 'foo'; |
| return a; |
| } |
| |
| /*element: testIsCheck26:[subclass=JSInt]*/ |
| testIsCheck26(/*[null|subclass=Object]*/ a) { |
| if (a is int) { |
| } else { |
| throw 42; |
| } |
| return a; |
| } |
| |
| /*element: testIsCheck27:[subclass=JSInt]*/ |
| testIsCheck27(/*[null|subclass=Object]*/ a) { |
| if (a is int) { |
| } else { |
| return 42; |
| } |
| return a; |
| } |
| |
| /*element: testIsCheck28:[null|subclass=Object]*/ |
| testIsCheck28(/*[null|subclass=Object]*/ a) { |
| if (a is int) { |
| } else {} |
| return a; |
| } |
| |
| /*element: testIsCheck29:[null|subclass=Object]*/ |
| testIsCheck29(/*[null|subclass=Object]*/ a) { |
| if (a is int) {} |
| return a; |
| } |
| |
| /*element: testIf1:[null|exact=JSUInt31]*/ |
| testIf1(/*[null|subclass=Object]*/ a) { |
| var c = null; |
| if (a) { |
| c = 10; |
| } else {} |
| return c; |
| } |
| |
| /*element: testIf2:[null|exact=JSUInt31]*/ |
| testIf2(/*[null|subclass=Object]*/ a) { |
| var c = null; |
| if (a) { |
| } else { |
| c = 10; |
| } |
| return c; |
| } |
| |
| /*element: returnAsString:[null|exact=JSString]*/ |
| returnAsString() { |
| return topLevelGetter() as String; |
| } |
| |
| /*element: returnIntAsNum:[exact=JSUInt31]*/ |
| returnIntAsNum() { |
| dynamic a = 0; |
| return a as num; |
| } |
| |
| typedef int Foo(); |
| |
| /*element: returnAsTypedef:[null|subclass=Closure]*/ |
| returnAsTypedef() { |
| return topLevelGetter() as Foo; |
| } |
| |
| /*element: testDeadCode:[exact=JSUInt31]*/ |
| testDeadCode() { |
| return 42; |
| // ignore: dead_code |
| return 'foo'; |
| } |
| |
| /*element: testLabeledIf:[null|exact=JSUInt31]*/ |
| testLabeledIf(/*Value([exact=JSBool], value: true)*/ a) { |
| var c; |
| L1: |
| if (a /*invoke: Value([exact=JSBool], value: true)*/ > 1) { |
| if (a /*invoke: [empty]*/ == 2) { |
| break L1; |
| } |
| c = 42; |
| } else { |
| c = 38; |
| } |
| return c; |
| } |
| |
| /*element: testSwitch1:Union([exact=JSUInt31], [null|exact=JSDouble])*/ |
| testSwitch1() { |
| var a = null; |
| switch (topLevelGetter) { |
| case 100: |
| a = 42.5; |
| break; |
| case 200: |
| a = 42; |
| break; |
| } |
| return a; |
| } |
| |
| /*element: testSwitch2:[exact=JSUInt31]*/ |
| testSwitch2() { |
| var a = null; |
| switch (topLevelGetter) { |
| case 100: |
| a = 42; |
| break; |
| case 200: |
| a = 42; |
| break; |
| default: |
| a = 43; |
| } |
| return a; |
| } |
| |
| /*element: testSwitch3:Union([exact=JSString], [null|subclass=JSNumber])*/ |
| testSwitch3() { |
| dynamic a = 42; |
| var b; |
| switch (topLevelGetter) { |
| L1: |
| case 1: |
| b = a /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ + 42; |
| break; |
| case 2: |
| a = 'foo'; |
| continue L1; |
| } |
| return b; |
| } |
| |
| /*element: testSwitch4:[exact=JSUInt31]*/ |
| testSwitch4() { |
| switch (topLevelGetter) { |
| case 1: |
| break; |
| default: |
| break; |
| } |
| return 42; |
| } |
| |
| /*element: testSwitch5:[exact=JSUInt31]*/ |
| testSwitch5() { |
| switch (topLevelGetter) { |
| case 1: |
| return 1; |
| default: |
| return 2; |
| } |
| } |
| |
| /*element: testContinue1:Union([exact=JSString], [null|subclass=JSNumber])*/ |
| testContinue1() { |
| dynamic a = 42; |
| var b; |
| while (true) { |
| b = a /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ + 54; |
| if (b /*invoke: Union([exact=JSString], [subclass=JSNumber])*/ == 42) |
| continue; |
| a = 'foo'; |
| } |
| // ignore: dead_code |
| return b; |
| } |
| |
| /*element: testBreak1:Union([null|exact=JSString], [subclass=JSUInt32])*/ |
| testBreak1() { |
| var a = 42; |
| var b; |
| while (true) { |
| b = a /*invoke: [exact=JSUInt31]*/ + 54; |
| if (b /*invoke: [subclass=JSUInt32]*/ == 42) break; |
| b = 'foo'; |
| } |
| return b; |
| } |
| |
| /*element: testContinue2:Union([exact=JSString], [null|subclass=JSUInt32])*/ |
| testContinue2() { |
| var a = 42; |
| var b; |
| while (true) { |
| b = a /*invoke: [exact=JSUInt31]*/ + 54; |
| if (b /*invoke: [subclass=JSUInt32]*/ == 42) { |
| b = 'foo'; |
| continue; |
| } |
| } |
| // ignore: dead_code |
| return b; |
| } |
| |
| /*element: testBreak2:[null|subclass=JSUInt32]*/ |
| testBreak2() { |
| dynamic a = 42; |
| var b; |
| while (true) { |
| b = a /*invoke: [exact=JSUInt31]*/ + 54; |
| if (b /*invoke: [subclass=JSUInt32]*/ == 42) { |
| a = 'foo'; |
| break; |
| } |
| } |
| return b; |
| } |
| |
| /*element: testReturnElementOfConstList1:[exact=JSUInt31]*/ |
| testReturnElementOfConstList1() { |
| return const [ |
| 42 |
| ] /*Container([exact=JSUnmodifiableArray], element: [exact=JSUInt31], length: 1)*/ [ |
| 0]; |
| } |
| |
| /*element: testReturnElementOfConstList2:[exact=JSUInt31]*/ |
| testReturnElementOfConstList2() { |
| return topLevelConstList /*Container([exact=JSUnmodifiableArray], element: [exact=JSUInt31], length: 1)*/ [ |
| 0]; |
| } |
| |
| /*element: testReturnItselfOrInt:[exact=JSUInt31]*/ |
| testReturnItselfOrInt(/*[null|subclass=Object]*/ a) { |
| if (a) return 42; |
| return testReturnItselfOrInt(a); |
| } |
| |
| /*element: testDoWhile1:Value([exact=JSString], value: "foo")*/ |
| testDoWhile1() { |
| dynamic a = 42; |
| do { |
| a = 'foo'; |
| } while (true); |
| // ignore: dead_code |
| return a; |
| } |
| |
| /*element: testDoWhile2:[null]*/ |
| testDoWhile2() { |
| dynamic a = 42; |
| do { |
| a = 'foo'; |
| // ignore: mixed_return_types |
| return; |
| } while (true); |
| // ignore: dead_code,mixed_return_types |
| return a; |
| } |
| |
| /*element: testDoWhile3:[exact=JSUInt31]*/ |
| testDoWhile3() { |
| dynamic a = 42; |
| do { |
| a = 'foo'; |
| if (true) continue; |
| return 42; |
| } while (true); |
| // ignore: dead_code |
| return a; |
| } |
| |
| /*element: testDoWhile4:Union([exact=JSDouble], [exact=JSUInt31])*/ |
| testDoWhile4() { |
| dynamic a = 'foo'; |
| do { |
| a = 54; |
| if (true) break; |
| return 3.5; |
| } while (true); |
| return a; |
| } |
| |
| /*element: testSpecialization1:[subclass=JSNumber]*/ |
| testSpecialization1() { |
| var a = topLevelGetter(); |
| a - 42; |
| return a; |
| } |
| |
| /*element: testSpecialization2:[null|subclass=Object]*/ |
| testSpecialization2() { |
| var a = topLevelGetter(); |
| // Make [a] a captured variable. This should disable receiver |
| // specialization on [a]. |
| ( |
| /*[null|exact=JSString]*/ |
| () => a.toString())(); |
| a - 42; |
| return a; |
| } |
| |
| /*element: testSpecialization3:[null|exact=JSUInt31]*/ |
| testSpecialization3() { |
| var a = returnDynamic() ? null : 42; |
| a. /*invoke: [null|exact=JSUInt31]*/ toString(); |
| // Test that calling an [Object] method on [a] will not lead to |
| // infer that [a] is not null; |
| return a; |
| } |
| |
| /*element: testReturnNull1:[null]*/ |
| testReturnNull1(/*[null|subclass=Object]*/ a) { |
| if (a == null) return a; |
| return null; |
| } |
| |
| /*element: testReturnNull2:[null]*/ |
| testReturnNull2(/*[null|subclass=Object]*/ a) { |
| if (a != null) return null; |
| return a; |
| } |
| |
| /*element: testReturnNull3:[null|subclass=Object]*/ |
| testReturnNull3(/*[null|subclass=Object]*/ a) { |
| if (a == null) return 42; |
| return a; |
| } |
| |
| /*element: testReturnNull4:[null]*/ |
| testReturnNull4() { |
| var a = topLevelGetter(); |
| if (a == null) return a; |
| return null; |
| } |
| |
| /*element: testReturnNull5:[null]*/ |
| testReturnNull5() { |
| var a = topLevelGetter(); |
| if (a != null) return null; |
| return a; |
| } |
| |
| /*element: testReturnNull6:[null|subclass=Object]*/ |
| testReturnNull6() { |
| var a = topLevelGetter(); |
| if (a == null) return 42; |
| return a; |
| } |
| |
| /*element: testReturnNotEquals:[exact=JSBool]*/ |
| testReturnNotEquals() { |
| return new A() /*invoke: [exact=A]*/ != 54; |
| } |
| |
| /*element: testReturnInvokeDynamicGetter:[null|subclass=Object]*/ |
| testReturnInvokeDynamicGetter() => new A(). /*invoke: [exact=A]*/ myFactory(); |
| |
| /*element: topLevelConstList:Container([exact=JSUnmodifiableArray], element: [exact=JSUInt31], length: 1)*/ |
| var topLevelConstList = const [42]; |
| |
| /*element: topLevelGetter:[exact=JSUInt31]*/ |
| get topLevelGetter => 42; |
| |
| /*element: returnDynamic:[null|subclass=Object]*/ |
| returnDynamic() => topLevelGetter(42); |
| |
| /*element: returnTopLevelGetter:[exact=JSUInt31]*/ |
| returnTopLevelGetter() => topLevelGetter; |
| |
| class A { |
| factory A() = A.generative; |
| |
| /*element: A.generative:[exact=A]*/ |
| A.generative(); |
| |
| /*element: A.==:[exact=JSBool]*/ |
| operator ==(/*Union([exact=JSString], [exact=JSUInt31])*/ other) => |
| 42 as dynamic; |
| |
| /*element: A.myField:[exact=JSUInt31]*/ |
| get myField => 42; |
| |
| set myField(/*[subclass=JSUInt32]*/ a) {} |
| |
| /*element: A.returnInt1:[subclass=JSUInt32]*/ |
| returnInt1() => /*invoke: [exact=JSUInt31]*/ ++ /*[subclass=A]*/ /*update: [subclass=A]*/ myField; |
| |
| /*element: A.returnInt2:[subclass=JSUInt32]*/ |
| returnInt2() => /*invoke: [exact=JSUInt31]*/ ++this |
| . /*[subclass=A]*/ /*update: [subclass=A]*/ myField; |
| |
| /*element: A.returnInt3:[subclass=JSUInt32]*/ |
| returnInt3() => |
| this. /*[subclass=A]*/ /*update: [subclass=A]*/ myField /*invoke: [exact=JSUInt31]*/ += |
| 42; |
| |
| /*element: A.returnInt4:[subclass=JSUInt32]*/ |
| returnInt4() => /*[subclass=A]*/ /*update: [subclass=A]*/ myField /*invoke: [exact=JSUInt31]*/ += |
| 42; |
| |
| /*element: A.[]:[exact=JSUInt31]*/ |
| operator [](/*[exact=JSUInt31]*/ index) => 42; |
| |
| /*element: A.[]=:[null]*/ |
| operator []=(/*[exact=JSUInt31]*/ index, /*[subclass=JSUInt32]*/ value) {} |
| |
| /*element: A.returnInt5:[subclass=JSUInt32]*/ |
| returnInt5() => /*invoke: [exact=JSUInt31]*/ ++this /*[subclass=A]*/ /*update: [subclass=A]*/ [ |
| 0]; |
| |
| /*element: A.returnInt6:[subclass=JSUInt32]*/ |
| returnInt6() => this /*[subclass=A]*/ /*update: [subclass=A]*/ [ |
| 0] /*invoke: [exact=JSUInt31]*/ += 1; |
| |
| /*element: A.myFactory:[subclass=Closure]*/ |
| get myFactory => /*[exact=JSUInt31]*/ () => 42; |
| } |
| |
| class B extends A { |
| /*element: B.:[exact=B]*/ |
| B() : super.generative(); |
| |
| /*element: B.returnInt1:[subclass=JSUInt32]*/ |
| returnInt1() => /*invoke: [exact=JSUInt31]*/ ++new A() |
| . /*[exact=A]*/ /*update: [exact=A]*/ myField; |
| |
| /*element: B.returnInt2:[subclass=JSUInt32]*/ |
| returnInt2() => new A() |
| . /*[exact=A]*/ /*update: [exact=A]*/ myField /*invoke: [exact=JSUInt31]*/ += 4; |
| |
| /*element: B.returnInt3:[subclass=JSUInt32]*/ |
| returnInt3() => /*invoke: [exact=JSUInt31]*/ ++new A() /*[exact=A]*/ /*update: [exact=A]*/ [ |
| 0]; |
| |
| /*element: B.returnInt4:[subclass=JSUInt32]*/ |
| returnInt4() => new A() /*[exact=A]*/ /*update: [exact=A]*/ [ |
| 0] /*invoke: [exact=JSUInt31]*/ += 42; |
| |
| /*element: B.returnInt5:[subclass=JSUInt32]*/ |
| returnInt5() => /*invoke: [exact=JSUInt31]*/ ++super.myField; |
| |
| /*element: B.returnInt6:[subclass=JSUInt32]*/ |
| returnInt6() => super.myField /*invoke: [exact=JSUInt31]*/ += 4; |
| |
| /*element: B.returnInt7:[subclass=JSUInt32]*/ |
| returnInt7() => /*invoke: [exact=JSUInt31]*/ ++super[0]; |
| |
| /*element: B.returnInt8:[subclass=JSUInt32]*/ |
| returnInt8() => super[0] /*invoke: [exact=JSUInt31]*/ += 54; |
| |
| /*element: B.returnInt9:[exact=JSUInt31]*/ |
| returnInt9() => super.myField; |
| } |
| |
| class C { |
| /*element: C.myField:[subclass=JSPositiveInt]*/ |
| var myField = 42; |
| |
| /*element: C.:[exact=C]*/ |
| C(); |
| |
| /*element: C.returnInt1:[subclass=JSPositiveInt]*/ |
| returnInt1() => /*invoke: [subclass=JSPositiveInt]*/ ++ /*[exact=C]*/ /*update: [exact=C]*/ myField; |
| |
| /*element: C.returnInt2:[subclass=JSPositiveInt]*/ |
| returnInt2() => /*invoke: [subclass=JSPositiveInt]*/ ++this |
| . /*[exact=C]*/ /*update: [exact=C]*/ myField; |
| |
| /*element: C.returnInt3:[subclass=JSPositiveInt]*/ |
| returnInt3() => |
| this. /*[exact=C]*/ /*update: [exact=C]*/ myField /*invoke: [subclass=JSPositiveInt]*/ += |
| 42; |
| |
| /*element: C.returnInt4:[subclass=JSPositiveInt]*/ |
| returnInt4() => /*[exact=C]*/ /*update: [exact=C]*/ myField /*invoke: [subclass=JSPositiveInt]*/ += |
| 42; |
| |
| /*element: C.[]:[subclass=JSPositiveInt]*/ |
| operator [](/*[exact=JSUInt31]*/ index) => /*[exact=C]*/ myField; |
| |
| /*element: C.[]=:[null]*/ |
| operator []=( |
| /*[exact=JSUInt31]*/ index, |
| /*[subclass=JSPositiveInt]*/ value) {} |
| |
| /*element: C.returnInt5:[subclass=JSPositiveInt]*/ |
| returnInt5() => /*invoke: [subclass=JSPositiveInt]*/ ++this /*[exact=C]*/ /*update: [exact=C]*/ [ |
| 0]; |
| |
| /*element: C.returnInt6:[subclass=JSPositiveInt]*/ |
| returnInt6() => this /*[exact=C]*/ /*update: [exact=C]*/ [ |
| 0] /*invoke: [subclass=JSPositiveInt]*/ += 1; |
| } |
| |
| /*element: testCascade1:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null)*/ |
| testCascade1() { |
| return [1, 2, 3] |
| .. /*invoke: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null)*/ |
| add(4) |
| .. /*invoke: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null)*/ |
| add(5); |
| } |
| |
| /*element: testCascade2:[exact=CascadeHelper]*/ |
| testCascade2() { |
| return new CascadeHelper() |
| .. /*update: [exact=CascadeHelper]*/ a = "hello" |
| .. /*update: [exact=CascadeHelper]*/ b = 42 |
| .. /*[exact=CascadeHelper]*/ /*update: [exact=CascadeHelper]*/ i |
| /*invoke: [subclass=JSPositiveInt]*/ += 1; |
| } |
| |
| /*element: CascadeHelper.:[exact=CascadeHelper]*/ |
| class CascadeHelper { |
| /*element: CascadeHelper.a:Value([null|exact=JSString], value: "hello")*/ |
| var a; |
| |
| /*element: CascadeHelper.b:[null|exact=JSUInt31]*/ |
| var b; |
| |
| /*element: CascadeHelper.i:[subclass=JSPositiveInt]*/ |
| var i = 0; |
| } |
| |
| /*element: main:[null]*/ |
| main() { |
| // Ensure a function class is being instantiated. |
| /*[exact=JSUInt31]*/ () => 42; |
| returnNum1(true); |
| returnNum2(true); |
| returnInt1(true); |
| returnInt2(); |
| returnInt3(true); |
| returnInt4(); |
| returnDouble(true); |
| returnGiveUp(true); |
| returnInt5(); |
| returnInt6(); |
| returnInt7(); |
| returnInt8(); |
| returnIntOrNull(true); |
| returnDynamic(); |
| returnEmpty1(); |
| returnEmpty2(); |
| testIsCheck1(topLevelGetter()); |
| testIsCheck2(topLevelGetter()); |
| testIsCheck3(topLevelGetter()); |
| testIsCheck4(topLevelGetter()); |
| testIsCheck5(topLevelGetter()); |
| testIsCheck6(topLevelGetter()); |
| testIsCheck7(topLevelGetter()); |
| testIsCheck8(topLevelGetter()); |
| testIsCheck9(topLevelGetter()); |
| testIsCheck10(topLevelGetter()); |
| testIsCheck11(topLevelGetter()); |
| testIsCheck12(topLevelGetter()); |
| testIsCheck13(topLevelGetter()); |
| testIsCheck14(topLevelGetter()); |
| testIsCheck15(topLevelGetter()); |
| testIsCheck16(topLevelGetter()); |
| testIsCheck17(topLevelGetter()); |
| testIsCheck18(topLevelGetter()); |
| testIsCheck19(topLevelGetter()); |
| testIsCheck20(); |
| testIsCheck21(topLevelGetter()); |
| testIsCheck22(topLevelGetter()); |
| testIsCheck23(topLevelGetter()); |
| testIsCheck24(topLevelGetter()); |
| testIsCheck25(topLevelGetter()); |
| testIsCheck26(topLevelGetter()); |
| testIsCheck27(topLevelGetter()); |
| testIsCheck28(topLevelGetter()); |
| testIsCheck29(topLevelGetter()); |
| testIf1(topLevelGetter()); |
| testIf2(topLevelGetter()); |
| returnAsString(); |
| returnIntAsNum(); |
| returnAsTypedef(); |
| returnTopLevelGetter(); |
| testDeadCode(); |
| testLabeledIf(true); |
| testSwitch1(); |
| testSwitch2(); |
| testSwitch3(); |
| testSwitch4(); |
| testSwitch5(); |
| testContinue1(); |
| testBreak1(); |
| testContinue2(); |
| testBreak2(); |
| testDoWhile1(); |
| testDoWhile2(); |
| testDoWhile3(); |
| testDoWhile4(); |
| new A() == null; |
| new A() |
| .. /*invoke: [exact=A]*/ returnInt1() |
| .. /*invoke: [exact=A]*/ returnInt2() |
| .. /*invoke: [exact=A]*/ returnInt3() |
| .. /*invoke: [exact=A]*/ returnInt4() |
| .. /*invoke: [exact=A]*/ returnInt5() |
| .. /*invoke: [exact=A]*/ returnInt6(); |
| |
| new B() |
| .. /*invoke: [exact=B]*/ returnInt1() |
| .. /*invoke: [exact=B]*/ returnInt2() |
| .. /*invoke: [exact=B]*/ returnInt3() |
| .. /*invoke: [exact=B]*/ returnInt4() |
| .. /*invoke: [exact=B]*/ returnInt5() |
| .. /*invoke: [exact=B]*/ returnInt6() |
| .. /*invoke: [exact=B]*/ returnInt7() |
| .. /*invoke: [exact=B]*/ returnInt8() |
| .. /*invoke: [exact=B]*/ returnInt9(); |
| |
| new C() |
| .. /*invoke: [exact=C]*/ returnInt1() |
| .. /*invoke: [exact=C]*/ returnInt2() |
| .. /*invoke: [exact=C]*/ returnInt3() |
| .. /*invoke: [exact=C]*/ returnInt4() |
| .. /*invoke: [exact=C]*/ returnInt5() |
| .. /*invoke: [exact=C]*/ returnInt6(); |
| testReturnElementOfConstList1(); |
| testReturnElementOfConstList2(); |
| testReturnItselfOrInt(topLevelGetter()); |
| testReturnInvokeDynamicGetter(); |
| testCascade1(); |
| testCascade2(); |
| testSpecialization1(); |
| testSpecialization2(); |
| testSpecialization3(); |
| testReturnNull1(topLevelGetter()); |
| testReturnNull2(topLevelGetter()); |
| testReturnNull3(topLevelGetter()); |
| testReturnNull4(); |
| testReturnNull5(); |
| testReturnNull6(); |
| testReturnNotEquals(); |
| } |