| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 import 'package:kernel/ast.dart' as ir; | 5 import 'package:kernel/ast.dart' as ir; |
| 6 | 6 |
| 7 import '../common.dart'; | 7 import '../common.dart'; |
| 8 import '../common/names.dart'; | 8 import '../common/names.dart'; |
| 9 import '../compiler.dart'; | 9 import '../compiler.dart'; |
| 10 import '../constants/expressions.dart'; | 10 import '../constants/expressions.dart'; |
| (...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 void visitStaticSet(ir.StaticSet node) { | 407 void visitStaticSet(ir.StaticSet node) { |
| 408 visitNode(node.value); | 408 visitNode(node.value); |
| 409 MemberEntity member = elementAdapter.getMember(node.target); | 409 MemberEntity member = elementAdapter.getMember(node.target); |
| 410 impactBuilder.registerStaticUse(new StaticUse.staticSet(member)); | 410 impactBuilder.registerStaticUse(new StaticUse.staticSet(member)); |
| 411 } | 411 } |
| 412 | 412 |
| 413 void handleSuperInvocation(ir.Name name, ir.Node target, ir.Node arguments) { | 413 void handleSuperInvocation(ir.Name name, ir.Node target, ir.Node arguments) { |
| 414 FunctionEntity method = elementAdapter | 414 FunctionEntity method = elementAdapter |
| 415 .getSuperMember(currentMember, name, target, setter: false); | 415 .getSuperMember(currentMember, name, target, setter: false); |
| 416 _visitArguments(arguments); | 416 _visitArguments(arguments); |
| 417 impactBuilder.registerStaticUse(new StaticUse.superInvoke( | 417 if (method != null) { |
| 418 method, elementAdapter.getCallStructure(arguments))); | 418 impactBuilder.registerStaticUse(new StaticUse.superInvoke( |
| 419 method, elementAdapter.getCallStructure(arguments))); |
| 420 } else { |
| 421 impactBuilder.registerStaticUse(new StaticUse.superInvoke( |
| 422 elementAdapter.getSuperNoSuchMethod( |
| 423 elementAdapter.getClass(currentMember.enclosingClass)), |
| 424 CallStructure.ONE_ARG)); |
| 425 } |
| 419 } | 426 } |
| 420 | 427 |
| 421 @override | 428 @override |
| 422 void visitDirectMethodInvocation(ir.DirectMethodInvocation node) { | 429 void visitDirectMethodInvocation(ir.DirectMethodInvocation node) { |
| 423 handleSuperInvocation(node.name, node.target, node.arguments); | 430 handleSuperInvocation(node.name, node.target, node.arguments); |
| 424 } | 431 } |
| 425 | 432 |
| 426 @override | 433 @override |
| 427 void visitSuperMethodInvocation(ir.SuperMethodInvocation node) { | 434 void visitSuperMethodInvocation(ir.SuperMethodInvocation node) { |
| 428 // TODO(johnniwinther): Should we support this or always use the | 435 // TODO(johnniwinther): Should we support this or always use the |
| 429 // [MixinFullResolution] transformer? | 436 // [MixinFullResolution] transformer? |
| 430 handleSuperInvocation(node.name, node.interfaceTarget, node.arguments); | 437 handleSuperInvocation(node.name, node.interfaceTarget, node.arguments); |
| 431 } | 438 } |
| 432 | 439 |
| 433 void handleSuperGet(ir.Name name, ir.Member target) { | 440 void handleSuperGet(ir.Name name, ir.Member target) { |
| 434 MemberEntity member = elementAdapter | 441 MemberEntity member = elementAdapter |
| 435 .getSuperMember(currentMember, name, target, setter: false); | 442 .getSuperMember(currentMember, name, target, setter: false); |
| 436 if (member.isFunction) { | 443 if (member != null) { |
| 437 impactBuilder.registerStaticUse(new StaticUse.superTearOff(member)); | 444 if (member.isFunction) { |
| 445 impactBuilder.registerStaticUse(new StaticUse.superTearOff(member)); |
| 446 } else { |
| 447 impactBuilder.registerStaticUse(new StaticUse.superGet(member)); |
| 448 } |
| 438 } else { | 449 } else { |
| 439 impactBuilder.registerStaticUse(new StaticUse.superGet(member)); | 450 impactBuilder.registerStaticUse(new StaticUse.superInvoke( |
| 451 elementAdapter.getSuperNoSuchMethod( |
| 452 elementAdapter.getClass(currentMember.enclosingClass)), |
| 453 CallStructure.ONE_ARG)); |
| 440 } | 454 } |
| 441 } | 455 } |
| 442 | 456 |
| 443 @override | 457 @override |
| 444 void visitDirectPropertyGet(ir.DirectPropertyGet node) { | 458 void visitDirectPropertyGet(ir.DirectPropertyGet node) { |
| 445 handleSuperGet(null, node.target); | 459 handleSuperGet(null, node.target); |
| 446 } | 460 } |
| 447 | 461 |
| 448 @override | 462 @override |
| 449 void visitSuperPropertyGet(ir.SuperPropertyGet node) { | 463 void visitSuperPropertyGet(ir.SuperPropertyGet node) { |
| 450 handleSuperGet(node.name, node.interfaceTarget); | 464 handleSuperGet(node.name, node.interfaceTarget); |
| 451 } | 465 } |
| 452 | 466 |
| 453 void handleSuperSet(ir.Name name, ir.Node target, ir.Node value) { | 467 void handleSuperSet(ir.Name name, ir.Node target, ir.Node value) { |
| 454 visitNode(value); | 468 visitNode(value); |
| 455 MemberEntity member = elementAdapter | 469 MemberEntity member = elementAdapter |
| 456 .getSuperMember(currentMember, name, target, setter: true); | 470 .getSuperMember(currentMember, name, target, setter: true); |
| 457 if (member.isField) { | 471 if (member != null) { |
| 458 impactBuilder.registerStaticUse(new StaticUse.superFieldSet(member)); | 472 if (member.isField) { |
| 473 impactBuilder.registerStaticUse(new StaticUse.superFieldSet(member)); |
| 474 } else { |
| 475 impactBuilder.registerStaticUse(new StaticUse.superSetterSet(member)); |
| 476 } |
| 459 } else { | 477 } else { |
| 460 impactBuilder.registerStaticUse(new StaticUse.superSetterSet(member)); | 478 impactBuilder.registerStaticUse(new StaticUse.superInvoke( |
| 479 elementAdapter.getSuperNoSuchMethod( |
| 480 elementAdapter.getClass(currentMember.enclosingClass)), |
| 481 CallStructure.ONE_ARG)); |
| 461 } | 482 } |
| 462 } | 483 } |
| 463 | 484 |
| 464 @override | 485 @override |
| 465 void visitDirectPropertySet(ir.DirectPropertySet node) { | 486 void visitDirectPropertySet(ir.DirectPropertySet node) { |
| 466 handleSuperSet(null, node.target, node.value); | 487 handleSuperSet(null, node.target, node.value); |
| 467 } | 488 } |
| 468 | 489 |
| 469 @override | 490 @override |
| 470 void visitSuperPropertySet(ir.SuperPropertySet node) { | 491 void visitSuperPropertySet(ir.SuperPropertySet node) { |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 624 ConstructorEntity target = elementAdapter.getConstructor(node.target); | 645 ConstructorEntity target = elementAdapter.getConstructor(node.target); |
| 625 impactBuilder.registerStaticUse(new StaticUse.superConstructorInvoke( | 646 impactBuilder.registerStaticUse(new StaticUse.superConstructorInvoke( |
| 626 target, elementAdapter.getCallStructure(node.arguments))); | 647 target, elementAdapter.getCallStructure(node.arguments))); |
| 627 } | 648 } |
| 628 | 649 |
| 629 // TODO(johnniwinther): Make this throw and visit child nodes explicitly | 650 // TODO(johnniwinther): Make this throw and visit child nodes explicitly |
| 630 // instead to ensure that we don't visit unwanted parts of the ir. | 651 // instead to ensure that we don't visit unwanted parts of the ir. |
| 631 @override | 652 @override |
| 632 void defaultNode(ir.Node node) => node.visitChildren(this); | 653 void defaultNode(ir.Node node) => node.visitChildren(this); |
| 633 } | 654 } |
| OLD | NEW |