Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(348)

Side by Side Diff: pkg/compiler/lib/src/ssa/kernel_impact.dart

Issue 3007523003: Prepare for handling super noSuchMethod (Closed)
Patch Set: Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/kernel/element_map_impl.dart ('k') | tests/compiler/dart2js/kernel/getters_setters_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698