OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 part of dart2js.semantics_visitor_test; | 5 part of dart2js.semantics_visitor_test; |
6 | 6 |
7 const Map<String, List<Test>> SEND_TESTS = const { | 7 const Map<String, List<Test>> SEND_TESTS = const { |
8 'Parameters': const [ | 8 'Parameters': const [ |
9 // Parameters | 9 // Parameters |
10 const Test('m(o) => o;', | 10 const Test('m(o) => o;', |
(...skipping 1454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1465 class C {} | 1465 class C {} |
1466 m() => C += 42; | 1466 m() => C += 42; |
1467 ''', | 1467 ''', |
1468 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_COMPOUND, | 1468 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_COMPOUND, |
1469 constant: 'C', | 1469 constant: 'C', |
1470 operator: '+=', | 1470 operator: '+=', |
1471 rhs: '42')), | 1471 rhs: '42')), |
1472 const Test( | 1472 const Test( |
1473 ''' | 1473 ''' |
1474 class C {} | 1474 class C {} |
| 1475 m() => C ??= 42; |
| 1476 ''', |
| 1477 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_SET_IF_NULL, |
| 1478 constant: 'C', |
| 1479 rhs: '42')), |
| 1480 const Test( |
| 1481 ''' |
| 1482 class C {} |
1475 m() => ++C; | 1483 m() => ++C; |
1476 ''', | 1484 ''', |
1477 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_PREFIX, | 1485 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_PREFIX, |
1478 constant: 'C', | 1486 constant: 'C', |
1479 operator: '++')), | 1487 operator: '++')), |
1480 const Test( | 1488 const Test( |
1481 ''' | 1489 ''' |
1482 class C {} | 1490 class C {} |
1483 m() => C--; | 1491 m() => C--; |
1484 ''', | 1492 ''', |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1527 typedef F(); | 1535 typedef F(); |
1528 m() => F += 42; | 1536 m() => F += 42; |
1529 ''', | 1537 ''', |
1530 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_COMPOUND, | 1538 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_COMPOUND, |
1531 constant: 'F', | 1539 constant: 'F', |
1532 operator: '+=', | 1540 operator: '+=', |
1533 rhs: '42')), | 1541 rhs: '42')), |
1534 const Test( | 1542 const Test( |
1535 ''' | 1543 ''' |
1536 typedef F(); | 1544 typedef F(); |
| 1545 m() => F ??= 42; |
| 1546 ''', |
| 1547 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_SET_IF_NULL, |
| 1548 constant: 'F', |
| 1549 rhs: '42')), |
| 1550 const Test( |
| 1551 ''' |
| 1552 typedef F(); |
1537 m() => ++F; | 1553 m() => ++F; |
1538 ''', | 1554 ''', |
1539 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_PREFIX, | 1555 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_PREFIX, |
1540 constant: 'F', | 1556 constant: 'F', |
1541 operator: '++')), | 1557 operator: '++')), |
1542 const Test( | 1558 const Test( |
1543 ''' | 1559 ''' |
1544 typedef F(); | 1560 typedef F(); |
1545 m() => F--; | 1561 m() => F--; |
1546 ''', | 1562 ''', |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1582 m() => T += 42; | 1598 m() => T += 42; |
1583 } | 1599 } |
1584 ''', | 1600 ''', |
1585 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_COMPOUND, | 1601 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_COMPOUND, |
1586 element: 'type_variable(C#T)', | 1602 element: 'type_variable(C#T)', |
1587 operator: '+=', | 1603 operator: '+=', |
1588 rhs: '42')), | 1604 rhs: '42')), |
1589 const Test.clazz( | 1605 const Test.clazz( |
1590 ''' | 1606 ''' |
1591 class C<T> { | 1607 class C<T> { |
| 1608 m() => T ??= 42; |
| 1609 } |
| 1610 ''', |
| 1611 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_SET_IF_NULL, |
| 1612 element: 'type_variable(C#T)', |
| 1613 rhs: '42')), |
| 1614 const Test.clazz( |
| 1615 ''' |
| 1616 class C<T> { |
1592 m() => ++T; | 1617 m() => ++T; |
1593 } | 1618 } |
1594 ''', | 1619 ''', |
1595 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_PREFIX, | 1620 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_PREFIX, |
1596 element: 'type_variable(C#T)', | 1621 element: 'type_variable(C#T)', |
1597 operator: '++')), | 1622 operator: '++')), |
1598 const Test.clazz( | 1623 const Test.clazz( |
1599 ''' | 1624 ''' |
1600 class C<T> { | 1625 class C<T> { |
1601 m() => T--; | 1626 m() => T--; |
(...skipping 15 matching lines...) Expand all Loading... |
1617 class C<T> { | 1642 class C<T> { |
1618 static m() => T(null, 42); | 1643 static m() => T(null, 42); |
1619 } | 1644 } |
1620 ''', | 1645 ''', |
1621 const Visit(VisitKind.ERROR_INVALID_INVOKE, | 1646 const Visit(VisitKind.ERROR_INVALID_INVOKE, |
1622 error: MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER, | 1647 error: MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER, |
1623 arguments: '(null,42)')), | 1648 arguments: '(null,42)')), |
1624 const Test.clazz( | 1649 const Test.clazz( |
1625 ''' | 1650 ''' |
1626 class C<T> { | 1651 class C<T> { |
1627 static m() => T += 42; | 1652 static m() => T ??= 42; |
1628 } | 1653 } |
1629 ''', | 1654 ''', |
1630 const Visit(VisitKind.ERROR_INVALID_COMPOUND, | 1655 const Visit(VisitKind.ERROR_INVALID_SET_IF_NULL, |
1631 error: MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER, | 1656 error: MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER, |
1632 operator: '+=', | |
1633 rhs: '42')), | 1657 rhs: '42')), |
1634 const Test.clazz( | 1658 const Test.clazz( |
1635 ''' | 1659 ''' |
| 1660 class C<T> { |
| 1661 static m() => T ??= 42; |
| 1662 } |
| 1663 ''', |
| 1664 const Visit(VisitKind.ERROR_INVALID_SET_IF_NULL, |
| 1665 error: MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER, |
| 1666 rhs: '42')), |
| 1667 const Test.clazz( |
| 1668 ''' |
1636 class C<T> { | 1669 class C<T> { |
1637 static m() => ++T; | 1670 static m() => ++T; |
1638 } | 1671 } |
1639 ''', | 1672 ''', |
1640 const Visit(VisitKind.ERROR_INVALID_PREFIX, | 1673 const Visit(VisitKind.ERROR_INVALID_PREFIX, |
1641 error: MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER, | 1674 error: MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER, |
1642 operator: '++')), | 1675 operator: '++')), |
1643 const Test.clazz( | 1676 const Test.clazz( |
1644 ''' | 1677 ''' |
1645 class C<T> { | 1678 class C<T> { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1678 const Test( | 1711 const Test( |
1679 ''' | 1712 ''' |
1680 m() => dynamic += 42; | 1713 m() => dynamic += 42; |
1681 ''', | 1714 ''', |
1682 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_COMPOUND, | 1715 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_COMPOUND, |
1683 constant: 'dynamic', | 1716 constant: 'dynamic', |
1684 operator: '+=', | 1717 operator: '+=', |
1685 rhs: '42')), | 1718 rhs: '42')), |
1686 const Test( | 1719 const Test( |
1687 ''' | 1720 ''' |
| 1721 m() => dynamic ??= 42; |
| 1722 ''', |
| 1723 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_SET_IF_NULL, |
| 1724 constant: 'dynamic', |
| 1725 rhs: '42')), |
| 1726 const Test( |
| 1727 ''' |
1688 m() => ++dynamic; | 1728 m() => ++dynamic; |
1689 ''', | 1729 ''', |
1690 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_PREFIX, | 1730 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_PREFIX, |
1691 constant: 'dynamic', | 1731 constant: 'dynamic', |
1692 operator: '++')), | 1732 operator: '++')), |
1693 const Test( | 1733 const Test( |
1694 ''' | 1734 ''' |
1695 m() => dynamic--; | 1735 m() => dynamic--; |
1696 ''', | 1736 ''', |
1697 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_POSTFIX, | 1737 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_POSTFIX, |
(...skipping 2231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3929 const [ | 3969 const [ |
3930 const Visit( | 3970 const Visit( |
3931 VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_COMPOUND, | 3971 VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_COMPOUND, |
3932 receiver: 'a', name: 'b', operator: '*=', rhs: '42'), | 3972 receiver: 'a', name: 'b', operator: '*=', rhs: '42'), |
3933 const Visit( | 3973 const Visit( |
3934 VisitKind.VISIT_PARAMETER_GET, | 3974 VisitKind.VISIT_PARAMETER_GET, |
3935 element: 'parameter(m#a)'), | 3975 element: 'parameter(m#a)'), |
3936 ]), | 3976 ]), |
3937 const Test( | 3977 const Test( |
3938 ''' | 3978 ''' |
| 3979 m(a) => a?.b ??= 42; |
| 3980 ''', |
| 3981 const [ |
| 3982 const Visit( |
| 3983 VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_SET_IF_NULL, |
| 3984 receiver: 'a', name: 'b', rhs: '42'), |
| 3985 const Visit( |
| 3986 VisitKind.VISIT_PARAMETER_GET, |
| 3987 element: 'parameter(m#a)'), |
| 3988 ]), |
| 3989 const Test( |
| 3990 ''' |
3939 m(a, b) => a ?? b; | 3991 m(a, b) => a ?? b; |
3940 ''', | 3992 ''', |
3941 const [ | 3993 const [ |
3942 const Visit(VisitKind.VISIT_IF_NULL, | 3994 const Visit(VisitKind.VISIT_IF_NULL, |
3943 left: 'a', right: 'b'), | 3995 left: 'a', right: 'b'), |
3944 const Visit( | 3996 const Visit( |
3945 VisitKind.VISIT_PARAMETER_GET, | 3997 VisitKind.VISIT_PARAMETER_GET, |
3946 element: 'parameter(m#a)'), | 3998 element: 'parameter(m#a)'), |
3947 const Visit( | 3999 const Visit( |
3948 VisitKind.VISIT_PARAMETER_GET, | 4000 VisitKind.VISIT_PARAMETER_GET, |
3949 element: 'parameter(m#b)'), | 4001 element: 'parameter(m#b)'), |
3950 ]), | 4002 ]), |
3951 const Test( | 4003 const Test( |
3952 ''' | 4004 ''' |
3953 m(a) => a ??= 42; | 4005 m(a) => a ??= 42; |
3954 ''', | 4006 ''', |
3955 const Visit( | 4007 const Visit( |
3956 VisitKind.VISIT_PARAMETER_COMPOUND, | 4008 VisitKind.VISIT_PARAMETER_SET_IF_NULL, |
3957 element: 'parameter(m#a)', | 4009 element: 'parameter(m#a)', |
3958 operator: '??=', | |
3959 rhs: '42')), | 4010 rhs: '42')), |
3960 const Test.prefix( | 4011 const Test.prefix( |
3961 ''' | 4012 ''' |
3962 var o; | 4013 var o; |
3963 ''', | 4014 ''', |
3964 'm() => p?.o;', | 4015 'm() => p?.o;', |
3965 const Visit(VisitKind.ERROR_INVALID_GET, | 4016 const Visit(VisitKind.ERROR_INVALID_GET, |
3966 error: MessageKind.PREFIX_AS_EXPRESSION)), | 4017 error: MessageKind.PREFIX_AS_EXPRESSION)), |
3967 ], | 4018 ], |
| 4019 'Set if null': const [ |
| 4020 const Test( |
| 4021 ''' |
| 4022 m(a) => a.b ??= 42; |
| 4023 ''', |
| 4024 const [ |
| 4025 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_SET_IF_NULL, |
| 4026 receiver: 'a', name: 'b', rhs: '42'), |
| 4027 const Visit(VisitKind.VISIT_PARAMETER_GET, |
| 4028 element: 'parameter(m#a)') |
| 4029 ]), |
| 4030 const Test( |
| 4031 ''' |
| 4032 m(a) => a ??= 42; |
| 4033 ''', |
| 4034 const Visit(VisitKind.VISIT_PARAMETER_SET_IF_NULL, |
| 4035 element: 'parameter(m#a)', rhs: '42')), |
| 4036 const Test( |
| 4037 ''' |
| 4038 m(final a) => a ??= 42; |
| 4039 ''', |
| 4040 const Visit(VisitKind.VISIT_FINAL_PARAMETER_SET_IF_NULL, |
| 4041 element: 'parameter(m#a)', rhs: '42')), |
| 4042 const Test( |
| 4043 ''' |
| 4044 m() { |
| 4045 var a; |
| 4046 a ??= 42; |
| 4047 } |
| 4048 ''', |
| 4049 const Visit(VisitKind.VISIT_LOCAL_VARIABLE_SET_IF_NULL, |
| 4050 element: 'variable(m#a)', rhs: '42')), |
| 4051 const Test( |
| 4052 ''' |
| 4053 m() { |
| 4054 final a = 0; |
| 4055 a ??= 42; |
| 4056 } |
| 4057 ''', |
| 4058 const Visit(VisitKind.VISIT_FINAL_LOCAL_VARIABLE_SET_IF_NULL, |
| 4059 element: 'variable(m#a)', rhs: '42')), |
| 4060 const Test( |
| 4061 ''' |
| 4062 m() { |
| 4063 a() {} |
| 4064 a ??= 42; |
| 4065 } |
| 4066 ''', |
| 4067 const Visit(VisitKind.VISIT_LOCAL_FUNCTION_SET_IF_NULL, |
| 4068 element: 'function(m#a)', rhs: '42')), |
| 4069 const Test( |
| 4070 ''' |
| 4071 var a; |
| 4072 m() => a ??= 42; |
| 4073 ''', |
| 4074 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_SET_IF_NULL, |
| 4075 element: 'field(a)', rhs: '42')), |
| 4076 const Test( |
| 4077 ''' |
| 4078 get a => 0; |
| 4079 set a(_) {} |
| 4080 m() => a ??= 42; |
| 4081 ''', |
| 4082 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_SET_IF_NULL, |
| 4083 getter: 'getter(a)', setter: 'setter(a)', |
| 4084 rhs: '42')), |
| 4085 const Test( |
| 4086 ''' |
| 4087 class C { |
| 4088 static var a; |
| 4089 } |
| 4090 m() => C.a ??= 42; |
| 4091 ''', |
| 4092 const Visit(VisitKind.VISIT_STATIC_FIELD_SET_IF_NULL, |
| 4093 element: 'field(C#a)', rhs: '42')), |
| 4094 const Test.clazz( |
| 4095 ''' |
| 4096 class C { |
| 4097 static var a; |
| 4098 m() => C.a ??= 42; |
| 4099 } |
| 4100 ''', |
| 4101 const Visit(VisitKind.VISIT_STATIC_FIELD_SET_IF_NULL, |
| 4102 element: 'field(C#a)', rhs: '42')), |
| 4103 const Test.clazz( |
| 4104 ''' |
| 4105 class C { |
| 4106 static var a; |
| 4107 m() => a ??= 42; |
| 4108 } |
| 4109 ''', |
| 4110 const Visit(VisitKind.VISIT_STATIC_FIELD_SET_IF_NULL, |
| 4111 element: 'field(C#a)', rhs: '42')), |
| 4112 const Test.prefix( |
| 4113 ''' |
| 4114 class C { |
| 4115 static var a; |
| 4116 } |
| 4117 ''', |
| 4118 ''' |
| 4119 m() => p.C.a ??= 42; |
| 4120 ''', |
| 4121 const Visit(VisitKind.VISIT_STATIC_FIELD_SET_IF_NULL, |
| 4122 element: 'field(C#a)', rhs: '42')), |
| 4123 const Test.clazz( |
| 4124 ''' |
| 4125 class C { |
| 4126 var o; |
| 4127 static m() { o ??= 42; } |
| 4128 } |
| 4129 ''', |
| 4130 const Visit(VisitKind.ERROR_INVALID_SET_IF_NULL, |
| 4131 error: MessageKind.NO_INSTANCE_AVAILABLE, |
| 4132 rhs: '42')), |
| 4133 const Test( |
| 4134 ''' |
| 4135 class C { |
| 4136 static get a => 0; |
| 4137 static set a(_) {} |
| 4138 } |
| 4139 m() => C.a ??= 42; |
| 4140 ''', |
| 4141 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_SET_IF_NULL, |
| 4142 getter: 'getter(C#a)', setter: 'setter(C#a)', |
| 4143 rhs: '42')), |
| 4144 const Test.clazz( |
| 4145 ''' |
| 4146 class C { |
| 4147 static get a => 0; |
| 4148 static set a(_) {} |
| 4149 m() => C.a ??= 42; |
| 4150 } |
| 4151 ''', |
| 4152 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_SET_IF_NULL, |
| 4153 getter: 'getter(C#a)', setter: 'setter(C#a)', |
| 4154 rhs: '42')), |
| 4155 const Test.clazz( |
| 4156 ''' |
| 4157 class C { |
| 4158 static get a => 0; |
| 4159 static set a(_) {} |
| 4160 m() => a ??= 42; |
| 4161 } |
| 4162 ''', |
| 4163 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_SET_IF_NULL, |
| 4164 getter: 'getter(C#a)', setter: 'setter(C#a)', |
| 4165 rhs: '42')), |
| 4166 const Test.prefix( |
| 4167 ''' |
| 4168 class C { |
| 4169 static get a => 0; |
| 4170 static set a(_) {} |
| 4171 } |
| 4172 ''', |
| 4173 ''' |
| 4174 m() => p.C.a ??= 42; |
| 4175 ''', |
| 4176 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_SET_IF_NULL, |
| 4177 getter: 'getter(C#a)', setter: 'setter(C#a)', |
| 4178 rhs: '42')), |
| 4179 // TODO(johnniwinther): Enable these when dart2js supports method and setter |
| 4180 // with the same name. |
| 4181 /*const Test( |
| 4182 ''' |
| 4183 class C { |
| 4184 static a() {} |
| 4185 static set a(_) {} |
| 4186 } |
| 4187 m() => C.a ??= 42; |
| 4188 ''', |
| 4189 const Visit(VisitKind.VISIT_STATIC_METHOD_SETTER_SET_IF_NULL, |
| 4190 getter: 'function(C#a)', setter: 'setter(C#a)', |
| 4191 rhs: '42')), |
| 4192 const Test.clazz( |
| 4193 ''' |
| 4194 class C { |
| 4195 static a() {} |
| 4196 static set a(_) {} |
| 4197 m() => C.a ??= 42; |
| 4198 } |
| 4199 ''', |
| 4200 const Visit(VisitKind.VISIT_STATIC_METHOD_SETTER_SET_IF_NULL, |
| 4201 getter: 'function(C#a)', setter: 'setter(C#a)', |
| 4202 rhs: '42')), |
| 4203 const Test.clazz( |
| 4204 ''' |
| 4205 class C { |
| 4206 static a() {} |
| 4207 static set a(_) {} |
| 4208 m() => a ??= 42; |
| 4209 } |
| 4210 ''', |
| 4211 const Visit(VisitKind.VISIT_STATIC_METHOD_SETTER_SET_IF_NULL, |
| 4212 getter: 'function(C#a)', setter: 'setter(C#a)', |
| 4213 rhs: '42')), |
| 4214 const Test.prefix( |
| 4215 ''' |
| 4216 class C { |
| 4217 static a() {} |
| 4218 static set a(_) {} |
| 4219 } |
| 4220 ''', |
| 4221 ''' |
| 4222 m() => p.C.a ??= 42; |
| 4223 ''', |
| 4224 const Visit(VisitKind.VISIT_STATIC_METHOD_SETTER_SET_IF_NULL, |
| 4225 getter: 'function(C#a)', setter: 'setter(C#a)', |
| 4226 rhs: '42')),*/ |
| 4227 const Test.clazz( |
| 4228 ''' |
| 4229 class C { |
| 4230 var a; |
| 4231 m() => a ??= 42; |
| 4232 } |
| 4233 ''', |
| 4234 const Visit(VisitKind.VISIT_THIS_PROPERTY_SET_IF_NULL, |
| 4235 name: 'a', rhs: '42')), |
| 4236 const Test.clazz( |
| 4237 ''' |
| 4238 class C { |
| 4239 var a = 0; |
| 4240 m() => this.a ??= 42; |
| 4241 } |
| 4242 ''', |
| 4243 const Visit(VisitKind.VISIT_THIS_PROPERTY_SET_IF_NULL, |
| 4244 name: 'a', rhs: '42')), |
| 4245 const Test.clazz( |
| 4246 ''' |
| 4247 class B { |
| 4248 var a = 0; |
| 4249 } |
| 4250 class C extends B { |
| 4251 m() => super.a ??= 42; |
| 4252 } |
| 4253 ''', |
| 4254 const Visit(VisitKind.VISIT_SUPER_FIELD_SET_IF_NULL, |
| 4255 element: 'field(B#a)', rhs: '42')), |
| 4256 const Test.clazz( |
| 4257 ''' |
| 4258 class B { |
| 4259 final a = 0; |
| 4260 } |
| 4261 class C extends B { |
| 4262 m() => super.a ??= 42; |
| 4263 } |
| 4264 ''', |
| 4265 const Visit(VisitKind.VISIT_SUPER_FINAL_FIELD_SET_IF_NULL, |
| 4266 element: 'field(B#a)', rhs: '42')), |
| 4267 const Test.clazz( |
| 4268 ''' |
| 4269 class B { |
| 4270 get a => 0; |
| 4271 set a (_) {} |
| 4272 } |
| 4273 class C extends B { |
| 4274 m() => super.a ??= 42; |
| 4275 } |
| 4276 ''', |
| 4277 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_SET_IF_NULL, |
| 4278 getter: 'getter(B#a)', setter: 'setter(B#a)', |
| 4279 rhs: '42')), |
| 4280 const Test.clazz( |
| 4281 ''' |
| 4282 class A { |
| 4283 get a => 0; |
| 4284 } |
| 4285 class B extends A { |
| 4286 set a (_) {} |
| 4287 } |
| 4288 class C extends B { |
| 4289 m() => super.a ??= 42; |
| 4290 } |
| 4291 ''', |
| 4292 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_SET_IF_NULL, |
| 4293 getter: 'getter(A#a)', setter: 'setter(B#a)', |
| 4294 rhs: '42')), |
| 4295 const Test.clazz( |
| 4296 ''' |
| 4297 class A { |
| 4298 var a; |
| 4299 } |
| 4300 class B extends A { |
| 4301 get a => 0; |
| 4302 } |
| 4303 |
| 4304 class C extends B { |
| 4305 m() => super.a ??= 42; |
| 4306 } |
| 4307 ''', |
| 4308 const Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_SET_IF_NULL, |
| 4309 getter: 'getter(B#a)', setter: 'field(A#a)', |
| 4310 rhs: '42')), |
| 4311 const Test.clazz( |
| 4312 ''' |
| 4313 class A { |
| 4314 var a; |
| 4315 } |
| 4316 class B extends A { |
| 4317 set a(_) {} |
| 4318 } |
| 4319 |
| 4320 class C extends B { |
| 4321 m() => super.a ??= 42; |
| 4322 } |
| 4323 ''', |
| 4324 const Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_SET_IF_NULL, |
| 4325 getter: 'field(A#a)', setter: 'setter(B#a)', |
| 4326 rhs: '42')), |
| 4327 // TODO(johnniwinther): Enable this when dart2js supports shadow setters. |
| 4328 /*const Test.clazz( |
| 4329 ''' |
| 4330 class A { |
| 4331 var a; |
| 4332 } |
| 4333 class B extends A { |
| 4334 final a = 0; |
| 4335 } |
| 4336 |
| 4337 class C extends B { |
| 4338 m() => super.a ??= 42; |
| 4339 } |
| 4340 ''', |
| 4341 const Visit(VisitKind.VISIT_SUPER_FIELD_FIELD_SET_IF_NULL, |
| 4342 getter: 'field(B#a)', setter: 'field(A#a)', |
| 4343 rhs: '42')),*/ |
| 4344 const Test.clazz( |
| 4345 ''' |
| 4346 class B { |
| 4347 a() {} |
| 4348 } |
| 4349 class C extends B { |
| 4350 m() => super.a ??= 42; |
| 4351 } |
| 4352 ''', |
| 4353 const Visit(VisitKind.VISIT_SUPER_METHOD_SET_IF_NULL, |
| 4354 element: 'function(B#a)', |
| 4355 rhs: '42')), |
| 4356 const Test.clazz( |
| 4357 ''' |
| 4358 class B { |
| 4359 } |
| 4360 class C extends B { |
| 4361 m() => super.a ??= 42; |
| 4362 } |
| 4363 ''', |
| 4364 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_SET_IF_NULL, |
| 4365 name: 'a', rhs: '42')), |
| 4366 const Test.clazz( |
| 4367 ''' |
| 4368 class B { |
| 4369 set a(_) {} |
| 4370 } |
| 4371 class C extends B { |
| 4372 m() => super.a ??= 42; |
| 4373 } |
| 4374 ''', |
| 4375 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GETTER_SET_IF_NULL, |
| 4376 setter: 'setter(B#a)', rhs: '42')), |
| 4377 const Test.clazz( |
| 4378 ''' |
| 4379 class B { |
| 4380 get a => 42; |
| 4381 } |
| 4382 class C extends B { |
| 4383 m() => super.a ??= 42; |
| 4384 } |
| 4385 ''', |
| 4386 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_SETTER_SET_IF_NULL, |
| 4387 getter: 'getter(B#a)', rhs: '42')), |
| 4388 |
| 4389 const Test.clazz( |
| 4390 ''' |
| 4391 class C { |
| 4392 static set a(var value) { } |
| 4393 m() => a ??= 42; |
| 4394 } |
| 4395 ''', |
| 4396 const Visit(VisitKind.VISIT_UNRESOLVED_STATIC_GETTER_SET_IF_NULL, |
| 4397 setter: 'setter(C#a)', rhs: '42')), |
| 4398 |
| 4399 const Test.clazz( |
| 4400 ''' |
| 4401 class C { |
| 4402 static get a => 42; |
| 4403 m() => C.a ??= 42; |
| 4404 } |
| 4405 ''', |
| 4406 const Visit(VisitKind.VISIT_UNRESOLVED_STATIC_SETTER_SET_IF_NULL, |
| 4407 getter: 'getter(C#a)', rhs: '42')), |
| 4408 |
| 4409 const Test.clazz( |
| 4410 ''' |
| 4411 class C { |
| 4412 static final a = 42; |
| 4413 m() => C.a ??= 42; |
| 4414 } |
| 4415 ''', |
| 4416 const Visit(VisitKind.VISIT_STATIC_FINAL_FIELD_SET_IF_NULL, |
| 4417 element: 'field(C#a)', rhs: '42')), |
| 4418 |
| 4419 const Test( |
| 4420 ''' |
| 4421 class C { |
| 4422 static a(var value) { } |
| 4423 } |
| 4424 m() => C.a ??= 42; |
| 4425 ''', |
| 4426 const Visit(VisitKind.VISIT_STATIC_METHOD_SET_IF_NULL, |
| 4427 element: 'function(C#a)', rhs: '42')), |
| 4428 |
| 4429 const Test( |
| 4430 ''' |
| 4431 set a(var value) { } |
| 4432 m() => a ??= 42; |
| 4433 ''', |
| 4434 const Visit(VisitKind.VISIT_UNRESOLVED_TOP_LEVEL_GETTER_SET_IF_NULL, |
| 4435 setter: 'setter(a)', rhs: '42')), |
| 4436 |
| 4437 const Test( |
| 4438 ''' |
| 4439 get a => 42; |
| 4440 m() => a ??= 42; |
| 4441 ''', |
| 4442 const Visit(VisitKind.VISIT_UNRESOLVED_TOP_LEVEL_SETTER_SET_IF_NULL, |
| 4443 getter: 'getter(a)', rhs: '42')), |
| 4444 |
| 4445 const Test( |
| 4446 ''' |
| 4447 a(var value) { } |
| 4448 m() => a ??= 42; |
| 4449 ''', |
| 4450 const Visit(VisitKind.VISIT_TOP_LEVEL_METHOD_SET_IF_NULL, |
| 4451 element: 'function(a)', rhs: '42')), |
| 4452 |
| 4453 const Test( |
| 4454 ''' |
| 4455 final a = 42; |
| 4456 m() => a ??= 42; |
| 4457 ''', |
| 4458 const Visit(VisitKind.VISIT_TOP_LEVEL_FINAL_FIELD_SET_IF_NULL, |
| 4459 element: 'field(a)', rhs: '42')), |
| 4460 |
| 4461 const Test( |
| 4462 ''' |
| 4463 m() => unresolved ??= 42; |
| 4464 ''', |
| 4465 const Visit(VisitKind.VISIT_UNRESOLVED_SET_IF_NULL, |
| 4466 name: 'unresolved', rhs: '42')), |
| 4467 ], |
3968 }; | 4468 }; |
OLD | NEW |