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); |
| 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 |