| OLD | NEW | 
|---|
| 1 // Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file | 
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a | 
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. | 
| 4 | 4 | 
| 5 part of dart2js.semantics_visitor_test; | 5 part of dart2js.semantics_visitor_test; | 
| 6 | 6 | 
| 7 const Map<String, List<Test>> SEND_TESTS = const { | 7 const Map<String, List<Test>> SEND_TESTS = const { | 
| 8   'Parameters': const [ | 8   'Parameters': const [ | 
| 9     // Parameters | 9     // Parameters | 
| 10     const Test('m(o) => o;', | 10     const Test('m(o) => o;', | 
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 102         ''' | 102         ''' | 
| 103         class C { | 103         class C { | 
| 104           static var o; | 104           static var o; | 
| 105         } | 105         } | 
| 106         ''', | 106         ''', | 
| 107         'm() => p.C.o;', | 107         'm() => p.C.o;', | 
| 108         const Visit(VisitKind.VISIT_STATIC_FIELD_GET, | 108         const Visit(VisitKind.VISIT_STATIC_FIELD_GET, | 
| 109                     element: 'field(C#o)')), | 109                     element: 'field(C#o)')), | 
| 110     const Test( | 110     const Test( | 
| 111         ''' | 111         ''' | 
| 112         class C { |  | 
| 113           var o; |  | 
| 114         } |  | 
| 115         m() => C.o; |  | 
| 116         ''', |  | 
| 117         const Visit(VisitKind.VISIT_UNRESOLVED_GET, |  | 
| 118                     name: 'o')), |  | 
| 119     const Test( |  | 
| 120         ''' |  | 
| 121         class C { |  | 
| 122           C.o(); |  | 
| 123         } |  | 
| 124         m() => C.o; |  | 
| 125         ''', |  | 
| 126         const Visit(VisitKind.VISIT_UNRESOLVED_GET, |  | 
| 127                     name: 'o')), |  | 
| 128     const Test( |  | 
| 129         ''' |  | 
| 130         class C {} |  | 
| 131         m() => C.this; |  | 
| 132         ''', |  | 
| 133         null), |  | 
| 134     const Test( |  | 
| 135         ''' |  | 
| 136         class C { static var o; } | 112         class C { static var o; } | 
| 137         m() { C.o = 42; } | 113         m() { C.o = 42; } | 
| 138         ''', | 114         ''', | 
| 139         const Visit(VisitKind.VISIT_STATIC_FIELD_SET, | 115         const Visit(VisitKind.VISIT_STATIC_FIELD_SET, | 
| 140                     element: 'field(C#o)', | 116                     element: 'field(C#o)', | 
| 141                     rhs: '42')), | 117                     rhs: '42')), | 
| 142     const Test.clazz( | 118     const Test.clazz( | 
| 143         ''' | 119         ''' | 
| 144         class C { | 120         class C { | 
| 145           static var o; | 121           static var o; | 
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 200     const Test.prefix( | 176     const Test.prefix( | 
| 201         ''' | 177         ''' | 
| 202         class C { | 178         class C { | 
| 203           static var o; | 179           static var o; | 
| 204         } | 180         } | 
| 205         ''', | 181         ''', | 
| 206         'm() { p.C.o(null, 42); }', | 182         'm() { p.C.o(null, 42); }', | 
| 207         const Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE, | 183         const Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE, | 
| 208                     element: 'field(C#o)', | 184                     element: 'field(C#o)', | 
| 209                     arguments: '(null,42)')), | 185                     arguments: '(null,42)')), | 
| 210     const Test( |  | 
| 211         ''' |  | 
| 212         class C {} |  | 
| 213         m() => C.this(null, 42); |  | 
| 214         ''', |  | 
| 215         const Visit(VisitKind.VISIT_UNRESOLVED_INVOKE, |  | 
| 216                     name: 'this', arguments: '(null,42)')), |  | 
| 217     // TODO(johnniwinther): Expect [VISIT_FINAL_STATIC_FIELD_SET] instead. | 186     // TODO(johnniwinther): Expect [VISIT_FINAL_STATIC_FIELD_SET] instead. | 
| 218     const Test( | 187     const Test( | 
| 219         ''' | 188         ''' | 
| 220         class C { static final o = 0; } | 189         class C { static final o = 0; } | 
| 221         m() { C.o = 42; } | 190         m() { C.o = 42; } | 
| 222         ''', | 191         ''', | 
| 223         const Visit(VisitKind.VISIT_UNRESOLVED_SET, | 192         const Visit(VisitKind.VISIT_UNRESOLVED_SET, | 
| 224                     name: 'o', | 193                     name: 'o', | 
| 225                     rhs: '42')), | 194                     rhs: '42')), | 
| 226     const Test.clazz( | 195     const Test.clazz( | 
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 362     const Test.prefix( | 331     const Test.prefix( | 
| 363         ''' | 332         ''' | 
| 364         class C { | 333         class C { | 
| 365           static get o => 42; | 334           static get o => 42; | 
| 366         } | 335         } | 
| 367         ''', | 336         ''', | 
| 368         'm() { p.C.o = 42; }', | 337         'm() { p.C.o = 42; }', | 
| 369         const Visit(VisitKind.VISIT_UNRESOLVED_SET, | 338         const Visit(VisitKind.VISIT_UNRESOLVED_SET, | 
| 370                     name: 'o', | 339                     name: 'o', | 
| 371                     rhs: '42')), | 340                     rhs: '42')), | 
|  | 341     // TODO(johnniwinther): Expected [VISIT_STATIC_SETTER_GET] instead. | 
| 372     const Test( | 342     const Test( | 
| 373         ''' | 343         ''' | 
| 374         class C { | 344         class C { | 
| 375           static set o(_) {} | 345           static set o(_) {} | 
| 376         } | 346         } | 
| 377         m() => C.o; | 347         m() => C.o; | 
| 378         ''', | 348         ''', | 
| 379         const Visit(VisitKind.VISIT_STATIC_SETTER_GET, | 349         const Visit(VisitKind.VISIT_UNRESOLVED_GET, | 
| 380                     element: 'setter(C#o)')), | 350                     name: 'o')), | 
| 381     const Test.clazz( | 351     const Test.clazz( | 
| 382         ''' | 352         ''' | 
| 383         class C { | 353         class C { | 
| 384           static set o(_) {} | 354           static set o(_) {} | 
| 385           m() => o; | 355           m() => o; | 
| 386         } | 356         } | 
| 387         ''', | 357         ''', | 
| 388         const Visit(VisitKind.VISIT_STATIC_SETTER_GET, | 358         const Visit(VisitKind.VISIT_STATIC_SETTER_GET, | 
| 389                     element: 'setter(C#o)')), | 359                     element: 'setter(C#o)')), | 
| 390 | 360 | 
| 391     const Test.clazz( | 361     const Test.clazz( | 
| 392         ''' | 362         ''' | 
| 393         class C { | 363         class C { | 
| 394           static set o(_) {} | 364           static set o(_) {} | 
| 395           m() => C.o; | 365           m() => C.o; | 
| 396         } | 366         } | 
| 397         ''', | 367         ''', | 
| 398         const Visit(VisitKind.VISIT_STATIC_SETTER_GET, | 368         const Visit(VisitKind.VISIT_UNRESOLVED_GET, | 
| 399                     element: 'setter(C#o)')), | 369                     name: 'o')), | 
| 400     const Test.prefix( | 370     const Test.prefix( | 
| 401         ''' | 371         ''' | 
| 402         class C { | 372         class C { | 
| 403           static set o(_) {} | 373           static set o(_) {} | 
| 404         } | 374         } | 
| 405         ''', | 375         ''', | 
| 406         'm() => p.C.o;', | 376         'm() => p.C.o;', | 
| 407         const Visit(VisitKind.VISIT_STATIC_SETTER_GET, | 377         const Visit(VisitKind.VISIT_UNRESOLVED_GET, | 
| 408                     element: 'setter(C#o)')), | 378                     name: 'o')), | 
| 409     const Test( | 379     const Test( | 
| 410         ''' | 380         ''' | 
| 411         class C { static set o(_) {} } | 381         class C { static set o(_) {} } | 
| 412         m() { C.o = 42; } | 382         m() { C.o = 42; } | 
| 413         ''', | 383         ''', | 
| 414         const Visit(VisitKind.VISIT_STATIC_SETTER_SET, | 384         const Visit(VisitKind.VISIT_STATIC_SETTER_SET, | 
| 415                     element: 'setter(C#o)', | 385                     element: 'setter(C#o)', | 
| 416                     rhs: '42')), | 386                     rhs: '42')), | 
| 417     const Test.clazz( | 387     const Test.clazz( | 
| 418         ''' | 388         ''' | 
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 475     const Test.prefix( | 445     const Test.prefix( | 
| 476         ''' | 446         ''' | 
| 477         class C { | 447         class C { | 
| 478           static get o => null; | 448           static get o => null; | 
| 479         } | 449         } | 
| 480         ''', | 450         ''', | 
| 481         'm() { p.C.o(null, 42); }', | 451         'm() { p.C.o(null, 42); }', | 
| 482         const Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE, | 452         const Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE, | 
| 483                     element: 'getter(C#o)', | 453                     element: 'getter(C#o)', | 
| 484                     arguments: '(null,42)')), | 454                     arguments: '(null,42)')), | 
|  | 455     // TODO(johnniwinther): Expect [VISIT_STATIC_SETTER_INVOKE] instead. | 
| 485     const Test( | 456     const Test( | 
| 486         ''' | 457         ''' | 
| 487         class C { static set o(_) {} } | 458         class C { static set o(_) {} } | 
| 488         m() => C.o(null, 42); | 459         m() => C.o(null, 42); | 
| 489         ''', | 460         ''', | 
| 490         const Visit(VisitKind.VISIT_STATIC_SETTER_INVOKE, | 461         const Visit(VisitKind.VISIT_UNRESOLVED_INVOKE, | 
| 491                     element: 'setter(C#o)', | 462                     name: 'o', | 
| 492                     arguments: '(null,42)')), | 463                     arguments: '(null,42)')), | 
| 493     const Test.clazz( | 464     const Test.clazz( | 
| 494         ''' | 465         ''' | 
| 495         class C { | 466         class C { | 
| 496           static set o(_) {} | 467           static set o(_) {} | 
| 497           m() { o(null, 42); } | 468           m() { o(null, 42); } | 
| 498         } | 469         } | 
| 499         ''', | 470         ''', | 
| 500         const Visit(VisitKind.VISIT_STATIC_SETTER_INVOKE, | 471         const Visit(VisitKind.VISIT_STATIC_SETTER_INVOKE, | 
| 501                     element: 'setter(C#o)', | 472                     element: 'setter(C#o)', | 
| 502                     arguments: '(null,42)')), | 473                     arguments: '(null,42)')), | 
| 503     const Test.clazz( | 474     const Test.clazz( | 
| 504         ''' | 475         ''' | 
| 505         class C { | 476         class C { | 
| 506           static set o(_) {} | 477           static set o(_) {} | 
| 507           m() { C.o(null, 42); } | 478           m() { C.o(null, 42); } | 
| 508         } | 479         } | 
| 509         ''', | 480         ''', | 
| 510         const Visit(VisitKind.VISIT_STATIC_SETTER_INVOKE, | 481         const Visit(VisitKind.VISIT_UNRESOLVED_INVOKE, | 
| 511                     element: 'setter(C#o)', | 482                     name: 'o', | 
| 512                     arguments: '(null,42)')), | 483                     arguments: '(null,42)')), | 
| 513     const Test.prefix( | 484     const Test.prefix( | 
| 514         ''' | 485         ''' | 
| 515         class C { | 486         class C { | 
| 516           static set o(_) {} | 487           static set o(_) {} | 
| 517         } | 488         } | 
| 518         ''', | 489         ''', | 
| 519         'm() { p.C.o(null, 42); }', | 490         'm() { p.C.o(null, 42); }', | 
| 520         const Visit(VisitKind.VISIT_STATIC_SETTER_INVOKE, | 491         const Visit(VisitKind.VISIT_UNRESOLVED_INVOKE, | 
| 521                     element: 'setter(C#o)', | 492                     name: 'o', | 
| 522                     arguments: '(null,42)')), | 493                     arguments: '(null,42)')), | 
| 523   ], | 494   ], | 
| 524   'Static functions': const [ | 495   'Static functions': const [ | 
| 525     // Static functions | 496     // Static functions | 
| 526     const Test( | 497     const Test( | 
| 527         ''' | 498         ''' | 
| 528         class C { static o(a, b) {} } | 499         class C { static o(a, b) {} } | 
| 529         m() => C.o; | 500         m() => C.o; | 
| 530         ''', | 501         ''', | 
| 531         const Visit(VisitKind.VISIT_STATIC_FUNCTION_GET, | 502         const Visit(VisitKind.VISIT_STATIC_FUNCTION_GET, | 
| (...skipping 733 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1265         ''' | 1236         ''' | 
| 1266         class C {} | 1237         class C {} | 
| 1267         m() => C--; | 1238         m() => C--; | 
| 1268         ''', | 1239         ''', | 
| 1269         const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_POSTFIX, | 1240         const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_POSTFIX, | 
| 1270                     constant: 'C', | 1241                     constant: 'C', | 
| 1271                     operator: '--')), | 1242                     operator: '--')), | 
| 1272     const Test( | 1243     const Test( | 
| 1273         ''' | 1244         ''' | 
| 1274         class C {} | 1245         class C {} | 
| 1275         m() => (C).hashCode; | 1246         m() => C; | 
| 1276         ''', | 1247         ''', | 
| 1277         const [ | 1248         const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_GET, | 
| 1278           const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_GET, | 1249                     constant: 'C')), | 
| 1279                       receiver: '(C)', name: 'hashCode'), |  | 
| 1280           const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_GET, |  | 
| 1281                       constant: 'C'), |  | 
| 1282         ]), |  | 
| 1283   ], | 1250   ], | 
| 1284   'Typedef type literals': const [ | 1251   'Typedef type literals': const [ | 
| 1285     // Typedef type literals | 1252     // Typedef type literals | 
| 1286     const Test( | 1253     const Test( | 
| 1287         ''' | 1254         ''' | 
| 1288         typedef F(); | 1255         typedef F(); | 
| 1289         m() => F; | 1256         m() => F; | 
| 1290         ''', | 1257         ''', | 
| 1291         const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_GET, | 1258         const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_GET, | 
| 1292                     constant: 'F')), | 1259                     constant: 'F')), | 
| (...skipping 2152 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3445           const Visit( | 3412           const Visit( | 
| 3446               VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_GET, | 3413               VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_GET, | 
| 3447               receiver: 'a', | 3414               receiver: 'a', | 
| 3448               name: 'b'), | 3415               name: 'b'), | 
| 3449           const Visit( | 3416           const Visit( | 
| 3450               VisitKind.VISIT_PARAMETER_GET, | 3417               VisitKind.VISIT_PARAMETER_GET, | 
| 3451               element: 'parameter(m#a)'), | 3418               element: 'parameter(m#a)'), | 
| 3452         ]), | 3419         ]), | 
| 3453     const Test( | 3420     const Test( | 
| 3454         ''' | 3421         ''' | 
| 3455         class C { |  | 
| 3456           static var b; |  | 
| 3457         } |  | 
| 3458         m(a) => C?.b; |  | 
| 3459         ''', |  | 
| 3460         const [ |  | 
| 3461           const Visit( |  | 
| 3462               VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_GET, |  | 
| 3463               receiver: 'C', |  | 
| 3464               name: 'b'), |  | 
| 3465           const Visit( |  | 
| 3466               VisitKind.VISIT_CLASS_TYPE_LITERAL_GET, |  | 
| 3467               constant: 'C'), |  | 
| 3468         ]), |  | 
| 3469     const Test( |  | 
| 3470         ''' |  | 
| 3471         m(a) => a?.b = 42; | 3422         m(a) => a?.b = 42; | 
| 3472         ''', | 3423         ''', | 
| 3473         const [ | 3424         const [ | 
| 3474           const Visit( | 3425           const Visit( | 
| 3475               VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_SET, | 3426               VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_SET, | 
| 3476               receiver: 'a', | 3427               receiver: 'a', | 
| 3477               name: 'b', | 3428               name: 'b', | 
| 3478               rhs: '42'), | 3429               rhs: '42'), | 
| 3479           const Visit( | 3430           const Visit( | 
| 3480               VisitKind.VISIT_PARAMETER_GET, | 3431               VisitKind.VISIT_PARAMETER_GET, | 
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3558         ''' | 3509         ''' | 
| 3559         m(a) => a ??= 42; | 3510         m(a) => a ??= 42; | 
| 3560         ''', | 3511         ''', | 
| 3561         const Visit( | 3512         const Visit( | 
| 3562             VisitKind.VISIT_PARAMETER_COMPOUND, | 3513             VisitKind.VISIT_PARAMETER_COMPOUND, | 
| 3563             element: 'parameter(m#a)', | 3514             element: 'parameter(m#a)', | 
| 3564             operator: '??=', | 3515             operator: '??=', | 
| 3565             rhs: '42')), | 3516             rhs: '42')), | 
| 3566   ], | 3517   ], | 
| 3567 }; | 3518 }; | 
| OLD | NEW | 
|---|