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

Side by Side Diff: pkg/compiler/lib/src/resolution/send_structure.dart

Issue 2982783003: Use failedAt in more places (Closed)
Patch Set: Created 3 years, 5 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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 library dart2js.resolution.send_structure; 5 library dart2js.resolution.send_structure;
6 6
7 import '../common.dart'; 7 import '../common.dart';
8 import '../constants/expressions.dart'; 8 import '../constants/expressions.dart';
9 import '../elements/elements.dart'; 9 import '../elements/elements.dart';
10 import '../elements/operators.dart'; 10 import '../elements/operators.dart';
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 case AccessKind.UNRESOLVED_SUPER: 284 case AccessKind.UNRESOLVED_SUPER:
285 return visitor.visitUnresolvedSuperInvoke( 285 return visitor.visitUnresolvedSuperInvoke(
286 node, semantics.element, node.argumentsNode, selector, arg); 286 node, semantics.element, node.argumentsNode, selector, arg);
287 case AccessKind.INVALID: 287 case AccessKind.INVALID:
288 return visitor.errorInvalidInvoke( 288 return visitor.errorInvalidInvoke(
289 node, semantics.element, node.argumentsNode, selector, arg); 289 node, semantics.element, node.argumentsNode, selector, arg);
290 case AccessKind.COMPOUND: 290 case AccessKind.COMPOUND:
291 // This is not a valid case. 291 // This is not a valid case.
292 break; 292 break;
293 } 293 }
294 throw new SpannableAssertionFailure(node, "Invalid invoke: ${semantics}"); 294 throw failedAt(node, "Invalid invoke: ${semantics}");
295 } 295 }
296 296
297 String toString() => 'invoke($selector, $semantics)'; 297 String toString() => 'invoke($selector, $semantics)';
298 } 298 }
299 299
300 /// The structure for a [Send] that is an incompatible invocation, i.e. an 300 /// The structure for a [Send] that is an incompatible invocation, i.e. an
301 /// invocation of a known target where the call structure does not match. 301 /// invocation of a known target where the call structure does not match.
302 class IncompatibleInvokeStructure<R, A> implements SendStructure<R, A> { 302 class IncompatibleInvokeStructure<R, A> implements SendStructure<R, A> {
303 /// The target of the invocation. 303 /// The target of the invocation.
304 final AccessSemantics semantics; 304 final AccessSemantics semantics;
(...skipping 22 matching lines...) Expand all
327 case AccessKind.TOPLEVEL_METHOD: 327 case AccessKind.TOPLEVEL_METHOD:
328 return visitor.visitTopLevelFunctionIncompatibleInvoke( 328 return visitor.visitTopLevelFunctionIncompatibleInvoke(
329 node, semantics.element, node.argumentsNode, callStructure, arg); 329 node, semantics.element, node.argumentsNode, callStructure, arg);
330 case AccessKind.LOCAL_FUNCTION: 330 case AccessKind.LOCAL_FUNCTION:
331 return visitor.visitLocalFunctionIncompatibleInvoke( 331 return visitor.visitLocalFunctionIncompatibleInvoke(
332 node, semantics.element, node.argumentsNode, callStructure, arg); 332 node, semantics.element, node.argumentsNode, callStructure, arg);
333 default: 333 default:
334 // TODO(johnniwinther): Support more variants of this invoke structure. 334 // TODO(johnniwinther): Support more variants of this invoke structure.
335 break; 335 break;
336 } 336 }
337 throw new SpannableAssertionFailure( 337 throw failedAt(node, "Invalid incompatible invoke: ${semantics}");
338 node, "Invalid incompatible invoke: ${semantics}");
339 } 338 }
340 339
341 String toString() => 'incompatible-invoke($selector, $semantics)'; 340 String toString() => 'incompatible-invoke($selector, $semantics)';
342 } 341 }
343 342
344 /// The structure for a [Send] that is a read access. 343 /// The structure for a [Send] that is a read access.
345 class GetStructure<R, A> implements SendStructure<R, A> { 344 class GetStructure<R, A> implements SendStructure<R, A> {
346 /// The target of the read access. 345 /// The target of the read access.
347 final AccessSemantics semantics; 346 final AccessSemantics semantics;
348 347
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
418 case AccessKind.UNRESOLVED: 417 case AccessKind.UNRESOLVED:
419 return visitor.visitUnresolvedGet(node, semantics.element, arg); 418 return visitor.visitUnresolvedGet(node, semantics.element, arg);
420 case AccessKind.UNRESOLVED_SUPER: 419 case AccessKind.UNRESOLVED_SUPER:
421 return visitor.visitUnresolvedSuperGet(node, semantics.element, arg); 420 return visitor.visitUnresolvedSuperGet(node, semantics.element, arg);
422 case AccessKind.INVALID: 421 case AccessKind.INVALID:
423 return visitor.errorInvalidGet(node, semantics.element, arg); 422 return visitor.errorInvalidGet(node, semantics.element, arg);
424 case AccessKind.COMPOUND: 423 case AccessKind.COMPOUND:
425 // This is not a valid case. 424 // This is not a valid case.
426 break; 425 break;
427 } 426 }
428 throw new SpannableAssertionFailure(node, "Invalid getter: ${semantics}"); 427 throw failedAt(node, "Invalid getter: ${semantics}");
429 } 428 }
430 429
431 String toString() => 'get($semantics)'; 430 String toString() => 'get($semantics)';
432 } 431 }
433 432
434 /// The structure for a [Send] that is an assignment. 433 /// The structure for a [Send] that is an assignment.
435 class SetStructure<R, A> implements SendStructure<R, A> { 434 class SetStructure<R, A> implements SendStructure<R, A> {
436 /// The target of the assignment. 435 /// The target of the assignment.
437 final AccessSemantics semantics; 436 final AccessSemantics semantics;
438 437
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
539 case AccessKind.UNRESOLVED: 538 case AccessKind.UNRESOLVED:
540 return visitor.visitUnresolvedSet( 539 return visitor.visitUnresolvedSet(
541 node, semantics.element, node.arguments.single, arg); 540 node, semantics.element, node.arguments.single, arg);
542 case AccessKind.INVALID: 541 case AccessKind.INVALID:
543 return visitor.errorInvalidSet( 542 return visitor.errorInvalidSet(
544 node, semantics.element, node.arguments.single, arg); 543 node, semantics.element, node.arguments.single, arg);
545 case AccessKind.COMPOUND: 544 case AccessKind.COMPOUND:
546 // This is not a valid case. 545 // This is not a valid case.
547 break; 546 break;
548 } 547 }
549 throw new SpannableAssertionFailure(node, "Invalid setter: ${semantics}"); 548 throw failedAt(node, "Invalid setter: ${semantics}");
550 } 549 }
551 550
552 String toString() => 'set($semantics)'; 551 String toString() => 'set($semantics)';
553 } 552 }
554 553
555 /// The structure for a [Send] that is a negation, i.e. of the form `!e`. 554 /// The structure for a [Send] that is a negation, i.e. of the form `!e`.
556 class NotStructure<R, A> implements SendStructure<R, A> { 555 class NotStructure<R, A> implements SendStructure<R, A> {
557 const NotStructure(); 556 const NotStructure();
558 557
559 R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) { 558 R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
(...skipping 29 matching lines...) Expand all
589 case AccessKind.UNRESOLVED_SUPER: 588 case AccessKind.UNRESOLVED_SUPER:
590 return visitor.visitUnresolvedSuperUnary( 589 return visitor.visitUnresolvedSuperUnary(
591 node, operator, semantics.element, arg); 590 node, operator, semantics.element, arg);
592 case AccessKind.INVALID: 591 case AccessKind.INVALID:
593 return visitor.errorInvalidUnary( 592 return visitor.errorInvalidUnary(
594 node, operator, semantics.element, arg); 593 node, operator, semantics.element, arg);
595 default: 594 default:
596 // This is not a valid case. 595 // This is not a valid case.
597 break; 596 break;
598 } 597 }
599 throw new SpannableAssertionFailure(node, "Invalid setter: ${semantics}"); 598 throw failedAt(node, "Invalid setter: ${semantics}");
600 } 599 }
601 600
602 String toString() => 'unary($operator,$semantics)'; 601 String toString() => 'unary($operator,$semantics)';
603 } 602 }
604 603
605 /// The structure for a [Send] that is an invocation of a undefined unary 604 /// The structure for a [Send] that is an invocation of a undefined unary
606 /// operator. 605 /// operator.
607 class InvalidUnaryStructure<R, A> implements SendStructure<R, A> { 606 class InvalidUnaryStructure<R, A> implements SendStructure<R, A> {
608 const InvalidUnaryStructure(); 607 const InvalidUnaryStructure();
609 608
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
641 case AccessKind.UNRESOLVED_SUPER: 640 case AccessKind.UNRESOLVED_SUPER:
642 return visitor.visitUnresolvedSuperIndex( 641 return visitor.visitUnresolvedSuperIndex(
643 node, semantics.element, node.arguments.single, arg); 642 node, semantics.element, node.arguments.single, arg);
644 case AccessKind.INVALID: 643 case AccessKind.INVALID:
645 return visitor.errorInvalidIndex( 644 return visitor.errorInvalidIndex(
646 node, semantics.element, node.arguments.single, arg); 645 node, semantics.element, node.arguments.single, arg);
647 default: 646 default:
648 // This is not a valid case. 647 // This is not a valid case.
649 break; 648 break;
650 } 649 }
651 throw new SpannableAssertionFailure(node, "Invalid index: ${semantics}"); 650 throw failedAt(node, "Invalid index: ${semantics}");
652 } 651 }
653 } 652 }
654 653
655 /// The structure for a [Send] that is an equals test, i.e. of the form 654 /// The structure for a [Send] that is an equals test, i.e. of the form
656 /// `a == b`. 655 /// `a == b`.
657 class EqualsStructure<R, A> implements SendStructure<R, A> { 656 class EqualsStructure<R, A> implements SendStructure<R, A> {
658 /// The target of the left operand. 657 /// The target of the left operand.
659 final AccessSemantics semantics; 658 final AccessSemantics semantics;
660 659
661 EqualsStructure(this.semantics); 660 EqualsStructure(this.semantics);
662 661
663 @override 662 @override
664 SendStructureKind get kind => SendStructureKind.EQUALS; 663 SendStructureKind get kind => SendStructureKind.EQUALS;
665 664
666 R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) { 665 R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
667 switch (semantics.kind) { 666 switch (semantics.kind) {
668 case AccessKind.EXPRESSION: 667 case AccessKind.EXPRESSION:
669 return visitor.visitEquals( 668 return visitor.visitEquals(
670 node, node.receiver, node.arguments.single, arg); 669 node, node.receiver, node.arguments.single, arg);
671 case AccessKind.SUPER_METHOD: 670 case AccessKind.SUPER_METHOD:
672 return visitor.visitSuperEquals( 671 return visitor.visitSuperEquals(
673 node, semantics.element, node.arguments.single, arg); 672 node, semantics.element, node.arguments.single, arg);
674 case AccessKind.INVALID: 673 case AccessKind.INVALID:
675 return visitor.errorInvalidEquals( 674 return visitor.errorInvalidEquals(
676 node, semantics.element, node.arguments.single, arg); 675 node, semantics.element, node.arguments.single, arg);
677 default: 676 default:
678 // This is not a valid case. 677 // This is not a valid case.
679 break; 678 break;
680 } 679 }
681 throw new SpannableAssertionFailure(node, "Invalid equals: ${semantics}"); 680 throw failedAt(node, "Invalid equals: ${semantics}");
682 } 681 }
683 682
684 String toString() => '==($semantics)'; 683 String toString() => '==($semantics)';
685 } 684 }
686 685
687 /// The structure for a [Send] that is a not-equals test, i.e. of the form 686 /// The structure for a [Send] that is a not-equals test, i.e. of the form
688 /// `a != b`. 687 /// `a != b`.
689 class NotEqualsStructure<R, A> implements SendStructure<R, A> { 688 class NotEqualsStructure<R, A> implements SendStructure<R, A> {
690 /// The target of the left operand. 689 /// The target of the left operand.
691 final AccessSemantics semantics; 690 final AccessSemantics semantics;
(...skipping 11 matching lines...) Expand all
703 case AccessKind.SUPER_METHOD: 702 case AccessKind.SUPER_METHOD:
704 return visitor.visitSuperNotEquals( 703 return visitor.visitSuperNotEquals(
705 node, semantics.element, node.arguments.single, arg); 704 node, semantics.element, node.arguments.single, arg);
706 case AccessKind.INVALID: 705 case AccessKind.INVALID:
707 return visitor.errorInvalidNotEquals( 706 return visitor.errorInvalidNotEquals(
708 node, semantics.element, node.arguments.single, arg); 707 node, semantics.element, node.arguments.single, arg);
709 default: 708 default:
710 // This is not a valid case. 709 // This is not a valid case.
711 break; 710 break;
712 } 711 }
713 throw new SpannableAssertionFailure( 712 throw failedAt(node, "Invalid not equals: ${semantics}");
714 node, "Invalid not equals: ${semantics}");
715 } 713 }
716 714
717 String toString() => '!=($semantics)'; 715 String toString() => '!=($semantics)';
718 } 716 }
719 717
720 /// The structure for a [Send] that is an invocation of a user-definable binary 718 /// The structure for a [Send] that is an invocation of a user-definable binary
721 /// operator. 719 /// operator.
722 class BinaryStructure<R, A> implements SendStructure<R, A> { 720 class BinaryStructure<R, A> implements SendStructure<R, A> {
723 /// The target of the left operand. 721 /// The target of the left operand.
724 final AccessSemantics semantics; 722 final AccessSemantics semantics;
(...skipping 17 matching lines...) Expand all
742 case AccessKind.UNRESOLVED_SUPER: 740 case AccessKind.UNRESOLVED_SUPER:
743 return visitor.visitUnresolvedSuperBinary( 741 return visitor.visitUnresolvedSuperBinary(
744 node, semantics.element, operator, node.arguments.single, arg); 742 node, semantics.element, operator, node.arguments.single, arg);
745 case AccessKind.INVALID: 743 case AccessKind.INVALID:
746 return visitor.errorInvalidBinary( 744 return visitor.errorInvalidBinary(
747 node, semantics.element, operator, node.arguments.single, arg); 745 node, semantics.element, operator, node.arguments.single, arg);
748 default: 746 default:
749 // This is not a valid case. 747 // This is not a valid case.
750 break; 748 break;
751 } 749 }
752 throw new SpannableAssertionFailure(node, "Invalid binary: ${semantics}"); 750 throw failedAt(node, "Invalid binary: ${semantics}");
753 } 751 }
754 752
755 String toString() => 'binary($operator,$semantics)'; 753 String toString() => 'binary($operator,$semantics)';
756 } 754 }
757 755
758 /// The structure for a [Send] that is an invocation of a undefined binary 756 /// The structure for a [Send] that is an invocation of a undefined binary
759 /// operator. 757 /// operator.
760 class InvalidBinaryStructure<R, A> implements SendStructure<R, A> { 758 class InvalidBinaryStructure<R, A> implements SendStructure<R, A> {
761 const InvalidBinaryStructure(); 759 const InvalidBinaryStructure();
762 760
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
794 case AccessKind.UNRESOLVED: 792 case AccessKind.UNRESOLVED:
795 return visitor.visitUnresolvedSuperIndexSet(node, semantics.element, 793 return visitor.visitUnresolvedSuperIndexSet(node, semantics.element,
796 node.arguments.first, node.arguments.tail.head, arg); 794 node.arguments.first, node.arguments.tail.head, arg);
797 case AccessKind.INVALID: 795 case AccessKind.INVALID:
798 return visitor.errorInvalidIndexSet(node, semantics.element, 796 return visitor.errorInvalidIndexSet(node, semantics.element,
799 node.arguments.first, node.arguments.tail.head, arg); 797 node.arguments.first, node.arguments.tail.head, arg);
800 default: 798 default:
801 // This is not a valid case. 799 // This is not a valid case.
802 break; 800 break;
803 } 801 }
804 throw new SpannableAssertionFailure( 802 throw failedAt(node, "Invalid index set: ${semantics}");
805 node, "Invalid index set: ${semantics}");
806 } 803 }
807 804
808 String toString() => '[]=($semantics)'; 805 String toString() => '[]=($semantics)';
809 } 806 }
810 807
811 /// The structure for a [Send] that is an prefix operation on an index 808 /// The structure for a [Send] that is an prefix operation on an index
812 /// expression, i.e. of the form `--a[b]`. 809 /// expression, i.e. of the form `--a[b]`.
813 class IndexPrefixStructure<R, A> implements SendStructure<R, A> { 810 class IndexPrefixStructure<R, A> implements SendStructure<R, A> {
814 /// The target of the left operand. 811 /// The target of the left operand.
815 final AccessSemantics semantics; 812 final AccessSemantics semantics;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
857 arg); 854 arg);
858 default: 855 default:
859 // This is not a valid case. 856 // This is not a valid case.
860 break; 857 break;
861 } 858 }
862 break; 859 break;
863 default: 860 default:
864 // This is not a valid case. 861 // This is not a valid case.
865 break; 862 break;
866 } 863 }
867 throw new SpannableAssertionFailure( 864 throw failedAt(node, "Invalid index prefix: ${semantics}");
868 node, "Invalid index prefix: ${semantics}");
869 } 865 }
870 } 866 }
871 867
872 /// The structure for a [Send] that is an postfix operation on an index 868 /// The structure for a [Send] that is an postfix operation on an index
873 /// expression, i.e. of the form `a[b]++`. 869 /// expression, i.e. of the form `a[b]++`.
874 class IndexPostfixStructure<R, A> implements SendStructure<R, A> { 870 class IndexPostfixStructure<R, A> implements SendStructure<R, A> {
875 /// The target of the left operand. 871 /// The target of the left operand.
876 final AccessSemantics semantics; 872 final AccessSemantics semantics;
877 873
878 /// The `++` or `--` operator used in the operation. 874 /// The `++` or `--` operator used in the operation.
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
923 arg); 919 arg);
924 default: 920 default:
925 // This is not a valid case. 921 // This is not a valid case.
926 break; 922 break;
927 } 923 }
928 break; 924 break;
929 default: 925 default:
930 // This is not a valid case. 926 // This is not a valid case.
931 break; 927 break;
932 } 928 }
933 throw new SpannableAssertionFailure( 929 throw failedAt(node, "Invalid index postfix: ${semantics}");
934 node, "Invalid index postfix: ${semantics}");
935 } 930 }
936 } 931 }
937 932
938 /// The structure for a [Send] that is a compound assignment. For instance 933 /// The structure for a [Send] that is a compound assignment. For instance
939 /// `a += b`. 934 /// `a += b`.
940 class CompoundStructure<R, A> implements SendStructure<R, A> { 935 class CompoundStructure<R, A> implements SendStructure<R, A> {
941 /// The target of the compound assignment, i.e. the left-hand side. 936 /// The target of the compound assignment, i.e. the left-hand side.
942 final AccessSemantics semantics; 937 final AccessSemantics semantics;
943 938
944 /// The assignment operator used in the compound assignment. 939 /// The assignment operator used in the compound assignment.
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
1174 return visitor.visitUnresolvedSuperSetterCompound( 1169 return visitor.visitUnresolvedSuperSetterCompound(
1175 node, 1170 node,
1176 compoundSemantics.getter, 1171 compoundSemantics.getter,
1177 compoundSemantics.setter, 1172 compoundSemantics.setter,
1178 operator, 1173 operator,
1179 node.arguments.single, 1174 node.arguments.single,
1180 arg); 1175 arg);
1181 } 1176 }
1182 break; 1177 break;
1183 } 1178 }
1184 throw new SpannableAssertionFailure( 1179 throw failedAt(node, "Invalid compound assigment: ${semantics}");
1185 node, "Invalid compound assigment: ${semantics}");
1186 } 1180 }
1187 1181
1188 String toString() => 'compound($operator,$semantics)'; 1182 String toString() => 'compound($operator,$semantics)';
1189 } 1183 }
1190 1184
1191 /// The structure for a [Send] that is an if-null assignment. For instance 1185 /// The structure for a [Send] that is an if-null assignment. For instance
1192 /// `a ??= b`. 1186 /// `a ??= b`.
1193 class SetIfNullStructure<R, A> implements SendStructure<R, A> { 1187 class SetIfNullStructure<R, A> implements SendStructure<R, A> {
1194 /// The target of the if-null assignment, i.e. the left-hand side. 1188 /// The target of the if-null assignment, i.e. the left-hand side.
1195 final AccessSemantics semantics; 1189 final AccessSemantics semantics;
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
1404 case CompoundAccessKind.UNRESOLVED_SUPER_SETTER: 1398 case CompoundAccessKind.UNRESOLVED_SUPER_SETTER:
1405 return visitor.visitUnresolvedSuperSetterSetIfNull( 1399 return visitor.visitUnresolvedSuperSetterSetIfNull(
1406 node, 1400 node,
1407 compoundSemantics.getter, 1401 compoundSemantics.getter,
1408 compoundSemantics.setter, 1402 compoundSemantics.setter,
1409 node.arguments.single, 1403 node.arguments.single,
1410 arg); 1404 arg);
1411 } 1405 }
1412 break; 1406 break;
1413 } 1407 }
1414 throw new SpannableAssertionFailure( 1408 throw failedAt(node, "Invalid if-null assigment: ${semantics}");
1415 node, "Invalid if-null assigment: ${semantics}");
1416 } 1409 }
1417 1410
1418 String toString() => 'ifNull($semantics)'; 1411 String toString() => 'ifNull($semantics)';
1419 } 1412 }
1420 1413
1421 /// The structure for a [Send] that is a compound assignment on the index 1414 /// The structure for a [Send] that is a compound assignment on the index
1422 /// operator. For instance `a[b] += c`. 1415 /// operator. For instance `a[b] += c`.
1423 class CompoundIndexSetStructure<R, A> implements SendStructure<R, A> { 1416 class CompoundIndexSetStructure<R, A> implements SendStructure<R, A> {
1424 /// The target of the index operations. 1417 /// The target of the index operations.
1425 final AccessSemantics semantics; 1418 final AccessSemantics semantics;
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1480 arg); 1473 arg);
1481 default: 1474 default:
1482 // This is not a valid case. 1475 // This is not a valid case.
1483 break; 1476 break;
1484 } 1477 }
1485 break; 1478 break;
1486 default: 1479 default:
1487 // This is not a valid case. 1480 // This is not a valid case.
1488 break; 1481 break;
1489 } 1482 }
1490 throw new SpannableAssertionFailure( 1483 throw failedAt(node, "Invalid compound index set: ${semantics}");
1491 node, "Invalid compound index set: ${semantics}");
1492 } 1484 }
1493 1485
1494 String toString() => 'compound []=($operator,$semantics)'; 1486 String toString() => 'compound []=($operator,$semantics)';
1495 } 1487 }
1496 1488
1497 /// The structure for a [Send] that is a if-null assignment on the index 1489 /// The structure for a [Send] that is a if-null assignment on the index
1498 /// operator. For instance `a[b] ??= c`. 1490 /// operator. For instance `a[b] ??= c`.
1499 class IndexSetIfNullStructure<R, A> implements SendStructure<R, A> { 1491 class IndexSetIfNullStructure<R, A> implements SendStructure<R, A> {
1500 /// The target of the index operations. 1492 /// The target of the index operations.
1501 final AccessSemantics semantics; 1493 final AccessSemantics semantics;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1549 arg); 1541 arg);
1550 default: 1542 default:
1551 // This is not a valid case. 1543 // This is not a valid case.
1552 break; 1544 break;
1553 } 1545 }
1554 break; 1546 break;
1555 default: 1547 default:
1556 // This is not a valid case. 1548 // This is not a valid case.
1557 break; 1549 break;
1558 } 1550 }
1559 throw new SpannableAssertionFailure( 1551 throw failedAt(node, "Invalid index set if-null: ${semantics}");
1560 node, "Invalid index set if-null: ${semantics}");
1561 } 1552 }
1562 1553
1563 String toString() => 'index set if-null []??=($semantics)'; 1554 String toString() => 'index set if-null []??=($semantics)';
1564 } 1555 }
1565 1556
1566 /// The structure for a [Send] that is a prefix operations. For instance 1557 /// The structure for a [Send] that is a prefix operations. For instance
1567 /// `++a`. 1558 /// `++a`.
1568 class PrefixStructure<R, A> implements SendStructure<R, A> { 1559 class PrefixStructure<R, A> implements SendStructure<R, A> {
1569 /// The target of the prefix operation. 1560 /// The target of the prefix operation.
1570 final AccessSemantics semantics; 1561 final AccessSemantics semantics;
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
1788 arg); 1779 arg);
1789 case CompoundAccessKind.UNRESOLVED_SUPER_SETTER: 1780 case CompoundAccessKind.UNRESOLVED_SUPER_SETTER:
1790 return visitor.visitUnresolvedSuperSetterPrefix( 1781 return visitor.visitUnresolvedSuperSetterPrefix(
1791 node, 1782 node,
1792 compoundSemantics.getter, 1783 compoundSemantics.getter,
1793 compoundSemantics.setter, 1784 compoundSemantics.setter,
1794 operator, 1785 operator,
1795 arg); 1786 arg);
1796 } 1787 }
1797 } 1788 }
1798 throw new SpannableAssertionFailure( 1789 throw failedAt(node, "Invalid compound assigment: ${semantics}");
1799 node, "Invalid compound assigment: ${semantics}");
1800 } 1790 }
1801 1791
1802 String toString() => 'prefix($operator,$semantics)'; 1792 String toString() => 'prefix($operator,$semantics)';
1803 } 1793 }
1804 1794
1805 /// The structure for a [Send] that is a postfix operations. For instance 1795 /// The structure for a [Send] that is a postfix operations. For instance
1806 /// `a++`. 1796 /// `a++`.
1807 class PostfixStructure<R, A> implements SendStructure<R, A> { 1797 class PostfixStructure<R, A> implements SendStructure<R, A> {
1808 /// The target of the postfix operation. 1798 /// The target of the postfix operation.
1809 final AccessSemantics semantics; 1799 final AccessSemantics semantics;
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
2020 arg); 2010 arg);
2021 case CompoundAccessKind.UNRESOLVED_SUPER_SETTER: 2011 case CompoundAccessKind.UNRESOLVED_SUPER_SETTER:
2022 return visitor.visitUnresolvedSuperSetterPostfix( 2012 return visitor.visitUnresolvedSuperSetterPostfix(
2023 node, 2013 node,
2024 compoundSemantics.getter, 2014 compoundSemantics.getter,
2025 compoundSemantics.setter, 2015 compoundSemantics.setter,
2026 operator, 2016 operator,
2027 arg); 2017 arg);
2028 } 2018 }
2029 } 2019 }
2030 throw new SpannableAssertionFailure( 2020 throw failedAt(node, "Invalid compound assigment: ${semantics}");
2031 node, "Invalid compound assigment: ${semantics}");
2032 } 2021 }
2033 2022
2034 String toString() => 'postfix($operator,$semantics)'; 2023 String toString() => 'postfix($operator,$semantics)';
2035 } 2024 }
2036 2025
2037 /// The structure for a [Send] whose prefix is a prefix for a deferred library. 2026 /// The structure for a [Send] whose prefix is a prefix for a deferred library.
2038 /// For instance `deferred.a` where `deferred` is a deferred prefix. 2027 /// For instance `deferred.a` where `deferred` is a deferred prefix.
2039 class DeferredPrefixStructure<R, A> implements SendStructure<R, A> { 2028 class DeferredPrefixStructure<R, A> implements SendStructure<R, A> {
2040 /// The deferred prefix element. 2029 /// The deferred prefix element.
2041 final PrefixElement prefix; 2030 final PrefixElement prefix;
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
2172 arg); 2161 arg);
2173 case ConstructorAccessKind.INCOMPATIBLE: 2162 case ConstructorAccessKind.INCOMPATIBLE:
2174 return visitor.visitConstructorIncompatibleInvoke( 2163 return visitor.visitConstructorIncompatibleInvoke(
2175 node, 2164 node,
2176 semantics.element, 2165 semantics.element,
2177 semantics.type, 2166 semantics.type,
2178 node.send.argumentsNode, 2167 node.send.argumentsNode,
2179 callStructure, 2168 callStructure,
2180 arg); 2169 arg);
2181 } 2170 }
2182 throw new SpannableAssertionFailure( 2171 throw failedAt(
2183 node, "Unhandled constructor invocation kind: ${semantics.kind}"); 2172 node, "Unhandled constructor invocation kind: ${semantics.kind}");
2184 } 2173 }
2185 2174
2186 String toString() => 'new($semantics,$selector)'; 2175 String toString() => 'new($semantics,$selector)';
2187 } 2176 }
2188 2177
2189 enum ConstantInvokeKind { 2178 enum ConstantInvokeKind {
2190 CONSTRUCTED, 2179 CONSTRUCTED,
2191 BOOL_FROM_ENVIRONMENT, 2180 BOOL_FROM_ENVIRONMENT,
2192 INT_FROM_ENVIRONMENT, 2181 INT_FROM_ENVIRONMENT,
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
2259 case ConstantExpressionKind.BOOL_FROM_ENVIRONMENT: 2248 case ConstantExpressionKind.BOOL_FROM_ENVIRONMENT:
2260 kind = ConstantInvokeKind.BOOL_FROM_ENVIRONMENT; 2249 kind = ConstantInvokeKind.BOOL_FROM_ENVIRONMENT;
2261 break; 2250 break;
2262 case ConstantExpressionKind.INT_FROM_ENVIRONMENT: 2251 case ConstantExpressionKind.INT_FROM_ENVIRONMENT:
2263 kind = ConstantInvokeKind.INT_FROM_ENVIRONMENT; 2252 kind = ConstantInvokeKind.INT_FROM_ENVIRONMENT;
2264 break; 2253 break;
2265 case ConstantExpressionKind.STRING_FROM_ENVIRONMENT: 2254 case ConstantExpressionKind.STRING_FROM_ENVIRONMENT:
2266 kind = ConstantInvokeKind.STRING_FROM_ENVIRONMENT; 2255 kind = ConstantInvokeKind.STRING_FROM_ENVIRONMENT;
2267 break; 2256 break;
2268 default: 2257 default:
2269 throw new SpannableAssertionFailure( 2258 throw failedAt(
2270 node, "Unexpected constant kind $kind: ${constant.toDartText()}"); 2259 node, "Unexpected constant kind $kind: ${constant.toDartText()}");
2271 } 2260 }
2272 return new ConstInvokeStructure(kind, constant); 2261 return new ConstInvokeStructure(kind, constant);
2273 } 2262 }
2274 } 2263 }
2275 2264
2276 R dispatch(SemanticSendVisitor<R, A> visitor, NewExpression node, A arg) { 2265 R dispatch(SemanticSendVisitor<R, A> visitor, NewExpression node, A arg) {
2277 Element element = elements[node.send]; 2266 Element element = elements[node.send];
2278 Selector selector = elements.getSelector(node.send); 2267 Selector selector = elements.getSelector(node.send);
2279 ResolutionDartType type = elements.getType(node); 2268 ResolutionDartType type = elements.getType(node);
(...skipping 13 matching lines...) Expand all
2293 case ConstantExpressionKind.BOOL_FROM_ENVIRONMENT: 2282 case ConstantExpressionKind.BOOL_FROM_ENVIRONMENT:
2294 return visitor.visitBoolFromEnvironmentConstructorInvoke( 2283 return visitor.visitBoolFromEnvironmentConstructorInvoke(
2295 node, constant, arg); 2284 node, constant, arg);
2296 case ConstantExpressionKind.INT_FROM_ENVIRONMENT: 2285 case ConstantExpressionKind.INT_FROM_ENVIRONMENT:
2297 return visitor.visitIntFromEnvironmentConstructorInvoke( 2286 return visitor.visitIntFromEnvironmentConstructorInvoke(
2298 node, constant, arg); 2287 node, constant, arg);
2299 case ConstantExpressionKind.STRING_FROM_ENVIRONMENT: 2288 case ConstantExpressionKind.STRING_FROM_ENVIRONMENT:
2300 return visitor.visitStringFromEnvironmentConstructorInvoke( 2289 return visitor.visitStringFromEnvironmentConstructorInvoke(
2301 node, constant, arg); 2290 node, constant, arg);
2302 default: 2291 default:
2303 throw new SpannableAssertionFailure( 2292 throw failedAt(
2304 node, "Unexpected constant kind $kind: ${constant.toDartText()}"); 2293 node, "Unexpected constant kind $kind: ${constant.toDartText()}");
2305 } 2294 }
2306 } 2295 }
2307 } 2296 }
2308 } 2297 }
2309 2298
2310 /// The structure of a parameter declaration. 2299 /// The structure of a parameter declaration.
2311 abstract class ParameterStructure<R, A> { 2300 abstract class ParameterStructure<R, A> {
2312 final VariableDefinitions definitions; 2301 final VariableDefinitions definitions;
2313 final Node node; 2302 final Node node;
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
2437 return visitor.visitTopLevelConstantDeclaration( 2426 return visitor.visitTopLevelConstantDeclaration(
2438 definitions, node, variable, constant, arg); 2427 definitions, node, variable, constant, arg);
2439 case VariableKind.STATIC_FIELD: 2428 case VariableKind.STATIC_FIELD:
2440 return visitor.visitStaticConstantDeclaration( 2429 return visitor.visitStaticConstantDeclaration(
2441 definitions, node, variable, constant, arg); 2430 definitions, node, variable, constant, arg);
2442 case VariableKind.LOCAL_VARIABLE: 2431 case VariableKind.LOCAL_VARIABLE:
2443 return visitor.visitLocalConstantDeclaration( 2432 return visitor.visitLocalConstantDeclaration(
2444 definitions, node, variable, constant, arg); 2433 definitions, node, variable, constant, arg);
2445 default: 2434 default:
2446 } 2435 }
2447 throw new SpannableAssertionFailure( 2436 throw failedAt(node, "Invalid constant variable: $variable");
2448 node, "Invalid constant variable: $variable");
2449 } 2437 }
2450 } 2438 }
2451 2439
2452 class InitializersStructure<R, A> { 2440 class InitializersStructure<R, A> {
2453 final List<InitializerStructure<R, A>> initializers; 2441 final List<InitializerStructure<R, A>> initializers;
2454 2442
2455 InitializersStructure(this.initializers); 2443 InitializersStructure(this.initializers);
2456 } 2444 }
2457 2445
2458 abstract class InitializerStructure<R, A> { 2446 abstract class InitializerStructure<R, A> {
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
2515 ThisConstructorInvokeStructure( 2503 ThisConstructorInvokeStructure(
2516 this.node, this.constructor, this.callStructure); 2504 this.node, this.constructor, this.callStructure);
2517 2505
2518 R dispatch(SemanticDeclarationVisitor<R, A> visitor, A arg) { 2506 R dispatch(SemanticDeclarationVisitor<R, A> visitor, A arg) {
2519 return visitor.visitThisConstructorInvoke( 2507 return visitor.visitThisConstructorInvoke(
2520 node, constructor, node.argumentsNode, callStructure, arg); 2508 node, constructor, node.argumentsNode, callStructure, arg);
2521 } 2509 }
2522 2510
2523 bool get isConstructorInvoke => true; 2511 bool get isConstructorInvoke => true;
2524 } 2512 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/resolution/send_resolver.dart ('k') | pkg/compiler/lib/src/ssa/builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698