| 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;', |
| 11 const Visit(VisitKind.VISIT_PARAMETER_GET, | 11 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#o)')), |
| 12 element: 'parameter(m#o)')), | 12 const Test( |
| 13 const Test('m(o) { o = 42; }', | 13 'm(o) { o = 42; }', |
| 14 const Visit(VisitKind.VISIT_PARAMETER_SET, | 14 const Visit(VisitKind.VISIT_PARAMETER_SET, |
| 15 element: 'parameter(m#o)', | 15 element: 'parameter(m#o)', rhs: '42')), |
| 16 rhs:'42')), | 16 const Test( |
| 17 const Test('m(o) { o(null, 42); }', | 17 'm(o) { o(null, 42); }', |
| 18 const Visit(VisitKind.VISIT_PARAMETER_INVOKE, | 18 const Visit(VisitKind.VISIT_PARAMETER_INVOKE, |
| 19 element: 'parameter(m#o)', | 19 element: 'parameter(m#o)', |
| 20 arguments: '(null,42)', | 20 arguments: '(null,42)', |
| 21 selector: 'CallStructure(arity=2)')), | 21 selector: 'CallStructure(arity=2)')), |
| 22 const Test('m(final o) { o = 42; }', | 22 const Test( |
| 23 'm(final o) { o = 42; }', |
| 23 const Visit(VisitKind.VISIT_FINAL_PARAMETER_SET, | 24 const Visit(VisitKind.VISIT_FINAL_PARAMETER_SET, |
| 24 element: 'parameter(m#o)', | 25 element: 'parameter(m#o)', rhs: '42')), |
| 25 rhs:'42')), | |
| 26 ], | 26 ], |
| 27 'Local variables': const [ | 27 'Local variables': const [ |
| 28 // Local variables | 28 // Local variables |
| 29 const Test('m() { var o; return o; }', | 29 const Test( |
| 30 'm() { var o; return o; }', |
| 30 const Visit(VisitKind.VISIT_LOCAL_VARIABLE_GET, | 31 const Visit(VisitKind.VISIT_LOCAL_VARIABLE_GET, |
| 31 element: 'variable(m#o)')), | 32 element: 'variable(m#o)')), |
| 32 const Test('m() { var o; o = 42; }', | 33 const Test( |
| 34 'm() { var o; o = 42; }', |
| 33 const Visit(VisitKind.VISIT_LOCAL_VARIABLE_SET, | 35 const Visit(VisitKind.VISIT_LOCAL_VARIABLE_SET, |
| 34 element: 'variable(m#o)', | 36 element: 'variable(m#o)', rhs: '42')), |
| 35 rhs:'42')), | 37 const Test( |
| 36 const Test('m() { var o; o(null, 42); }', | 38 'm() { var o; o(null, 42); }', |
| 37 const Visit(VisitKind.VISIT_LOCAL_VARIABLE_INVOKE, | 39 const Visit(VisitKind.VISIT_LOCAL_VARIABLE_INVOKE, |
| 38 element: 'variable(m#o)', | 40 element: 'variable(m#o)', |
| 39 arguments: '(null,42)', | 41 arguments: '(null,42)', |
| 40 selector: 'CallStructure(arity=2)')), | 42 selector: 'CallStructure(arity=2)')), |
| 41 const Test('m() { final o = 0; o = 42; }', | 43 const Test( |
| 44 'm() { final o = 0; o = 42; }', |
| 42 const Visit(VisitKind.VISIT_FINAL_LOCAL_VARIABLE_SET, | 45 const Visit(VisitKind.VISIT_FINAL_LOCAL_VARIABLE_SET, |
| 43 element: 'variable(m#o)', | 46 element: 'variable(m#o)', rhs: '42')), |
| 44 rhs:'42')), | 47 const Test( |
| 45 const Test('m() { const o = 0; o = 42; }', | 48 'm() { const o = 0; o = 42; }', |
| 46 const Visit(VisitKind.VISIT_FINAL_LOCAL_VARIABLE_SET, | 49 const Visit(VisitKind.VISIT_FINAL_LOCAL_VARIABLE_SET, |
| 47 element: 'variable(m#o)', | 50 element: 'variable(m#o)', rhs: '42')), |
| 48 rhs:'42')), | |
| 49 ], | 51 ], |
| 50 'Local functions': const [ | 52 'Local functions': const [ |
| 51 // Local functions | 53 // Local functions |
| 52 const Test('m() { o(a, b) {}; return o; }', | 54 const Test( |
| 55 'm() { o(a, b) {}; return o; }', |
| 53 const Visit(VisitKind.VISIT_LOCAL_FUNCTION_GET, | 56 const Visit(VisitKind.VISIT_LOCAL_FUNCTION_GET, |
| 54 element: 'function(m#o)')), | 57 element: 'function(m#o)')), |
| 55 const Test('m() { o(a, b) {}; o(null, 42); }', | 58 const Test( |
| 59 'm() { o(a, b) {}; o(null, 42); }', |
| 56 const Visit(VisitKind.VISIT_LOCAL_FUNCTION_INVOKE, | 60 const Visit(VisitKind.VISIT_LOCAL_FUNCTION_INVOKE, |
| 57 element: 'function(m#o)', | 61 element: 'function(m#o)', |
| 58 arguments: '(null,42)', | 62 arguments: '(null,42)', |
| 59 selector: 'CallStructure(arity=2)')), | 63 selector: 'CallStructure(arity=2)')), |
| 60 const Test('m() { o(a) {}; o(null, 42); }', | 64 const Test( |
| 65 'm() { o(a) {}; o(null, 42); }', |
| 61 const Visit(VisitKind.VISIT_LOCAL_FUNCTION_INCOMPATIBLE_INVOKE, | 66 const Visit(VisitKind.VISIT_LOCAL_FUNCTION_INCOMPATIBLE_INVOKE, |
| 62 element: 'function(m#o)', | 67 element: 'function(m#o)', |
| 63 arguments: '(null,42)', | 68 arguments: '(null,42)', |
| 64 selector: 'CallStructure(arity=2)')), | 69 selector: 'CallStructure(arity=2)')), |
| 65 const Test('m() { o(a, b) {}; o = 42; }', | 70 const Test( |
| 71 'm() { o(a, b) {}; o = 42; }', |
| 66 const Visit(VisitKind.VISIT_LOCAL_FUNCTION_SET, | 72 const Visit(VisitKind.VISIT_LOCAL_FUNCTION_SET, |
| 67 element: 'function(m#o)', | 73 element: 'function(m#o)', rhs: '42')), |
| 68 rhs: '42')), | |
| 69 ], | 74 ], |
| 70 'Static fields': const [ | 75 'Static fields': const [ |
| 71 // Static fields | 76 // Static fields |
| 72 const Test( | 77 const Test( |
| 73 ''' | 78 ''' |
| 74 class C { static var o; } | 79 class C { static var o; } |
| 75 m() => C.o; | 80 m() => C.o; |
| 76 ''', | 81 ''', |
| 77 const Visit(VisitKind.VISIT_STATIC_FIELD_GET, | 82 const Visit(VisitKind.VISIT_STATIC_FIELD_GET, element: 'field(C#o)')), |
| 78 element: 'field(C#o)')), | |
| 79 const Test.clazz( | 83 const Test.clazz( |
| 80 ''' | 84 ''' |
| 81 class C { | 85 class C { |
| 82 static var o; | 86 static var o; |
| 83 m() => o; | 87 m() => o; |
| 84 } | 88 } |
| 85 ''', | 89 ''', |
| 86 const Visit(VisitKind.VISIT_STATIC_FIELD_GET, | 90 const Visit(VisitKind.VISIT_STATIC_FIELD_GET, element: 'field(C#o)')), |
| 87 element: 'field(C#o)')), | |
| 88 const Test.clazz( | 91 const Test.clazz( |
| 89 ''' | 92 ''' |
| 90 class C { | 93 class C { |
| 91 static var o; | 94 static var o; |
| 92 m() => C.o; | 95 m() => C.o; |
| 93 } | 96 } |
| 94 ''', | 97 ''', |
| 95 const Visit(VisitKind.VISIT_STATIC_FIELD_GET, | 98 const Visit(VisitKind.VISIT_STATIC_FIELD_GET, element: 'field(C#o)')), |
| 96 element: 'field(C#o)')), | |
| 97 const Test.prefix( | 99 const Test.prefix( |
| 98 ''' | 100 ''' |
| 99 class C { | 101 class C { |
| 100 static var o; | 102 static var o; |
| 101 } | 103 } |
| 102 ''', | 104 ''', |
| 103 'm() => p.C.o;', | 105 'm() => p.C.o;', |
| 104 const Visit(VisitKind.VISIT_STATIC_FIELD_GET, | 106 const Visit(VisitKind.VISIT_STATIC_FIELD_GET, element: 'field(C#o)')), |
| 105 element: 'field(C#o)')), | |
| 106 const Test.clazz( | 107 const Test.clazz( |
| 107 ''' | 108 ''' |
| 108 class C { | 109 class C { |
| 109 var o; | 110 var o; |
| 110 static m() => o; | 111 static m() => o; |
| 111 } | 112 } |
| 112 ''', | 113 ''', |
| 113 const Visit(VisitKind.ERROR_INVALID_GET, | 114 const Visit(VisitKind.ERROR_INVALID_GET, |
| 114 error: MessageKind.NO_INSTANCE_AVAILABLE)), | 115 error: MessageKind.NO_INSTANCE_AVAILABLE)), |
| 115 const Test.prefix( | 116 const Test.prefix( |
| 116 ''' | 117 ''' |
| 117 class C { | 118 class C { |
| 118 static var o; | 119 static var o; |
| 119 } | 120 } |
| 120 ''', | 121 ''', |
| 121 'm() => p.C.o;', | 122 'm() => p.C.o;', |
| 122 const [ | 123 const [ |
| 123 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, | 124 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, element: 'prefix(p)'), |
| 124 element: 'prefix(p)'), | 125 const Visit(VisitKind.VISIT_STATIC_FIELD_GET, element: 'field(C#o)'), |
| 125 const Visit(VisitKind.VISIT_STATIC_FIELD_GET, | |
| 126 element: 'field(C#o)'), | |
| 127 ], | 126 ], |
| 128 isDeferred: true), | 127 isDeferred: true), |
| 129 const Test( | 128 const Test( |
| 130 ''' | 129 ''' |
| 131 class C { | 130 class C { |
| 132 var o; | 131 var o; |
| 133 } | 132 } |
| 134 m() => C.o; | 133 m() => C.o; |
| 135 ''', | 134 ''', |
| 136 const Visit(VisitKind.VISIT_UNRESOLVED_GET, | 135 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'o')), |
| 137 name: 'o')), | |
| 138 const Test( | 136 const Test( |
| 139 ''' | 137 ''' |
| 140 class C { | 138 class C { |
| 141 var o; | 139 var o; |
| 142 } | 140 } |
| 143 m() { C.o = 42; } | 141 m() { C.o = 42; } |
| 144 ''', | 142 ''', |
| 145 const Visit(VisitKind.VISIT_UNRESOLVED_SET, | 143 const Visit(VisitKind.VISIT_UNRESOLVED_SET, name: 'o', rhs: '42')), |
| 146 name: 'o', | |
| 147 rhs: '42')), | |
| 148 const Test( | 144 const Test( |
| 149 ''' | 145 ''' |
| 150 class C { | 146 class C { |
| 151 C.o(); | 147 C.o(); |
| 152 } | 148 } |
| 153 m() => C.o; | 149 m() => C.o; |
| 154 ''', | 150 ''', |
| 155 const Visit(VisitKind.VISIT_UNRESOLVED_GET, | 151 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'o')), |
| 156 name: 'o')), | |
| 157 const Test.prefix( | 152 const Test.prefix( |
| 158 ''' | 153 ''' |
| 159 ''', | 154 ''', |
| 160 'm() => p.C.o;', | 155 'm() => p.C.o;', |
| 161 const [ | 156 const [ |
| 162 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_GET, | 157 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_GET, |
| 163 receiver: 'p.C', name: 'o'), | 158 receiver: 'p.C', name: 'o'), |
| 164 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'C'), | 159 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'C'), |
| 165 ]), | 160 ]), |
| 166 const Test.prefix( | 161 const Test.prefix( |
| 167 ''' | 162 ''' |
| 168 class C { | 163 class C { |
| 169 } | 164 } |
| 170 ''', | 165 ''', |
| 171 'm() => p.C.o;', | 166 'm() => p.C.o;', |
| 172 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'o')), | 167 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'o')), |
| 173 const Test.prefix( | 168 const Test.prefix( |
| 174 ''' | 169 ''' |
| 175 ''', | 170 ''', |
| 176 'm() => p.C.o;', | 171 'm() => p.C.o;', |
| 177 const [ | 172 const [ |
| 178 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_GET, | 173 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_GET, |
| 179 receiver: 'p.C', name: 'o'), | 174 receiver: 'p.C', name: 'o'), |
| 180 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, | 175 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, element: 'prefix(p)'), |
| 181 element: 'prefix(p)'), | 176 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'C'), |
| 182 const Visit(VisitKind.VISIT_UNRESOLVED_GET, | |
| 183 name: 'C'), | |
| 184 ], | 177 ], |
| 185 isDeferred: true), | 178 isDeferred: true), |
| 186 const Test.prefix( | 179 const Test.prefix( |
| 187 ''' | 180 ''' |
| 188 class C { | 181 class C { |
| 189 } | 182 } |
| 190 ''', | 183 ''', |
| 191 'm() => p.C.o;', | 184 'm() => p.C.o;', |
| 192 const [ | 185 const [ |
| 193 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, | 186 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, element: 'prefix(p)'), |
| 194 element: 'prefix(p)'), | 187 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'o'), |
| 195 const Visit(VisitKind.VISIT_UNRESOLVED_GET, | |
| 196 name: 'o'), | |
| 197 ], | 188 ], |
| 198 isDeferred: true), | 189 isDeferred: true), |
| 199 const Test( | 190 const Test( |
| 200 ''' | 191 ''' |
| 201 class C {} | 192 class C {} |
| 202 m() => C.this; | 193 m() => C.this; |
| 203 ''', | 194 ''', |
| 204 null), | 195 null), |
| 205 const Test( | 196 const Test( |
| 206 ''' | 197 ''' |
| 207 class C { | 198 class C { |
| 208 static var o; | 199 static var o; |
| 209 } | 200 } |
| 210 m() { C.o = 42; } | 201 m() { C.o = 42; } |
| 211 ''', | 202 ''', |
| 212 const Visit(VisitKind.VISIT_STATIC_FIELD_SET, | 203 const Visit(VisitKind.VISIT_STATIC_FIELD_SET, |
| 213 element: 'field(C#o)', | 204 element: 'field(C#o)', rhs: '42')), |
| 214 rhs: '42')), | |
| 215 const Test.clazz( | 205 const Test.clazz( |
| 216 ''' | 206 ''' |
| 217 class C { | 207 class C { |
| 218 static var o; | 208 static var o; |
| 219 m() { o = 42; } | 209 m() { o = 42; } |
| 220 } | 210 } |
| 221 ''', | 211 ''', |
| 222 const Visit(VisitKind.VISIT_STATIC_FIELD_SET, | 212 const Visit(VisitKind.VISIT_STATIC_FIELD_SET, |
| 223 element: 'field(C#o)', | 213 element: 'field(C#o)', rhs: '42')), |
| 224 rhs: '42')), | |
| 225 const Test.clazz( | 214 const Test.clazz( |
| 226 ''' | 215 ''' |
| 227 class C { | 216 class C { |
| 228 static var o; | 217 static var o; |
| 229 m() { C.o = 42; } | 218 m() { C.o = 42; } |
| 230 } | 219 } |
| 231 ''', | 220 ''', |
| 232 const Visit(VisitKind.VISIT_STATIC_FIELD_SET, | 221 const Visit(VisitKind.VISIT_STATIC_FIELD_SET, |
| 233 element: 'field(C#o)', | 222 element: 'field(C#o)', rhs: '42')), |
| 234 rhs: '42')), | |
| 235 const Test.prefix( | 223 const Test.prefix( |
| 236 ''' | 224 ''' |
| 237 class C { | 225 class C { |
| 238 static var o; | 226 static var o; |
| 239 } | 227 } |
| 240 ''', | 228 ''', |
| 241 'm() { p.C.o = 42; }', | 229 'm() { p.C.o = 42; }', |
| 242 const Visit(VisitKind.VISIT_STATIC_FIELD_SET, | 230 const Visit(VisitKind.VISIT_STATIC_FIELD_SET, |
| 243 element: 'field(C#o)', | 231 element: 'field(C#o)', rhs: '42')), |
| 244 rhs: '42')), | |
| 245 const Test.clazz( | 232 const Test.clazz( |
| 246 ''' | 233 ''' |
| 247 class C { | 234 class C { |
| 248 var o; | 235 var o; |
| 249 static m() { o = 42; } | 236 static m() { o = 42; } |
| 250 } | 237 } |
| 251 ''', | 238 ''', |
| 252 const Visit(VisitKind.ERROR_INVALID_SET, | 239 const Visit(VisitKind.ERROR_INVALID_SET, |
| 253 error: MessageKind.NO_INSTANCE_AVAILABLE, | 240 error: MessageKind.NO_INSTANCE_AVAILABLE, rhs: '42')), |
| 254 rhs: '42')), | |
| 255 const Test( | 241 const Test( |
| 256 ''' | 242 ''' |
| 257 class C { | 243 class C { |
| 258 static var o; | 244 static var o; |
| 259 } | 245 } |
| 260 m() { C.o(null, 42); } | 246 m() { C.o(null, 42); } |
| 261 ''', | 247 ''', |
| 262 const Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE, | 248 const Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE, |
| 263 element: 'field(C#o)', | 249 element: 'field(C#o)', arguments: '(null,42)')), |
| 264 arguments: '(null,42)')), | |
| 265 const Test.clazz( | 250 const Test.clazz( |
| 266 ''' | 251 ''' |
| 267 class C { | 252 class C { |
| 268 static var o; | 253 static var o; |
| 269 m() { o(null, 42); } | 254 m() { o(null, 42); } |
| 270 } | 255 } |
| 271 ''', | 256 ''', |
| 272 const Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE, | 257 const Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE, |
| 273 element: 'field(C#o)', | 258 element: 'field(C#o)', arguments: '(null,42)')), |
| 274 arguments: '(null,42)')), | |
| 275 const Test.clazz( | 259 const Test.clazz( |
| 276 ''' | 260 ''' |
| 277 class C { | 261 class C { |
| 278 static var o; | 262 static var o; |
| 279 m() { C.o(null, 42); } | 263 m() { C.o(null, 42); } |
| 280 } | 264 } |
| 281 ''', | 265 ''', |
| 282 const Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE, | 266 const Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE, |
| 283 element: 'field(C#o)', | 267 element: 'field(C#o)', arguments: '(null,42)')), |
| 284 arguments: '(null,42)')), | |
| 285 const Test.clazz( | 268 const Test.clazz( |
| 286 ''' | 269 ''' |
| 287 class C { | 270 class C { |
| 288 var o; | 271 var o; |
| 289 static m() { o(null, 42); } | 272 static m() { o(null, 42); } |
| 290 } | 273 } |
| 291 ''', | 274 ''', |
| 292 const Visit(VisitKind.ERROR_INVALID_INVOKE, | 275 const Visit(VisitKind.ERROR_INVALID_INVOKE, |
| 293 error: MessageKind.NO_INSTANCE_AVAILABLE, | 276 error: MessageKind.NO_INSTANCE_AVAILABLE, arguments: '(null,42)')), |
| 294 arguments: '(null,42)')), | |
| 295 const Test.prefix( | 277 const Test.prefix( |
| 296 ''' | 278 ''' |
| 297 class C { | 279 class C { |
| 298 static var o; | 280 static var o; |
| 299 } | 281 } |
| 300 ''', | 282 ''', |
| 301 'm() { p.C.o(null, 42); }', | 283 'm() { p.C.o(null, 42); }', |
| 302 const Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE, | 284 const Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE, |
| 303 element: 'field(C#o)', | 285 element: 'field(C#o)', arguments: '(null,42)')), |
| 304 arguments: '(null,42)')), | |
| 305 const Test( | 286 const Test( |
| 306 ''' | 287 ''' |
| 307 class C {} | 288 class C {} |
| 308 m() => C.this(null, 42); | 289 m() => C.this(null, 42); |
| 309 ''', | 290 ''', |
| 310 const Visit(VisitKind.ERROR_INVALID_INVOKE, | 291 const Visit(VisitKind.ERROR_INVALID_INVOKE, |
| 311 error: MessageKind.THIS_PROPERTY, | 292 error: MessageKind.THIS_PROPERTY, arguments: '(null,42)')), |
| 312 arguments: '(null,42)')), | |
| 313 const Test( | 293 const Test( |
| 314 ''' | 294 ''' |
| 315 class C { static final o = 0; } | 295 class C { static final o = 0; } |
| 316 m() { C.o = 42; } | 296 m() { C.o = 42; } |
| 317 ''', | 297 ''', |
| 318 const Visit(VisitKind.VISIT_FINAL_STATIC_FIELD_SET, | 298 const Visit(VisitKind.VISIT_FINAL_STATIC_FIELD_SET, |
| 319 element: 'field(C#o)', | 299 element: 'field(C#o)', rhs: '42')), |
| 320 rhs: '42')), | |
| 321 const Test.clazz( | 300 const Test.clazz( |
| 322 ''' | 301 ''' |
| 323 class C { | 302 class C { |
| 324 static final o = 0; | 303 static final o = 0; |
| 325 m() { o = 42; } | 304 m() { o = 42; } |
| 326 } | 305 } |
| 327 ''', | 306 ''', |
| 328 const Visit(VisitKind.VISIT_FINAL_STATIC_FIELD_SET, | 307 const Visit(VisitKind.VISIT_FINAL_STATIC_FIELD_SET, |
| 329 element: 'field(C#o)', | 308 element: 'field(C#o)', rhs: '42')), |
| 330 rhs: '42')), | |
| 331 const Test.clazz( | 309 const Test.clazz( |
| 332 ''' | 310 ''' |
| 333 class C { | 311 class C { |
| 334 static final o = 0; | 312 static final o = 0; |
| 335 m() { C.o = 42; } | 313 m() { C.o = 42; } |
| 336 } | 314 } |
| 337 ''', | 315 ''', |
| 338 const Visit(VisitKind.VISIT_FINAL_STATIC_FIELD_SET, | 316 const Visit(VisitKind.VISIT_FINAL_STATIC_FIELD_SET, |
| 339 element: 'field(C#o)', | 317 element: 'field(C#o)', rhs: '42')), |
| 340 rhs: '42')), | |
| 341 const Test.prefix( | 318 const Test.prefix( |
| 342 ''' | 319 ''' |
| 343 class C { | 320 class C { |
| 344 static final o = 0; | 321 static final o = 0; |
| 345 } | 322 } |
| 346 ''', | 323 ''', |
| 347 'm() { p.C.o = 42; }', | 324 'm() { p.C.o = 42; }', |
| 348 const Visit(VisitKind.VISIT_FINAL_STATIC_FIELD_SET, | 325 const Visit(VisitKind.VISIT_FINAL_STATIC_FIELD_SET, |
| 349 element: 'field(C#o)', | 326 element: 'field(C#o)', rhs: '42')), |
| 350 rhs: '42')), | |
| 351 const Test( | 327 const Test( |
| 352 ''' | 328 ''' |
| 353 class C { static const o = 0; } | 329 class C { static const o = 0; } |
| 354 m() { C.o = 42; } | 330 m() { C.o = 42; } |
| 355 ''', | 331 ''', |
| 356 const Visit(VisitKind.VISIT_FINAL_STATIC_FIELD_SET, | 332 const Visit(VisitKind.VISIT_FINAL_STATIC_FIELD_SET, |
| 357 element: 'field(C#o)', | 333 element: 'field(C#o)', rhs: '42')), |
| 358 rhs: '42')), | |
| 359 const Test.clazz( | 334 const Test.clazz( |
| 360 ''' | 335 ''' |
| 361 class C { | 336 class C { |
| 362 static const o = 0; | 337 static const o = 0; |
| 363 m() { o = 42; } | 338 m() { o = 42; } |
| 364 } | 339 } |
| 365 ''', | 340 ''', |
| 366 const Visit(VisitKind.VISIT_FINAL_STATIC_FIELD_SET, | 341 const Visit(VisitKind.VISIT_FINAL_STATIC_FIELD_SET, |
| 367 element: 'field(C#o)', | 342 element: 'field(C#o)', rhs: '42')), |
| 368 rhs: '42')), | |
| 369 const Test.clazz( | 343 const Test.clazz( |
| 370 ''' | 344 ''' |
| 371 class C { | 345 class C { |
| 372 static const o = 0; | 346 static const o = 0; |
| 373 m() { C.o = 42; } | 347 m() { C.o = 42; } |
| 374 } | 348 } |
| 375 ''', | 349 ''', |
| 376 const Visit(VisitKind.VISIT_FINAL_STATIC_FIELD_SET, | 350 const Visit(VisitKind.VISIT_FINAL_STATIC_FIELD_SET, |
| 377 element: 'field(C#o)', | 351 element: 'field(C#o)', rhs: '42')), |
| 378 rhs: '42')), | |
| 379 const Test.prefix( | 352 const Test.prefix( |
| 380 ''' | 353 ''' |
| 381 class C { | 354 class C { |
| 382 static const o = 0; | 355 static const o = 0; |
| 383 } | 356 } |
| 384 ''', | 357 ''', |
| 385 'm() { p.C.o = 42; }', | 358 'm() { p.C.o = 42; }', |
| 386 const Visit(VisitKind.VISIT_FINAL_STATIC_FIELD_SET, | 359 const Visit(VisitKind.VISIT_FINAL_STATIC_FIELD_SET, |
| 387 element: 'field(C#o)', | 360 element: 'field(C#o)', rhs: '42')), |
| 388 rhs: '42')), | |
| 389 ], | 361 ], |
| 390 'Static properties': const [ | 362 'Static properties': const [ |
| 391 // Static properties | 363 // Static properties |
| 392 const Test( | 364 const Test( |
| 393 ''' | 365 ''' |
| 394 class C { | 366 class C { |
| 395 static get o => null; | 367 static get o => null; |
| 396 } | 368 } |
| 397 m() => C.o; | 369 m() => C.o; |
| 398 ''', | 370 ''', |
| 399 const Visit(VisitKind.VISIT_STATIC_GETTER_GET, | 371 const Visit(VisitKind.VISIT_STATIC_GETTER_GET, element: 'getter(C#o)')), |
| 400 element: 'getter(C#o)')), | |
| 401 const Test.clazz( | 372 const Test.clazz( |
| 402 ''' | 373 ''' |
| 403 class C { | 374 class C { |
| 404 static get o => null; | 375 static get o => null; |
| 405 m() => o; | 376 m() => o; |
| 406 } | 377 } |
| 407 ''', | 378 ''', |
| 408 const Visit(VisitKind.VISIT_STATIC_GETTER_GET, | 379 const Visit(VisitKind.VISIT_STATIC_GETTER_GET, element: 'getter(C#o)')), |
| 409 element: 'getter(C#o)')), | |
| 410 const Test.clazz( | 380 const Test.clazz( |
| 411 ''' | 381 ''' |
| 412 class C { | 382 class C { |
| 413 static get o => null; | 383 static get o => null; |
| 414 m() => C.o; | 384 m() => C.o; |
| 415 } | 385 } |
| 416 ''', | 386 ''', |
| 417 const Visit(VisitKind.VISIT_STATIC_GETTER_GET, | 387 const Visit(VisitKind.VISIT_STATIC_GETTER_GET, element: 'getter(C#o)')), |
| 418 element: 'getter(C#o)')), | |
| 419 const Test.prefix( | 388 const Test.prefix( |
| 420 ''' | 389 ''' |
| 421 class C { | 390 class C { |
| 422 static get o => null; | 391 static get o => null; |
| 423 } | 392 } |
| 424 ''', | 393 ''', |
| 425 'm() => p.C.o;', | 394 'm() => p.C.o;', |
| 426 const Visit(VisitKind.VISIT_STATIC_GETTER_GET, | 395 const Visit(VisitKind.VISIT_STATIC_GETTER_GET, element: 'getter(C#o)')), |
| 427 element: 'getter(C#o)')), | |
| 428 const Test( | 396 const Test( |
| 429 ''' | 397 ''' |
| 430 class C { static get o => 42; } | 398 class C { static get o => 42; } |
| 431 m() { C.o = 42; } | 399 m() { C.o = 42; } |
| 432 ''', | 400 ''', |
| 433 const Visit(VisitKind.VISIT_STATIC_GETTER_SET, | 401 const Visit(VisitKind.VISIT_STATIC_GETTER_SET, |
| 434 element: 'getter(C#o)', | 402 element: 'getter(C#o)', rhs: '42')), |
| 435 rhs: '42')), | |
| 436 const Test.clazz( | 403 const Test.clazz( |
| 437 ''' | 404 ''' |
| 438 class C { | 405 class C { |
| 439 static get o => 42; | 406 static get o => 42; |
| 440 m() { o = 42; } | 407 m() { o = 42; } |
| 441 } | 408 } |
| 442 ''', | 409 ''', |
| 443 const Visit(VisitKind.VISIT_STATIC_GETTER_SET, | 410 const Visit(VisitKind.VISIT_STATIC_GETTER_SET, |
| 444 element: 'getter(C#o)', | 411 element: 'getter(C#o)', rhs: '42')), |
| 445 rhs: '42')), | |
| 446 const Test.clazz( | 412 const Test.clazz( |
| 447 ''' | 413 ''' |
| 448 class C { | 414 class C { |
| 449 static get o => 42; | 415 static get o => 42; |
| 450 m() { C.o = 42; } | 416 m() { C.o = 42; } |
| 451 } | 417 } |
| 452 ''', | 418 ''', |
| 453 const Visit(VisitKind.VISIT_STATIC_GETTER_SET, | 419 const Visit(VisitKind.VISIT_STATIC_GETTER_SET, |
| 454 element: 'getter(C#o)', | 420 element: 'getter(C#o)', rhs: '42')), |
| 455 rhs: '42')), | |
| 456 const Test.prefix( | 421 const Test.prefix( |
| 457 ''' | 422 ''' |
| 458 class C { | 423 class C { |
| 459 static get o => 42; | 424 static get o => 42; |
| 460 } | 425 } |
| 461 ''', | 426 ''', |
| 462 'm() { p.C.o = 42; }', | 427 'm() { p.C.o = 42; }', |
| 463 const Visit(VisitKind.VISIT_STATIC_GETTER_SET, | 428 const Visit(VisitKind.VISIT_STATIC_GETTER_SET, |
| 464 element: 'getter(C#o)', | 429 element: 'getter(C#o)', rhs: '42')), |
| 465 rhs: '42')), | |
| 466 const Test( | 430 const Test( |
| 467 ''' | 431 ''' |
| 468 class C { | 432 class C { |
| 469 static set o(_) {} | 433 static set o(_) {} |
| 470 } | 434 } |
| 471 m() => C.o; | 435 m() => C.o; |
| 472 ''', | 436 ''', |
| 473 const Visit(VisitKind.VISIT_STATIC_SETTER_GET, | 437 const Visit(VisitKind.VISIT_STATIC_SETTER_GET, element: 'setter(C#o)')), |
| 474 element: 'setter(C#o)')), | |
| 475 const Test.clazz( | 438 const Test.clazz( |
| 476 ''' | 439 ''' |
| 477 class C { | 440 class C { |
| 478 static set o(_) {} | 441 static set o(_) {} |
| 479 m() => o; | 442 m() => o; |
| 480 } | 443 } |
| 481 ''', | 444 ''', |
| 482 const Visit(VisitKind.VISIT_STATIC_SETTER_GET, | 445 const Visit(VisitKind.VISIT_STATIC_SETTER_GET, element: 'setter(C#o)')), |
| 483 element: 'setter(C#o)')), | |
| 484 | 446 |
| 485 const Test.clazz( | 447 const Test.clazz( |
| 486 ''' | 448 ''' |
| 487 class C { | 449 class C { |
| 488 static set o(_) {} | 450 static set o(_) {} |
| 489 m() => C.o; | 451 m() => C.o; |
| 490 } | 452 } |
| 491 ''', | 453 ''', |
| 492 const Visit(VisitKind.VISIT_STATIC_SETTER_GET, | 454 const Visit(VisitKind.VISIT_STATIC_SETTER_GET, element: 'setter(C#o)')), |
| 493 element: 'setter(C#o)')), | |
| 494 const Test.prefix( | 455 const Test.prefix( |
| 495 ''' | 456 ''' |
| 496 class C { | 457 class C { |
| 497 static set o(_) {} | 458 static set o(_) {} |
| 498 } | 459 } |
| 499 ''', | 460 ''', |
| 500 'm() => p.C.o;', | 461 'm() => p.C.o;', |
| 501 const Visit(VisitKind.VISIT_STATIC_SETTER_GET, | 462 const Visit(VisitKind.VISIT_STATIC_SETTER_GET, element: 'setter(C#o)')), |
| 502 element: 'setter(C#o)')), | |
| 503 const Test( | 463 const Test( |
| 504 ''' | 464 ''' |
| 505 class C { static set o(_) {} } | 465 class C { static set o(_) {} } |
| 506 m() { C.o = 42; } | 466 m() { C.o = 42; } |
| 507 ''', | 467 ''', |
| 508 const Visit(VisitKind.VISIT_STATIC_SETTER_SET, | 468 const Visit(VisitKind.VISIT_STATIC_SETTER_SET, |
| 509 element: 'setter(C#o)', | 469 element: 'setter(C#o)', rhs: '42')), |
| 510 rhs: '42')), | |
| 511 const Test.clazz( | 470 const Test.clazz( |
| 512 ''' | 471 ''' |
| 513 class C { | 472 class C { |
| 514 static set o(_) {} | 473 static set o(_) {} |
| 515 m() { o = 42; } | 474 m() { o = 42; } |
| 516 } | 475 } |
| 517 ''', | 476 ''', |
| 518 const Visit(VisitKind.VISIT_STATIC_SETTER_SET, | 477 const Visit(VisitKind.VISIT_STATIC_SETTER_SET, |
| 519 element: 'setter(C#o)', | 478 element: 'setter(C#o)', rhs: '42')), |
| 520 rhs: '42')), | |
| 521 const Test.clazz( | 479 const Test.clazz( |
| 522 ''' | 480 ''' |
| 523 class C { | 481 class C { |
| 524 static set o(_) {} | 482 static set o(_) {} |
| 525 m() { C.o = 42; } | 483 m() { C.o = 42; } |
| 526 } | 484 } |
| 527 ''', | 485 ''', |
| 528 const Visit(VisitKind.VISIT_STATIC_SETTER_SET, | 486 const Visit(VisitKind.VISIT_STATIC_SETTER_SET, |
| 529 element: 'setter(C#o)', | 487 element: 'setter(C#o)', rhs: '42')), |
| 530 rhs: '42')), | |
| 531 const Test.prefix( | 488 const Test.prefix( |
| 532 ''' | 489 ''' |
| 533 class C { | 490 class C { |
| 534 static set o(_) {} | 491 static set o(_) {} |
| 535 } | 492 } |
| 536 ''', | 493 ''', |
| 537 'm() { p.C.o = 42; }', | 494 'm() { p.C.o = 42; }', |
| 538 const Visit(VisitKind.VISIT_STATIC_SETTER_SET, | 495 const Visit(VisitKind.VISIT_STATIC_SETTER_SET, |
| 539 element: 'setter(C#o)', | 496 element: 'setter(C#o)', rhs: '42')), |
| 540 rhs: '42')), | |
| 541 const Test( | 497 const Test( |
| 542 ''' | 498 ''' |
| 543 class C { static get o => null; } | 499 class C { static get o => null; } |
| 544 m() => C.o(null, 42); | 500 m() => C.o(null, 42); |
| 545 ''', | 501 ''', |
| 546 const Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE, | 502 const Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE, |
| 547 element: 'getter(C#o)', | 503 element: 'getter(C#o)', arguments: '(null,42)')), |
| 548 arguments: '(null,42)')), | |
| 549 const Test.clazz( | 504 const Test.clazz( |
| 550 ''' | 505 ''' |
| 551 class C { | 506 class C { |
| 552 static get o => null; | 507 static get o => null; |
| 553 m() { o(null, 42); } | 508 m() { o(null, 42); } |
| 554 } | 509 } |
| 555 ''', | 510 ''', |
| 556 const Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE, | 511 const Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE, |
| 557 element: 'getter(C#o)', | 512 element: 'getter(C#o)', arguments: '(null,42)')), |
| 558 arguments: '(null,42)')), | |
| 559 const Test.clazz( | 513 const Test.clazz( |
| 560 ''' | 514 ''' |
| 561 class C { | 515 class C { |
| 562 static get o => null; | 516 static get o => null; |
| 563 m() { C.o(null, 42); } | 517 m() { C.o(null, 42); } |
| 564 } | 518 } |
| 565 ''', | 519 ''', |
| 566 const Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE, | 520 const Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE, |
| 567 element: 'getter(C#o)', | 521 element: 'getter(C#o)', arguments: '(null,42)')), |
| 568 arguments: '(null,42)')), | |
| 569 const Test.prefix( | 522 const Test.prefix( |
| 570 ''' | 523 ''' |
| 571 class C { | 524 class C { |
| 572 static get o => null; | 525 static get o => null; |
| 573 } | 526 } |
| 574 ''', | 527 ''', |
| 575 'm() { p.C.o(null, 42); }', | 528 'm() { p.C.o(null, 42); }', |
| 576 const Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE, | 529 const Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE, |
| 577 element: 'getter(C#o)', | 530 element: 'getter(C#o)', arguments: '(null,42)')), |
| 578 arguments: '(null,42)')), | |
| 579 const Test( | 531 const Test( |
| 580 ''' | 532 ''' |
| 581 class C { static set o(_) {} } | 533 class C { static set o(_) {} } |
| 582 m() => C.o(null, 42); | 534 m() => C.o(null, 42); |
| 583 ''', | 535 ''', |
| 584 const Visit(VisitKind.VISIT_STATIC_SETTER_INVOKE, | 536 const Visit(VisitKind.VISIT_STATIC_SETTER_INVOKE, |
| 585 element: 'setter(C#o)', | 537 element: 'setter(C#o)', arguments: '(null,42)')), |
| 586 arguments: '(null,42)')), | |
| 587 const Test.clazz( | 538 const Test.clazz( |
| 588 ''' | 539 ''' |
| 589 class C { | 540 class C { |
| 590 static set o(_) {} | 541 static set o(_) {} |
| 591 m() { o(null, 42); } | 542 m() { o(null, 42); } |
| 592 } | 543 } |
| 593 ''', | 544 ''', |
| 594 const Visit(VisitKind.VISIT_STATIC_SETTER_INVOKE, | 545 const Visit(VisitKind.VISIT_STATIC_SETTER_INVOKE, |
| 595 element: 'setter(C#o)', | 546 element: 'setter(C#o)', arguments: '(null,42)')), |
| 596 arguments: '(null,42)')), | |
| 597 const Test.clazz( | 547 const Test.clazz( |
| 598 ''' | 548 ''' |
| 599 class C { | 549 class C { |
| 600 static set o(_) {} | 550 static set o(_) {} |
| 601 m() { C.o(null, 42); } | 551 m() { C.o(null, 42); } |
| 602 } | 552 } |
| 603 ''', | 553 ''', |
| 604 const Visit(VisitKind.VISIT_STATIC_SETTER_INVOKE, | 554 const Visit(VisitKind.VISIT_STATIC_SETTER_INVOKE, |
| 605 element: 'setter(C#o)', | 555 element: 'setter(C#o)', arguments: '(null,42)')), |
| 606 arguments: '(null,42)')), | |
| 607 const Test.prefix( | 556 const Test.prefix( |
| 608 ''' | 557 ''' |
| 609 class C { | 558 class C { |
| 610 static set o(_) {} | 559 static set o(_) {} |
| 611 } | 560 } |
| 612 ''', | 561 ''', |
| 613 'm() { p.C.o(null, 42); }', | 562 'm() { p.C.o(null, 42); }', |
| 614 const Visit(VisitKind.VISIT_STATIC_SETTER_INVOKE, | 563 const Visit(VisitKind.VISIT_STATIC_SETTER_INVOKE, |
| 615 element: 'setter(C#o)', | 564 element: 'setter(C#o)', arguments: '(null,42)')), |
| 616 arguments: '(null,42)')), | |
| 617 ], | 565 ], |
| 618 'Static functions': const [ | 566 'Static functions': const [ |
| 619 // Static functions | 567 // Static functions |
| 620 const Test( | 568 const Test( |
| 621 ''' | 569 ''' |
| 622 class C { static o(a, b) {} } | 570 class C { static o(a, b) {} } |
| 623 m() => C.o; | 571 m() => C.o; |
| 624 ''', | 572 ''', |
| 625 const Visit(VisitKind.VISIT_STATIC_FUNCTION_GET, | 573 const Visit(VisitKind.VISIT_STATIC_FUNCTION_GET, |
| 626 element: 'function(C#o)')), | 574 element: 'function(C#o)')), |
| 627 const Test.clazz( | 575 const Test.clazz( |
| 628 ''' | 576 ''' |
| 629 class C { | 577 class C { |
| 630 static o(a, b) {} | 578 static o(a, b) {} |
| 631 m() => o; | 579 m() => o; |
| 632 } | 580 } |
| 633 ''', | 581 ''', |
| 634 const Visit(VisitKind.VISIT_STATIC_FUNCTION_GET, | 582 const Visit(VisitKind.VISIT_STATIC_FUNCTION_GET, |
| 635 element: 'function(C#o)')), | 583 element: 'function(C#o)')), |
| 636 const Test.clazz( | 584 const Test.clazz( |
| 637 ''' | 585 ''' |
| 638 class C { | 586 class C { |
| 639 static o(a, b) {} | 587 static o(a, b) {} |
| 640 m() => C.o; | 588 m() => C.o; |
| 641 } | 589 } |
| 642 ''', | 590 ''', |
| 643 const Visit(VisitKind.VISIT_STATIC_FUNCTION_GET, | 591 const Visit(VisitKind.VISIT_STATIC_FUNCTION_GET, |
| 644 element: 'function(C#o)')), | 592 element: 'function(C#o)')), |
| 645 const Test.prefix( | 593 const Test.prefix( |
| 646 ''' | 594 ''' |
| 647 class C { static o(a, b) {} } | 595 class C { static o(a, b) {} } |
| 648 ''', | 596 ''', |
| 649 ''' | 597 ''' |
| 650 m() => p.C.o; | 598 m() => p.C.o; |
| 651 ''', | 599 ''', |
| 652 const Visit(VisitKind.VISIT_STATIC_FUNCTION_GET, | 600 const Visit(VisitKind.VISIT_STATIC_FUNCTION_GET, |
| 653 element: 'function(C#o)')), | 601 element: 'function(C#o)')), |
| 654 const Test( | 602 const Test( |
| 655 ''' | 603 ''' |
| 656 class C { static o(a, b) {} } | 604 class C { static o(a, b) {} } |
| 657 m() { C.o = 42; } | 605 m() { C.o = 42; } |
| 658 ''', | 606 ''', |
| 659 const Visit(VisitKind.VISIT_STATIC_FUNCTION_SET, | 607 const Visit(VisitKind.VISIT_STATIC_FUNCTION_SET, |
| 660 element: 'function(C#o)', | 608 element: 'function(C#o)', rhs: '42')), |
| 661 rhs: '42')), | |
| 662 const Test.clazz( | 609 const Test.clazz( |
| 663 ''' | 610 ''' |
| 664 class C { | 611 class C { |
| 665 static o(a, b) {} | 612 static o(a, b) {} |
| 666 m() { o = 42; } | 613 m() { o = 42; } |
| 667 } | 614 } |
| 668 ''', | 615 ''', |
| 669 const Visit(VisitKind.VISIT_STATIC_FUNCTION_SET, | 616 const Visit(VisitKind.VISIT_STATIC_FUNCTION_SET, |
| 670 element: 'function(C#o)', | 617 element: 'function(C#o)', rhs: '42')), |
| 671 rhs: '42')), | |
| 672 const Test.clazz( | 618 const Test.clazz( |
| 673 ''' | 619 ''' |
| 674 class C { | 620 class C { |
| 675 static o(a, b) {} | 621 static o(a, b) {} |
| 676 m() { C.o = 42; } | 622 m() { C.o = 42; } |
| 677 } | 623 } |
| 678 ''', | 624 ''', |
| 679 const Visit(VisitKind.VISIT_STATIC_FUNCTION_SET, | 625 const Visit(VisitKind.VISIT_STATIC_FUNCTION_SET, |
| 680 element: 'function(C#o)', | 626 element: 'function(C#o)', rhs: '42')), |
| 681 rhs: '42')), | |
| 682 const Test.prefix( | 627 const Test.prefix( |
| 683 ''' | 628 ''' |
| 684 class C { static o(a, b) {} } | 629 class C { static o(a, b) {} } |
| 685 ''', | 630 ''', |
| 686 ''' | 631 ''' |
| 687 m() { p.C.o = 42; } | 632 m() { p.C.o = 42; } |
| 688 ''', | 633 ''', |
| 689 const Visit(VisitKind.VISIT_STATIC_FUNCTION_SET, | 634 const Visit(VisitKind.VISIT_STATIC_FUNCTION_SET, |
| 690 element: 'function(C#o)', | 635 element: 'function(C#o)', rhs: '42')), |
| 691 rhs: '42')), | |
| 692 const Test( | 636 const Test( |
| 693 ''' | 637 ''' |
| 694 class C { static o(a, b) {} } | 638 class C { static o(a, b) {} } |
| 695 m() => C.o(null, 42); | 639 m() => C.o(null, 42); |
| 696 ''', | 640 ''', |
| 697 const Visit(VisitKind.VISIT_STATIC_FUNCTION_INVOKE, | 641 const Visit(VisitKind.VISIT_STATIC_FUNCTION_INVOKE, |
| 698 element: 'function(C#o)', | 642 element: 'function(C#o)', arguments: '(null,42)')), |
| 699 arguments: '(null,42)')), | |
| 700 const Test.clazz( | 643 const Test.clazz( |
| 701 ''' | 644 ''' |
| 702 class C { | 645 class C { |
| 703 static o(a, b) {} | 646 static o(a, b) {} |
| 704 m() { o(null, 42); } | 647 m() { o(null, 42); } |
| 705 } | 648 } |
| 706 ''', | 649 ''', |
| 707 const Visit(VisitKind.VISIT_STATIC_FUNCTION_INVOKE, | 650 const Visit(VisitKind.VISIT_STATIC_FUNCTION_INVOKE, |
| 708 element: 'function(C#o)', | 651 element: 'function(C#o)', arguments: '(null,42)')), |
| 709 arguments: '(null,42)')), | |
| 710 const Test.clazz( | 652 const Test.clazz( |
| 711 ''' | 653 ''' |
| 712 class C { | 654 class C { |
| 713 static o(a, b) {} | 655 static o(a, b) {} |
| 714 m() { C.o(null, 42); } | 656 m() { C.o(null, 42); } |
| 715 } | 657 } |
| 716 ''', | 658 ''', |
| 717 const Visit(VisitKind.VISIT_STATIC_FUNCTION_INVOKE, | 659 const Visit(VisitKind.VISIT_STATIC_FUNCTION_INVOKE, |
| 718 element: 'function(C#o)', | 660 element: 'function(C#o)', arguments: '(null,42)')), |
| 719 arguments: '(null,42)')), | |
| 720 const Test.prefix( | 661 const Test.prefix( |
| 721 ''' | 662 ''' |
| 722 class C { | 663 class C { |
| 723 static o(a, b) {} | 664 static o(a, b) {} |
| 724 } | 665 } |
| 725 ''', | 666 ''', |
| 726 'm() { p.C.o(null, 42); }', | 667 'm() { p.C.o(null, 42); }', |
| 727 const Visit(VisitKind.VISIT_STATIC_FUNCTION_INVOKE, | 668 const Visit(VisitKind.VISIT_STATIC_FUNCTION_INVOKE, |
| 728 element: 'function(C#o)', | 669 element: 'function(C#o)', arguments: '(null,42)')), |
| 729 arguments: '(null,42)')), | |
| 730 const Test( | 670 const Test( |
| 731 ''' | 671 ''' |
| 732 class C { static o(a, b) {} } | 672 class C { static o(a, b) {} } |
| 733 m() => C.o(null); | 673 m() => C.o(null); |
| 734 ''', | 674 ''', |
| 735 const Visit(VisitKind.VISIT_STATIC_FUNCTION_INCOMPATIBLE_INVOKE, | 675 const Visit(VisitKind.VISIT_STATIC_FUNCTION_INCOMPATIBLE_INVOKE, |
| 736 element: 'function(C#o)', | 676 element: 'function(C#o)', arguments: '(null)')), |
| 737 arguments: '(null)')), | |
| 738 ], | 677 ], |
| 739 'Top level fields': const [ | 678 'Top level fields': const [ |
| 740 // Top level fields | 679 // Top level fields |
| 741 const Test( | 680 const Test( |
| 742 ''' | 681 ''' |
| 743 var o; | 682 var o; |
| 744 m() => o; | 683 m() => o; |
| 745 ''', | 684 ''', |
| 746 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_GET, | 685 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_GET, element: 'field(o)')), |
| 747 element: 'field(o)')), | |
| 748 const Test.prefix( | 686 const Test.prefix( |
| 749 ''' | 687 ''' |
| 750 var o; | 688 var o; |
| 751 ''', | 689 ''', |
| 752 'm() => p.o;', | 690 'm() => p.o;', |
| 753 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_GET, | 691 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_GET, element: 'field(o)')), |
| 754 element: 'field(o)')), | |
| 755 const Test.prefix( | 692 const Test.prefix( |
| 756 ''' | 693 ''' |
| 757 var o; | 694 var o; |
| 758 ''', | 695 ''', |
| 759 'm() => p.o;', | 696 'm() => p.o;', |
| 760 const [ | 697 const [ |
| 761 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, | 698 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, element: 'prefix(p)'), |
| 762 element: 'prefix(p)'), | 699 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_GET, element: 'field(o)'), |
| 763 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_GET, | |
| 764 element: 'field(o)'), | |
| 765 ], | 700 ], |
| 766 isDeferred: true), | 701 isDeferred: true), |
| 767 const Test.prefix( | 702 const Test.prefix( |
| 768 ''' | 703 ''' |
| 769 ''', | 704 ''', |
| 770 'm() => p.o;', | 705 'm() => p.o;', |
| 771 const Visit(VisitKind.VISIT_UNRESOLVED_GET, | 706 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'o')), |
| 772 name: 'o')), | |
| 773 const Test.prefix( | 707 const Test.prefix( |
| 774 ''' | 708 ''' |
| 775 ''', | 709 ''', |
| 776 'm() => p.o;', | 710 'm() => p.o;', |
| 777 const [ | 711 const [ |
| 778 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, | 712 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, element: 'prefix(p)'), |
| 779 element: 'prefix(p)'), | 713 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'o'), |
| 780 const Visit(VisitKind.VISIT_UNRESOLVED_GET, | |
| 781 name: 'o'), | |
| 782 ], | 714 ], |
| 783 isDeferred: true), | 715 isDeferred: true), |
| 784 const Test.prefix( | 716 const Test.prefix( |
| 785 ''' | 717 ''' |
| 786 ''', | 718 ''', |
| 787 'm() => p;', | 719 'm() => p;', |
| 788 const Visit(VisitKind.ERROR_INVALID_GET, | 720 const Visit(VisitKind.ERROR_INVALID_GET, |
| 789 error: MessageKind.PREFIX_AS_EXPRESSION)), | 721 error: MessageKind.PREFIX_AS_EXPRESSION)), |
| 790 const Test( | 722 const Test( |
| 791 ''' | 723 ''' |
| 792 var o; | 724 var o; |
| 793 m() { o = 42; } | 725 m() { o = 42; } |
| 794 ''', | 726 ''', |
| 795 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_SET, | 727 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_SET, |
| 796 element: 'field(o)', | 728 element: 'field(o)', rhs: '42')), |
| 797 rhs: '42')), | |
| 798 const Test.prefix( | 729 const Test.prefix( |
| 799 ''' | 730 ''' |
| 800 var o; | 731 var o; |
| 801 ''', | 732 ''', |
| 802 'm() { p.o = 42; }', | 733 'm() { p.o = 42; }', |
| 803 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_SET, | 734 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_SET, |
| 804 element: 'field(o)', | 735 element: 'field(o)', rhs: '42')), |
| 805 rhs: '42')), | |
| 806 const Test.prefix( | 736 const Test.prefix( |
| 807 ''' | 737 ''' |
| 808 ''', | 738 ''', |
| 809 'm() { p = 42; }', | 739 'm() { p = 42; }', |
| 810 const Visit(VisitKind.ERROR_INVALID_SET, | 740 const Visit(VisitKind.ERROR_INVALID_SET, |
| 811 error: MessageKind.PREFIX_AS_EXPRESSION, | 741 error: MessageKind.PREFIX_AS_EXPRESSION, rhs: '42')), |
| 812 rhs: '42')), | |
| 813 const Test( | 742 const Test( |
| 814 ''' | 743 ''' |
| 815 final o = 0; | 744 final o = 0; |
| 816 m() { o = 42; } | 745 m() { o = 42; } |
| 817 ''', | 746 ''', |
| 818 const Visit(VisitKind.VISIT_FINAL_TOP_LEVEL_FIELD_SET, | 747 const Visit(VisitKind.VISIT_FINAL_TOP_LEVEL_FIELD_SET, |
| 819 element: 'field(o)', | 748 element: 'field(o)', rhs: '42')), |
| 820 rhs: '42')), | |
| 821 const Test.prefix( | 749 const Test.prefix( |
| 822 ''' | 750 ''' |
| 823 final o = 0; | 751 final o = 0; |
| 824 ''', | 752 ''', |
| 825 'm() { p.o = 42; }', | 753 'm() { p.o = 42; }', |
| 826 const Visit(VisitKind.VISIT_FINAL_TOP_LEVEL_FIELD_SET, | 754 const Visit(VisitKind.VISIT_FINAL_TOP_LEVEL_FIELD_SET, |
| 827 element: 'field(o)', | 755 element: 'field(o)', rhs: '42')), |
| 828 rhs: '42')), | |
| 829 const Test( | 756 const Test( |
| 830 ''' | 757 ''' |
| 831 const o = 0; | 758 const o = 0; |
| 832 m() { o = 42; } | 759 m() { o = 42; } |
| 833 ''', | 760 ''', |
| 834 const Visit(VisitKind.VISIT_FINAL_TOP_LEVEL_FIELD_SET, | 761 const Visit(VisitKind.VISIT_FINAL_TOP_LEVEL_FIELD_SET, |
| 835 element: 'field(o)', | 762 element: 'field(o)', rhs: '42')), |
| 836 rhs: '42')), | |
| 837 const Test.prefix( | 763 const Test.prefix( |
| 838 ''' | 764 ''' |
| 839 const o = 0; | 765 const o = 0; |
| 840 ''', | 766 ''', |
| 841 'm() { p.o = 42; }', | 767 'm() { p.o = 42; }', |
| 842 const Visit(VisitKind.VISIT_FINAL_TOP_LEVEL_FIELD_SET, | 768 const Visit(VisitKind.VISIT_FINAL_TOP_LEVEL_FIELD_SET, |
| 843 element: 'field(o)', | 769 element: 'field(o)', rhs: '42')), |
| 844 rhs: '42')), | |
| 845 const Test( | 770 const Test( |
| 846 ''' | 771 ''' |
| 847 var o; | 772 var o; |
| 848 m() { o(null, 42); } | 773 m() { o(null, 42); } |
| 849 ''', | 774 ''', |
| 850 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_INVOKE, | 775 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_INVOKE, |
| 851 element: 'field(o)', | 776 element: 'field(o)', arguments: '(null,42)')), |
| 852 arguments: '(null,42)')), | |
| 853 const Test.prefix( | 777 const Test.prefix( |
| 854 ''' | 778 ''' |
| 855 var o; | 779 var o; |
| 856 ''', | 780 ''', |
| 857 'm() { p.o(null, 42); }', | 781 'm() { p.o(null, 42); }', |
| 858 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_INVOKE, | 782 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_INVOKE, |
| 859 element: 'field(o)', | 783 element: 'field(o)', arguments: '(null,42)')), |
| 860 arguments: '(null,42)')), | |
| 861 const Test.prefix( | 784 const Test.prefix( |
| 862 ''' | 785 ''' |
| 863 ''', | 786 ''', |
| 864 'm() { p(null, 42); }', | 787 'm() { p(null, 42); }', |
| 865 const Visit(VisitKind.ERROR_INVALID_INVOKE, | 788 const Visit(VisitKind.ERROR_INVALID_INVOKE, |
| 866 error: MessageKind.PREFIX_AS_EXPRESSION, | 789 error: MessageKind.PREFIX_AS_EXPRESSION, arguments: '(null,42)')), |
| 867 arguments: '(null,42)')), | |
| 868 const Test( | 790 const Test( |
| 869 ''' | 791 ''' |
| 870 m() => o; | 792 m() => o; |
| 871 ''', | 793 ''', |
| 872 const Visit(VisitKind.VISIT_UNRESOLVED_GET, | 794 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'o')), |
| 873 name: 'o')), | |
| 874 const Test( | 795 const Test( |
| 875 ''' | 796 ''' |
| 876 m() { o = 42; } | 797 m() { o = 42; } |
| 877 ''', | 798 ''', |
| 878 const Visit(VisitKind.VISIT_UNRESOLVED_SET, | 799 const Visit(VisitKind.VISIT_UNRESOLVED_SET, name: 'o', rhs: '42')), |
| 879 name: 'o', | |
| 880 rhs: '42')), | |
| 881 ], | 800 ], |
| 882 'Top level properties': const [ | 801 'Top level properties': const [ |
| 883 // Top level properties | 802 // Top level properties |
| 884 const Test( | 803 const Test( |
| 885 ''' | 804 ''' |
| 886 get o => null; | 805 get o => null; |
| 887 m() => o; | 806 m() => o; |
| 888 ''', | 807 ''', |
| 889 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_GET, | 808 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_GET, |
| 890 element: 'getter(o)')), | 809 element: 'getter(o)')), |
| 891 const Test.prefix( | 810 const Test.prefix( |
| 892 ''' | 811 ''' |
| 893 get o => null; | 812 get o => null; |
| 894 ''', | 813 ''', |
| 895 ''' | 814 ''' |
| 896 m() => p.o; | 815 m() => p.o; |
| 897 ''', | 816 ''', |
| 898 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_GET, | 817 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_GET, |
| 899 element: 'getter(o)')), | 818 element: 'getter(o)')), |
| 900 const Test( | 819 const Test( |
| 901 ''' | 820 ''' |
| 902 set o(_) {} | 821 set o(_) {} |
| 903 m() => o; | 822 m() => o; |
| 904 ''', | 823 ''', |
| 905 const Visit(VisitKind.VISIT_TOP_LEVEL_SETTER_GET, | 824 const Visit(VisitKind.VISIT_TOP_LEVEL_SETTER_GET, |
| 906 element: 'setter(o)')), | 825 element: 'setter(o)')), |
| 907 const Test.prefix( | 826 const Test.prefix( |
| 908 ''' | 827 ''' |
| 909 set o(_) {} | 828 set o(_) {} |
| 910 ''', | 829 ''', |
| 911 ''' | 830 ''' |
| 912 m() => p.o; | 831 m() => p.o; |
| 913 ''', | 832 ''', |
| 914 const Visit(VisitKind.VISIT_TOP_LEVEL_SETTER_GET, | 833 const Visit(VisitKind.VISIT_TOP_LEVEL_SETTER_GET, |
| 915 element: 'setter(o)')), | 834 element: 'setter(o)')), |
| 916 const Test( | 835 const Test( |
| 917 ''' | 836 ''' |
| 918 get o => null; | 837 get o => null; |
| 919 m() { o = 42; } | 838 m() { o = 42; } |
| 920 ''', | 839 ''', |
| 921 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SET, | 840 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SET, |
| 922 element: 'getter(o)', | 841 element: 'getter(o)', rhs: '42')), |
| 923 rhs: '42')), | |
| 924 const Test.prefix( | 842 const Test.prefix( |
| 925 ''' | 843 ''' |
| 926 get o => null; | 844 get o => null; |
| 927 ''', | 845 ''', |
| 928 'm() { p.o = 42; }', | 846 'm() { p.o = 42; }', |
| 929 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SET, | 847 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SET, |
| 930 element: 'getter(o)', | 848 element: 'getter(o)', rhs: '42')), |
| 931 rhs: '42')), | |
| 932 const Test( | 849 const Test( |
| 933 ''' | 850 ''' |
| 934 set o(_) {} | 851 set o(_) {} |
| 935 m() { o = 42; } | 852 m() { o = 42; } |
| 936 ''', | 853 ''', |
| 937 const Visit(VisitKind.VISIT_TOP_LEVEL_SETTER_SET, | 854 const Visit(VisitKind.VISIT_TOP_LEVEL_SETTER_SET, |
| 938 element: 'setter(o)', | 855 element: 'setter(o)', rhs: '42')), |
| 939 rhs: '42')), | |
| 940 const Test.prefix( | 856 const Test.prefix( |
| 941 ''' | 857 ''' |
| 942 set o(_) {} | 858 set o(_) {} |
| 943 ''', | 859 ''', |
| 944 'm() { p.o = 42; }', | 860 'm() { p.o = 42; }', |
| 945 const Visit(VisitKind.VISIT_TOP_LEVEL_SETTER_SET, | 861 const Visit(VisitKind.VISIT_TOP_LEVEL_SETTER_SET, |
| 946 element: 'setter(o)', | 862 element: 'setter(o)', rhs: '42')), |
| 947 rhs: '42')), | |
| 948 const Test( | 863 const Test( |
| 949 ''' | 864 ''' |
| 950 get o => null; | 865 get o => null; |
| 951 m() => o(null, 42); | 866 m() => o(null, 42); |
| 952 ''', | 867 ''', |
| 953 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_INVOKE, | 868 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_INVOKE, |
| 954 element: 'getter(o)', | 869 element: 'getter(o)', arguments: '(null,42)')), |
| 955 arguments: '(null,42)')), | |
| 956 const Test.prefix( | 870 const Test.prefix( |
| 957 ''' | 871 ''' |
| 958 get o => null; | 872 get o => null; |
| 959 ''', | 873 ''', |
| 960 'm() { p.o(null, 42); }', | 874 'm() { p.o(null, 42); }', |
| 961 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_INVOKE, | 875 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_INVOKE, |
| 962 element: 'getter(o)', | 876 element: 'getter(o)', arguments: '(null,42)')), |
| 963 arguments: '(null,42)')), | |
| 964 const Test( | 877 const Test( |
| 965 ''' | 878 ''' |
| 966 set o(_) {} | 879 set o(_) {} |
| 967 m() => o(null, 42); | 880 m() => o(null, 42); |
| 968 ''', | 881 ''', |
| 969 const Visit(VisitKind.VISIT_TOP_LEVEL_SETTER_INVOKE, | 882 const Visit(VisitKind.VISIT_TOP_LEVEL_SETTER_INVOKE, |
| 970 element: 'setter(o)', | 883 element: 'setter(o)', arguments: '(null,42)')), |
| 971 arguments: '(null,42)')), | |
| 972 const Test.prefix( | 884 const Test.prefix( |
| 973 ''' | 885 ''' |
| 974 set o(_) {} | 886 set o(_) {} |
| 975 ''', | 887 ''', |
| 976 'm() { p.o(null, 42); }', | 888 'm() { p.o(null, 42); }', |
| 977 const Visit(VisitKind.VISIT_TOP_LEVEL_SETTER_INVOKE, | 889 const Visit(VisitKind.VISIT_TOP_LEVEL_SETTER_INVOKE, |
| 978 element: 'setter(o)', | 890 element: 'setter(o)', arguments: '(null,42)')), |
| 979 arguments: '(null,42)')), | |
| 980 ], | 891 ], |
| 981 'Top level functions': const [ | 892 'Top level functions': const [ |
| 982 // Top level functions | 893 // Top level functions |
| 983 const Test( | 894 const Test( |
| 984 ''' | 895 ''' |
| 985 o(a, b) {} | 896 o(a, b) {} |
| 986 m() => o; | 897 m() => o; |
| 987 ''', | 898 ''', |
| 988 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_GET, | 899 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_GET, |
| 989 element: 'function(o)')), | 900 element: 'function(o)')), |
| 990 const Test( | 901 const Test( |
| 991 ''' | 902 ''' |
| 992 o(a, b) {} | 903 o(a, b) {} |
| 993 m() => o(null, 42); | 904 m() => o(null, 42); |
| 994 ''', | 905 ''', |
| 995 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_INVOKE, | 906 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_INVOKE, |
| 996 element: 'function(o)', | 907 element: 'function(o)', arguments: '(null,42)')), |
| 997 arguments: '(null,42)')), | |
| 998 const Test( | 908 const Test( |
| 999 ''' | 909 ''' |
| 1000 o(a, b) {} | 910 o(a, b) {} |
| 1001 m() => o(null); | 911 m() => o(null); |
| 1002 ''', | 912 ''', |
| 1003 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_INCOMPATIBLE_INVOKE, | 913 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_INCOMPATIBLE_INVOKE, |
| 1004 element: 'function(o)', | 914 element: 'function(o)', arguments: '(null)')), |
| 1005 arguments: '(null)')), | |
| 1006 const Test.prefix( | 915 const Test.prefix( |
| 1007 ''' | 916 ''' |
| 1008 o(a, b) {} | 917 o(a, b) {} |
| 1009 ''', | 918 ''', |
| 1010 'm() { p.o(null, 42); }', | 919 'm() { p.o(null, 42); }', |
| 1011 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_INVOKE, | 920 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_INVOKE, |
| 1012 element: 'function(o)', | 921 element: 'function(o)', arguments: '(null,42)')), |
| 1013 arguments: '(null,42)')), | |
| 1014 const Test( | 922 const Test( |
| 1015 ''' | 923 ''' |
| 1016 m() => o(null, 42); | 924 m() => o(null, 42); |
| 1017 ''', | 925 ''', |
| 1018 const Visit(VisitKind.VISIT_UNRESOLVED_INVOKE, | 926 const Visit(VisitKind.VISIT_UNRESOLVED_INVOKE, |
| 1019 name: 'o', | 927 name: 'o', arguments: '(null,42)')), |
| 1020 arguments: '(null,42)')), | |
| 1021 const Test.prefix( | 928 const Test.prefix( |
| 1022 ''' | 929 ''' |
| 1023 o(a, b) {} | 930 o(a, b) {} |
| 1024 ''', | 931 ''', |
| 1025 'm() => p.o(null, 42);', | 932 'm() => p.o(null, 42);', |
| 1026 const [ | 933 const [ |
| 1027 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, | 934 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, element: 'prefix(p)'), |
| 1028 element: 'prefix(p)'), | |
| 1029 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_INVOKE, | 935 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_INVOKE, |
| 1030 element: 'function(o)', | 936 element: 'function(o)', arguments: '(null,42)'), |
| 1031 arguments: '(null,42)'), | |
| 1032 ], | 937 ], |
| 1033 isDeferred: true), | 938 isDeferred: true), |
| 1034 const Test.prefix( | 939 const Test.prefix( |
| 1035 ''' | 940 ''' |
| 1036 ''', | 941 ''', |
| 1037 'm() => p.o(null, 42);', | 942 'm() => p.o(null, 42);', |
| 1038 const Visit(VisitKind.VISIT_UNRESOLVED_INVOKE, | 943 const Visit(VisitKind.VISIT_UNRESOLVED_INVOKE, |
| 1039 name: 'o', | 944 name: 'o', arguments: '(null,42)')), |
| 1040 arguments: '(null,42)')), | |
| 1041 const Test.prefix( | 945 const Test.prefix( |
| 1042 ''' | 946 ''' |
| 1043 ''', | 947 ''', |
| 1044 'm() => p.o(null, 42);', | 948 'm() => p.o(null, 42);', |
| 1045 const [ | 949 const [ |
| 1046 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, | 950 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, element: 'prefix(p)'), |
| 1047 element: 'prefix(p)'), | |
| 1048 const Visit(VisitKind.VISIT_UNRESOLVED_INVOKE, | 951 const Visit(VisitKind.VISIT_UNRESOLVED_INVOKE, |
| 1049 name: 'o', | 952 name: 'o', arguments: '(null,42)'), |
| 1050 arguments: '(null,42)'), | |
| 1051 ], | 953 ], |
| 1052 isDeferred: true), | 954 isDeferred: true), |
| 1053 const Test.prefix( | 955 const Test.prefix( |
| 1054 ''' | 956 ''' |
| 1055 ''', | 957 ''', |
| 1056 'm() => p(null, 42);', | 958 'm() => p(null, 42);', |
| 1057 const Visit(VisitKind.ERROR_INVALID_INVOKE, | 959 const Visit(VisitKind.ERROR_INVALID_INVOKE, |
| 1058 error: MessageKind.PREFIX_AS_EXPRESSION, | 960 error: MessageKind.PREFIX_AS_EXPRESSION, arguments: '(null,42)')), |
| 1059 arguments: '(null,42)')), | |
| 1060 const Test( | 961 const Test( |
| 1061 ''' | 962 ''' |
| 1062 o(a, b) {} | 963 o(a, b) {} |
| 1063 m() { o = 42; } | 964 m() { o = 42; } |
| 1064 ''', | 965 ''', |
| 1065 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_SET, | 966 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_SET, |
| 1066 element: 'function(o)', | 967 element: 'function(o)', rhs: '42')), |
| 1067 rhs: '42')), | |
| 1068 const Test.prefix( | 968 const Test.prefix( |
| 1069 ''' | 969 ''' |
| 1070 o(a, b) {} | 970 o(a, b) {} |
| 1071 ''', | 971 ''', |
| 1072 'm() { p.o = 42; }', | 972 'm() { p.o = 42; }', |
| 1073 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_SET, | 973 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_SET, |
| 1074 element: 'function(o)', | 974 element: 'function(o)', rhs: '42')), |
| 1075 rhs: '42')), | |
| 1076 ], | 975 ], |
| 1077 'Dynamic properties': const [ | 976 'Dynamic properties': const [ |
| 1078 // Dynamic properties | 977 // Dynamic properties |
| 1079 const Test('m(o) => o.foo;', | 978 const Test('m(o) => o.foo;', const [ |
| 1080 const [ | 979 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_GET, |
| 1081 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_GET, | 980 receiver: 'o', name: 'foo'), |
| 1082 receiver: 'o', | 981 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#o)'), |
| 1083 name: 'foo'), | 982 ]), |
| 1084 const Visit(VisitKind.VISIT_PARAMETER_GET, | 983 const Test('m(o) { o.foo = 42; }', const [ |
| 1085 element: 'parameter(m#o)'), | 984 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_SET, |
| 1086 ]), | 985 receiver: 'o', name: 'foo', rhs: '42'), |
| 1087 const Test('m(o) { o.foo = 42; }', | 986 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#o)'), |
| 1088 const [ | 987 ]), |
| 1089 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_SET, | 988 const Test('m(o) { o.foo(null, 42); }', const [ |
| 1090 receiver: 'o', | 989 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_INVOKE, |
| 1091 name: 'foo', | 990 receiver: 'o', name: 'foo', arguments: '(null,42)'), |
| 1092 rhs: '42'), | 991 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#o)'), |
| 1093 const Visit(VisitKind.VISIT_PARAMETER_GET, | 992 ]), |
| 1094 element: 'parameter(m#o)'), | |
| 1095 ]), | |
| 1096 const Test('m(o) { o.foo(null, 42); }', | |
| 1097 const [ | |
| 1098 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_INVOKE, | |
| 1099 receiver: 'o', | |
| 1100 name: 'foo', | |
| 1101 arguments: '(null,42)'), | |
| 1102 const Visit(VisitKind.VISIT_PARAMETER_GET, | |
| 1103 element: 'parameter(m#o)'), | |
| 1104 ]), | |
| 1105 ], | 993 ], |
| 1106 'This access': const [ | 994 'This access': const [ |
| 1107 // This access | 995 // This access |
| 1108 const Test.clazz( | 996 const Test.clazz( |
| 1109 ''' | 997 ''' |
| 1110 class C { | 998 class C { |
| 1111 m() => this; | 999 m() => this; |
| 1112 } | 1000 } |
| 1113 ''', | 1001 ''', |
| 1114 const Visit(VisitKind.VISIT_THIS_GET)), | 1002 const Visit(VisitKind.VISIT_THIS_GET)), |
| 1115 const Test.clazz( | 1003 const Test.clazz( |
| 1116 ''' | 1004 ''' |
| 1117 class C { | 1005 class C { |
| 1118 call(a, b) {} | 1006 call(a, b) {} |
| 1119 m() { this(null, 42); } | 1007 m() { this(null, 42); } |
| 1120 } | 1008 } |
| 1121 ''', | 1009 ''', |
| 1122 const Visit(VisitKind.VISIT_THIS_INVOKE, | 1010 const Visit(VisitKind.VISIT_THIS_INVOKE, arguments: '(null,42)')), |
| 1123 arguments: '(null,42)')), | |
| 1124 const Test.clazz( | 1011 const Test.clazz( |
| 1125 ''' | 1012 ''' |
| 1126 class C { | 1013 class C { |
| 1127 call(a, b) {} | 1014 call(a, b) {} |
| 1128 static m() { this(null, 42); } | 1015 static m() { this(null, 42); } |
| 1129 } | 1016 } |
| 1130 ''', | 1017 ''', |
| 1131 const Visit(VisitKind.ERROR_INVALID_INVOKE, | 1018 const Visit(VisitKind.ERROR_INVALID_INVOKE, |
| 1132 error: MessageKind.NO_THIS_AVAILABLE, | 1019 error: MessageKind.NO_THIS_AVAILABLE, arguments: '(null,42)')), |
| 1133 arguments: '(null,42)')), | |
| 1134 ], | 1020 ], |
| 1135 'This properties': const [ | 1021 'This properties': const [ |
| 1136 // This properties | 1022 // This properties |
| 1137 const Test.clazz( | 1023 const Test.clazz( |
| 1138 ''' | 1024 ''' |
| 1139 class C { | 1025 class C { |
| 1140 var foo; | 1026 var foo; |
| 1141 m() => foo; | 1027 m() => foo; |
| 1142 } | 1028 } |
| 1143 ''', | 1029 ''', |
| 1144 const Visit(VisitKind.VISIT_THIS_PROPERTY_GET, | 1030 const Visit(VisitKind.VISIT_THIS_PROPERTY_GET, name: 'foo')), |
| 1145 name: 'foo')), | |
| 1146 const Test.clazz( | 1031 const Test.clazz( |
| 1147 ''' | 1032 ''' |
| 1148 class C { | 1033 class C { |
| 1149 var foo; | 1034 var foo; |
| 1150 m() => this.foo; | 1035 m() => this.foo; |
| 1151 } | 1036 } |
| 1152 ''', | 1037 ''', |
| 1153 const Visit(VisitKind.VISIT_THIS_PROPERTY_GET, | 1038 const Visit(VisitKind.VISIT_THIS_PROPERTY_GET, name: 'foo')), |
| 1154 name: 'foo')), | |
| 1155 const Test.clazz( | 1039 const Test.clazz( |
| 1156 ''' | 1040 ''' |
| 1157 class C { | 1041 class C { |
| 1158 get foo => null; | 1042 get foo => null; |
| 1159 m() => foo; | 1043 m() => foo; |
| 1160 } | 1044 } |
| 1161 ''', | 1045 ''', |
| 1162 const Visit(VisitKind.VISIT_THIS_PROPERTY_GET, | 1046 const Visit(VisitKind.VISIT_THIS_PROPERTY_GET, name: 'foo')), |
| 1163 name: 'foo')), | |
| 1164 const Test.clazz( | 1047 const Test.clazz( |
| 1165 ''' | 1048 ''' |
| 1166 class C { | 1049 class C { |
| 1167 var foo; | 1050 var foo; |
| 1168 static m() => this.foo; | 1051 static m() => this.foo; |
| 1169 } | 1052 } |
| 1170 ''', | 1053 ''', |
| 1171 const Visit(VisitKind.ERROR_INVALID_GET, | 1054 const Visit(VisitKind.ERROR_INVALID_GET, |
| 1172 error: MessageKind.NO_THIS_AVAILABLE)), | 1055 error: MessageKind.NO_THIS_AVAILABLE)), |
| 1173 const Test.clazz( | 1056 const Test.clazz( |
| 1174 ''' | 1057 ''' |
| 1175 class C { | 1058 class C { |
| 1176 get foo => null; | 1059 get foo => null; |
| 1177 m() => this.foo; | 1060 m() => this.foo; |
| 1178 } | 1061 } |
| 1179 ''', | 1062 ''', |
| 1180 const Visit(VisitKind.VISIT_THIS_PROPERTY_GET, | 1063 const Visit(VisitKind.VISIT_THIS_PROPERTY_GET, name: 'foo')), |
| 1181 name: 'foo')), | |
| 1182 const Test.clazz( | 1064 const Test.clazz( |
| 1183 ''' | 1065 ''' |
| 1184 class C { | 1066 class C { |
| 1185 var foo; | 1067 var foo; |
| 1186 m() { foo = 42; } | 1068 m() { foo = 42; } |
| 1187 } | 1069 } |
| 1188 ''', | 1070 ''', |
| 1189 const Visit(VisitKind.VISIT_THIS_PROPERTY_SET, | 1071 const Visit(VisitKind.VISIT_THIS_PROPERTY_SET, name: 'foo', rhs: '42')), |
| 1190 name: 'foo', | |
| 1191 rhs: '42')), | |
| 1192 const Test.clazz( | 1072 const Test.clazz( |
| 1193 ''' | 1073 ''' |
| 1194 class C { | 1074 class C { |
| 1195 var foo; | 1075 var foo; |
| 1196 m() { this.foo = 42; } | 1076 m() { this.foo = 42; } |
| 1197 } | 1077 } |
| 1198 ''', | 1078 ''', |
| 1199 const Visit(VisitKind.VISIT_THIS_PROPERTY_SET, | 1079 const Visit(VisitKind.VISIT_THIS_PROPERTY_SET, name: 'foo', rhs: '42')), |
| 1200 name: 'foo', | |
| 1201 rhs: '42')), | |
| 1202 const Test.clazz( | 1080 const Test.clazz( |
| 1203 ''' | 1081 ''' |
| 1204 class C { | 1082 class C { |
| 1205 set foo(_) {} | 1083 set foo(_) {} |
| 1206 m() { foo = 42; } | 1084 m() { foo = 42; } |
| 1207 } | 1085 } |
| 1208 ''', | 1086 ''', |
| 1209 const Visit(VisitKind.VISIT_THIS_PROPERTY_SET, | 1087 const Visit(VisitKind.VISIT_THIS_PROPERTY_SET, name: 'foo', rhs: '42')), |
| 1210 name: 'foo', | |
| 1211 rhs: '42')), | |
| 1212 const Test.clazz( | 1088 const Test.clazz( |
| 1213 ''' | 1089 ''' |
| 1214 class C { | 1090 class C { |
| 1215 set foo(_) {} | 1091 set foo(_) {} |
| 1216 m() { this.foo = 42; } | 1092 m() { this.foo = 42; } |
| 1217 } | 1093 } |
| 1218 ''', | 1094 ''', |
| 1219 const Visit(VisitKind.VISIT_THIS_PROPERTY_SET, | 1095 const Visit(VisitKind.VISIT_THIS_PROPERTY_SET, name: 'foo', rhs: '42')), |
| 1220 name: 'foo', | |
| 1221 rhs: '42')), | |
| 1222 const Test.clazz( | 1096 const Test.clazz( |
| 1223 ''' | 1097 ''' |
| 1224 class C { | 1098 class C { |
| 1225 var foo; | 1099 var foo; |
| 1226 m() { foo(null, 42); } | 1100 m() { foo(null, 42); } |
| 1227 } | 1101 } |
| 1228 ''', | 1102 ''', |
| 1229 const Visit(VisitKind.VISIT_THIS_PROPERTY_INVOKE, | 1103 const Visit(VisitKind.VISIT_THIS_PROPERTY_INVOKE, |
| 1230 name: 'foo', | 1104 name: 'foo', arguments: '(null,42)')), |
| 1231 arguments: '(null,42)')), | |
| 1232 const Test.clazz( | 1105 const Test.clazz( |
| 1233 ''' | 1106 ''' |
| 1234 class C { | 1107 class C { |
| 1235 var foo; | 1108 var foo; |
| 1236 m() { this.foo(null, 42); } | 1109 m() { this.foo(null, 42); } |
| 1237 } | 1110 } |
| 1238 ''', | 1111 ''', |
| 1239 const Visit(VisitKind.VISIT_THIS_PROPERTY_INVOKE, | 1112 const Visit(VisitKind.VISIT_THIS_PROPERTY_INVOKE, |
| 1240 name: 'foo', | 1113 name: 'foo', arguments: '(null,42)')), |
| 1241 arguments: '(null,42)')), | |
| 1242 const Test.clazz( | 1114 const Test.clazz( |
| 1243 ''' | 1115 ''' |
| 1244 class C { | 1116 class C { |
| 1245 var foo; | 1117 var foo; |
| 1246 static m() { this.foo(null, 42); } | 1118 static m() { this.foo(null, 42); } |
| 1247 } | 1119 } |
| 1248 ''', | 1120 ''', |
| 1249 const Visit(VisitKind.ERROR_INVALID_INVOKE, | 1121 const Visit(VisitKind.ERROR_INVALID_INVOKE, |
| 1250 error: MessageKind.NO_THIS_AVAILABLE, | 1122 error: MessageKind.NO_THIS_AVAILABLE, arguments: '(null,42)')), |
| 1251 arguments: '(null,42)')), | |
| 1252 ], | 1123 ], |
| 1253 'Super fields': const [ | 1124 'Super fields': const [ |
| 1254 // Super fields | 1125 // Super fields |
| 1255 const Test.clazz( | 1126 const Test.clazz( |
| 1256 ''' | 1127 ''' |
| 1257 class B { | 1128 class B { |
| 1258 var o; | 1129 var o; |
| 1259 } | 1130 } |
| 1260 class C extends B { | 1131 class C extends B { |
| 1261 m() => super.o; | 1132 m() => super.o; |
| 1262 } | 1133 } |
| 1263 ''', | 1134 ''', |
| 1264 const Visit(VisitKind.VISIT_SUPER_FIELD_GET, | 1135 const Visit(VisitKind.VISIT_SUPER_FIELD_GET, element: 'field(B#o)')), |
| 1265 element: 'field(B#o)')), | |
| 1266 const Test.clazz( | 1136 const Test.clazz( |
| 1267 ''' | 1137 ''' |
| 1268 class B { | 1138 class B { |
| 1269 var o; | 1139 var o; |
| 1270 } | 1140 } |
| 1271 class C extends B { | 1141 class C extends B { |
| 1272 m() { super.o = 42; } | 1142 m() { super.o = 42; } |
| 1273 } | 1143 } |
| 1274 ''', | 1144 ''', |
| 1275 const Visit(VisitKind.VISIT_SUPER_FIELD_SET, | 1145 const Visit(VisitKind.VISIT_SUPER_FIELD_SET, |
| 1276 element: 'field(B#o)', | 1146 element: 'field(B#o)', rhs: '42')), |
| 1277 rhs: '42')), | |
| 1278 const Test.clazz( | 1147 const Test.clazz( |
| 1279 ''' | 1148 ''' |
| 1280 class B { | 1149 class B { |
| 1281 final o = 0; | 1150 final o = 0; |
| 1282 } | 1151 } |
| 1283 class C extends B { | 1152 class C extends B { |
| 1284 m() { super.o = 42; } | 1153 m() { super.o = 42; } |
| 1285 } | 1154 } |
| 1286 ''', | 1155 ''', |
| 1287 const Visit(VisitKind.VISIT_FINAL_SUPER_FIELD_SET, | 1156 const Visit(VisitKind.VISIT_FINAL_SUPER_FIELD_SET, |
| 1288 element: 'field(B#o)', | 1157 element: 'field(B#o)', rhs: '42')), |
| 1289 rhs: '42')), | |
| 1290 const Test.clazz( | 1158 const Test.clazz( |
| 1291 ''' | 1159 ''' |
| 1292 class B { | 1160 class B { |
| 1293 var o; | 1161 var o; |
| 1294 } | 1162 } |
| 1295 class C extends B { | 1163 class C extends B { |
| 1296 m() { super.o(null, 42); } | 1164 m() { super.o(null, 42); } |
| 1297 } | 1165 } |
| 1298 ''', | 1166 ''', |
| 1299 const Visit(VisitKind.VISIT_SUPER_FIELD_INVOKE, | 1167 const Visit(VisitKind.VISIT_SUPER_FIELD_INVOKE, |
| 1300 element: 'field(B#o)', | 1168 element: 'field(B#o)', arguments: '(null,42)')), |
| 1301 arguments: '(null,42)')), | |
| 1302 const Test.clazz( | 1169 const Test.clazz( |
| 1303 ''' | 1170 ''' |
| 1304 class B { | 1171 class B { |
| 1305 } | 1172 } |
| 1306 class C extends B { | 1173 class C extends B { |
| 1307 m() => super.o; | 1174 m() => super.o; |
| 1308 } | 1175 } |
| 1309 ''', | 1176 ''', |
| 1310 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GET)), | 1177 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GET)), |
| 1311 const Test.clazz( | 1178 const Test.clazz( |
| 1312 ''' | 1179 ''' |
| 1313 class B { | 1180 class B { |
| 1314 } | 1181 } |
| 1315 class C extends B { | 1182 class C extends B { |
| 1316 m() => super.o = 42; | 1183 m() => super.o = 42; |
| 1317 } | 1184 } |
| 1318 ''', | 1185 ''', |
| 1319 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_SET, | 1186 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_SET, rhs: '42')), |
| 1320 rhs: '42')), | |
| 1321 ], | 1187 ], |
| 1322 'Super properties': const [ | 1188 'Super properties': const [ |
| 1323 // Super properties | 1189 // Super properties |
| 1324 const Test.clazz( | 1190 const Test.clazz( |
| 1325 ''' | 1191 ''' |
| 1326 class B { | 1192 class B { |
| 1327 get o => null; | 1193 get o => null; |
| 1328 } | 1194 } |
| 1329 class C extends B { | 1195 class C extends B { |
| 1330 m() => super.o; | 1196 m() => super.o; |
| 1331 } | 1197 } |
| 1332 ''', | 1198 ''', |
| 1333 const Visit(VisitKind.VISIT_SUPER_GETTER_GET, | 1199 const Visit(VisitKind.VISIT_SUPER_GETTER_GET, element: 'getter(B#o)')), |
| 1334 element: 'getter(B#o)')), | |
| 1335 const Test.clazz( | 1200 const Test.clazz( |
| 1336 ''' | 1201 ''' |
| 1337 class B { | 1202 class B { |
| 1338 set o(_) {} | 1203 set o(_) {} |
| 1339 } | 1204 } |
| 1340 class C extends B { | 1205 class C extends B { |
| 1341 m() => super.o; | 1206 m() => super.o; |
| 1342 } | 1207 } |
| 1343 ''', | 1208 ''', |
| 1344 const Visit(VisitKind.VISIT_SUPER_SETTER_GET, | 1209 const Visit(VisitKind.VISIT_SUPER_SETTER_GET, element: 'setter(B#o)')), |
| 1345 element: 'setter(B#o)')), | |
| 1346 const Test.clazz( | 1210 const Test.clazz( |
| 1347 ''' | 1211 ''' |
| 1348 class B { | 1212 class B { |
| 1349 get o => 0; | 1213 get o => 0; |
| 1350 } | 1214 } |
| 1351 class C extends B { | 1215 class C extends B { |
| 1352 m() { super.o = 42; } | 1216 m() { super.o = 42; } |
| 1353 } | 1217 } |
| 1354 ''', | 1218 ''', |
| 1355 const Visit(VisitKind.VISIT_SUPER_GETTER_SET, | 1219 const Visit(VisitKind.VISIT_SUPER_GETTER_SET, |
| 1356 element: 'getter(B#o)', | 1220 element: 'getter(B#o)', rhs: '42')), |
| 1357 rhs: '42')), | |
| 1358 const Test.clazz( | 1221 const Test.clazz( |
| 1359 ''' | 1222 ''' |
| 1360 class B { | 1223 class B { |
| 1361 set o(_) {} | 1224 set o(_) {} |
| 1362 } | 1225 } |
| 1363 class C extends B { | 1226 class C extends B { |
| 1364 m() { super.o = 42; } | 1227 m() { super.o = 42; } |
| 1365 } | 1228 } |
| 1366 ''', | 1229 ''', |
| 1367 const Visit(VisitKind.VISIT_SUPER_SETTER_SET, | 1230 const Visit(VisitKind.VISIT_SUPER_SETTER_SET, |
| 1368 element: 'setter(B#o)', | 1231 element: 'setter(B#o)', rhs: '42')), |
| 1369 rhs: '42')), | |
| 1370 const Test.clazz( | 1232 const Test.clazz( |
| 1371 ''' | 1233 ''' |
| 1372 class B { | 1234 class B { |
| 1373 get o => null; | 1235 get o => null; |
| 1374 } | 1236 } |
| 1375 class C extends B { | 1237 class C extends B { |
| 1376 m() { super.o(null, 42); } | 1238 m() { super.o(null, 42); } |
| 1377 } | 1239 } |
| 1378 ''', | 1240 ''', |
| 1379 const Visit(VisitKind.VISIT_SUPER_GETTER_INVOKE, | 1241 const Visit(VisitKind.VISIT_SUPER_GETTER_INVOKE, |
| 1380 element: 'getter(B#o)', | 1242 element: 'getter(B#o)', arguments: '(null,42)')), |
| 1381 arguments: '(null,42)')), | |
| 1382 const Test.clazz( | 1243 const Test.clazz( |
| 1383 ''' | 1244 ''' |
| 1384 class B { | 1245 class B { |
| 1385 set o(_) {} | 1246 set o(_) {} |
| 1386 } | 1247 } |
| 1387 class C extends B { | 1248 class C extends B { |
| 1388 m() { super.o(null, 42); } | 1249 m() { super.o(null, 42); } |
| 1389 } | 1250 } |
| 1390 ''', | 1251 ''', |
| 1391 const Visit(VisitKind.VISIT_SUPER_SETTER_INVOKE, | 1252 const Visit(VisitKind.VISIT_SUPER_SETTER_INVOKE, |
| 1392 element: 'setter(B#o)', | 1253 element: 'setter(B#o)', arguments: '(null,42)')), |
| 1393 arguments: '(null,42)')), | |
| 1394 ], | 1254 ], |
| 1395 'Super methods': const [ | 1255 'Super methods': const [ |
| 1396 // Super methods | 1256 // Super methods |
| 1397 const Test.clazz( | 1257 const Test.clazz( |
| 1398 ''' | 1258 ''' |
| 1399 class B { | 1259 class B { |
| 1400 o(a, b) {} | 1260 o(a, b) {} |
| 1401 } | 1261 } |
| 1402 class C extends B { | 1262 class C extends B { |
| 1403 m() => super.o; | 1263 m() => super.o; |
| 1404 } | 1264 } |
| 1405 ''', | 1265 ''', |
| 1406 const Visit(VisitKind.VISIT_SUPER_METHOD_GET, | 1266 const Visit(VisitKind.VISIT_SUPER_METHOD_GET, |
| 1407 element: 'function(B#o)')), | 1267 element: 'function(B#o)')), |
| 1408 const Test.clazz( | 1268 const Test.clazz( |
| 1409 ''' | 1269 ''' |
| 1410 class B { | 1270 class B { |
| 1411 o(a, b) {} | 1271 o(a, b) {} |
| 1412 } | 1272 } |
| 1413 class C extends B { | 1273 class C extends B { |
| 1414 m() { super.o = 42; } | 1274 m() { super.o = 42; } |
| 1415 } | 1275 } |
| 1416 ''', | 1276 ''', |
| 1417 const Visit(VisitKind.VISIT_SUPER_METHOD_SET, | 1277 const Visit(VisitKind.VISIT_SUPER_METHOD_SET, |
| 1418 element: 'function(B#o)', | 1278 element: 'function(B#o)', rhs: '42')), |
| 1419 rhs: '42')), | |
| 1420 const Test.clazz( | 1279 const Test.clazz( |
| 1421 ''' | 1280 ''' |
| 1422 class B { | 1281 class B { |
| 1423 o(a, b) {} | 1282 o(a, b) {} |
| 1424 } | 1283 } |
| 1425 class C extends B { | 1284 class C extends B { |
| 1426 m() { super.o(null, 42); } | 1285 m() { super.o(null, 42); } |
| 1427 } | 1286 } |
| 1428 ''', | 1287 ''', |
| 1429 const Visit(VisitKind.VISIT_SUPER_METHOD_INVOKE, | 1288 const Visit(VisitKind.VISIT_SUPER_METHOD_INVOKE, |
| 1430 element: 'function(B#o)', | 1289 element: 'function(B#o)', arguments: '(null,42)')), |
| 1431 arguments: '(null,42)')), | |
| 1432 const Test.clazz( | 1290 const Test.clazz( |
| 1433 ''' | 1291 ''' |
| 1434 class B { | 1292 class B { |
| 1435 o(a, b) {} | 1293 o(a, b) {} |
| 1436 } | 1294 } |
| 1437 class C extends B { | 1295 class C extends B { |
| 1438 m() { super.o(null); } | 1296 m() { super.o(null); } |
| 1439 } | 1297 } |
| 1440 ''', | 1298 ''', |
| 1441 const Visit(VisitKind.VISIT_SUPER_METHOD_INCOMPATIBLE_INVOKE, | 1299 const Visit(VisitKind.VISIT_SUPER_METHOD_INCOMPATIBLE_INVOKE, |
| 1442 element: 'function(B#o)', | 1300 element: 'function(B#o)', arguments: '(null)')), |
| 1443 arguments: '(null)')), | |
| 1444 const Test.clazz( | 1301 const Test.clazz( |
| 1445 ''' | 1302 ''' |
| 1446 class B { | 1303 class B { |
| 1447 } | 1304 } |
| 1448 class C extends B { | 1305 class C extends B { |
| 1449 m() => super.o(null, 42); | 1306 m() => super.o(null, 42); |
| 1450 } | 1307 } |
| 1451 ''', | 1308 ''', |
| 1452 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_INVOKE, | 1309 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_INVOKE, |
| 1453 arguments: '(null,42)')), | 1310 arguments: '(null,42)')), |
| 1454 ], | 1311 ], |
| 1455 'Expression invoke': const [ | 1312 'Expression invoke': const [ |
| 1456 // Expression invoke | 1313 // Expression invoke |
| 1457 const Test('m() => (a, b){}(null, 42);', | 1314 const Test( |
| 1315 'm() => (a, b){}(null, 42);', |
| 1458 const Visit(VisitKind.VISIT_EXPRESSION_INVOKE, | 1316 const Visit(VisitKind.VISIT_EXPRESSION_INVOKE, |
| 1459 receiver: '(a,b){}', | 1317 receiver: '(a,b){}', arguments: '(null,42)')), |
| 1460 arguments: '(null,42)')), | |
| 1461 ], | 1318 ], |
| 1462 'Class type literals': const [ | 1319 'Class type literals': const [ |
| 1463 // Class type literals | 1320 // Class type literals |
| 1464 const Test( | 1321 const Test( |
| 1465 ''' | 1322 ''' |
| 1466 class C {} | 1323 class C {} |
| 1467 m() => C; | 1324 m() => C; |
| 1468 ''', | 1325 ''', |
| 1469 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_GET, | 1326 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_GET, constant: 'C')), |
| 1470 constant: 'C')), | |
| 1471 const Test( | 1327 const Test( |
| 1472 ''' | 1328 ''' |
| 1473 class C {} | 1329 class C {} |
| 1474 m() => C(null, 42); | 1330 m() => C(null, 42); |
| 1475 ''', | 1331 ''', |
| 1476 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_INVOKE, | 1332 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_INVOKE, |
| 1477 constant: 'C', | 1333 constant: 'C', arguments: '(null,42)')), |
| 1478 arguments: '(null,42)')), | |
| 1479 const Test( | 1334 const Test( |
| 1480 ''' | 1335 ''' |
| 1481 class C {} | 1336 class C {} |
| 1482 m() => C = 42; | 1337 m() => C = 42; |
| 1483 ''', | 1338 ''', |
| 1484 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_SET, | 1339 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_SET, |
| 1485 constant: 'C', | 1340 constant: 'C', rhs: '42')), |
| 1486 rhs: '42')), | |
| 1487 const Test( | 1341 const Test( |
| 1488 ''' | 1342 ''' |
| 1489 class C {} | 1343 class C {} |
| 1490 m() => C += 42; | 1344 m() => C += 42; |
| 1491 ''', | 1345 ''', |
| 1492 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_COMPOUND, | 1346 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_COMPOUND, |
| 1493 constant: 'C', | 1347 constant: 'C', operator: '+=', rhs: '42')), |
| 1494 operator: '+=', | |
| 1495 rhs: '42')), | |
| 1496 const Test( | 1348 const Test( |
| 1497 ''' | 1349 ''' |
| 1498 class C {} | 1350 class C {} |
| 1499 m() => C ??= 42; | 1351 m() => C ??= 42; |
| 1500 ''', | 1352 ''', |
| 1501 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_SET_IF_NULL, | 1353 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_SET_IF_NULL, |
| 1502 constant: 'C', | 1354 constant: 'C', rhs: '42')), |
| 1503 rhs: '42')), | |
| 1504 const Test( | 1355 const Test( |
| 1505 ''' | 1356 ''' |
| 1506 class C {} | 1357 class C {} |
| 1507 m() => ++C; | 1358 m() => ++C; |
| 1508 ''', | 1359 ''', |
| 1509 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_PREFIX, | 1360 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_PREFIX, |
| 1510 constant: 'C', | 1361 constant: 'C', operator: '++')), |
| 1511 operator: '++')), | |
| 1512 const Test( | 1362 const Test( |
| 1513 ''' | 1363 ''' |
| 1514 class C {} | 1364 class C {} |
| 1515 m() => C--; | 1365 m() => C--; |
| 1516 ''', | 1366 ''', |
| 1517 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_POSTFIX, | 1367 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_POSTFIX, |
| 1518 constant: 'C', | 1368 constant: 'C', operator: '--')), |
| 1519 operator: '--')), | |
| 1520 const Test( | 1369 const Test( |
| 1521 ''' | 1370 ''' |
| 1522 class C {} | 1371 class C {} |
| 1523 m() => (C).hashCode; | 1372 m() => (C).hashCode; |
| 1524 ''', | 1373 ''', |
| 1525 const [ | 1374 const [ |
| 1526 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_GET, | 1375 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_GET, |
| 1527 receiver: '(C)', name: 'hashCode'), | 1376 receiver: '(C)', name: 'hashCode'), |
| 1528 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_GET, | 1377 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_GET, constant: 'C'), |
| 1529 constant: 'C'), | |
| 1530 ]), | 1378 ]), |
| 1531 ], | 1379 ], |
| 1532 'Typedef type literals': const [ | 1380 'Typedef type literals': const [ |
| 1533 // Typedef type literals | 1381 // Typedef type literals |
| 1534 const Test( | 1382 const Test( |
| 1535 ''' | 1383 ''' |
| 1536 typedef F(); | 1384 typedef F(); |
| 1537 m() => F; | 1385 m() => F; |
| 1538 ''', | 1386 ''', |
| 1539 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_GET, | 1387 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_GET, constant: 'F')), |
| 1540 constant: 'F')), | |
| 1541 const Test( | 1388 const Test( |
| 1542 ''' | 1389 ''' |
| 1543 typedef F(); | 1390 typedef F(); |
| 1544 m() => F(null, 42); | 1391 m() => F(null, 42); |
| 1545 ''', | 1392 ''', |
| 1546 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_INVOKE, | 1393 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_INVOKE, |
| 1547 constant: 'F', | 1394 constant: 'F', arguments: '(null,42)')), |
| 1548 arguments: '(null,42)')), | |
| 1549 const Test( | 1395 const Test( |
| 1550 ''' | 1396 ''' |
| 1551 typedef F(); | 1397 typedef F(); |
| 1552 m() => F = 42; | 1398 m() => F = 42; |
| 1553 ''', | 1399 ''', |
| 1554 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_SET, | 1400 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_SET, |
| 1555 constant: 'F', | 1401 constant: 'F', rhs: '42')), |
| 1556 rhs: '42')), | |
| 1557 const Test( | 1402 const Test( |
| 1558 ''' | 1403 ''' |
| 1559 typedef F(); | 1404 typedef F(); |
| 1560 m() => F += 42; | 1405 m() => F += 42; |
| 1561 ''', | 1406 ''', |
| 1562 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_COMPOUND, | 1407 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_COMPOUND, |
| 1563 constant: 'F', | 1408 constant: 'F', operator: '+=', rhs: '42')), |
| 1564 operator: '+=', | |
| 1565 rhs: '42')), | |
| 1566 const Test( | 1409 const Test( |
| 1567 ''' | 1410 ''' |
| 1568 typedef F(); | 1411 typedef F(); |
| 1569 m() => F ??= 42; | 1412 m() => F ??= 42; |
| 1570 ''', | 1413 ''', |
| 1571 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_SET_IF_NULL, | 1414 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_SET_IF_NULL, |
| 1572 constant: 'F', | 1415 constant: 'F', rhs: '42')), |
| 1573 rhs: '42')), | |
| 1574 const Test( | 1416 const Test( |
| 1575 ''' | 1417 ''' |
| 1576 typedef F(); | 1418 typedef F(); |
| 1577 m() => ++F; | 1419 m() => ++F; |
| 1578 ''', | 1420 ''', |
| 1579 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_PREFIX, | 1421 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_PREFIX, |
| 1580 constant: 'F', | 1422 constant: 'F', operator: '++')), |
| 1581 operator: '++')), | |
| 1582 const Test( | 1423 const Test( |
| 1583 ''' | 1424 ''' |
| 1584 typedef F(); | 1425 typedef F(); |
| 1585 m() => F--; | 1426 m() => F--; |
| 1586 ''', | 1427 ''', |
| 1587 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_POSTFIX, | 1428 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_POSTFIX, |
| 1588 constant: 'F', | 1429 constant: 'F', operator: '--')), |
| 1589 operator: '--')), | |
| 1590 ], | 1430 ], |
| 1591 'Type variable type literals': const [ | 1431 'Type variable type literals': const [ |
| 1592 // Type variable type literals | 1432 // Type variable type literals |
| 1593 const Test.clazz( | 1433 const Test.clazz( |
| 1594 ''' | 1434 ''' |
| 1595 class C<T> { | 1435 class C<T> { |
| 1596 m() => T; | 1436 m() => T; |
| 1597 } | 1437 } |
| 1598 ''', | 1438 ''', |
| 1599 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_GET, | 1439 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_GET, |
| 1600 element: 'type_variable(C#T)')), | 1440 element: 'type_variable(C#T)')), |
| 1601 const Test.clazz( | 1441 const Test.clazz( |
| 1602 ''' | 1442 ''' |
| 1603 class C<T> { | 1443 class C<T> { |
| 1604 m() => T(null, 42); | 1444 m() => T(null, 42); |
| 1605 } | 1445 } |
| 1606 ''', | 1446 ''', |
| 1607 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_INVOKE, | 1447 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_INVOKE, |
| 1608 element: 'type_variable(C#T)', | 1448 element: 'type_variable(C#T)', arguments: '(null,42)')), |
| 1609 arguments: '(null,42)')), | |
| 1610 const Test.clazz( | 1449 const Test.clazz( |
| 1611 ''' | 1450 ''' |
| 1612 class C<T> { | 1451 class C<T> { |
| 1613 m() => T = 42; | 1452 m() => T = 42; |
| 1614 } | 1453 } |
| 1615 ''', | 1454 ''', |
| 1616 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_SET, | 1455 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_SET, |
| 1617 element: 'type_variable(C#T)', | 1456 element: 'type_variable(C#T)', rhs: '42')), |
| 1618 rhs: '42')), | |
| 1619 const Test.clazz( | 1457 const Test.clazz( |
| 1620 ''' | 1458 ''' |
| 1621 class C<T> { | 1459 class C<T> { |
| 1622 m() => T += 42; | 1460 m() => T += 42; |
| 1623 } | 1461 } |
| 1624 ''', | 1462 ''', |
| 1625 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_COMPOUND, | 1463 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_COMPOUND, |
| 1626 element: 'type_variable(C#T)', | 1464 element: 'type_variable(C#T)', operator: '+=', rhs: '42')), |
| 1627 operator: '+=', | |
| 1628 rhs: '42')), | |
| 1629 const Test.clazz( | 1465 const Test.clazz( |
| 1630 ''' | 1466 ''' |
| 1631 class C<T> { | 1467 class C<T> { |
| 1632 m() => T ??= 42; | 1468 m() => T ??= 42; |
| 1633 } | 1469 } |
| 1634 ''', | 1470 ''', |
| 1635 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_SET_IF_NULL, | 1471 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_SET_IF_NULL, |
| 1636 element: 'type_variable(C#T)', | 1472 element: 'type_variable(C#T)', rhs: '42')), |
| 1637 rhs: '42')), | |
| 1638 const Test.clazz( | 1473 const Test.clazz( |
| 1639 ''' | 1474 ''' |
| 1640 class C<T> { | 1475 class C<T> { |
| 1641 m() => ++T; | 1476 m() => ++T; |
| 1642 } | 1477 } |
| 1643 ''', | 1478 ''', |
| 1644 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_PREFIX, | 1479 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_PREFIX, |
| 1645 element: 'type_variable(C#T)', | 1480 element: 'type_variable(C#T)', operator: '++')), |
| 1646 operator: '++')), | |
| 1647 const Test.clazz( | 1481 const Test.clazz( |
| 1648 ''' | 1482 ''' |
| 1649 class C<T> { | 1483 class C<T> { |
| 1650 m() => T--; | 1484 m() => T--; |
| 1651 } | 1485 } |
| 1652 ''', | 1486 ''', |
| 1653 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_POSTFIX, | 1487 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_POSTFIX, |
| 1654 element: 'type_variable(C#T)', | 1488 element: 'type_variable(C#T)', operator: '--')), |
| 1655 operator: '--')), | |
| 1656 const Test.clazz( | 1489 const Test.clazz( |
| 1657 ''' | 1490 ''' |
| 1658 class C<T> { | 1491 class C<T> { |
| 1659 static m() => T; | 1492 static m() => T; |
| 1660 } | 1493 } |
| 1661 ''', | 1494 ''', |
| 1662 const Visit(VisitKind.ERROR_INVALID_GET, | 1495 const Visit(VisitKind.ERROR_INVALID_GET, |
| 1663 error: MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER)), | 1496 error: MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER)), |
| 1664 const Test.clazz( | 1497 const Test.clazz( |
| 1665 ''' | 1498 ''' |
| 1666 class C<T> { | 1499 class C<T> { |
| 1667 static m() => T(null, 42); | 1500 static m() => T(null, 42); |
| 1668 } | 1501 } |
| 1669 ''', | 1502 ''', |
| 1670 const Visit(VisitKind.ERROR_INVALID_INVOKE, | 1503 const Visit(VisitKind.ERROR_INVALID_INVOKE, |
| 1671 error: MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER, | 1504 error: MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER, |
| 1672 arguments: '(null,42)')), | 1505 arguments: '(null,42)')), |
| 1673 const Test.clazz( | 1506 const Test.clazz( |
| 1674 ''' | 1507 ''' |
| 1675 class C<T> { | 1508 class C<T> { |
| 1676 static m() => T ??= 42; | 1509 static m() => T ??= 42; |
| 1677 } | 1510 } |
| 1678 ''', | 1511 ''', |
| 1679 const Visit(VisitKind.ERROR_INVALID_SET_IF_NULL, | 1512 const Visit(VisitKind.ERROR_INVALID_SET_IF_NULL, |
| 1680 error: MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER, | 1513 error: MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER, rhs: '42')), |
| 1681 rhs: '42')), | |
| 1682 const Test.clazz( | 1514 const Test.clazz( |
| 1683 ''' | 1515 ''' |
| 1684 class C<T> { | 1516 class C<T> { |
| 1685 static m() => T ??= 42; | 1517 static m() => T ??= 42; |
| 1686 } | 1518 } |
| 1687 ''', | 1519 ''', |
| 1688 const Visit(VisitKind.ERROR_INVALID_SET_IF_NULL, | 1520 const Visit(VisitKind.ERROR_INVALID_SET_IF_NULL, |
| 1689 error: MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER, | 1521 error: MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER, rhs: '42')), |
| 1690 rhs: '42')), | |
| 1691 const Test.clazz( | 1522 const Test.clazz( |
| 1692 ''' | 1523 ''' |
| 1693 class C<T> { | 1524 class C<T> { |
| 1694 static m() => ++T; | 1525 static m() => ++T; |
| 1695 } | 1526 } |
| 1696 ''', | 1527 ''', |
| 1697 const Visit(VisitKind.ERROR_INVALID_PREFIX, | 1528 const Visit(VisitKind.ERROR_INVALID_PREFIX, |
| 1698 error: MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER, | 1529 error: MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER, |
| 1699 operator: '++')), | 1530 operator: '++')), |
| 1700 const Test.clazz( | 1531 const Test.clazz( |
| 1701 ''' | 1532 ''' |
| 1702 class C<T> { | 1533 class C<T> { |
| 1703 static m() => T--; | 1534 static m() => T--; |
| 1704 } | 1535 } |
| 1705 ''', | 1536 ''', |
| 1706 const Visit(VisitKind.ERROR_INVALID_POSTFIX, | 1537 const Visit(VisitKind.ERROR_INVALID_POSTFIX, |
| 1707 error: MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER, | 1538 error: MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER, |
| 1708 operator: '--')), | 1539 operator: '--')), |
| 1709 ], | 1540 ], |
| 1710 'Dynamic type literals': const [ | 1541 'Dynamic type literals': const [ |
| 1711 // Dynamic type literals | 1542 // Dynamic type literals |
| 1712 const Test( | 1543 const Test( |
| 1713 ''' | 1544 ''' |
| 1714 m() => dynamic; | 1545 m() => dynamic; |
| 1715 ''', | 1546 ''', |
| 1716 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_GET, | 1547 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_GET, |
| 1717 constant: 'dynamic')), | 1548 constant: 'dynamic')), |
| 1718 // TODO(johnniwinther): Update these to expect the constant to be `dynamic` | 1549 // TODO(johnniwinther): Update these to expect the constant to be `dynamic` |
| 1719 // instead of `Type`. Currently the compile time constant evaluator cannot | 1550 // instead of `Type`. Currently the compile time constant evaluator cannot |
| 1720 // detect `dynamic` as a constant subexpression. | 1551 // detect `dynamic` as a constant subexpression. |
| 1721 const Test( | 1552 const Test( |
| 1722 ''' | 1553 ''' |
| 1723 m() { dynamic(null, 42); } | 1554 m() { dynamic(null, 42); } |
| 1724 ''', | 1555 ''', |
| 1725 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_INVOKE, | 1556 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_INVOKE, |
| 1726 constant: 'Type', | 1557 constant: 'Type', arguments: '(null,42)')), |
| 1727 arguments: '(null,42)')), | |
| 1728 const Test( | 1558 const Test( |
| 1729 ''' | 1559 ''' |
| 1730 m() => dynamic = 42; | 1560 m() => dynamic = 42; |
| 1731 ''', | 1561 ''', |
| 1732 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_SET, | 1562 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_SET, |
| 1733 constant: 'dynamic', | 1563 constant: 'dynamic', rhs: '42')), |
| 1734 rhs: '42')), | |
| 1735 const Test( | 1564 const Test( |
| 1736 ''' | 1565 ''' |
| 1737 m() => dynamic += 42; | 1566 m() => dynamic += 42; |
| 1738 ''', | 1567 ''', |
| 1739 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_COMPOUND, | 1568 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_COMPOUND, |
| 1740 constant: 'dynamic', | 1569 constant: 'dynamic', operator: '+=', rhs: '42')), |
| 1741 operator: '+=', | |
| 1742 rhs: '42')), | |
| 1743 const Test( | 1570 const Test( |
| 1744 ''' | 1571 ''' |
| 1745 m() => dynamic ??= 42; | 1572 m() => dynamic ??= 42; |
| 1746 ''', | 1573 ''', |
| 1747 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_SET_IF_NULL, | 1574 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_SET_IF_NULL, |
| 1748 constant: 'dynamic', | 1575 constant: 'dynamic', rhs: '42')), |
| 1749 rhs: '42')), | |
| 1750 const Test( | 1576 const Test( |
| 1751 ''' | 1577 ''' |
| 1752 m() => ++dynamic; | 1578 m() => ++dynamic; |
| 1753 ''', | 1579 ''', |
| 1754 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_PREFIX, | 1580 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_PREFIX, |
| 1755 constant: 'dynamic', | 1581 constant: 'dynamic', operator: '++')), |
| 1756 operator: '++')), | |
| 1757 const Test( | 1582 const Test( |
| 1758 ''' | 1583 ''' |
| 1759 m() => dynamic--; | 1584 m() => dynamic--; |
| 1760 ''', | 1585 ''', |
| 1761 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_POSTFIX, | 1586 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_POSTFIX, |
| 1762 constant: 'dynamic', | 1587 constant: 'dynamic', operator: '--')), |
| 1763 operator: '--')), | |
| 1764 ], | 1588 ], |
| 1765 'Assert': const [ | 1589 'Assert': const [ |
| 1766 // Assert | 1590 // Assert |
| 1767 const Test( | 1591 const Test( |
| 1768 ''' | 1592 ''' |
| 1769 m() { assert(m()); } | 1593 m() { assert(m()); } |
| 1770 ''', | 1594 ''', |
| 1771 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_INVOKE, | 1595 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_INVOKE, |
| 1772 element: 'function(m)', | 1596 element: 'function(m)', arguments: '()')), |
| 1773 arguments: '()')), | |
| 1774 ], | 1597 ], |
| 1775 'Logical and': const [ | 1598 'Logical and': const [ |
| 1776 // Logical and | 1599 // Logical and |
| 1777 const Test( | 1600 const Test( |
| 1778 ''' | 1601 ''' |
| 1779 m() => true && false; | 1602 m() => true && false; |
| 1780 ''', | 1603 ''', |
| 1781 const Visit(VisitKind.VISIT_LOGICAL_AND, left: 'true', right: 'false')), | 1604 const Visit(VisitKind.VISIT_LOGICAL_AND, left: 'true', right: 'false')), |
| 1782 ], | 1605 ], |
| 1783 'Logical or': const [ | 1606 'Logical or': const [ |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1815 ''', | 1638 ''', |
| 1816 const Visit(VisitKind.VISIT_AS, expression: '0', type: 'C')), | 1639 const Visit(VisitKind.VISIT_AS, expression: '0', type: 'C')), |
| 1817 ], | 1640 ], |
| 1818 'Binary operators': const [ | 1641 'Binary operators': const [ |
| 1819 // Binary operators | 1642 // Binary operators |
| 1820 const Test( | 1643 const Test( |
| 1821 ''' | 1644 ''' |
| 1822 m() => 2 + 3; | 1645 m() => 2 + 3; |
| 1823 ''', | 1646 ''', |
| 1824 const Visit(VisitKind.VISIT_BINARY, | 1647 const Visit(VisitKind.VISIT_BINARY, |
| 1825 left: '2', operator: '+', right: '3')), | 1648 left: '2', operator: '+', right: '3')), |
| 1826 const Test( | 1649 const Test( |
| 1827 ''' | 1650 ''' |
| 1828 m() => 2 - 3; | 1651 m() => 2 - 3; |
| 1829 ''', | 1652 ''', |
| 1830 const Visit(VisitKind.VISIT_BINARY, | 1653 const Visit(VisitKind.VISIT_BINARY, |
| 1831 left: '2', operator: '-', right: '3')), | 1654 left: '2', operator: '-', right: '3')), |
| 1832 const Test( | 1655 const Test( |
| 1833 ''' | 1656 ''' |
| 1834 m() => 2 * 3; | 1657 m() => 2 * 3; |
| 1835 ''', | 1658 ''', |
| 1836 const Visit(VisitKind.VISIT_BINARY, | 1659 const Visit(VisitKind.VISIT_BINARY, |
| 1837 left: '2', operator: '*', right: '3')), | 1660 left: '2', operator: '*', right: '3')), |
| 1838 const Test( | 1661 const Test( |
| 1839 ''' | 1662 ''' |
| 1840 m() => 2 / 3; | 1663 m() => 2 / 3; |
| 1841 ''', | 1664 ''', |
| 1842 const Visit(VisitKind.VISIT_BINARY, | 1665 const Visit(VisitKind.VISIT_BINARY, |
| 1843 left: '2', operator: '/', right: '3')), | 1666 left: '2', operator: '/', right: '3')), |
| 1844 const Test( | 1667 const Test( |
| 1845 ''' | 1668 ''' |
| 1846 m() => 2 ~/ 3; | 1669 m() => 2 ~/ 3; |
| 1847 ''', | 1670 ''', |
| 1848 const Visit(VisitKind.VISIT_BINARY, | 1671 const Visit(VisitKind.VISIT_BINARY, |
| 1849 left: '2', operator: '~/', right: '3')), | 1672 left: '2', operator: '~/', right: '3')), |
| 1850 const Test( | 1673 const Test( |
| 1851 ''' | 1674 ''' |
| 1852 m() => 2 % 3; | 1675 m() => 2 % 3; |
| 1853 ''', | 1676 ''', |
| 1854 const Visit(VisitKind.VISIT_BINARY, | 1677 const Visit(VisitKind.VISIT_BINARY, |
| 1855 left: '2', operator: '%', right: '3')), | 1678 left: '2', operator: '%', right: '3')), |
| 1856 const Test( | 1679 const Test( |
| 1857 ''' | 1680 ''' |
| 1858 m() => 2 << 3; | 1681 m() => 2 << 3; |
| 1859 ''', | 1682 ''', |
| 1860 const Visit(VisitKind.VISIT_BINARY, | 1683 const Visit(VisitKind.VISIT_BINARY, |
| 1861 left: '2', operator: '<<', right: '3')), | 1684 left: '2', operator: '<<', right: '3')), |
| 1862 const Test( | 1685 const Test( |
| 1863 ''' | 1686 ''' |
| 1864 m() => 2 >> 3; | 1687 m() => 2 >> 3; |
| 1865 ''', | 1688 ''', |
| 1866 const Visit(VisitKind.VISIT_BINARY, | 1689 const Visit(VisitKind.VISIT_BINARY, |
| 1867 left: '2', operator: '>>', right: '3')), | 1690 left: '2', operator: '>>', right: '3')), |
| 1868 const Test( | 1691 const Test( |
| 1869 ''' | 1692 ''' |
| 1870 m() => 2 <= 3; | 1693 m() => 2 <= 3; |
| 1871 ''', | 1694 ''', |
| 1872 const Visit(VisitKind.VISIT_BINARY, | 1695 const Visit(VisitKind.VISIT_BINARY, |
| 1873 left: '2', operator: '<=', right: '3')), | 1696 left: '2', operator: '<=', right: '3')), |
| 1874 const Test( | 1697 const Test( |
| 1875 ''' | 1698 ''' |
| 1876 m() => 2 < 3; | 1699 m() => 2 < 3; |
| 1877 ''', | 1700 ''', |
| 1878 const Visit(VisitKind.VISIT_BINARY, | 1701 const Visit(VisitKind.VISIT_BINARY, |
| 1879 left: '2', operator: '<', right: '3')), | 1702 left: '2', operator: '<', right: '3')), |
| 1880 const Test( | 1703 const Test( |
| 1881 ''' | 1704 ''' |
| 1882 m() => 2 >= 3; | 1705 m() => 2 >= 3; |
| 1883 ''', | 1706 ''', |
| 1884 const Visit(VisitKind.VISIT_BINARY, | 1707 const Visit(VisitKind.VISIT_BINARY, |
| 1885 left: '2', operator: '>=', right: '3')), | 1708 left: '2', operator: '>=', right: '3')), |
| 1886 const Test( | 1709 const Test( |
| 1887 ''' | 1710 ''' |
| 1888 m() => 2 > 3; | 1711 m() => 2 > 3; |
| 1889 ''', | 1712 ''', |
| 1890 const Visit(VisitKind.VISIT_BINARY, | 1713 const Visit(VisitKind.VISIT_BINARY, |
| 1891 left: '2', operator: '>', right: '3')), | 1714 left: '2', operator: '>', right: '3')), |
| 1892 const Test( | 1715 const Test( |
| 1893 ''' | 1716 ''' |
| 1894 m() => 2 & 3; | 1717 m() => 2 & 3; |
| 1895 ''', | 1718 ''', |
| 1896 const Visit(VisitKind.VISIT_BINARY, | 1719 const Visit(VisitKind.VISIT_BINARY, |
| 1897 left: '2', operator: '&', right: '3')), | 1720 left: '2', operator: '&', right: '3')), |
| 1898 const Test( | 1721 const Test( |
| 1899 ''' | 1722 ''' |
| 1900 m() => 2 | 3; | 1723 m() => 2 | 3; |
| 1901 ''', | 1724 ''', |
| 1902 const Visit(VisitKind.VISIT_BINARY, | 1725 const Visit(VisitKind.VISIT_BINARY, |
| 1903 left: '2', operator: '|', right: '3')), | 1726 left: '2', operator: '|', right: '3')), |
| 1904 const Test( | 1727 const Test( |
| 1905 ''' | 1728 ''' |
| 1906 m() => 2 ^ 3; | 1729 m() => 2 ^ 3; |
| 1907 ''', | 1730 ''', |
| 1908 const Visit(VisitKind.VISIT_BINARY, | 1731 const Visit(VisitKind.VISIT_BINARY, |
| 1909 left: '2', operator: '^', right: '3')), | 1732 left: '2', operator: '^', right: '3')), |
| 1910 const Test.clazz( | 1733 const Test.clazz( |
| 1911 ''' | 1734 ''' |
| 1912 class B { | 1735 class B { |
| 1913 operator +(_) => null; | 1736 operator +(_) => null; |
| 1914 } | 1737 } |
| 1915 class C extends B { | 1738 class C extends B { |
| 1916 m() => super + 42; | 1739 m() => super + 42; |
| 1917 } | 1740 } |
| 1918 ''', | 1741 ''', |
| 1919 const Visit(VisitKind.VISIT_SUPER_BINARY, | 1742 const Visit(VisitKind.VISIT_SUPER_BINARY, |
| 1920 element: 'function(B#+)', | 1743 element: 'function(B#+)', operator: '+', right: '42')), |
| 1921 operator: '+', | |
| 1922 right: '42')), | |
| 1923 const Test.clazz( | 1744 const Test.clazz( |
| 1924 ''' | 1745 ''' |
| 1925 class B {} | 1746 class B {} |
| 1926 class C extends B { | 1747 class C extends B { |
| 1927 m() => super + 42; | 1748 m() => super + 42; |
| 1928 } | 1749 } |
| 1929 ''', | 1750 ''', |
| 1930 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_BINARY, | 1751 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_BINARY, |
| 1931 operator: '+', | 1752 operator: '+', right: '42')), |
| 1932 right: '42')), | |
| 1933 const Test( | 1753 const Test( |
| 1934 ''' | 1754 ''' |
| 1935 m() => 2 === 3; | 1755 m() => 2 === 3; |
| 1936 ''', | 1756 ''', |
| 1937 const Visit(VisitKind.ERROR_UNDEFINED_BINARY_EXPRESSION, | 1757 const Visit(VisitKind.ERROR_UNDEFINED_BINARY_EXPRESSION, |
| 1938 left: '2', operator: '===', right: '3')), | 1758 left: '2', operator: '===', right: '3')), |
| 1939 const Test( | 1759 const Test( |
| 1940 ''' | 1760 ''' |
| 1941 m() => 2 !== 3; | 1761 m() => 2 !== 3; |
| 1942 ''', | 1762 ''', |
| 1943 const Visit(VisitKind.ERROR_UNDEFINED_BINARY_EXPRESSION, | 1763 const Visit(VisitKind.ERROR_UNDEFINED_BINARY_EXPRESSION, |
| 1944 left: '2', operator: '!==', right: '3')), | 1764 left: '2', operator: '!==', right: '3')), |
| 1945 const Test.clazz( | 1765 const Test.clazz( |
| 1946 ''' | 1766 ''' |
| 1947 class B { | 1767 class B { |
| 1948 operator +(_) => null; | 1768 operator +(_) => null; |
| 1949 } | 1769 } |
| 1950 class C extends B { | 1770 class C extends B { |
| 1951 static m() => super + 42; | 1771 static m() => super + 42; |
| 1952 } | 1772 } |
| 1953 ''', | 1773 ''', |
| 1954 const Visit(VisitKind.ERROR_INVALID_BINARY, | 1774 const Visit(VisitKind.ERROR_INVALID_BINARY, |
| 1955 error: MessageKind.NO_SUPER_IN_STATIC, | 1775 error: MessageKind.NO_SUPER_IN_STATIC, operator: '+', right: '42')), |
| 1956 operator: '+', | |
| 1957 right: '42')), | |
| 1958 ], | 1776 ], |
| 1959 'Index': const [ | 1777 'Index': const [ |
| 1960 // Index | 1778 // Index |
| 1961 const Test( | 1779 const Test( |
| 1962 ''' | 1780 ''' |
| 1963 m() => 2[3]; | 1781 m() => 2[3]; |
| 1964 ''', | 1782 ''', |
| 1965 const Visit(VisitKind.VISIT_INDEX, | 1783 const Visit(VisitKind.VISIT_INDEX, receiver: '2', index: '3')), |
| 1966 receiver: '2', index: '3')), | |
| 1967 const Test( | 1784 const Test( |
| 1968 ''' | 1785 ''' |
| 1969 m() => --2[3]; | 1786 m() => --2[3]; |
| 1970 ''', | 1787 ''', |
| 1971 const Visit(VisitKind.VISIT_INDEX_PREFIX, | 1788 const Visit(VisitKind.VISIT_INDEX_PREFIX, |
| 1972 receiver: '2', index: '3', operator: '--')), | 1789 receiver: '2', index: '3', operator: '--')), |
| 1973 const Test( | 1790 const Test( |
| 1974 ''' | 1791 ''' |
| 1975 m() => 2[3]++; | 1792 m() => 2[3]++; |
| 1976 ''', | 1793 ''', |
| 1977 const Visit(VisitKind.VISIT_INDEX_POSTFIX, | 1794 const Visit(VisitKind.VISIT_INDEX_POSTFIX, |
| 1978 receiver: '2', index: '3', operator: '++')), | 1795 receiver: '2', index: '3', operator: '++')), |
| 1979 const Test.clazz( | 1796 const Test.clazz( |
| 1980 ''' | 1797 ''' |
| 1981 class B { | 1798 class B { |
| 1982 operator [](_) => null; | 1799 operator [](_) => null; |
| 1983 } | 1800 } |
| 1984 class C extends B { | 1801 class C extends B { |
| 1985 m() => super[42]; | 1802 m() => super[42]; |
| 1986 } | 1803 } |
| 1987 ''', | 1804 ''', |
| 1988 const Visit(VisitKind.VISIT_SUPER_INDEX, | 1805 const Visit(VisitKind.VISIT_SUPER_INDEX, |
| 1989 element: 'function(B#[])', | 1806 element: 'function(B#[])', index: '42')), |
| 1990 index: '42')), | |
| 1991 const Test.clazz( | 1807 const Test.clazz( |
| 1992 ''' | 1808 ''' |
| 1993 class B { | 1809 class B { |
| 1994 } | 1810 } |
| 1995 class C extends B { | 1811 class C extends B { |
| 1996 m() => super[42]; | 1812 m() => super[42]; |
| 1997 } | 1813 } |
| 1998 ''', | 1814 ''', |
| 1999 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_INDEX, | 1815 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_INDEX, index: '42')), |
| 2000 index: '42')), | |
| 2001 const Test.clazz( | 1816 const Test.clazz( |
| 2002 ''' | 1817 ''' |
| 2003 class B { | 1818 class B { |
| 2004 operator [](_) => null; | 1819 operator [](_) => null; |
| 2005 } | 1820 } |
| 2006 class C extends B { | 1821 class C extends B { |
| 2007 static m() => super[42]; | 1822 static m() => super[42]; |
| 2008 } | 1823 } |
| 2009 ''', | 1824 ''', |
| 2010 const Visit(VisitKind.ERROR_INVALID_INDEX, | 1825 const Visit(VisitKind.ERROR_INVALID_INDEX, |
| 2011 error: MessageKind.NO_SUPER_IN_STATIC, | 1826 error: MessageKind.NO_SUPER_IN_STATIC, index: '42')), |
| 2012 index: '42')), | |
| 2013 const Test.clazz( | 1827 const Test.clazz( |
| 2014 ''' | 1828 ''' |
| 2015 class B { | 1829 class B { |
| 2016 operator [](_) => null; | 1830 operator [](_) => null; |
| 2017 operator []=(a, b) {} | 1831 operator []=(a, b) {} |
| 2018 } | 1832 } |
| 2019 class C extends B { | 1833 class C extends B { |
| 2020 m() => ++super[42]; | 1834 m() => ++super[42]; |
| 2021 } | 1835 } |
| 2022 ''', | 1836 ''', |
| 2023 const Visit(VisitKind.VISIT_SUPER_INDEX_PREFIX, | 1837 const Visit(VisitKind.VISIT_SUPER_INDEX_PREFIX, |
| 2024 getter: 'function(B#[])', | 1838 getter: 'function(B#[])', |
| 2025 setter: 'function(B#[]=)', | 1839 setter: 'function(B#[]=)', |
| 2026 index: '42', | 1840 index: '42', |
| 2027 operator: '++')), | 1841 operator: '++')), |
| 2028 const Test.clazz( | 1842 const Test.clazz( |
| 2029 ''' | 1843 ''' |
| 2030 class B { | 1844 class B { |
| 2031 operator []=(a, b) {} | 1845 operator []=(a, b) {} |
| 2032 } | 1846 } |
| 2033 class C extends B { | 1847 class C extends B { |
| 2034 m() => ++super[42]; | 1848 m() => ++super[42]; |
| 2035 } | 1849 } |
| 2036 ''', | 1850 ''', |
| 2037 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GETTER_INDEX_PREFIX, | 1851 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GETTER_INDEX_PREFIX, |
| 2038 setter: 'function(B#[]=)', | 1852 setter: 'function(B#[]=)', index: '42', operator: '++')), |
| 2039 index: '42', | |
| 2040 operator: '++')), | |
| 2041 const Test.clazz( | 1853 const Test.clazz( |
| 2042 ''' | 1854 ''' |
| 2043 class B { | 1855 class B { |
| 2044 } | 1856 } |
| 2045 class C extends B { | 1857 class C extends B { |
| 2046 m() => ++super[42]; | 1858 m() => ++super[42]; |
| 2047 } | 1859 } |
| 2048 ''', | 1860 ''', |
| 2049 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_INDEX_PREFIX, | 1861 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_INDEX_PREFIX, |
| 2050 index: '42', | 1862 index: '42', operator: '++')), |
| 2051 operator: '++')), | |
| 2052 const Test.clazz( | 1863 const Test.clazz( |
| 2053 ''' | 1864 ''' |
| 2054 class B { | 1865 class B { |
| 2055 operator [](_) => null; | 1866 operator [](_) => null; |
| 2056 } | 1867 } |
| 2057 class C extends B { | 1868 class C extends B { |
| 2058 m() => ++super[42]; | 1869 m() => ++super[42]; |
| 2059 } | 1870 } |
| 2060 ''', | 1871 ''', |
| 2061 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_SETTER_INDEX_PREFIX, | 1872 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_SETTER_INDEX_PREFIX, |
| 2062 getter: 'function(B#[])', | 1873 getter: 'function(B#[])', index: '42', operator: '++')), |
| 2063 index: '42', | |
| 2064 operator: '++')), | |
| 2065 const Test.clazz( | 1874 const Test.clazz( |
| 2066 ''' | 1875 ''' |
| 2067 class B { | 1876 class B { |
| 2068 operator [](_) => null; | 1877 operator [](_) => null; |
| 2069 operator []=(a, b) {} | 1878 operator []=(a, b) {} |
| 2070 } | 1879 } |
| 2071 class C extends B { | 1880 class C extends B { |
| 2072 static m() => ++super[42]; | 1881 static m() => ++super[42]; |
| 2073 } | 1882 } |
| 2074 ''', | 1883 ''', |
| 2075 const Visit(VisitKind.ERROR_INVALID_INDEX_PREFIX, | 1884 const Visit(VisitKind.ERROR_INVALID_INDEX_PREFIX, |
| 2076 error: MessageKind.NO_SUPER_IN_STATIC, | 1885 error: MessageKind.NO_SUPER_IN_STATIC, |
| 2077 index: '42', | 1886 index: '42', |
| 2078 operator: '++')), | 1887 operator: '++')), |
| 2079 const Test.clazz( | 1888 const Test.clazz( |
| 2080 ''' | 1889 ''' |
| 2081 class B { | 1890 class B { |
| 2082 operator [](_) => null; | 1891 operator [](_) => null; |
| 2083 operator []=(a, b) {} | 1892 operator []=(a, b) {} |
| 2084 } | 1893 } |
| 2085 class C extends B { | 1894 class C extends B { |
| 2086 m() => super[42]--; | 1895 m() => super[42]--; |
| 2087 } | 1896 } |
| 2088 ''', | 1897 ''', |
| 2089 const Visit(VisitKind.VISIT_SUPER_INDEX_POSTFIX, | 1898 const Visit(VisitKind.VISIT_SUPER_INDEX_POSTFIX, |
| 2090 getter: 'function(B#[])', | 1899 getter: 'function(B#[])', |
| 2091 setter: 'function(B#[]=)', | 1900 setter: 'function(B#[]=)', |
| 2092 index: '42', | 1901 index: '42', |
| 2093 operator: '--')), | 1902 operator: '--')), |
| 2094 const Test.clazz( | 1903 const Test.clazz( |
| 2095 ''' | 1904 ''' |
| 2096 class B { | 1905 class B { |
| 2097 operator []=(a, b) {} | 1906 operator []=(a, b) {} |
| 2098 } | 1907 } |
| 2099 class C extends B { | 1908 class C extends B { |
| 2100 m() => super[42]--; | 1909 m() => super[42]--; |
| 2101 } | 1910 } |
| 2102 ''', | 1911 ''', |
| 2103 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GETTER_INDEX_POSTFIX, | 1912 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GETTER_INDEX_POSTFIX, |
| 2104 setter: 'function(B#[]=)', | 1913 setter: 'function(B#[]=)', index: '42', operator: '--')), |
| 2105 index: '42', | |
| 2106 operator: '--')), | |
| 2107 const Test.clazz( | 1914 const Test.clazz( |
| 2108 ''' | 1915 ''' |
| 2109 class B { | 1916 class B { |
| 2110 } | 1917 } |
| 2111 class C extends B { | 1918 class C extends B { |
| 2112 m() => super[42]--; | 1919 m() => super[42]--; |
| 2113 } | 1920 } |
| 2114 ''', | 1921 ''', |
| 2115 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_INDEX_POSTFIX, | 1922 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_INDEX_POSTFIX, |
| 2116 index: '42', | 1923 index: '42', operator: '--')), |
| 2117 operator: '--')), | |
| 2118 const Test.clazz( | 1924 const Test.clazz( |
| 2119 ''' | 1925 ''' |
| 2120 class B { | 1926 class B { |
| 2121 operator [](_) => null; | 1927 operator [](_) => null; |
| 2122 } | 1928 } |
| 2123 class C extends B { | 1929 class C extends B { |
| 2124 m() => super[42]--; | 1930 m() => super[42]--; |
| 2125 } | 1931 } |
| 2126 ''', | 1932 ''', |
| 2127 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_SETTER_INDEX_POSTFIX, | 1933 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_SETTER_INDEX_POSTFIX, |
| 2128 getter: 'function(B#[])', | 1934 getter: 'function(B#[])', index: '42', operator: '--')), |
| 2129 index: '42', | |
| 2130 operator: '--')), | |
| 2131 const Test.clazz( | 1935 const Test.clazz( |
| 2132 ''' | 1936 ''' |
| 2133 class B { | 1937 class B { |
| 2134 operator [](_) => null; | 1938 operator [](_) => null; |
| 2135 operator []=(a, b) {} | 1939 operator []=(a, b) {} |
| 2136 } | 1940 } |
| 2137 class C extends B { | 1941 class C extends B { |
| 2138 static m() => super[42]--; | 1942 static m() => super[42]--; |
| 2139 } | 1943 } |
| 2140 ''', | 1944 ''', |
| 2141 const Visit(VisitKind.ERROR_INVALID_INDEX_POSTFIX, | 1945 const Visit(VisitKind.ERROR_INVALID_INDEX_POSTFIX, |
| 2142 error: MessageKind.NO_SUPER_IN_STATIC, | 1946 error: MessageKind.NO_SUPER_IN_STATIC, |
| 2143 index: '42', | 1947 index: '42', |
| 2144 operator: '--')), | 1948 operator: '--')), |
| 2145 const Test( | 1949 const Test( |
| 2146 ''' | 1950 ''' |
| 2147 m() => [][42] ??= 0; | 1951 m() => [][42] ??= 0; |
| 2148 ''', | 1952 ''', |
| 2149 const Visit(VisitKind.VISIT_INDEX_SET_IF_NULL, | 1953 const Visit(VisitKind.VISIT_INDEX_SET_IF_NULL, |
| 2150 receiver: '[] ', | 1954 receiver: '[] ', index: '42', rhs: '0')), |
| 2151 index: '42', | |
| 2152 rhs: '0')), | |
| 2153 const Test.clazz( | 1955 const Test.clazz( |
| 2154 ''' | 1956 ''' |
| 2155 class B { | 1957 class B { |
| 2156 operator [](_) => null; | 1958 operator [](_) => null; |
| 2157 operator []=(a, b) {} | 1959 operator []=(a, b) {} |
| 2158 } | 1960 } |
| 2159 class C extends B { | 1961 class C extends B { |
| 2160 m() => super[42] ??= 0; | 1962 m() => super[42] ??= 0; |
| 2161 } | 1963 } |
| 2162 ''', | 1964 ''', |
| 2163 const Visit(VisitKind.VISIT_SUPER_INDEX_SET_IF_NULL, | 1965 const Visit(VisitKind.VISIT_SUPER_INDEX_SET_IF_NULL, |
| 2164 getter: 'function(B#[])', | 1966 getter: 'function(B#[])', |
| 2165 setter: 'function(B#[]=)', | 1967 setter: 'function(B#[]=)', |
| 2166 index: '42', | 1968 index: '42', |
| 2167 rhs: '0')), | 1969 rhs: '0')), |
| 2168 const Test.clazz( | 1970 const Test.clazz( |
| 2169 ''' | 1971 ''' |
| 2170 class B { | 1972 class B { |
| 2171 operator []=(a, b) {} | 1973 operator []=(a, b) {} |
| 2172 } | 1974 } |
| 2173 class C extends B { | 1975 class C extends B { |
| 2174 m() => super[42] ??= 0; | 1976 m() => super[42] ??= 0; |
| 2175 } | 1977 } |
| 2176 ''', | 1978 ''', |
| 2177 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GETTER_INDEX_SET_IF_NULL, | 1979 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GETTER_INDEX_SET_IF_NULL, |
| 2178 setter: 'function(B#[]=)', | 1980 setter: 'function(B#[]=)', index: '42', rhs: '0')), |
| 2179 index: '42', | |
| 2180 rhs: '0')), | |
| 2181 const Test.clazz( | 1981 const Test.clazz( |
| 2182 ''' | 1982 ''' |
| 2183 class B { | 1983 class B { |
| 2184 operator [](_) => null; | 1984 operator [](_) => null; |
| 2185 } | 1985 } |
| 2186 class C extends B { | 1986 class C extends B { |
| 2187 m() => super[42] ??= 0; | 1987 m() => super[42] ??= 0; |
| 2188 } | 1988 } |
| 2189 ''', | 1989 ''', |
| 2190 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_SETTER_INDEX_SET_IF_NULL, | 1990 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_SETTER_INDEX_SET_IF_NULL, |
| 2191 getter: 'function(B#[])', | 1991 getter: 'function(B#[])', index: '42', rhs: '0')), |
| 2192 index: '42', | |
| 2193 rhs: '0')), | |
| 2194 const Test.clazz( | 1992 const Test.clazz( |
| 2195 ''' | 1993 ''' |
| 2196 class B { | 1994 class B { |
| 2197 } | 1995 } |
| 2198 class C extends B { | 1996 class C extends B { |
| 2199 m() => super[42] ??= 0; | 1997 m() => super[42] ??= 0; |
| 2200 } | 1998 } |
| 2201 ''', | 1999 ''', |
| 2202 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_INDEX_SET_IF_NULL, | 2000 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_INDEX_SET_IF_NULL, |
| 2203 index: '42', | 2001 index: '42', rhs: '0')), |
| 2204 rhs: '0')), | |
| 2205 ], | 2002 ], |
| 2206 'Equals': const [ | 2003 'Equals': const [ |
| 2207 // Equals | 2004 // Equals |
| 2208 const Test( | 2005 const Test( |
| 2209 ''' | 2006 ''' |
| 2210 m() => 2 == 3; | 2007 m() => 2 == 3; |
| 2211 ''', | 2008 ''', |
| 2212 const Visit(VisitKind.VISIT_EQUALS, | 2009 const Visit(VisitKind.VISIT_EQUALS, left: '2', right: '3')), |
| 2213 left: '2', right: '3')), | |
| 2214 const Test.clazz( | 2010 const Test.clazz( |
| 2215 ''' | 2011 ''' |
| 2216 class B { | 2012 class B { |
| 2217 operator ==(_) => null; | 2013 operator ==(_) => null; |
| 2218 } | 2014 } |
| 2219 class C extends B { | 2015 class C extends B { |
| 2220 m() => super == 42; | 2016 m() => super == 42; |
| 2221 } | 2017 } |
| 2222 ''', | 2018 ''', |
| 2223 const Visit(VisitKind.VISIT_SUPER_EQUALS, | 2019 const Visit(VisitKind.VISIT_SUPER_EQUALS, |
| 2224 element: 'function(B#==)', | 2020 element: 'function(B#==)', right: '42')), |
| 2225 right: '42')), | |
| 2226 const Test.clazz( | 2021 const Test.clazz( |
| 2227 ''' | 2022 ''' |
| 2228 class B { | 2023 class B { |
| 2229 operator ==(_) => null; | 2024 operator ==(_) => null; |
| 2230 } | 2025 } |
| 2231 class C extends B { | 2026 class C extends B { |
| 2232 static m() => super == 42; | 2027 static m() => super == 42; |
| 2233 } | 2028 } |
| 2234 ''', | 2029 ''', |
| 2235 const Visit(VisitKind.ERROR_INVALID_EQUALS, | 2030 const Visit(VisitKind.ERROR_INVALID_EQUALS, |
| 2236 error: MessageKind.NO_SUPER_IN_STATIC, | 2031 error: MessageKind.NO_SUPER_IN_STATIC, right: '42')), |
| 2237 right: '42')), | |
| 2238 ], | 2032 ], |
| 2239 'Not equals': const [ | 2033 'Not equals': const [ |
| 2240 // Not equals | 2034 // Not equals |
| 2241 const Test( | 2035 const Test( |
| 2242 ''' | 2036 ''' |
| 2243 m() => 2 != 3; | 2037 m() => 2 != 3; |
| 2244 ''', | 2038 ''', |
| 2245 const Visit(VisitKind.VISIT_NOT_EQUALS, | 2039 const Visit(VisitKind.VISIT_NOT_EQUALS, left: '2', right: '3')), |
| 2246 left: '2', right: '3')), | |
| 2247 const Test.clazz( | 2040 const Test.clazz( |
| 2248 ''' | 2041 ''' |
| 2249 class B { | 2042 class B { |
| 2250 operator ==(_) => null; | 2043 operator ==(_) => null; |
| 2251 } | 2044 } |
| 2252 class C extends B { | 2045 class C extends B { |
| 2253 m() => super != 42; | 2046 m() => super != 42; |
| 2254 } | 2047 } |
| 2255 ''', | 2048 ''', |
| 2256 const Visit(VisitKind.VISIT_SUPER_NOT_EQUALS, | 2049 const Visit(VisitKind.VISIT_SUPER_NOT_EQUALS, |
| 2257 element: 'function(B#==)', | 2050 element: 'function(B#==)', right: '42')), |
| 2258 right: '42')), | |
| 2259 const Test.clazz( | 2051 const Test.clazz( |
| 2260 ''' | 2052 ''' |
| 2261 class B { | 2053 class B { |
| 2262 operator ==(_) => null; | 2054 operator ==(_) => null; |
| 2263 } | 2055 } |
| 2264 class C extends B { | 2056 class C extends B { |
| 2265 static m() => super != 42; | 2057 static m() => super != 42; |
| 2266 } | 2058 } |
| 2267 ''', | 2059 ''', |
| 2268 const Visit(VisitKind.ERROR_INVALID_NOT_EQUALS, | 2060 const Visit(VisitKind.ERROR_INVALID_NOT_EQUALS, |
| 2269 error: MessageKind.NO_SUPER_IN_STATIC, | 2061 error: MessageKind.NO_SUPER_IN_STATIC, right: '42')), |
| 2270 right: '42')), | |
| 2271 ], | 2062 ], |
| 2272 'Unary expression': const [ | 2063 'Unary expression': const [ |
| 2273 // Unary expression | 2064 // Unary expression |
| 2274 const Test( | 2065 const Test( |
| 2275 ''' | 2066 ''' |
| 2276 m() => -false; | 2067 m() => -false; |
| 2277 ''', | 2068 ''', |
| 2278 const Visit(VisitKind.VISIT_UNARY, | 2069 const Visit(VisitKind.VISIT_UNARY, expression: 'false', operator: '-')), |
| 2279 expression: 'false', operator: '-')), | |
| 2280 const Test( | 2070 const Test( |
| 2281 ''' | 2071 ''' |
| 2282 m() => ~false; | 2072 m() => ~false; |
| 2283 ''', | 2073 ''', |
| 2284 const Visit(VisitKind.VISIT_UNARY, | 2074 const Visit(VisitKind.VISIT_UNARY, expression: 'false', operator: '~')), |
| 2285 expression: 'false', operator: '~')), | |
| 2286 const Test.clazz( | 2075 const Test.clazz( |
| 2287 ''' | 2076 ''' |
| 2288 class B { | 2077 class B { |
| 2289 operator -() => null; | 2078 operator -() => null; |
| 2290 } | 2079 } |
| 2291 class C extends B { | 2080 class C extends B { |
| 2292 m() => -super; | 2081 m() => -super; |
| 2293 } | 2082 } |
| 2294 ''', | 2083 ''', |
| 2295 const Visit(VisitKind.VISIT_SUPER_UNARY, | 2084 const Visit(VisitKind.VISIT_SUPER_UNARY, |
| 2296 element: 'function(B#unary-)', operator: '-')), | 2085 element: 'function(B#unary-)', operator: '-')), |
| 2297 const Test.clazz( | 2086 const Test.clazz( |
| 2298 ''' | 2087 ''' |
| 2299 class B { | 2088 class B { |
| 2300 } | 2089 } |
| 2301 class C extends B { | 2090 class C extends B { |
| 2302 m() => -super; | 2091 m() => -super; |
| 2303 } | 2092 } |
| 2304 ''', | 2093 ''', |
| 2305 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_UNARY, | 2094 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_UNARY, operator: '-')), |
| 2306 operator: '-')), | |
| 2307 const Test.clazz( | 2095 const Test.clazz( |
| 2308 ''' | 2096 ''' |
| 2309 class B { | 2097 class B { |
| 2310 operator ~() => null; | 2098 operator ~() => null; |
| 2311 } | 2099 } |
| 2312 class C extends B { | 2100 class C extends B { |
| 2313 m() => ~super; | 2101 m() => ~super; |
| 2314 } | 2102 } |
| 2315 ''', | 2103 ''', |
| 2316 const Visit(VisitKind.VISIT_SUPER_UNARY, | 2104 const Visit(VisitKind.VISIT_SUPER_UNARY, |
| 2317 element: 'function(B#~)', operator: '~')), | 2105 element: 'function(B#~)', operator: '~')), |
| 2318 const Test.clazz( | 2106 const Test.clazz( |
| 2319 ''' | 2107 ''' |
| 2320 class B { | 2108 class B { |
| 2321 operator -() => null; | 2109 operator -() => null; |
| 2322 } | 2110 } |
| 2323 class C extends B { | 2111 class C extends B { |
| 2324 static m() => -super; | 2112 static m() => -super; |
| 2325 } | 2113 } |
| 2326 ''', | 2114 ''', |
| 2327 const Visit(VisitKind.ERROR_INVALID_UNARY, | 2115 const Visit(VisitKind.ERROR_INVALID_UNARY, |
| 2328 error: MessageKind.NO_SUPER_IN_STATIC, | 2116 error: MessageKind.NO_SUPER_IN_STATIC, operator: '-')), |
| 2329 operator: '-')), | |
| 2330 const Test( | 2117 const Test( |
| 2331 ''' | 2118 ''' |
| 2332 m() => !0; | 2119 m() => !0; |
| 2333 ''', | 2120 ''', |
| 2334 const Visit(VisitKind.VISIT_NOT, expression: '0')), | 2121 const Visit(VisitKind.VISIT_NOT, expression: '0')), |
| 2335 const Test( | 2122 const Test( |
| 2336 ''' | 2123 ''' |
| 2337 m() => +false; | 2124 m() => +false; |
| 2338 ''', | 2125 ''', |
| 2339 // TODO(johnniwinther): Should this be an | 2126 // TODO(johnniwinther): Should this be an |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2384 ], | 2171 ], |
| 2385 'Compound assignment': const [ | 2172 'Compound assignment': const [ |
| 2386 // Compound assignment | 2173 // Compound assignment |
| 2387 const Test( | 2174 const Test( |
| 2388 ''' | 2175 ''' |
| 2389 m(a) => a.b += 42; | 2176 m(a) => a.b += 42; |
| 2390 ''', | 2177 ''', |
| 2391 const [ | 2178 const [ |
| 2392 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_COMPOUND, | 2179 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_COMPOUND, |
| 2393 receiver: 'a', name: 'b', operator: '+=', rhs: '42'), | 2180 receiver: 'a', name: 'b', operator: '+=', rhs: '42'), |
| 2394 const Visit(VisitKind.VISIT_PARAMETER_GET, | 2181 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)') |
| 2395 element: 'parameter(m#a)') | |
| 2396 ]), | 2182 ]), |
| 2397 const Test( | 2183 const Test( |
| 2398 ''' | 2184 ''' |
| 2399 m(a) => a += 42; | 2185 m(a) => a += 42; |
| 2400 ''', | 2186 ''', |
| 2401 const Visit(VisitKind.VISIT_PARAMETER_COMPOUND, | 2187 const Visit(VisitKind.VISIT_PARAMETER_COMPOUND, |
| 2402 element: 'parameter(m#a)', operator: '+=', rhs: '42')), | 2188 element: 'parameter(m#a)', operator: '+=', rhs: '42')), |
| 2403 const Test( | 2189 const Test( |
| 2404 ''' | 2190 ''' |
| 2405 m(final a) => a += 42; | 2191 m(final a) => a += 42; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2440 ''', | 2226 ''', |
| 2441 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_COMPOUND, | 2227 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_COMPOUND, |
| 2442 element: 'field(a)', operator: '+=', rhs: '42')), | 2228 element: 'field(a)', operator: '+=', rhs: '42')), |
| 2443 const Test( | 2229 const Test( |
| 2444 ''' | 2230 ''' |
| 2445 get a => 0; | 2231 get a => 0; |
| 2446 set a(_) {} | 2232 set a(_) {} |
| 2447 m() => a += 42; | 2233 m() => a += 42; |
| 2448 ''', | 2234 ''', |
| 2449 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_COMPOUND, | 2235 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_COMPOUND, |
| 2450 getter: 'getter(a)', setter: 'setter(a)', | 2236 getter: 'getter(a)', |
| 2451 operator: '+=', rhs: '42')), | 2237 setter: 'setter(a)', |
| 2238 operator: '+=', |
| 2239 rhs: '42')), |
| 2452 const Test( | 2240 const Test( |
| 2453 ''' | 2241 ''' |
| 2454 class C { | 2242 class C { |
| 2455 static var a; | 2243 static var a; |
| 2456 } | 2244 } |
| 2457 m() => C.a += 42; | 2245 m() => C.a += 42; |
| 2458 ''', | 2246 ''', |
| 2459 const Visit(VisitKind.VISIT_STATIC_FIELD_COMPOUND, | 2247 const Visit(VisitKind.VISIT_STATIC_FIELD_COMPOUND, |
| 2460 element: 'field(C#a)', operator: '+=', rhs: '42')), | 2248 element: 'field(C#a)', operator: '+=', rhs: '42')), |
| 2461 const Test.clazz( | 2249 const Test.clazz( |
| (...skipping 26 matching lines...) Expand all Loading... |
| 2488 const Visit(VisitKind.VISIT_STATIC_FIELD_COMPOUND, | 2276 const Visit(VisitKind.VISIT_STATIC_FIELD_COMPOUND, |
| 2489 element: 'field(C#a)', operator: '+=', rhs: '42')), | 2277 element: 'field(C#a)', operator: '+=', rhs: '42')), |
| 2490 const Test.clazz( | 2278 const Test.clazz( |
| 2491 ''' | 2279 ''' |
| 2492 class C { | 2280 class C { |
| 2493 var o; | 2281 var o; |
| 2494 static m() { o += 42; } | 2282 static m() { o += 42; } |
| 2495 } | 2283 } |
| 2496 ''', | 2284 ''', |
| 2497 const Visit(VisitKind.ERROR_INVALID_COMPOUND, | 2285 const Visit(VisitKind.ERROR_INVALID_COMPOUND, |
| 2498 error: MessageKind.NO_INSTANCE_AVAILABLE, | 2286 error: MessageKind.NO_INSTANCE_AVAILABLE, |
| 2499 operator: '+=', | 2287 operator: '+=', |
| 2500 rhs: '42')), | 2288 rhs: '42')), |
| 2501 const Test.prefix( | 2289 const Test.prefix( |
| 2502 ''' | 2290 ''' |
| 2503 ''', | 2291 ''', |
| 2504 ''' | 2292 ''' |
| 2505 m() { p += 42; } | 2293 m() { p += 42; } |
| 2506 ''', | 2294 ''', |
| 2507 const Visit(VisitKind.ERROR_INVALID_COMPOUND, | 2295 const Visit(VisitKind.ERROR_INVALID_COMPOUND, |
| 2508 error: MessageKind.PREFIX_AS_EXPRESSION, | 2296 error: MessageKind.PREFIX_AS_EXPRESSION, |
| 2509 operator: '+=', | 2297 operator: '+=', |
| 2510 rhs: '42')), | 2298 rhs: '42')), |
| 2511 const Test( | 2299 const Test( |
| 2512 ''' | 2300 ''' |
| 2513 class C { | 2301 class C { |
| 2514 static get a => 0; | 2302 static get a => 0; |
| 2515 static set a(_) {} | 2303 static set a(_) {} |
| 2516 } | 2304 } |
| 2517 m() => C.a += 42; | 2305 m() => C.a += 42; |
| 2518 ''', | 2306 ''', |
| 2519 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_COMPOUND, | 2307 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_COMPOUND, |
| 2520 getter: 'getter(C#a)', setter: 'setter(C#a)', | 2308 getter: 'getter(C#a)', |
| 2521 operator: '+=', rhs: '42')), | 2309 setter: 'setter(C#a)', |
| 2310 operator: '+=', |
| 2311 rhs: '42')), |
| 2522 const Test.clazz( | 2312 const Test.clazz( |
| 2523 ''' | 2313 ''' |
| 2524 class C { | 2314 class C { |
| 2525 static get a => 0; | 2315 static get a => 0; |
| 2526 static set a(_) {} | 2316 static set a(_) {} |
| 2527 m() => C.a += 42; | 2317 m() => C.a += 42; |
| 2528 } | 2318 } |
| 2529 ''', | 2319 ''', |
| 2530 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_COMPOUND, | 2320 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_COMPOUND, |
| 2531 getter: 'getter(C#a)', setter: 'setter(C#a)', | 2321 getter: 'getter(C#a)', |
| 2532 operator: '+=', rhs: '42')), | 2322 setter: 'setter(C#a)', |
| 2323 operator: '+=', |
| 2324 rhs: '42')), |
| 2533 const Test.clazz( | 2325 const Test.clazz( |
| 2534 ''' | 2326 ''' |
| 2535 class C { | 2327 class C { |
| 2536 static get a => 0; | 2328 static get a => 0; |
| 2537 static set a(_) {} | 2329 static set a(_) {} |
| 2538 m() => a += 42; | 2330 m() => a += 42; |
| 2539 } | 2331 } |
| 2540 ''', | 2332 ''', |
| 2541 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_COMPOUND, | 2333 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_COMPOUND, |
| 2542 getter: 'getter(C#a)', setter: 'setter(C#a)', | 2334 getter: 'getter(C#a)', |
| 2543 operator: '+=', rhs: '42')), | 2335 setter: 'setter(C#a)', |
| 2336 operator: '+=', |
| 2337 rhs: '42')), |
| 2544 const Test.prefix( | 2338 const Test.prefix( |
| 2545 ''' | 2339 ''' |
| 2546 class C { | 2340 class C { |
| 2547 static get a => 0; | 2341 static get a => 0; |
| 2548 static set a(_) {} | 2342 static set a(_) {} |
| 2549 } | 2343 } |
| 2550 ''', | 2344 ''', |
| 2551 ''' | 2345 ''' |
| 2552 m() => p.C.a += 42; | 2346 m() => p.C.a += 42; |
| 2553 ''', | 2347 ''', |
| 2554 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_COMPOUND, | 2348 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_COMPOUND, |
| 2555 getter: 'getter(C#a)', setter: 'setter(C#a)', | 2349 getter: 'getter(C#a)', |
| 2556 operator: '+=', rhs: '42')), | 2350 setter: 'setter(C#a)', |
| 2351 operator: '+=', |
| 2352 rhs: '42')), |
| 2557 // TODO(johnniwinther): Enable these when dart2js supports method and setter | 2353 // TODO(johnniwinther): Enable these when dart2js supports method and setter |
| 2558 // with the same name. | 2354 // with the same name. |
| 2559 /*const Test( | 2355 /*const Test( |
| 2560 ''' | 2356 ''' |
| 2561 class C { | 2357 class C { |
| 2562 static a() {} | 2358 static a() {} |
| 2563 static set a(_) {} | 2359 static set a(_) {} |
| 2564 } | 2360 } |
| 2565 m() => C.a += 42; | 2361 m() => C.a += 42; |
| 2566 ''', | 2362 ''', |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2646 ''' | 2442 ''' |
| 2647 class B { | 2443 class B { |
| 2648 get a => 0; | 2444 get a => 0; |
| 2649 set a (_) {} | 2445 set a (_) {} |
| 2650 } | 2446 } |
| 2651 class C extends B { | 2447 class C extends B { |
| 2652 m() => super.a += 42; | 2448 m() => super.a += 42; |
| 2653 } | 2449 } |
| 2654 ''', | 2450 ''', |
| 2655 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_COMPOUND, | 2451 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_COMPOUND, |
| 2656 getter: 'getter(B#a)', setter: 'setter(B#a)', | 2452 getter: 'getter(B#a)', |
| 2657 operator: '+=', rhs: '42')), | 2453 setter: 'setter(B#a)', |
| 2454 operator: '+=', |
| 2455 rhs: '42')), |
| 2658 const Test.clazz( | 2456 const Test.clazz( |
| 2659 ''' | 2457 ''' |
| 2660 class A { | 2458 class A { |
| 2661 get a => 0; | 2459 get a => 0; |
| 2662 } | 2460 } |
| 2663 class B extends A { | 2461 class B extends A { |
| 2664 set a (_) {} | 2462 set a (_) {} |
| 2665 } | 2463 } |
| 2666 class C extends B { | 2464 class C extends B { |
| 2667 m() => super.a += 42; | 2465 m() => super.a += 42; |
| 2668 } | 2466 } |
| 2669 ''', | 2467 ''', |
| 2670 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_COMPOUND, | 2468 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_COMPOUND, |
| 2671 getter: 'getter(A#a)', setter: 'setter(B#a)', | 2469 getter: 'getter(A#a)', |
| 2672 operator: '+=', rhs: '42')), | 2470 setter: 'setter(B#a)', |
| 2471 operator: '+=', |
| 2472 rhs: '42')), |
| 2673 const Test.clazz( | 2473 const Test.clazz( |
| 2674 ''' | 2474 ''' |
| 2675 class A { | 2475 class A { |
| 2676 var a; | 2476 var a; |
| 2677 } | 2477 } |
| 2678 class B extends A { | 2478 class B extends A { |
| 2679 get a => 0; | 2479 get a => 0; |
| 2680 } | 2480 } |
| 2681 | 2481 |
| 2682 class C extends B { | 2482 class C extends B { |
| 2683 m() => super.a += 42; | 2483 m() => super.a += 42; |
| 2684 } | 2484 } |
| 2685 ''', | 2485 ''', |
| 2686 const Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_COMPOUND, | 2486 const Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_COMPOUND, |
| 2687 getter: 'getter(B#a)', setter: 'field(A#a)', | 2487 getter: 'getter(B#a)', |
| 2688 operator: '+=', rhs: '42')), | 2488 setter: 'field(A#a)', |
| 2489 operator: '+=', |
| 2490 rhs: '42')), |
| 2689 const Test.clazz( | 2491 const Test.clazz( |
| 2690 ''' | 2492 ''' |
| 2691 class A { | 2493 class A { |
| 2692 var a; | 2494 var a; |
| 2693 } | 2495 } |
| 2694 class B extends A { | 2496 class B extends A { |
| 2695 set a(_) {} | 2497 set a(_) {} |
| 2696 } | 2498 } |
| 2697 | 2499 |
| 2698 class C extends B { | 2500 class C extends B { |
| 2699 m() => super.a += 42; | 2501 m() => super.a += 42; |
| 2700 } | 2502 } |
| 2701 ''', | 2503 ''', |
| 2702 const Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_COMPOUND, | 2504 const Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_COMPOUND, |
| 2703 getter: 'field(A#a)', setter: 'setter(B#a)', | 2505 getter: 'field(A#a)', |
| 2704 operator: '+=', rhs: '42')), | 2506 setter: 'setter(B#a)', |
| 2507 operator: '+=', |
| 2508 rhs: '42')), |
| 2705 const Test.clazz( | 2509 const Test.clazz( |
| 2706 ''' | 2510 ''' |
| 2707 class A { | 2511 class A { |
| 2708 var a; | 2512 var a; |
| 2709 } | 2513 } |
| 2710 class B extends A { | 2514 class B extends A { |
| 2711 final a = 0; | 2515 final a = 0; |
| 2712 } | 2516 } |
| 2713 | 2517 |
| 2714 class C extends B { | 2518 class C extends B { |
| 2715 m() => super.a += 42; | 2519 m() => super.a += 42; |
| 2716 } | 2520 } |
| 2717 ''', | 2521 ''', |
| 2718 // TODO(johnniwinther): Change this to | 2522 // TODO(johnniwinther): Change this to |
| 2719 // [VISIT_SUPER_FIELD_FIELD_COMPOUND] when dart2js supports shadow | 2523 // [VISIT_SUPER_FIELD_FIELD_COMPOUND] when dart2js supports shadow |
| 2720 // setters. | 2524 // setters. |
| 2721 const Visit(VisitKind.VISIT_SUPER_FINAL_FIELD_COMPOUND, | 2525 const Visit(VisitKind.VISIT_SUPER_FINAL_FIELD_COMPOUND, |
| 2722 element: 'field(B#a)', | 2526 element: 'field(B#a)', operator: '+=', rhs: '42')), |
| 2723 operator: '+=', rhs: '42')), | |
| 2724 const Test.clazz( | 2527 const Test.clazz( |
| 2725 ''' | 2528 ''' |
| 2726 class B { | 2529 class B { |
| 2727 a() {} | 2530 a() {} |
| 2728 } | 2531 } |
| 2729 class C extends B { | 2532 class C extends B { |
| 2730 m() => super.a += 42; | 2533 m() => super.a += 42; |
| 2731 } | 2534 } |
| 2732 ''', | 2535 ''', |
| 2733 const Visit(VisitKind.VISIT_SUPER_METHOD_COMPOUND, | 2536 const Visit(VisitKind.VISIT_SUPER_METHOD_COMPOUND, |
| 2734 element: 'function(B#a)', | 2537 element: 'function(B#a)', operator: '+=', rhs: '42')), |
| 2735 operator: '+=', rhs: '42')), | |
| 2736 const Test.clazz( | 2538 const Test.clazz( |
| 2737 ''' | 2539 ''' |
| 2738 class B { | 2540 class B { |
| 2739 } | 2541 } |
| 2740 class C extends B { | 2542 class C extends B { |
| 2741 m() => super.a += 42; | 2543 m() => super.a += 42; |
| 2742 } | 2544 } |
| 2743 ''', | 2545 ''', |
| 2744 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_COMPOUND, | 2546 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_COMPOUND, |
| 2745 operator: '+=', rhs: '42')), | 2547 operator: '+=', rhs: '42')), |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2857 ''' | 2659 ''' |
| 2858 class B { | 2660 class B { |
| 2859 operator [](_) {} | 2661 operator [](_) {} |
| 2860 operator []=(a, b) {} | 2662 operator []=(a, b) {} |
| 2861 } | 2663 } |
| 2862 class C extends B { | 2664 class C extends B { |
| 2863 m() => super[1] += 42; | 2665 m() => super[1] += 42; |
| 2864 } | 2666 } |
| 2865 ''', | 2667 ''', |
| 2866 const Visit(VisitKind.VISIT_SUPER_COMPOUND_INDEX_SET, | 2668 const Visit(VisitKind.VISIT_SUPER_COMPOUND_INDEX_SET, |
| 2867 getter: 'function(B#[])', setter: 'function(B#[]=)', | 2669 getter: 'function(B#[])', |
| 2868 index: '1', operator: '+=', rhs: '42')), | 2670 setter: 'function(B#[]=)', |
| 2671 index: '1', |
| 2672 operator: '+=', |
| 2673 rhs: '42')), |
| 2869 const Test.clazz( | 2674 const Test.clazz( |
| 2870 ''' | 2675 ''' |
| 2871 class B { | 2676 class B { |
| 2872 operator []=(a, b) {} | 2677 operator []=(a, b) {} |
| 2873 } | 2678 } |
| 2874 class C extends B { | 2679 class C extends B { |
| 2875 m() => super[1] += 42; | 2680 m() => super[1] += 42; |
| 2876 } | 2681 } |
| 2877 ''', | 2682 ''', |
| 2878 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GETTER_COMPOUND_INDEX_SET, | 2683 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GETTER_COMPOUND_INDEX_SET, |
| 2879 setter: 'function(B#[]=)', | 2684 setter: 'function(B#[]=)', index: '1', operator: '+=', rhs: '42')), |
| 2880 index: '1', operator: '+=', rhs: '42')), | |
| 2881 const Test.clazz( | 2685 const Test.clazz( |
| 2882 ''' | 2686 ''' |
| 2883 class B { | 2687 class B { |
| 2884 } | 2688 } |
| 2885 class C extends B { | 2689 class C extends B { |
| 2886 m() => super[1] += 42; | 2690 m() => super[1] += 42; |
| 2887 } | 2691 } |
| 2888 ''', | 2692 ''', |
| 2889 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_COMPOUND_INDEX_SET, | 2693 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_COMPOUND_INDEX_SET, |
| 2890 index: '1', operator: '+=', rhs: '42')), | 2694 index: '1', operator: '+=', rhs: '42')), |
| 2891 const Test.clazz( | 2695 const Test.clazz( |
| 2892 ''' | 2696 ''' |
| 2893 class B { | 2697 class B { |
| 2894 operator [](_) {} | 2698 operator [](_) {} |
| 2895 } | 2699 } |
| 2896 class C extends B { | 2700 class C extends B { |
| 2897 m() => super[1] += 42; | 2701 m() => super[1] += 42; |
| 2898 } | 2702 } |
| 2899 ''', | 2703 ''', |
| 2900 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_SETTER_COMPOUND_INDEX_SET, | 2704 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_SETTER_COMPOUND_INDEX_SET, |
| 2901 getter: 'function(B#[])', | 2705 getter: 'function(B#[])', index: '1', operator: '+=', rhs: '42')), |
| 2902 index: '1', operator: '+=', rhs: '42')), | |
| 2903 const Test.clazz( | 2706 const Test.clazz( |
| 2904 ''' | 2707 ''' |
| 2905 class B { | 2708 class B { |
| 2906 operator [](_) {} | 2709 operator [](_) {} |
| 2907 operator []=(a, b) {} | 2710 operator []=(a, b) {} |
| 2908 } | 2711 } |
| 2909 class C extends B { | 2712 class C extends B { |
| 2910 static m() => super[1] += 42; | 2713 static m() => super[1] += 42; |
| 2911 } | 2714 } |
| 2912 ''', | 2715 ''', |
| 2913 const Visit(VisitKind.ERROR_INVALID_COMPOUND_INDEX_SET, | 2716 const Visit(VisitKind.ERROR_INVALID_COMPOUND_INDEX_SET, |
| 2914 error: MessageKind.NO_SUPER_IN_STATIC, | 2717 error: MessageKind.NO_SUPER_IN_STATIC, |
| 2915 index: '1', operator: '+=', rhs: '42')), | 2718 index: '1', |
| 2719 operator: '+=', |
| 2720 rhs: '42')), |
| 2916 ], | 2721 ], |
| 2917 'Prefix expression': const [ | 2722 'Prefix expression': const [ |
| 2918 // Prefix expression | 2723 // Prefix expression |
| 2919 const Test( | 2724 const Test( |
| 2920 ''' | 2725 ''' |
| 2921 m(a) => --a.b; | 2726 m(a) => --a.b; |
| 2922 ''', | 2727 ''', |
| 2923 const [ | 2728 const [ |
| 2924 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_PREFIX, | 2729 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_PREFIX, |
| 2925 receiver: 'a', name: 'b', operator: '--'), | 2730 receiver: 'a', name: 'b', operator: '--'), |
| 2926 const Visit(VisitKind.VISIT_PARAMETER_GET, | 2731 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)') |
| 2927 element: 'parameter(m#a)') | |
| 2928 ]), | 2732 ]), |
| 2929 const Test( | 2733 const Test( |
| 2930 ''' | 2734 ''' |
| 2931 m(a) => ++a; | 2735 m(a) => ++a; |
| 2932 ''', | 2736 ''', |
| 2933 const Visit(VisitKind.VISIT_PARAMETER_PREFIX, | 2737 const Visit(VisitKind.VISIT_PARAMETER_PREFIX, |
| 2934 element: 'parameter(m#a)', operator: '++')), | 2738 element: 'parameter(m#a)', operator: '++')), |
| 2935 const Test( | 2739 const Test( |
| 2936 ''' | 2740 ''' |
| 2937 m(final a) => ++a; | 2741 m(final a) => ++a; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2972 ''', | 2776 ''', |
| 2973 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_PREFIX, | 2777 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_PREFIX, |
| 2974 element: 'field(a)', operator: '++')), | 2778 element: 'field(a)', operator: '++')), |
| 2975 const Test( | 2779 const Test( |
| 2976 ''' | 2780 ''' |
| 2977 get a => 0; | 2781 get a => 0; |
| 2978 set a(_) {} | 2782 set a(_) {} |
| 2979 m() => --a; | 2783 m() => --a; |
| 2980 ''', | 2784 ''', |
| 2981 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_PREFIX, | 2785 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_PREFIX, |
| 2982 getter: 'getter(a)', setter: 'setter(a)', | 2786 getter: 'getter(a)', setter: 'setter(a)', operator: '--')), |
| 2983 operator: '--')), | |
| 2984 const Test( | 2787 const Test( |
| 2985 ''' | 2788 ''' |
| 2986 class C { | 2789 class C { |
| 2987 static var a; | 2790 static var a; |
| 2988 } | 2791 } |
| 2989 m() => ++C.a; | 2792 m() => ++C.a; |
| 2990 ''', | 2793 ''', |
| 2991 const Visit(VisitKind.VISIT_STATIC_FIELD_PREFIX, | 2794 const Visit(VisitKind.VISIT_STATIC_FIELD_PREFIX, |
| 2992 element: 'field(C#a)', operator: '++')), | 2795 element: 'field(C#a)', operator: '++')), |
| 2993 const Test.clazz( | 2796 const Test.clazz( |
| (...skipping 26 matching lines...) Expand all Loading... |
| 3020 const Visit(VisitKind.VISIT_STATIC_FIELD_PREFIX, | 2823 const Visit(VisitKind.VISIT_STATIC_FIELD_PREFIX, |
| 3021 element: 'field(C#a)', operator: '--')), | 2824 element: 'field(C#a)', operator: '--')), |
| 3022 const Test.clazz( | 2825 const Test.clazz( |
| 3023 ''' | 2826 ''' |
| 3024 class C { | 2827 class C { |
| 3025 var o; | 2828 var o; |
| 3026 static m() { ++o; } | 2829 static m() { ++o; } |
| 3027 } | 2830 } |
| 3028 ''', | 2831 ''', |
| 3029 const Visit(VisitKind.ERROR_INVALID_PREFIX, | 2832 const Visit(VisitKind.ERROR_INVALID_PREFIX, |
| 3030 error: MessageKind.NO_INSTANCE_AVAILABLE, | 2833 error: MessageKind.NO_INSTANCE_AVAILABLE, operator: '++')), |
| 3031 operator: '++')), | |
| 3032 const Test.prefix( | 2834 const Test.prefix( |
| 3033 ''' | 2835 ''' |
| 3034 ''', | 2836 ''', |
| 3035 ''' | 2837 ''' |
| 3036 m() { ++p; } | 2838 m() { ++p; } |
| 3037 ''', | 2839 ''', |
| 3038 const Visit(VisitKind.ERROR_INVALID_PREFIX, | 2840 const Visit(VisitKind.ERROR_INVALID_PREFIX, |
| 3039 error: MessageKind.PREFIX_AS_EXPRESSION, | 2841 error: MessageKind.PREFIX_AS_EXPRESSION, operator: '++')), |
| 3040 operator: '++')), | |
| 3041 const Test( | 2842 const Test( |
| 3042 ''' | 2843 ''' |
| 3043 class C { | 2844 class C { |
| 3044 static get a => 0; | 2845 static get a => 0; |
| 3045 static set a(_) {} | 2846 static set a(_) {} |
| 3046 } | 2847 } |
| 3047 m() => ++C.a; | 2848 m() => ++C.a; |
| 3048 ''', | 2849 ''', |
| 3049 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_PREFIX, | 2850 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_PREFIX, |
| 3050 getter: 'getter(C#a)', setter: 'setter(C#a)', | 2851 getter: 'getter(C#a)', setter: 'setter(C#a)', operator: '++')), |
| 3051 operator: '++')), | |
| 3052 const Test.clazz( | 2852 const Test.clazz( |
| 3053 ''' | 2853 ''' |
| 3054 class C { | 2854 class C { |
| 3055 static get a => 0; | 2855 static get a => 0; |
| 3056 static set a(_) {} | 2856 static set a(_) {} |
| 3057 m() => --C.a; | 2857 m() => --C.a; |
| 3058 } | 2858 } |
| 3059 ''', | 2859 ''', |
| 3060 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_PREFIX, | 2860 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_PREFIX, |
| 3061 getter: 'getter(C#a)', setter: 'setter(C#a)', | 2861 getter: 'getter(C#a)', setter: 'setter(C#a)', operator: '--')), |
| 3062 operator: '--')), | |
| 3063 const Test.clazz( | 2862 const Test.clazz( |
| 3064 ''' | 2863 ''' |
| 3065 class C { | 2864 class C { |
| 3066 static get a => 0; | 2865 static get a => 0; |
| 3067 static set a(_) {} | 2866 static set a(_) {} |
| 3068 m() => --a; | 2867 m() => --a; |
| 3069 } | 2868 } |
| 3070 ''', | 2869 ''', |
| 3071 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_PREFIX, | 2870 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_PREFIX, |
| 3072 getter: 'getter(C#a)', setter: 'setter(C#a)', | 2871 getter: 'getter(C#a)', setter: 'setter(C#a)', operator: '--')), |
| 3073 operator: '--')), | |
| 3074 const Test.prefix( | 2872 const Test.prefix( |
| 3075 ''' | 2873 ''' |
| 3076 class C { | 2874 class C { |
| 3077 static get a => 0; | 2875 static get a => 0; |
| 3078 static set a(_) {} | 2876 static set a(_) {} |
| 3079 } | 2877 } |
| 3080 ''', | 2878 ''', |
| 3081 ''' | 2879 ''' |
| 3082 m() => ++p.C.a; | 2880 m() => ++p.C.a; |
| 3083 ''', | 2881 ''', |
| 3084 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_PREFIX, | 2882 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_PREFIX, |
| 3085 getter: 'getter(C#a)', setter: 'setter(C#a)', | 2883 getter: 'getter(C#a)', setter: 'setter(C#a)', operator: '++')), |
| 3086 operator: '++')), | |
| 3087 const Test.clazz( | 2884 const Test.clazz( |
| 3088 ''' | 2885 ''' |
| 3089 class C { | 2886 class C { |
| 3090 var a; | 2887 var a; |
| 3091 m() => --a; | 2888 m() => --a; |
| 3092 } | 2889 } |
| 3093 ''', | 2890 ''', |
| 3094 const Visit(VisitKind.VISIT_THIS_PROPERTY_PREFIX, | 2891 const Visit(VisitKind.VISIT_THIS_PROPERTY_PREFIX, |
| 3095 name: 'a', operator: '--')), | 2892 name: 'a', operator: '--')), |
| 3096 const Test.clazz( | 2893 const Test.clazz( |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3128 ''' | 2925 ''' |
| 3129 class B { | 2926 class B { |
| 3130 get a => 0; | 2927 get a => 0; |
| 3131 set a (_) {} | 2928 set a (_) {} |
| 3132 } | 2929 } |
| 3133 class C extends B { | 2930 class C extends B { |
| 3134 m() => --super.a; | 2931 m() => --super.a; |
| 3135 } | 2932 } |
| 3136 ''', | 2933 ''', |
| 3137 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_PREFIX, | 2934 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_PREFIX, |
| 3138 getter: 'getter(B#a)', setter: 'setter(B#a)', | 2935 getter: 'getter(B#a)', setter: 'setter(B#a)', operator: '--')), |
| 3139 operator: '--')), | |
| 3140 const Test.clazz( | 2936 const Test.clazz( |
| 3141 ''' | 2937 ''' |
| 3142 class A { | 2938 class A { |
| 3143 get a => 0; | 2939 get a => 0; |
| 3144 } | 2940 } |
| 3145 class B extends A { | 2941 class B extends A { |
| 3146 set a (_) {} | 2942 set a (_) {} |
| 3147 } | 2943 } |
| 3148 class C extends B { | 2944 class C extends B { |
| 3149 m() => ++super.a; | 2945 m() => ++super.a; |
| 3150 } | 2946 } |
| 3151 ''', | 2947 ''', |
| 3152 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_PREFIX, | 2948 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_PREFIX, |
| 3153 getter: 'getter(A#a)', setter: 'setter(B#a)', | 2949 getter: 'getter(A#a)', setter: 'setter(B#a)', operator: '++')), |
| 3154 operator: '++')), | |
| 3155 const Test.clazz( | 2950 const Test.clazz( |
| 3156 ''' | 2951 ''' |
| 3157 class A { | 2952 class A { |
| 3158 var a; | 2953 var a; |
| 3159 } | 2954 } |
| 3160 class B extends A { | 2955 class B extends A { |
| 3161 get a => 0; | 2956 get a => 0; |
| 3162 } | 2957 } |
| 3163 | 2958 |
| 3164 class C extends B { | 2959 class C extends B { |
| 3165 m() => --super.a; | 2960 m() => --super.a; |
| 3166 } | 2961 } |
| 3167 ''', | 2962 ''', |
| 3168 const Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_PREFIX, | 2963 const Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_PREFIX, |
| 3169 getter: 'getter(B#a)', setter: 'field(A#a)', | 2964 getter: 'getter(B#a)', setter: 'field(A#a)', operator: '--')), |
| 3170 operator: '--')), | |
| 3171 const Test.clazz( | 2965 const Test.clazz( |
| 3172 ''' | 2966 ''' |
| 3173 class A { | 2967 class A { |
| 3174 var a; | 2968 var a; |
| 3175 } | 2969 } |
| 3176 class B extends A { | 2970 class B extends A { |
| 3177 set a(_) {} | 2971 set a(_) {} |
| 3178 } | 2972 } |
| 3179 | 2973 |
| 3180 class C extends B { | 2974 class C extends B { |
| 3181 m() => ++super.a; | 2975 m() => ++super.a; |
| 3182 } | 2976 } |
| 3183 ''', | 2977 ''', |
| 3184 const Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_PREFIX, | 2978 const Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_PREFIX, |
| 3185 getter: 'field(A#a)', setter: 'setter(B#a)', | 2979 getter: 'field(A#a)', setter: 'setter(B#a)', operator: '++')), |
| 3186 operator: '++')), | |
| 3187 const Test.clazz( | 2980 const Test.clazz( |
| 3188 ''' | 2981 ''' |
| 3189 class B { | 2982 class B { |
| 3190 a() {} | 2983 a() {} |
| 3191 } | 2984 } |
| 3192 class C extends B { | 2985 class C extends B { |
| 3193 m() => ++super.a; | 2986 m() => ++super.a; |
| 3194 } | 2987 } |
| 3195 ''', | 2988 ''', |
| 3196 const Visit(VisitKind.VISIT_SUPER_METHOD_PREFIX, | 2989 const Visit(VisitKind.VISIT_SUPER_METHOD_PREFIX, |
| 3197 element: 'function(B#a)', | 2990 element: 'function(B#a)', operator: '++')), |
| 3198 operator: '++')), | |
| 3199 const Test.clazz( | 2991 const Test.clazz( |
| 3200 ''' | 2992 ''' |
| 3201 class B { | 2993 class B { |
| 3202 } | 2994 } |
| 3203 class C extends B { | 2995 class C extends B { |
| 3204 m() => ++super.a; | 2996 m() => ++super.a; |
| 3205 } | 2997 } |
| 3206 ''', | 2998 ''', |
| 3207 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_PREFIX, | 2999 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_PREFIX, operator: '++')), |
| 3208 operator: '++')), | |
| 3209 const Test.clazz( | 3000 const Test.clazz( |
| 3210 ''' | 3001 ''' |
| 3211 class B { | 3002 class B { |
| 3212 set a(_) {} | 3003 set a(_) {} |
| 3213 } | 3004 } |
| 3214 class C extends B { | 3005 class C extends B { |
| 3215 m() => ++super.a; | 3006 m() => ++super.a; |
| 3216 } | 3007 } |
| 3217 ''', | 3008 ''', |
| 3218 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GETTER_PREFIX, | 3009 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GETTER_PREFIX, |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3298 final a = 42; | 3089 final a = 42; |
| 3299 m() => ++a; | 3090 m() => ++a; |
| 3300 ''', | 3091 ''', |
| 3301 const Visit(VisitKind.VISIT_TOP_LEVEL_FINAL_FIELD_PREFIX, | 3092 const Visit(VisitKind.VISIT_TOP_LEVEL_FINAL_FIELD_PREFIX, |
| 3302 element: 'field(a)', operator: '++')), | 3093 element: 'field(a)', operator: '++')), |
| 3303 | 3094 |
| 3304 const Test( | 3095 const Test( |
| 3305 ''' | 3096 ''' |
| 3306 m() => ++unresolved; | 3097 m() => ++unresolved; |
| 3307 ''', | 3098 ''', |
| 3308 const Visit(VisitKind.VISIT_UNRESOLVED_PREFIX, | 3099 const Visit(VisitKind.VISIT_UNRESOLVED_PREFIX, operator: '++')), |
| 3309 operator: '++')), | |
| 3310 ], | 3100 ], |
| 3311 'Postfix expression': const [ | 3101 'Postfix expression': const [ |
| 3312 // Postfix expression | 3102 // Postfix expression |
| 3313 const Test( | 3103 const Test( |
| 3314 ''' | 3104 ''' |
| 3315 m(a) => a.b--; | 3105 m(a) => a.b--; |
| 3316 ''', | 3106 ''', |
| 3317 const [ | 3107 const [ |
| 3318 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_POSTFIX, | 3108 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_POSTFIX, |
| 3319 receiver: 'a', name: 'b', operator: '--'), | 3109 receiver: 'a', name: 'b', operator: '--'), |
| 3320 const Visit(VisitKind.VISIT_PARAMETER_GET, | 3110 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)') |
| 3321 element: 'parameter(m#a)') | |
| 3322 ]), | 3111 ]), |
| 3323 const Test( | 3112 const Test( |
| 3324 ''' | 3113 ''' |
| 3325 m(a) => a++; | 3114 m(a) => a++; |
| 3326 ''', | 3115 ''', |
| 3327 const Visit(VisitKind.VISIT_PARAMETER_POSTFIX, | 3116 const Visit(VisitKind.VISIT_PARAMETER_POSTFIX, |
| 3328 element: 'parameter(m#a)', operator: '++')), | 3117 element: 'parameter(m#a)', operator: '++')), |
| 3329 const Test( | 3118 const Test( |
| 3330 ''' | 3119 ''' |
| 3331 m(final a) => a++; | 3120 m(final a) => a++; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3366 ''', | 3155 ''', |
| 3367 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_POSTFIX, | 3156 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_POSTFIX, |
| 3368 element: 'field(a)', operator: '++')), | 3157 element: 'field(a)', operator: '++')), |
| 3369 const Test( | 3158 const Test( |
| 3370 ''' | 3159 ''' |
| 3371 get a => 0; | 3160 get a => 0; |
| 3372 set a(_) {} | 3161 set a(_) {} |
| 3373 m() => a--; | 3162 m() => a--; |
| 3374 ''', | 3163 ''', |
| 3375 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_POSTFIX, | 3164 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_POSTFIX, |
| 3376 getter: 'getter(a)', setter: 'setter(a)', | 3165 getter: 'getter(a)', setter: 'setter(a)', operator: '--')), |
| 3377 operator: '--')), | |
| 3378 const Test( | 3166 const Test( |
| 3379 ''' | 3167 ''' |
| 3380 class C { | 3168 class C { |
| 3381 static var a; | 3169 static var a; |
| 3382 } | 3170 } |
| 3383 m() => C.a++; | 3171 m() => C.a++; |
| 3384 ''', | 3172 ''', |
| 3385 const Visit(VisitKind.VISIT_STATIC_FIELD_POSTFIX, | 3173 const Visit(VisitKind.VISIT_STATIC_FIELD_POSTFIX, |
| 3386 element: 'field(C#a)', operator: '++')), | 3174 element: 'field(C#a)', operator: '++')), |
| 3387 const Test.clazz( | 3175 const Test.clazz( |
| (...skipping 26 matching lines...) Expand all Loading... |
| 3414 const Visit(VisitKind.VISIT_STATIC_FIELD_POSTFIX, | 3202 const Visit(VisitKind.VISIT_STATIC_FIELD_POSTFIX, |
| 3415 element: 'field(C#a)', operator: '--')), | 3203 element: 'field(C#a)', operator: '--')), |
| 3416 const Test.clazz( | 3204 const Test.clazz( |
| 3417 ''' | 3205 ''' |
| 3418 class C { | 3206 class C { |
| 3419 var o; | 3207 var o; |
| 3420 static m() { o--; } | 3208 static m() { o--; } |
| 3421 } | 3209 } |
| 3422 ''', | 3210 ''', |
| 3423 const Visit(VisitKind.ERROR_INVALID_POSTFIX, | 3211 const Visit(VisitKind.ERROR_INVALID_POSTFIX, |
| 3424 error: MessageKind.NO_INSTANCE_AVAILABLE, | 3212 error: MessageKind.NO_INSTANCE_AVAILABLE, operator: '--')), |
| 3425 operator: '--')), | |
| 3426 const Test.prefix( | 3213 const Test.prefix( |
| 3427 ''' | 3214 ''' |
| 3428 ''', | 3215 ''', |
| 3429 ''' | 3216 ''' |
| 3430 m() { p--; } | 3217 m() { p--; } |
| 3431 ''', | 3218 ''', |
| 3432 const Visit(VisitKind.ERROR_INVALID_POSTFIX, | 3219 const Visit(VisitKind.ERROR_INVALID_POSTFIX, |
| 3433 error: MessageKind.PREFIX_AS_EXPRESSION, | 3220 error: MessageKind.PREFIX_AS_EXPRESSION, operator: '--')), |
| 3434 operator: '--')), | |
| 3435 const Test( | 3221 const Test( |
| 3436 ''' | 3222 ''' |
| 3437 class C { | 3223 class C { |
| 3438 static get a => 0; | 3224 static get a => 0; |
| 3439 static set a(_) {} | 3225 static set a(_) {} |
| 3440 } | 3226 } |
| 3441 m() => C.a++; | 3227 m() => C.a++; |
| 3442 ''', | 3228 ''', |
| 3443 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_POSTFIX, | 3229 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_POSTFIX, |
| 3444 getter: 'getter(C#a)', setter: 'setter(C#a)', | 3230 getter: 'getter(C#a)', setter: 'setter(C#a)', operator: '++')), |
| 3445 operator: '++')), | |
| 3446 const Test.clazz( | 3231 const Test.clazz( |
| 3447 ''' | 3232 ''' |
| 3448 class C { | 3233 class C { |
| 3449 static get a => 0; | 3234 static get a => 0; |
| 3450 static set a(_) {} | 3235 static set a(_) {} |
| 3451 m() => C.a--; | 3236 m() => C.a--; |
| 3452 } | 3237 } |
| 3453 ''', | 3238 ''', |
| 3454 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_POSTFIX, | 3239 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_POSTFIX, |
| 3455 getter: 'getter(C#a)', setter: 'setter(C#a)', | 3240 getter: 'getter(C#a)', setter: 'setter(C#a)', operator: '--')), |
| 3456 operator: '--')), | |
| 3457 const Test.clazz( | 3241 const Test.clazz( |
| 3458 ''' | 3242 ''' |
| 3459 class C { | 3243 class C { |
| 3460 static get a => 0; | 3244 static get a => 0; |
| 3461 static set a(_) {} | 3245 static set a(_) {} |
| 3462 m() => a--; | 3246 m() => a--; |
| 3463 } | 3247 } |
| 3464 ''', | 3248 ''', |
| 3465 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_POSTFIX, | 3249 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_POSTFIX, |
| 3466 getter: 'getter(C#a)', setter: 'setter(C#a)', | 3250 getter: 'getter(C#a)', setter: 'setter(C#a)', operator: '--')), |
| 3467 operator: '--')), | |
| 3468 const Test.prefix( | 3251 const Test.prefix( |
| 3469 ''' | 3252 ''' |
| 3470 class C { | 3253 class C { |
| 3471 static get a => 0; | 3254 static get a => 0; |
| 3472 static set a(_) {} | 3255 static set a(_) {} |
| 3473 } | 3256 } |
| 3474 ''', | 3257 ''', |
| 3475 ''' | 3258 ''' |
| 3476 m() => p.C.a++; | 3259 m() => p.C.a++; |
| 3477 ''', | 3260 ''', |
| 3478 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_POSTFIX, | 3261 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_POSTFIX, |
| 3479 getter: 'getter(C#a)', setter: 'setter(C#a)', | 3262 getter: 'getter(C#a)', setter: 'setter(C#a)', operator: '++')), |
| 3480 operator: '++')), | |
| 3481 const Test.clazz( | 3263 const Test.clazz( |
| 3482 ''' | 3264 ''' |
| 3483 class C { | 3265 class C { |
| 3484 var a; | 3266 var a; |
| 3485 m() => a--; | 3267 m() => a--; |
| 3486 } | 3268 } |
| 3487 ''', | 3269 ''', |
| 3488 const Visit(VisitKind.VISIT_THIS_PROPERTY_POSTFIX, | 3270 const Visit(VisitKind.VISIT_THIS_PROPERTY_POSTFIX, |
| 3489 name: 'a', operator: '--')), | 3271 name: 'a', operator: '--')), |
| 3490 const Test.clazz( | 3272 const Test.clazz( |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3522 ''' | 3304 ''' |
| 3523 class B { | 3305 class B { |
| 3524 get a => 0; | 3306 get a => 0; |
| 3525 set a (_) {} | 3307 set a (_) {} |
| 3526 } | 3308 } |
| 3527 class C extends B { | 3309 class C extends B { |
| 3528 m() => super.a--; | 3310 m() => super.a--; |
| 3529 } | 3311 } |
| 3530 ''', | 3312 ''', |
| 3531 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_POSTFIX, | 3313 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_POSTFIX, |
| 3532 getter: 'getter(B#a)', setter: 'setter(B#a)', | 3314 getter: 'getter(B#a)', setter: 'setter(B#a)', operator: '--')), |
| 3533 operator: '--')), | |
| 3534 const Test.clazz( | 3315 const Test.clazz( |
| 3535 ''' | 3316 ''' |
| 3536 class A { | 3317 class A { |
| 3537 get a => 0; | 3318 get a => 0; |
| 3538 } | 3319 } |
| 3539 class B extends A { | 3320 class B extends A { |
| 3540 set a (_) {} | 3321 set a (_) {} |
| 3541 } | 3322 } |
| 3542 class C extends B { | 3323 class C extends B { |
| 3543 m() => super.a++; | 3324 m() => super.a++; |
| 3544 } | 3325 } |
| 3545 ''', | 3326 ''', |
| 3546 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_POSTFIX, | 3327 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_POSTFIX, |
| 3547 getter: 'getter(A#a)', setter: 'setter(B#a)', | 3328 getter: 'getter(A#a)', setter: 'setter(B#a)', operator: '++')), |
| 3548 operator: '++')), | |
| 3549 const Test.clazz( | 3329 const Test.clazz( |
| 3550 ''' | 3330 ''' |
| 3551 class A { | 3331 class A { |
| 3552 var a; | 3332 var a; |
| 3553 } | 3333 } |
| 3554 class B extends A { | 3334 class B extends A { |
| 3555 get a => 0; | 3335 get a => 0; |
| 3556 } | 3336 } |
| 3557 | 3337 |
| 3558 class C extends B { | 3338 class C extends B { |
| 3559 m() => super.a--; | 3339 m() => super.a--; |
| 3560 } | 3340 } |
| 3561 ''', | 3341 ''', |
| 3562 const Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_POSTFIX, | 3342 const Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_POSTFIX, |
| 3563 getter: 'getter(B#a)', setter: 'field(A#a)', | 3343 getter: 'getter(B#a)', setter: 'field(A#a)', operator: '--')), |
| 3564 operator: '--')), | |
| 3565 const Test.clazz( | 3344 const Test.clazz( |
| 3566 ''' | 3345 ''' |
| 3567 class A { | 3346 class A { |
| 3568 var a; | 3347 var a; |
| 3569 } | 3348 } |
| 3570 class B extends A { | 3349 class B extends A { |
| 3571 set a(_) {} | 3350 set a(_) {} |
| 3572 } | 3351 } |
| 3573 | 3352 |
| 3574 class C extends B { | 3353 class C extends B { |
| 3575 m() => super.a++; | 3354 m() => super.a++; |
| 3576 } | 3355 } |
| 3577 ''', | 3356 ''', |
| 3578 const Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_POSTFIX, | 3357 const Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_POSTFIX, |
| 3579 getter: 'field(A#a)', setter: 'setter(B#a)', | 3358 getter: 'field(A#a)', setter: 'setter(B#a)', operator: '++')), |
| 3580 operator: '++')), | |
| 3581 const Test.clazz( | 3359 const Test.clazz( |
| 3582 ''' | 3360 ''' |
| 3583 class B { | 3361 class B { |
| 3584 a() {} | 3362 a() {} |
| 3585 } | 3363 } |
| 3586 class C extends B { | 3364 class C extends B { |
| 3587 m() => super.a++; | 3365 m() => super.a++; |
| 3588 } | 3366 } |
| 3589 ''', | 3367 ''', |
| 3590 const Visit(VisitKind.VISIT_SUPER_METHOD_POSTFIX, | 3368 const Visit(VisitKind.VISIT_SUPER_METHOD_POSTFIX, |
| 3591 element: 'function(B#a)', | 3369 element: 'function(B#a)', operator: '++')), |
| 3592 operator: '++')), | |
| 3593 const Test.clazz( | 3370 const Test.clazz( |
| 3594 ''' | 3371 ''' |
| 3595 class B { | 3372 class B { |
| 3596 } | 3373 } |
| 3597 class C extends B { | 3374 class C extends B { |
| 3598 m() => super.a++; | 3375 m() => super.a++; |
| 3599 } | 3376 } |
| 3600 ''', | 3377 ''', |
| 3601 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_POSTFIX, | 3378 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_POSTFIX, operator: '++')), |
| 3602 operator: '++')), | |
| 3603 const Test.clazz( | 3379 const Test.clazz( |
| 3604 ''' | 3380 ''' |
| 3605 class B { | 3381 class B { |
| 3606 set a(_) {} | 3382 set a(_) {} |
| 3607 } | 3383 } |
| 3608 class C extends B { | 3384 class C extends B { |
| 3609 m() => super.a++; | 3385 m() => super.a++; |
| 3610 } | 3386 } |
| 3611 ''', | 3387 ''', |
| 3612 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GETTER_POSTFIX, | 3388 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GETTER_POSTFIX, |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3692 final a = 42; | 3468 final a = 42; |
| 3693 m() => a++; | 3469 m() => a++; |
| 3694 ''', | 3470 ''', |
| 3695 const Visit(VisitKind.VISIT_TOP_LEVEL_FINAL_FIELD_POSTFIX, | 3471 const Visit(VisitKind.VISIT_TOP_LEVEL_FINAL_FIELD_POSTFIX, |
| 3696 element: 'field(a)', operator: '++')), | 3472 element: 'field(a)', operator: '++')), |
| 3697 | 3473 |
| 3698 const Test( | 3474 const Test( |
| 3699 ''' | 3475 ''' |
| 3700 m() => unresolved++; | 3476 m() => unresolved++; |
| 3701 ''', | 3477 ''', |
| 3702 const Visit(VisitKind.VISIT_UNRESOLVED_POSTFIX, | 3478 const Visit(VisitKind.VISIT_UNRESOLVED_POSTFIX, operator: '++')), |
| 3703 operator: '++')), | |
| 3704 ], | 3479 ], |
| 3705 'Constructor invocations': const [ | 3480 'Constructor invocations': const [ |
| 3706 const Test( | 3481 const Test( |
| 3707 ''' | 3482 ''' |
| 3708 class Class { | 3483 class Class { |
| 3709 const Class(a, b); | 3484 const Class(a, b); |
| 3710 } | 3485 } |
| 3711 m() => const Class(true, 42); | 3486 m() => const Class(true, 42); |
| 3712 ''', | 3487 ''', |
| 3713 const Visit(VisitKind.VISIT_CONST_CONSTRUCTOR_INVOKE, | 3488 const Visit(VisitKind.VISIT_CONST_CONSTRUCTOR_INVOKE, |
| 3714 constant: 'const Class(true, 42)')), | 3489 constant: 'const Class(true, 42)')), |
| 3715 const Test( | 3490 const Test( |
| 3716 ''' | 3491 ''' |
| 3717 m() => const bool.fromEnvironment('foo'); | 3492 m() => const bool.fromEnvironment('foo'); |
| 3718 ''', | 3493 ''', |
| 3719 const Visit(VisitKind.VISIT_BOOL_FROM_ENVIRONMENT_CONSTRUCTOR_INVOKE, | 3494 const Visit(VisitKind.VISIT_BOOL_FROM_ENVIRONMENT_CONSTRUCTOR_INVOKE, |
| 3720 constant: | 3495 constant: 'const bool.fromEnvironment("foo")')), |
| 3721 'const bool.fromEnvironment("foo")')), | |
| 3722 const Test( | 3496 const Test( |
| 3723 ''' | 3497 ''' |
| 3724 m() => const bool.fromEnvironment('foo', defaultValue: true); | 3498 m() => const bool.fromEnvironment('foo', defaultValue: true); |
| 3725 ''', | 3499 ''', |
| 3726 const Visit(VisitKind.VISIT_BOOL_FROM_ENVIRONMENT_CONSTRUCTOR_INVOKE, | 3500 const Visit(VisitKind.VISIT_BOOL_FROM_ENVIRONMENT_CONSTRUCTOR_INVOKE, |
| 3727 constant: 'const bool.fromEnvironment("foo", defaultValue: true)')), | 3501 constant: 'const bool.fromEnvironment("foo", defaultValue: true)')), |
| 3728 const Test( | 3502 const Test( |
| 3729 ''' | 3503 ''' |
| 3730 m() => const int.fromEnvironment('foo'); | 3504 m() => const int.fromEnvironment('foo'); |
| 3731 ''', | 3505 ''', |
| 3732 const Visit(VisitKind.VISIT_INT_FROM_ENVIRONMENT_CONSTRUCTOR_INVOKE, | 3506 const Visit(VisitKind.VISIT_INT_FROM_ENVIRONMENT_CONSTRUCTOR_INVOKE, |
| 3733 constant: 'const int.fromEnvironment("foo")')), | 3507 constant: 'const int.fromEnvironment("foo")')), |
| 3734 const Test( | 3508 const Test( |
| 3735 ''' | 3509 ''' |
| 3736 m() => const String.fromEnvironment('foo'); | 3510 m() => const String.fromEnvironment('foo'); |
| 3737 ''', | 3511 ''', |
| 3738 const Visit(VisitKind.VISIT_STRING_FROM_ENVIRONMENT_CONSTRUCTOR_INVOKE, | 3512 const Visit(VisitKind.VISIT_STRING_FROM_ENVIRONMENT_CONSTRUCTOR_INVOKE, |
| 3739 constant: | 3513 constant: 'const String.fromEnvironment("foo")')), |
| 3740 'const String.fromEnvironment("foo")')), | |
| 3741 const Test( | 3514 const Test( |
| 3742 ''' | 3515 ''' |
| 3743 class Class { | 3516 class Class { |
| 3744 Class(a, b); | 3517 Class(a, b); |
| 3745 } | 3518 } |
| 3746 m() => const Class(true, 42); | 3519 m() => const Class(true, 42); |
| 3747 ''', | 3520 ''', |
| 3748 const Visit(VisitKind.ERROR_NON_CONSTANT_CONSTRUCTOR_INVOKE, | 3521 const Visit(VisitKind.ERROR_NON_CONSTANT_CONSTRUCTOR_INVOKE, |
| 3749 element: 'generative_constructor(Class#)', | 3522 element: 'generative_constructor(Class#)', |
| 3750 arguments: '(true,42)', | 3523 arguments: '(true,42)', |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3907 arguments: '(true,42)', | 3680 arguments: '(true,42)', |
| 3908 type: 'Class<double>', | 3681 type: 'Class<double>', |
| 3909 selector: 'CallStructure(arity=2)')), | 3682 selector: 'CallStructure(arity=2)')), |
| 3910 const Test( | 3683 const Test( |
| 3911 ''' | 3684 ''' |
| 3912 class Class { | 3685 class Class { |
| 3913 Class(a, b); | 3686 Class(a, b); |
| 3914 } | 3687 } |
| 3915 m() => new Class.unresolved(true, 42); | 3688 m() => new Class.unresolved(true, 42); |
| 3916 ''', | 3689 ''', |
| 3917 const Visit( | 3690 const Visit(VisitKind.VISIT_UNRESOLVED_CONSTRUCTOR_INVOKE, |
| 3918 VisitKind.VISIT_UNRESOLVED_CONSTRUCTOR_INVOKE, | |
| 3919 arguments: '(true,42)')), | 3691 arguments: '(true,42)')), |
| 3920 const Test( | 3692 const Test( |
| 3921 ''' | 3693 ''' |
| 3922 m() => new Unresolved(true, 42); | 3694 m() => new Unresolved(true, 42); |
| 3923 ''', | 3695 ''', |
| 3924 const Visit( | 3696 const Visit(VisitKind.VISIT_UNRESOLVED_CLASS_CONSTRUCTOR_INVOKE, |
| 3925 VisitKind.VISIT_UNRESOLVED_CLASS_CONSTRUCTOR_INVOKE, | |
| 3926 arguments: '(true,42)')), | 3697 arguments: '(true,42)')), |
| 3927 const Test( | 3698 const Test( |
| 3928 ''' | 3699 ''' |
| 3929 abstract class AbstractClass {} | 3700 abstract class AbstractClass {} |
| 3930 m() => new AbstractClass(); | 3701 m() => new AbstractClass(); |
| 3931 ''', | 3702 ''', |
| 3932 const Visit( | 3703 const Visit(VisitKind.VISIT_ABSTRACT_CLASS_CONSTRUCTOR_INVOKE, |
| 3933 VisitKind.VISIT_ABSTRACT_CLASS_CONSTRUCTOR_INVOKE, | |
| 3934 element: 'generative_constructor(AbstractClass#)', | 3704 element: 'generative_constructor(AbstractClass#)', |
| 3935 type: 'AbstractClass', | 3705 type: 'AbstractClass', |
| 3936 arguments: '()', | 3706 arguments: '()', |
| 3937 selector: 'CallStructure(arity=0)')), | 3707 selector: 'CallStructure(arity=0)')), |
| 3938 const Test( | 3708 const Test( |
| 3939 ''' | 3709 ''' |
| 3940 class Class { | 3710 class Class { |
| 3941 factory Class(a, b) = Unresolved; | 3711 factory Class(a, b) = Unresolved; |
| 3942 } | 3712 } |
| 3943 m() => new Class(true, 42); | 3713 m() => new Class(true, 42); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3991 arguments: '(true,42)', | 3761 arguments: '(true,42)', |
| 3992 type: 'Class', | 3762 type: 'Class', |
| 3993 selector: 'CallStructure(arity=2)')), | 3763 selector: 'CallStructure(arity=2)')), |
| 3994 ], | 3764 ], |
| 3995 'If not null expressions': const [ | 3765 'If not null expressions': const [ |
| 3996 const Test( | 3766 const Test( |
| 3997 ''' | 3767 ''' |
| 3998 m(a) => a?.b; | 3768 m(a) => a?.b; |
| 3999 ''', | 3769 ''', |
| 4000 const [ | 3770 const [ |
| 4001 const Visit( | 3771 const Visit(VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_GET, |
| 4002 VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_GET, | 3772 receiver: 'a', name: 'b'), |
| 4003 receiver: 'a', | 3773 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), |
| 4004 name: 'b'), | |
| 4005 const Visit( | |
| 4006 VisitKind.VISIT_PARAMETER_GET, | |
| 4007 element: 'parameter(m#a)'), | |
| 4008 ]), | 3774 ]), |
| 4009 const Test( | 3775 const Test( |
| 4010 ''' | 3776 ''' |
| 4011 class C { | 3777 class C { |
| 4012 static var b; | 3778 static var b; |
| 4013 } | 3779 } |
| 4014 m(a) => C?.b; | 3780 m(a) => C?.b; |
| 4015 ''', | 3781 ''', |
| 4016 const Visit( | 3782 const Visit(VisitKind.VISIT_STATIC_FIELD_GET, element: 'field(C#b)')), |
| 4017 VisitKind.VISIT_STATIC_FIELD_GET, | |
| 4018 element: 'field(C#b)')), | |
| 4019 const Test( | 3783 const Test( |
| 4020 ''' | 3784 ''' |
| 4021 m(a) => a?.b = 42; | 3785 m(a) => a?.b = 42; |
| 4022 ''', | 3786 ''', |
| 4023 const [ | 3787 const [ |
| 4024 const Visit( | 3788 const Visit(VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_SET, |
| 4025 VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_SET, | 3789 receiver: 'a', name: 'b', rhs: '42'), |
| 4026 receiver: 'a', | 3790 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), |
| 4027 name: 'b', | |
| 4028 rhs: '42'), | |
| 4029 const Visit( | |
| 4030 VisitKind.VISIT_PARAMETER_GET, | |
| 4031 element: 'parameter(m#a)'), | |
| 4032 ]), | 3791 ]), |
| 4033 const Test( | 3792 const Test( |
| 4034 ''' | 3793 ''' |
| 4035 m(a) => a?.b(42, true); | 3794 m(a) => a?.b(42, true); |
| 4036 ''', | 3795 ''', |
| 4037 const [ | 3796 const [ |
| 4038 const Visit( | 3797 const Visit(VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_INVOKE, |
| 4039 VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_INVOKE, | |
| 4040 receiver: 'a', | 3798 receiver: 'a', |
| 4041 arguments: '(42,true)', | 3799 arguments: '(42,true)', |
| 4042 selector: 'Selector(call, b, arity=2)'), | 3800 selector: 'Selector(call, b, arity=2)'), |
| 4043 const Visit( | 3801 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), |
| 4044 VisitKind.VISIT_PARAMETER_GET, | |
| 4045 element: 'parameter(m#a)'), | |
| 4046 ]), | 3802 ]), |
| 4047 const Test( | 3803 const Test( |
| 4048 ''' | 3804 ''' |
| 4049 m(a) => ++a?.b; | 3805 m(a) => ++a?.b; |
| 4050 ''', | 3806 ''', |
| 4051 const [ | 3807 const [ |
| 4052 const Visit( | 3808 const Visit(VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_PREFIX, |
| 4053 VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_PREFIX, | |
| 4054 receiver: 'a', name: 'b', operator: '++'), | 3809 receiver: 'a', name: 'b', operator: '++'), |
| 4055 const Visit( | 3810 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), |
| 4056 VisitKind.VISIT_PARAMETER_GET, | |
| 4057 element: 'parameter(m#a)'), | |
| 4058 ]), | 3811 ]), |
| 4059 const Test( | 3812 const Test( |
| 4060 ''' | 3813 ''' |
| 4061 m(a) => a?.b--; | 3814 m(a) => a?.b--; |
| 4062 ''', | 3815 ''', |
| 4063 const [ | 3816 const [ |
| 4064 const Visit( | 3817 const Visit(VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_POSTFIX, |
| 4065 VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_POSTFIX, | |
| 4066 receiver: 'a', name: 'b', operator: '--'), | 3818 receiver: 'a', name: 'b', operator: '--'), |
| 4067 const Visit( | 3819 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), |
| 4068 VisitKind.VISIT_PARAMETER_GET, | |
| 4069 element: 'parameter(m#a)'), | |
| 4070 ]), | 3820 ]), |
| 4071 const Test( | 3821 const Test( |
| 4072 ''' | 3822 ''' |
| 4073 m(a) => a?.b *= 42; | 3823 m(a) => a?.b *= 42; |
| 4074 ''', | 3824 ''', |
| 4075 const [ | 3825 const [ |
| 4076 const Visit( | 3826 const Visit(VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_COMPOUND, |
| 4077 VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_COMPOUND, | |
| 4078 receiver: 'a', name: 'b', operator: '*=', rhs: '42'), | 3827 receiver: 'a', name: 'b', operator: '*=', rhs: '42'), |
| 4079 const Visit( | 3828 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), |
| 4080 VisitKind.VISIT_PARAMETER_GET, | |
| 4081 element: 'parameter(m#a)'), | |
| 4082 ]), | 3829 ]), |
| 4083 const Test( | 3830 const Test( |
| 4084 ''' | 3831 ''' |
| 4085 m(a) => a?.b ??= 42; | 3832 m(a) => a?.b ??= 42; |
| 4086 ''', | 3833 ''', |
| 4087 const [ | 3834 const [ |
| 4088 const Visit( | 3835 const Visit(VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_SET_IF_NULL, |
| 4089 VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_SET_IF_NULL, | |
| 4090 receiver: 'a', name: 'b', rhs: '42'), | 3836 receiver: 'a', name: 'b', rhs: '42'), |
| 4091 const Visit( | 3837 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), |
| 4092 VisitKind.VISIT_PARAMETER_GET, | |
| 4093 element: 'parameter(m#a)'), | |
| 4094 ]), | 3838 ]), |
| 4095 const Test( | 3839 const Test( |
| 4096 ''' | 3840 ''' |
| 4097 m(a, b) => a ?? b; | 3841 m(a, b) => a ?? b; |
| 4098 ''', | 3842 ''', |
| 4099 const [ | 3843 const [ |
| 4100 const Visit(VisitKind.VISIT_IF_NULL, | 3844 const Visit(VisitKind.VISIT_IF_NULL, left: 'a', right: 'b'), |
| 4101 left: 'a', right: 'b'), | 3845 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), |
| 4102 const Visit( | 3846 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#b)'), |
| 4103 VisitKind.VISIT_PARAMETER_GET, | 3847 ]), |
| 4104 element: 'parameter(m#a)'), | |
| 4105 const Visit( | |
| 4106 VisitKind.VISIT_PARAMETER_GET, | |
| 4107 element: 'parameter(m#b)'), | |
| 4108 ]), | |
| 4109 const Test( | 3848 const Test( |
| 4110 ''' | 3849 ''' |
| 4111 m(a) => a ??= 42; | 3850 m(a) => a ??= 42; |
| 4112 ''', | 3851 ''', |
| 4113 const Visit( | 3852 const Visit(VisitKind.VISIT_PARAMETER_SET_IF_NULL, |
| 4114 VisitKind.VISIT_PARAMETER_SET_IF_NULL, | 3853 element: 'parameter(m#a)', rhs: '42')), |
| 4115 element: 'parameter(m#a)', | |
| 4116 rhs: '42')), | |
| 4117 const Test.prefix( | 3854 const Test.prefix( |
| 4118 ''' | 3855 ''' |
| 4119 var o; | 3856 var o; |
| 4120 ''', | 3857 ''', |
| 4121 'm() => p?.o;', | 3858 'm() => p?.o;', |
| 4122 const Visit(VisitKind.ERROR_INVALID_GET, | 3859 const Visit(VisitKind.ERROR_INVALID_GET, |
| 4123 error: MessageKind.PREFIX_AS_EXPRESSION)), | 3860 error: MessageKind.PREFIX_AS_EXPRESSION)), |
| 4124 ], | 3861 ], |
| 4125 'Set if null': const [ | 3862 'Set if null': const [ |
| 4126 const Test( | 3863 const Test( |
| 4127 ''' | 3864 ''' |
| 4128 m(a) => a.b ??= 42; | 3865 m(a) => a.b ??= 42; |
| 4129 ''', | 3866 ''', |
| 4130 const [ | 3867 const [ |
| 4131 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_SET_IF_NULL, | 3868 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_SET_IF_NULL, |
| 4132 receiver: 'a', name: 'b', rhs: '42'), | 3869 receiver: 'a', name: 'b', rhs: '42'), |
| 4133 const Visit(VisitKind.VISIT_PARAMETER_GET, | 3870 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)') |
| 4134 element: 'parameter(m#a)') | |
| 4135 ]), | 3871 ]), |
| 4136 const Test( | 3872 const Test( |
| 4137 ''' | 3873 ''' |
| 4138 m(a) => a ??= 42; | 3874 m(a) => a ??= 42; |
| 4139 ''', | 3875 ''', |
| 4140 const Visit(VisitKind.VISIT_PARAMETER_SET_IF_NULL, | 3876 const Visit(VisitKind.VISIT_PARAMETER_SET_IF_NULL, |
| 4141 element: 'parameter(m#a)', rhs: '42')), | 3877 element: 'parameter(m#a)', rhs: '42')), |
| 4142 const Test( | 3878 const Test( |
| 4143 ''' | 3879 ''' |
| 4144 m(final a) => a ??= 42; | 3880 m(final a) => a ??= 42; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4179 ''', | 3915 ''', |
| 4180 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_SET_IF_NULL, | 3916 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_SET_IF_NULL, |
| 4181 element: 'field(a)', rhs: '42')), | 3917 element: 'field(a)', rhs: '42')), |
| 4182 const Test( | 3918 const Test( |
| 4183 ''' | 3919 ''' |
| 4184 get a => 0; | 3920 get a => 0; |
| 4185 set a(_) {} | 3921 set a(_) {} |
| 4186 m() => a ??= 42; | 3922 m() => a ??= 42; |
| 4187 ''', | 3923 ''', |
| 4188 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_SET_IF_NULL, | 3924 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_SET_IF_NULL, |
| 4189 getter: 'getter(a)', setter: 'setter(a)', | 3925 getter: 'getter(a)', setter: 'setter(a)', rhs: '42')), |
| 4190 rhs: '42')), | |
| 4191 const Test( | 3926 const Test( |
| 4192 ''' | 3927 ''' |
| 4193 class C { | 3928 class C { |
| 4194 static var a; | 3929 static var a; |
| 4195 } | 3930 } |
| 4196 m() => C.a ??= 42; | 3931 m() => C.a ??= 42; |
| 4197 ''', | 3932 ''', |
| 4198 const Visit(VisitKind.VISIT_STATIC_FIELD_SET_IF_NULL, | 3933 const Visit(VisitKind.VISIT_STATIC_FIELD_SET_IF_NULL, |
| 4199 element: 'field(C#a)', rhs: '42')), | 3934 element: 'field(C#a)', rhs: '42')), |
| 4200 const Test.clazz( | 3935 const Test.clazz( |
| (...skipping 26 matching lines...) Expand all Loading... |
| 4227 const Visit(VisitKind.VISIT_STATIC_FIELD_SET_IF_NULL, | 3962 const Visit(VisitKind.VISIT_STATIC_FIELD_SET_IF_NULL, |
| 4228 element: 'field(C#a)', rhs: '42')), | 3963 element: 'field(C#a)', rhs: '42')), |
| 4229 const Test.clazz( | 3964 const Test.clazz( |
| 4230 ''' | 3965 ''' |
| 4231 class C { | 3966 class C { |
| 4232 var o; | 3967 var o; |
| 4233 static m() { o ??= 42; } | 3968 static m() { o ??= 42; } |
| 4234 } | 3969 } |
| 4235 ''', | 3970 ''', |
| 4236 const Visit(VisitKind.ERROR_INVALID_SET_IF_NULL, | 3971 const Visit(VisitKind.ERROR_INVALID_SET_IF_NULL, |
| 4237 error: MessageKind.NO_INSTANCE_AVAILABLE, | 3972 error: MessageKind.NO_INSTANCE_AVAILABLE, rhs: '42')), |
| 4238 rhs: '42')), | |
| 4239 const Test.prefix( | 3973 const Test.prefix( |
| 4240 ''' | 3974 ''' |
| 4241 ''', | 3975 ''', |
| 4242 ''' | 3976 ''' |
| 4243 m() { p ??= 42; } | 3977 m() { p ??= 42; } |
| 4244 ''', | 3978 ''', |
| 4245 const Visit(VisitKind.ERROR_INVALID_SET_IF_NULL, | 3979 const Visit(VisitKind.ERROR_INVALID_SET_IF_NULL, |
| 4246 error: MessageKind.PREFIX_AS_EXPRESSION, | 3980 error: MessageKind.PREFIX_AS_EXPRESSION, rhs: '42')), |
| 4247 rhs: '42')), | |
| 4248 const Test( | 3981 const Test( |
| 4249 ''' | 3982 ''' |
| 4250 class C { | 3983 class C { |
| 4251 static get a => 0; | 3984 static get a => 0; |
| 4252 static set a(_) {} | 3985 static set a(_) {} |
| 4253 } | 3986 } |
| 4254 m() => C.a ??= 42; | 3987 m() => C.a ??= 42; |
| 4255 ''', | 3988 ''', |
| 4256 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_SET_IF_NULL, | 3989 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_SET_IF_NULL, |
| 4257 getter: 'getter(C#a)', setter: 'setter(C#a)', | 3990 getter: 'getter(C#a)', setter: 'setter(C#a)', rhs: '42')), |
| 4258 rhs: '42')), | |
| 4259 const Test.clazz( | 3991 const Test.clazz( |
| 4260 ''' | 3992 ''' |
| 4261 class C { | 3993 class C { |
| 4262 static get a => 0; | 3994 static get a => 0; |
| 4263 static set a(_) {} | 3995 static set a(_) {} |
| 4264 m() => C.a ??= 42; | 3996 m() => C.a ??= 42; |
| 4265 } | 3997 } |
| 4266 ''', | 3998 ''', |
| 4267 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_SET_IF_NULL, | 3999 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_SET_IF_NULL, |
| 4268 getter: 'getter(C#a)', setter: 'setter(C#a)', | 4000 getter: 'getter(C#a)', setter: 'setter(C#a)', rhs: '42')), |
| 4269 rhs: '42')), | |
| 4270 const Test.clazz( | 4001 const Test.clazz( |
| 4271 ''' | 4002 ''' |
| 4272 class C { | 4003 class C { |
| 4273 static get a => 0; | 4004 static get a => 0; |
| 4274 static set a(_) {} | 4005 static set a(_) {} |
| 4275 m() => a ??= 42; | 4006 m() => a ??= 42; |
| 4276 } | 4007 } |
| 4277 ''', | 4008 ''', |
| 4278 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_SET_IF_NULL, | 4009 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_SET_IF_NULL, |
| 4279 getter: 'getter(C#a)', setter: 'setter(C#a)', | 4010 getter: 'getter(C#a)', setter: 'setter(C#a)', rhs: '42')), |
| 4280 rhs: '42')), | |
| 4281 const Test.prefix( | 4011 const Test.prefix( |
| 4282 ''' | 4012 ''' |
| 4283 class C { | 4013 class C { |
| 4284 static get a => 0; | 4014 static get a => 0; |
| 4285 static set a(_) {} | 4015 static set a(_) {} |
| 4286 } | 4016 } |
| 4287 ''', | 4017 ''', |
| 4288 ''' | 4018 ''' |
| 4289 m() => p.C.a ??= 42; | 4019 m() => p.C.a ??= 42; |
| 4290 ''', | 4020 ''', |
| 4291 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_SET_IF_NULL, | 4021 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_SET_IF_NULL, |
| 4292 getter: 'getter(C#a)', setter: 'setter(C#a)', | 4022 getter: 'getter(C#a)', setter: 'setter(C#a)', rhs: '42')), |
| 4293 rhs: '42')), | |
| 4294 // TODO(johnniwinther): Enable these when dart2js supports method and setter | 4023 // TODO(johnniwinther): Enable these when dart2js supports method and setter |
| 4295 // with the same name. | 4024 // with the same name. |
| 4296 /*const Test( | 4025 /*const Test( |
| 4297 ''' | 4026 ''' |
| 4298 class C { | 4027 class C { |
| 4299 static a() {} | 4028 static a() {} |
| 4300 static set a(_) {} | 4029 static set a(_) {} |
| 4301 } | 4030 } |
| 4302 m() => C.a ??= 42; | 4031 m() => C.a ??= 42; |
| 4303 ''', | 4032 ''', |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4383 ''' | 4112 ''' |
| 4384 class B { | 4113 class B { |
| 4385 get a => 0; | 4114 get a => 0; |
| 4386 set a (_) {} | 4115 set a (_) {} |
| 4387 } | 4116 } |
| 4388 class C extends B { | 4117 class C extends B { |
| 4389 m() => super.a ??= 42; | 4118 m() => super.a ??= 42; |
| 4390 } | 4119 } |
| 4391 ''', | 4120 ''', |
| 4392 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_SET_IF_NULL, | 4121 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_SET_IF_NULL, |
| 4393 getter: 'getter(B#a)', setter: 'setter(B#a)', | 4122 getter: 'getter(B#a)', setter: 'setter(B#a)', rhs: '42')), |
| 4394 rhs: '42')), | |
| 4395 const Test.clazz( | 4123 const Test.clazz( |
| 4396 ''' | 4124 ''' |
| 4397 class A { | 4125 class A { |
| 4398 get a => 0; | 4126 get a => 0; |
| 4399 } | 4127 } |
| 4400 class B extends A { | 4128 class B extends A { |
| 4401 set a (_) {} | 4129 set a (_) {} |
| 4402 } | 4130 } |
| 4403 class C extends B { | 4131 class C extends B { |
| 4404 m() => super.a ??= 42; | 4132 m() => super.a ??= 42; |
| 4405 } | 4133 } |
| 4406 ''', | 4134 ''', |
| 4407 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_SET_IF_NULL, | 4135 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_SET_IF_NULL, |
| 4408 getter: 'getter(A#a)', setter: 'setter(B#a)', | 4136 getter: 'getter(A#a)', setter: 'setter(B#a)', rhs: '42')), |
| 4409 rhs: '42')), | |
| 4410 const Test.clazz( | 4137 const Test.clazz( |
| 4411 ''' | 4138 ''' |
| 4412 class A { | 4139 class A { |
| 4413 var a; | 4140 var a; |
| 4414 } | 4141 } |
| 4415 class B extends A { | 4142 class B extends A { |
| 4416 get a => 0; | 4143 get a => 0; |
| 4417 } | 4144 } |
| 4418 | 4145 |
| 4419 class C extends B { | 4146 class C extends B { |
| 4420 m() => super.a ??= 42; | 4147 m() => super.a ??= 42; |
| 4421 } | 4148 } |
| 4422 ''', | 4149 ''', |
| 4423 const Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_SET_IF_NULL, | 4150 const Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_SET_IF_NULL, |
| 4424 getter: 'getter(B#a)', setter: 'field(A#a)', | 4151 getter: 'getter(B#a)', setter: 'field(A#a)', rhs: '42')), |
| 4425 rhs: '42')), | |
| 4426 const Test.clazz( | 4152 const Test.clazz( |
| 4427 ''' | 4153 ''' |
| 4428 class A { | 4154 class A { |
| 4429 var a; | 4155 var a; |
| 4430 } | 4156 } |
| 4431 class B extends A { | 4157 class B extends A { |
| 4432 set a(_) {} | 4158 set a(_) {} |
| 4433 } | 4159 } |
| 4434 | 4160 |
| 4435 class C extends B { | 4161 class C extends B { |
| 4436 m() => super.a ??= 42; | 4162 m() => super.a ??= 42; |
| 4437 } | 4163 } |
| 4438 ''', | 4164 ''', |
| 4439 const Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_SET_IF_NULL, | 4165 const Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_SET_IF_NULL, |
| 4440 getter: 'field(A#a)', setter: 'setter(B#a)', | 4166 getter: 'field(A#a)', setter: 'setter(B#a)', rhs: '42')), |
| 4441 rhs: '42')), | |
| 4442 const Test.clazz( | 4167 const Test.clazz( |
| 4443 ''' | 4168 ''' |
| 4444 class A { | 4169 class A { |
| 4445 var a; | 4170 var a; |
| 4446 } | 4171 } |
| 4447 class B extends A { | 4172 class B extends A { |
| 4448 final a = 0; | 4173 final a = 0; |
| 4449 } | 4174 } |
| 4450 | 4175 |
| 4451 class C extends B { | 4176 class C extends B { |
| 4452 m() => super.a ??= 42; | 4177 m() => super.a ??= 42; |
| 4453 } | 4178 } |
| 4454 ''', | 4179 ''', |
| 4455 // TODO(johnniwinther): Change this to | 4180 // TODO(johnniwinther): Change this to |
| 4456 // [VISIT_SUPER_FIELD_FIELD_SET_IF_NULL] when dart2js supports shadow | 4181 // [VISIT_SUPER_FIELD_FIELD_SET_IF_NULL] when dart2js supports shadow |
| 4457 // setters. | 4182 // setters. |
| 4458 const Visit(VisitKind.VISIT_SUPER_FINAL_FIELD_SET_IF_NULL, | 4183 const Visit(VisitKind.VISIT_SUPER_FINAL_FIELD_SET_IF_NULL, |
| 4459 element: 'field(B#a)', | 4184 element: 'field(B#a)', rhs: '42')), |
| 4460 rhs: '42')), | |
| 4461 const Test.clazz( | 4185 const Test.clazz( |
| 4462 ''' | 4186 ''' |
| 4463 class B { | 4187 class B { |
| 4464 a() {} | 4188 a() {} |
| 4465 } | 4189 } |
| 4466 class C extends B { | 4190 class C extends B { |
| 4467 m() => super.a ??= 42; | 4191 m() => super.a ??= 42; |
| 4468 } | 4192 } |
| 4469 ''', | 4193 ''', |
| 4470 const Visit(VisitKind.VISIT_SUPER_METHOD_SET_IF_NULL, | 4194 const Visit(VisitKind.VISIT_SUPER_METHOD_SET_IF_NULL, |
| 4471 element: 'function(B#a)', | 4195 element: 'function(B#a)', rhs: '42')), |
| 4472 rhs: '42')), | |
| 4473 const Test.clazz( | 4196 const Test.clazz( |
| 4474 ''' | 4197 ''' |
| 4475 class B { | 4198 class B { |
| 4476 } | 4199 } |
| 4477 class C extends B { | 4200 class C extends B { |
| 4478 m() => super.a ??= 42; | 4201 m() => super.a ??= 42; |
| 4479 } | 4202 } |
| 4480 ''', | 4203 ''', |
| 4481 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_SET_IF_NULL, | 4204 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_SET_IF_NULL, |
| 4482 name: 'a', rhs: '42')), | 4205 name: 'a', rhs: '42')), |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4576 element: 'field(a)', rhs: '42')), | 4299 element: 'field(a)', rhs: '42')), |
| 4577 | 4300 |
| 4578 const Test( | 4301 const Test( |
| 4579 ''' | 4302 ''' |
| 4580 m() => unresolved ??= 42; | 4303 m() => unresolved ??= 42; |
| 4581 ''', | 4304 ''', |
| 4582 const Visit(VisitKind.VISIT_UNRESOLVED_SET_IF_NULL, | 4305 const Visit(VisitKind.VISIT_UNRESOLVED_SET_IF_NULL, |
| 4583 name: 'unresolved', rhs: '42')), | 4306 name: 'unresolved', rhs: '42')), |
| 4584 ], | 4307 ], |
| 4585 }; | 4308 }; |
| OLD | NEW |