Chromium Code Reviews| 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.md file. | 3 // BSD-style license that can be found in the LICENSE.md file. |
| 4 | 4 |
| 5 library rasta.unresolved; | 5 library rasta.unresolved; |
| 6 | 6 |
| 7 import 'package:kernel/ast.dart' as ir; | 7 import 'package:kernel/ast.dart' as ir; |
| 8 | 8 |
| 9 import 'accessors.dart'; | 9 import 'accessors.dart'; |
| 10 | 10 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 47 | 47 |
| 48 // Implemented in KernelVisitor | 48 // Implemented in KernelVisitor |
| 49 AstElement get currentElement; | 49 AstElement get currentElement; |
| 50 bool get isVoidContext; | 50 bool get isVoidContext; |
| 51 ir.Arguments buildArguments(NodeList arguments); | 51 ir.Arguments buildArguments(NodeList arguments); |
| 52 ir.TreeNode visitForValue(Expression node); | 52 ir.TreeNode visitForValue(Expression node); |
| 53 | 53 |
| 54 // TODO(ahe): Delete this method. | 54 // TODO(ahe): Delete this method. |
| 55 ir.InvalidExpression handleUnresolved(Node node); | 55 ir.InvalidExpression handleUnresolved(Node node); |
| 56 | 56 |
| 57 /// Similar to [Kernel.functionToIr] but returns null if [function] is a | |
| 58 /// synthetic function created for error recovery. | |
| 59 ir.Member possiblyErroneousFunctionToIr(FunctionElement function) { | |
| 60 return kernel.isSyntheticError(function) | |
| 61 ? null : kernel.functionToIr(function); | |
| 62 } | |
| 63 | |
| 57 /// Throws a [NoSuchMethodError] corresponding to a call to | 64 /// Throws a [NoSuchMethodError] corresponding to a call to |
| 58 /// [receiver].[memberName] with the arguments [callArguments]. | 65 /// [receiver].[memberName] with the arguments [callArguments]. |
| 59 /// | 66 /// |
| 60 /// The exception object is built by calling [exceptionBuilder]. This should | 67 /// The exception object is built by calling [exceptionBuilder]. This should |
| 61 /// take the same arguments as the default constructor to [NoSuchMethodError], | 68 /// take the same arguments as the default constructor to [NoSuchMethodError], |
| 62 /// but the method itself may encode additional details about the call than | 69 /// but the method itself may encode additional details about the call than |
| 63 /// is possible through the public interface of NoSuchMethodError. | 70 /// is possible through the public interface of NoSuchMethodError. |
| 64 /// | 71 /// |
| 65 /// Note that [callArguments] are the arguments as they occur in the attempted | 72 /// Note that [callArguments] are the arguments as they occur in the attempted |
| 66 /// call in user code -- they are not the arguments to [exceptionBuilder]. | 73 /// call in user code -- they are not the arguments to [exceptionBuilder]. |
| 67 /// | 74 /// |
| 68 /// If [candidateTarget] is given, it will provide the expected parameter | 75 /// If [candidateTarget] is given, it will provide the expected parameter |
| 69 /// names. | 76 /// names. |
| 70 ir.Expression buildThrowNoSuchMethodError( | 77 ir.Expression buildThrowNoSuchMethodError( |
| 71 ir.Procedure exceptionBuilder, | 78 ir.Procedure exceptionBuilder, |
| 72 ir.Expression receiver, | 79 ir.Expression receiver, |
| 73 String memberName, | 80 String memberName, |
| 74 ir.Arguments callArguments, | 81 ir.Arguments callArguments, |
| 75 [Element candidateTarget]) { | 82 [Element candidateTarget]) { |
| 76 ir.Expression memberNameArg = new ir.SymbolLiteral(memberName); | 83 ir.Expression memberNameArg = new ir.SymbolLiteral(memberName); |
| 77 ir.Expression positional = new ir.ListLiteral(callArguments.positional); | 84 ir.Expression positional = new ir.ListLiteral(callArguments.positional); |
| 78 ir.Expression named = new ir.MapLiteral(callArguments.named.map((e) { | 85 ir.Expression named = new ir.MapLiteral(callArguments.named.map((e) { |
| 79 return new ir.MapEntry(new ir.SymbolLiteral(e.name), e.value); | 86 return new ir.MapEntry(new ir.SymbolLiteral(e.name), e.value); |
| 80 }).toList()); | 87 }).toList()); |
| 88 if (candidateTarget is FunctionElement) { | |
| 89 // Ensure [candidateTarget] has been resolved. | |
| 90 possiblyErroneousFunctionToIr(candidateTarget); | |
|
asgerf
2016/08/02 09:00:16
Is there a way to get the parameter names without
ahe
2016/08/02 12:59:35
There's a deprecated method `Element.computeType`,
| |
| 91 } | |
| 81 ir.Expression existingArguments; | 92 ir.Expression existingArguments; |
| 82 if (candidateTarget is FunctionElement && !candidateTarget.isError) { | 93 if (candidateTarget is FunctionElement && |
| 94 !kernel.isSyntheticError(candidateTarget) && | |
| 95 candidateTarget.hasFunctionSignature) { | |
| 83 List<ir.Expression> existingArgumentsList = <ir.Expression>[]; | 96 List<ir.Expression> existingArgumentsList = <ir.Expression>[]; |
| 84 candidateTarget.functionSignature.forEachParameter((param) { | 97 candidateTarget.functionSignature.forEachParameter((param) { |
| 85 existingArgumentsList.add(new ir.StringLiteral(param.name)); | 98 existingArgumentsList.add(new ir.StringLiteral(param.name)); |
| 86 }); | 99 }); |
| 87 existingArguments = new ir.ListLiteral(existingArgumentsList); | 100 existingArguments = new ir.ListLiteral(existingArgumentsList); |
| 88 } else { | 101 } else { |
| 89 existingArguments = new ir.NullLiteral(); | 102 existingArguments = new ir.NullLiteral(); |
| 90 } | 103 } |
| 91 return new ir.Throw(new ir.StaticInvocation( | 104 return new ir.Throw(new ir.StaticInvocation( |
| 92 exceptionBuilder, | 105 exceptionBuilder, |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 235 } | 248 } |
| 236 | 249 |
| 237 ir.Expression visitUnresolvedRedirectingFactoryConstructorInvoke( | 250 ir.Expression visitUnresolvedRedirectingFactoryConstructorInvoke( |
| 238 NewExpression node, | 251 NewExpression node, |
| 239 ConstructorElement constructor, | 252 ConstructorElement constructor, |
| 240 InterfaceType type, | 253 InterfaceType type, |
| 241 NodeList arguments, | 254 NodeList arguments, |
| 242 CallStructure callStructure, | 255 CallStructure callStructure, |
| 243 _) { | 256 _) { |
| 244 // The body of the factory will throw an error. | 257 // The body of the factory will throw an error. |
| 245 return new ir.StaticInvocation(kernel.functionToIr(constructor), | 258 return new ir.StaticInvocation(possiblyErroneousFunctionToIr(constructor), |
| 246 buildArguments(arguments)); | 259 buildArguments(arguments)); |
| 247 } | 260 } |
| 248 | 261 |
| 249 ir.Expression visitUnresolvedSet( | 262 ir.Expression visitUnresolvedSet( |
| 250 Send node, | 263 Send node, |
| 251 Element element, | 264 Element element, |
| 252 Node rhs, | 265 Node rhs, |
| 253 _) { | 266 _) { |
| 254 return buildThrowUnresolvedSetter('${node.selector}', visitForValue(rhs)); | 267 return buildThrowUnresolvedSetter('${node.selector}', visitForValue(rhs)); |
| 255 } | 268 } |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 315 kernel.getUnresolvedStaticSetterBuilder()); | 328 kernel.getUnresolvedStaticSetterBuilder()); |
| 316 } | 329 } |
| 317 | 330 |
| 318 ir.Expression visitUnresolvedStaticSetterPostfix( | 331 ir.Expression visitUnresolvedStaticSetterPostfix( |
| 319 Send node, | 332 Send node, |
| 320 MethodElement getter, | 333 MethodElement getter, |
| 321 Element element, | 334 Element element, |
| 322 IncDecOperator operator, | 335 IncDecOperator operator, |
| 323 _) { | 336 _) { |
| 324 var accessor = new ClassStaticAccessor(this, getter.name, | 337 var accessor = new ClassStaticAccessor(this, getter.name, |
| 325 kernel.functionToIr(getter), null); | 338 possiblyErroneousFunctionToIr(getter), null); |
| 326 return accessor.buildPostfixIncrement( | 339 return accessor.buildPostfixIncrement( |
| 327 new ir.Name(operator.selectorName), | 340 new ir.Name(operator.selectorName), |
| 328 voidContext: isVoidContext); | 341 voidContext: isVoidContext); |
| 329 } | 342 } |
| 330 | 343 |
| 331 ir.Expression visitUnresolvedStaticSetterPrefix( | 344 ir.Expression visitUnresolvedStaticSetterPrefix( |
| 332 Send node, | 345 Send node, |
| 333 MethodElement getter, | 346 MethodElement getter, |
| 334 Element element, | 347 Element element, |
| 335 IncDecOperator operator, | 348 IncDecOperator operator, |
| 336 _) { | 349 _) { |
| 337 var accessor = new ClassStaticAccessor(this, getter.name, | 350 var accessor = new ClassStaticAccessor(this, getter.name, |
| 338 kernel.functionToIr(getter), null); | 351 possiblyErroneousFunctionToIr(getter), null); |
| 339 return accessor.buildPrefixIncrement( | 352 return accessor.buildPrefixIncrement( |
| 340 new ir.Name(operator.selectorName), | 353 new ir.Name(operator.selectorName), |
| 341 voidContext: isVoidContext); | 354 voidContext: isVoidContext); |
| 342 } | 355 } |
| 343 | 356 |
| 344 ir.Expression visitUnresolvedStaticSetterSetIfNull( | 357 ir.Expression visitUnresolvedStaticSetterSetIfNull( |
| 345 Send node, | 358 Send node, |
| 346 MethodElement getter, | 359 MethodElement getter, |
| 347 Element element, | 360 Element element, |
| 348 Node rhs, | 361 Node rhs, |
| 349 _) { | 362 _) { |
| 350 var accessor = new ClassStaticAccessor(this, getter.name, | 363 var accessor = new ClassStaticAccessor(this, getter.name, |
| 351 kernel.functionToIr(getter), null); | 364 possiblyErroneousFunctionToIr(getter), null); |
| 352 return accessor.buildNullAwareAssignment( | 365 return accessor.buildNullAwareAssignment( |
| 353 visitForValue(rhs), voidContext: isVoidContext); | 366 visitForValue(rhs), voidContext: isVoidContext); |
| 354 } | 367 } |
| 355 | 368 |
| 356 ir.Expression visitUnresolvedSuperBinary( | 369 ir.Expression visitUnresolvedSuperBinary( |
| 357 Send node, | 370 Send node, |
| 358 Element element, | 371 Element element, |
| 359 BinaryOperator operator, | 372 BinaryOperator operator, |
| 360 Node argument, | 373 Node argument, |
| 361 _) { | 374 _) { |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 376 } | 389 } |
| 377 | 390 |
| 378 ir.Expression visitUnresolvedSuperCompoundIndexSet( | 391 ir.Expression visitUnresolvedSuperCompoundIndexSet( |
| 379 Send node, | 392 Send node, |
| 380 Element element, | 393 Element element, |
| 381 Node index, | 394 Node index, |
| 382 AssignmentOperator operator, | 395 AssignmentOperator operator, |
| 383 Node rhs, | 396 Node rhs, |
| 384 _) { | 397 _) { |
| 385 var accessor = new SuperIndexAccessor(this, visitForValue(index), | 398 var accessor = new SuperIndexAccessor(this, visitForValue(index), |
| 386 kernel.functionToIr(element), null); | 399 possiblyErroneousFunctionToIr(element), null); |
| 387 return accessor.buildCompoundAssignment(new ir.Name(operator.selectorName), | 400 return accessor.buildCompoundAssignment(new ir.Name(operator.selectorName), |
| 388 visitForValue(rhs)); | 401 visitForValue(rhs)); |
| 389 } | 402 } |
| 390 | 403 |
| 391 ir.Expression visitUnresolvedSuperGet( | 404 ir.Expression visitUnresolvedSuperGet( |
| 392 Send node, | 405 Send node, |
| 393 Element element, | 406 Element element, |
| 394 _) { | 407 _) { |
| 395 return buildThrowUnresolvedSuperGetter('${node.selector}'); | 408 return buildThrowUnresolvedSuperGetter('${node.selector}'); |
| 396 } | 409 } |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 541 } | 554 } |
| 542 | 555 |
| 543 ir.Expression visitUnresolvedSuperSetterCompound( | 556 ir.Expression visitUnresolvedSuperSetterCompound( |
| 544 Send node, | 557 Send node, |
| 545 MethodElement getter, | 558 MethodElement getter, |
| 546 Element element, | 559 Element element, |
| 547 AssignmentOperator operator, | 560 AssignmentOperator operator, |
| 548 Node rhs, | 561 Node rhs, |
| 549 _) { | 562 _) { |
| 550 var accessor = new SuperPropertyAccessor(this, '${node.selector}', | 563 var accessor = new SuperPropertyAccessor(this, '${node.selector}', |
| 551 kernel.functionToIr(getter), null); | 564 possiblyErroneousFunctionToIr(getter), null); |
| 552 return accessor.buildCompoundAssignment( | 565 return accessor.buildCompoundAssignment( |
| 553 new ir.Name(operator.selectorName), | 566 new ir.Name(operator.selectorName), |
| 554 visitForValue(rhs)); | 567 visitForValue(rhs)); |
| 555 } | 568 } |
| 556 | 569 |
| 557 ir.Expression visitUnresolvedSuperSetterCompoundIndexSet( | 570 ir.Expression visitUnresolvedSuperSetterCompoundIndexSet( |
| 558 Send node, | 571 Send node, |
| 559 MethodElement getter, | 572 MethodElement getter, |
| 560 Element element, | 573 Element element, |
| 561 Node index, | 574 Node index, |
| 562 AssignmentOperator operator, | 575 AssignmentOperator operator, |
| 563 Node rhs, | 576 Node rhs, |
| 564 _) { | 577 _) { |
| 565 var accessor = new SuperIndexAccessor(this, visitForValue(index), | 578 var accessor = new SuperIndexAccessor(this, visitForValue(index), |
| 566 kernel.functionToIr(getter), null); | 579 possiblyErroneousFunctionToIr(getter), null); |
| 567 return accessor.buildCompoundAssignment( | 580 return accessor.buildCompoundAssignment( |
| 568 new ir.Name(operator.selectorName), | 581 new ir.Name(operator.selectorName), |
| 569 visitForValue(rhs)); | 582 visitForValue(rhs)); |
| 570 } | 583 } |
| 571 | 584 |
| 572 ir.Expression visitUnresolvedSuperSetterIndexPostfix( | 585 ir.Expression visitUnresolvedSuperSetterIndexPostfix( |
| 573 Send node, | 586 Send node, |
| 574 MethodElement indexFunction, | 587 MethodElement indexFunction, |
| 575 Element element, | 588 Element element, |
| 576 Node index, | 589 Node index, |
| 577 IncDecOperator operator, | 590 IncDecOperator operator, |
| 578 _) { | 591 _) { |
| 579 var accessor = new SuperIndexAccessor(this, visitForValue(index), | 592 var accessor = new SuperIndexAccessor(this, visitForValue(index), |
| 580 kernel.functionToIr(indexFunction), null); | 593 possiblyErroneousFunctionToIr(indexFunction), null); |
| 581 return accessor.buildPostfixIncrement(new ir.Name(operator.selectorName)); | 594 return accessor.buildPostfixIncrement(new ir.Name(operator.selectorName)); |
| 582 } | 595 } |
| 583 | 596 |
| 584 ir.Expression visitUnresolvedSuperSetterIndexPrefix( | 597 ir.Expression visitUnresolvedSuperSetterIndexPrefix( |
| 585 Send node, | 598 Send node, |
| 586 MethodElement indexFunction, | 599 MethodElement indexFunction, |
| 587 Element element, | 600 Element element, |
| 588 Node index, | 601 Node index, |
| 589 IncDecOperator operator, | 602 IncDecOperator operator, |
| 590 _) { | 603 _) { |
| 591 var accessor = new SuperIndexAccessor(this, visitForValue(index), | 604 var accessor = new SuperIndexAccessor(this, visitForValue(index), |
| 592 kernel.functionToIr(indexFunction), null); | 605 possiblyErroneousFunctionToIr(indexFunction), null); |
| 593 return accessor.buildPrefixIncrement(new ir.Name(operator.selectorName)); | 606 return accessor.buildPrefixIncrement(new ir.Name(operator.selectorName)); |
| 594 } | 607 } |
| 595 | 608 |
| 596 ir.Expression visitUnresolvedSuperSetterPostfix( | 609 ir.Expression visitUnresolvedSuperSetterPostfix( |
| 597 Send node, | 610 Send node, |
| 598 MethodElement getter, | 611 MethodElement getter, |
| 599 Element element, | 612 Element element, |
| 600 IncDecOperator operator, | 613 IncDecOperator operator, |
| 601 _) { | 614 _) { |
| 602 var accessor = new SuperPropertyAccessor(this, '${node.selector}', | 615 var accessor = new SuperPropertyAccessor(this, '${node.selector}', |
| 603 kernel.functionToIr(getter), null); | 616 possiblyErroneousFunctionToIr(getter), null); |
| 604 return accessor.buildPostfixIncrement(new ir.Name(operator.selectorName)); | 617 return accessor.buildPostfixIncrement(new ir.Name(operator.selectorName)); |
| 605 } | 618 } |
| 606 | 619 |
| 607 ir.Expression visitUnresolvedSuperSetterPrefix( | 620 ir.Expression visitUnresolvedSuperSetterPrefix( |
| 608 Send node, | 621 Send node, |
| 609 MethodElement getter, | 622 MethodElement getter, |
| 610 Element element, | 623 Element element, |
| 611 IncDecOperator operator, | 624 IncDecOperator operator, |
| 612 _) { | 625 _) { |
| 613 var accessor = new SuperPropertyAccessor(this, '${node.selector}', | 626 var accessor = new SuperPropertyAccessor(this, '${node.selector}', |
| 614 kernel.functionToIr(getter), null); | 627 possiblyErroneousFunctionToIr(getter), null); |
| 615 return accessor.buildPrefixIncrement(new ir.Name(operator.selectorName)); | 628 return accessor.buildPrefixIncrement(new ir.Name(operator.selectorName)); |
| 616 } | 629 } |
| 617 | 630 |
| 618 ir.Expression visitUnresolvedSuperSetterSetIfNull( | 631 ir.Expression visitUnresolvedSuperSetterSetIfNull( |
| 619 Send node, | 632 Send node, |
| 620 MethodElement getter, | 633 MethodElement getter, |
| 621 Element element, | 634 Element element, |
| 622 Node rhs, | 635 Node rhs, |
| 623 _) { | 636 _) { |
| 624 var accessor = new SuperPropertyAccessor(this, '${node.selector}', | 637 var accessor = new SuperPropertyAccessor(this, '${node.selector}', |
| 625 kernel.functionToIr(getter), null); | 638 possiblyErroneousFunctionToIr(getter), null); |
| 626 return accessor.buildNullAwareAssignment(visitForValue(rhs)); | 639 return accessor.buildNullAwareAssignment(visitForValue(rhs)); |
| 627 } | 640 } |
| 628 | 641 |
| 629 ir.Expression visitUnresolvedSuperUnary( | 642 ir.Expression visitUnresolvedSuperUnary( |
| 630 Send node, | 643 Send node, |
| 631 UnaryOperator operator, | 644 UnaryOperator operator, |
| 632 Element element, | 645 Element element, |
| 633 _) { | 646 _) { |
| 634 // TODO(asgerf): Should really call 'super.noSuchMethod'. | 647 // TODO(asgerf): Should really call 'super.noSuchMethod'. |
| 635 return buildThrowNoSuchMethodError( | 648 return buildThrowNoSuchMethodError( |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 681 } | 694 } |
| 682 | 695 |
| 683 ir.Expression visitUnresolvedTopLevelSetterCompound( | 696 ir.Expression visitUnresolvedTopLevelSetterCompound( |
| 684 Send node, | 697 Send node, |
| 685 MethodElement getter, | 698 MethodElement getter, |
| 686 Element element, | 699 Element element, |
| 687 AssignmentOperator operator, | 700 AssignmentOperator operator, |
| 688 Node rhs, | 701 Node rhs, |
| 689 _) { | 702 _) { |
| 690 var accessor = new TopLevelStaticAccessor(this, getter.name, | 703 var accessor = new TopLevelStaticAccessor(this, getter.name, |
| 691 kernel.functionToIr(getter), null); | 704 possiblyErroneousFunctionToIr(getter), null); |
| 692 return accessor.buildCompoundAssignment( | 705 return accessor.buildCompoundAssignment( |
| 693 new ir.Name(operator.selectorName), | 706 new ir.Name(operator.selectorName), |
| 694 visitForValue(rhs), | 707 visitForValue(rhs), |
| 695 voidContext: isVoidContext); | 708 voidContext: isVoidContext); |
| 696 } | 709 } |
| 697 | 710 |
| 698 ir.Expression visitUnresolvedTopLevelSetterPostfix( | 711 ir.Expression visitUnresolvedTopLevelSetterPostfix( |
| 699 Send node, | 712 Send node, |
| 700 MethodElement getter, | 713 MethodElement getter, |
| 701 Element element, | 714 Element element, |
| 702 IncDecOperator operator, | 715 IncDecOperator operator, |
| 703 _) { | 716 _) { |
| 704 var accessor = new TopLevelStaticAccessor(this, getter.name, | 717 var accessor = new TopLevelStaticAccessor(this, getter.name, |
| 705 kernel.functionToIr(getter), null); | 718 possiblyErroneousFunctionToIr(getter), null); |
| 706 return accessor.buildPostfixIncrement( | 719 return accessor.buildPostfixIncrement( |
| 707 new ir.Name(operator.selectorName), | 720 new ir.Name(operator.selectorName), |
| 708 voidContext: isVoidContext); | 721 voidContext: isVoidContext); |
| 709 } | 722 } |
| 710 | 723 |
| 711 ir.Expression visitUnresolvedTopLevelSetterPrefix( | 724 ir.Expression visitUnresolvedTopLevelSetterPrefix( |
| 712 Send node, | 725 Send node, |
| 713 MethodElement getter, | 726 MethodElement getter, |
| 714 Element element, | 727 Element element, |
| 715 IncDecOperator operator, | 728 IncDecOperator operator, |
| 716 _) { | 729 _) { |
| 717 var accessor = new TopLevelStaticAccessor(this, getter.name, | 730 var accessor = new TopLevelStaticAccessor(this, getter.name, |
| 718 kernel.functionToIr(getter), null); | 731 possiblyErroneousFunctionToIr(getter), null); |
| 719 return accessor.buildPrefixIncrement( | 732 return accessor.buildPrefixIncrement( |
| 720 new ir.Name(operator.selectorName), | 733 new ir.Name(operator.selectorName), |
| 721 voidContext: isVoidContext); | 734 voidContext: isVoidContext); |
| 722 } | 735 } |
| 723 | 736 |
| 724 ir.Expression visitUnresolvedTopLevelSetterSetIfNull( | 737 ir.Expression visitUnresolvedTopLevelSetterSetIfNull( |
| 725 Send node, | 738 Send node, |
| 726 MethodElement getter, | 739 MethodElement getter, |
| 727 Element element, | 740 Element element, |
| 728 Node rhs, | 741 Node rhs, |
| 729 _) { | 742 _) { |
| 730 var accessor = new TopLevelStaticAccessor(this, getter.name, | 743 var accessor = new TopLevelStaticAccessor(this, getter.name, |
| 731 kernel.functionToIr(getter), null); | 744 possiblyErroneousFunctionToIr(getter), null); |
| 732 return accessor.buildNullAwareAssignment( | 745 return accessor.buildNullAwareAssignment( |
| 733 visitForValue(rhs), | 746 visitForValue(rhs), |
| 734 voidContext: isVoidContext); | 747 voidContext: isVoidContext); |
| 735 } | 748 } |
| 736 | 749 |
| 737 ir.Expression visitUnresolvedSuperGetterIndexSetIfNull( | 750 ir.Expression visitUnresolvedSuperGetterIndexSetIfNull( |
| 738 Send node, | 751 Send node, |
| 739 Element element, | 752 Element element, |
| 740 MethodElement setter, | 753 MethodElement setter, |
| 741 Node index, | 754 Node index, |
| 742 Node rhs, | 755 Node rhs, |
| 743 _) { | 756 _) { |
| 744 var accessor = new SuperIndexAccessor(this, visitForValue(index), | 757 var accessor = new SuperIndexAccessor(this, visitForValue(index), |
| 745 null, kernel.functionToIr(setter)); | 758 null, possiblyErroneousFunctionToIr(setter)); |
| 746 return accessor.buildNullAwareAssignment(visitForValue(rhs)); | 759 return accessor.buildNullAwareAssignment(visitForValue(rhs)); |
| 747 } | 760 } |
| 748 | 761 |
| 749 ir.Expression visitUnresolvedSuperSetterIndexSetIfNull( | 762 ir.Expression visitUnresolvedSuperSetterIndexSetIfNull( |
| 750 Send node, | 763 Send node, |
| 751 MethodElement getter, | 764 MethodElement getter, |
| 752 Element element, | 765 Element element, |
| 753 Node index, | 766 Node index, |
| 754 Node rhs, | 767 Node rhs, |
| 755 _) { | 768 _) { |
| 756 var accessor = new SuperIndexAccessor(this, visitForValue(index), | 769 var accessor = new SuperIndexAccessor(this, visitForValue(index), |
| 757 kernel.functionToIr(getter), null); | 770 possiblyErroneousFunctionToIr(getter), null); |
| 758 return accessor.buildNullAwareAssignment(visitForValue(rhs)); | 771 return accessor.buildNullAwareAssignment(visitForValue(rhs)); |
| 759 } | 772 } |
| 760 | 773 |
| 761 ir.Expression visitUnresolvedSuperIndexSetIfNull( | 774 ir.Expression visitUnresolvedSuperIndexSetIfNull( |
| 762 Send node, | 775 Send node, |
| 763 Element element, | 776 Element element, |
| 764 Node index, | 777 Node index, |
| 765 Node rhs, | 778 Node rhs, |
| 766 _) { | 779 _) { |
| 767 var accessor = | 780 var accessor = |
| 768 new SuperIndexAccessor(this, visitForValue(index), null, null); | 781 new SuperIndexAccessor(this, visitForValue(index), null, null); |
| 769 return accessor.buildNullAwareAssignment(visitForValue(rhs)); | 782 return accessor.buildNullAwareAssignment(visitForValue(rhs)); |
| 770 } | 783 } |
| 771 | 784 |
| 772 ir.Expression visitUnresolvedSuperSet( | 785 ir.Expression visitUnresolvedSuperSet( |
| 773 Send node, | 786 Send node, |
| 774 Element element, | 787 Element element, |
| 775 Node rhs, | 788 Node rhs, |
| 776 _) { | 789 _) { |
| 777 return buildThrowUnresolvedSuperSetter('${node.selector}', | 790 return buildThrowUnresolvedSuperSetter('${node.selector}', |
| 778 visitForValue(rhs)); | 791 visitForValue(rhs)); |
| 779 } | 792 } |
| 780 } | 793 } |
| OLD | NEW |