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

Side by Side Diff: lib/unresolved.dart

Issue 2207473003: Avoid crashing on synthetic elements. (Closed) Base URL: git@github.com:dart-lang/rasta.git@dill
Patch Set: Merged with 47f575a073f4b28c3798e1b22098664ee737e6b8 Created 4 years, 4 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
« no previous file with comments | « lib/kernel.dart ('k') | test/kernel/regression/unresolved_recovery.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.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
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « lib/kernel.dart ('k') | test/kernel/regression/unresolved_recovery.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698