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 file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library fasta.fasta_accessors; | 5 library fasta.fasta_accessors; |
6 | 6 |
7 import 'package:kernel/ast.dart' | 7 import 'package:kernel/ast.dart' |
8 hide InvalidExpression, InvalidInitializer, InvalidStatement; | 8 hide InvalidExpression, InvalidInitializer, InvalidStatement; |
9 | 9 |
10 import '../../scanner/token.dart' show Token; | 10 import '../../scanner/token.dart' show Token; |
11 | 11 |
12 import '../deprecated_problems.dart' show deprecated_internalProblem; | |
13 | |
14 import '../messages.dart' show Message; | 12 import '../messages.dart' show Message; |
15 | 13 |
16 import '../names.dart' show callName, lengthName; | 14 import '../names.dart' show callName, lengthName; |
17 | 15 |
18 import '../scope.dart' | 16 import '../problems.dart' show unhandled, unimplemented, unsupported; |
19 show deprecated_AccessErrorBuilder, ProblemBuilder, Scope; | 17 |
18 import '../scope.dart' show AccessErrorBuilder, ProblemBuilder, Scope; | |
20 | 19 |
21 import '../type_inference/type_promotion.dart' show TypePromoter; | 20 import '../type_inference/type_promotion.dart' show TypePromoter; |
22 | 21 |
23 import 'kernel_shadow_ast.dart' | |
24 show | |
25 KernelArguments, | |
26 KernelComplexAssignment, | |
27 KernelIllegalAssignment, | |
28 KernelIndexAssign, | |
29 KernelPropertyAssign, | |
30 KernelStaticAssignment, | |
31 KernelThisExpression, | |
32 KernelTypeLiteral, | |
33 KernelVariableAssignment; | |
34 | |
35 import 'utils.dart' show offsetForToken; | |
36 | |
37 import 'frontend_accessors.dart' show Accessor; | |
38 | |
39 import 'frontend_accessors.dart' as kernel | 22 import 'frontend_accessors.dart' as kernel |
40 show | 23 show |
41 IndexAccessor, | 24 IndexAccessor, |
42 NullAwarePropertyAccessor, | 25 NullAwarePropertyAccessor, |
43 PropertyAccessor, | 26 PropertyAccessor, |
44 ReadOnlyAccessor, | 27 ReadOnlyAccessor, |
45 StaticAccessor, | 28 StaticAccessor, |
46 SuperIndexAccessor, | 29 SuperIndexAccessor, |
47 SuperPropertyAccessor, | 30 SuperPropertyAccessor, |
48 ThisIndexAccessor, | 31 ThisIndexAccessor, |
49 ThisPropertyAccessor, | 32 ThisPropertyAccessor, |
50 VariableAccessor; | 33 VariableAccessor; |
51 | 34 |
35 import 'frontend_accessors.dart' show Accessor; | |
36 | |
52 import 'kernel_builder.dart' | 37 import 'kernel_builder.dart' |
53 show | 38 show |
54 Builder, | 39 Builder, |
55 KernelClassBuilder, | 40 KernelClassBuilder, |
56 KernelInvalidTypeBuilder, | 41 KernelInvalidTypeBuilder, |
57 LibraryBuilder, | 42 LibraryBuilder, |
58 PrefixBuilder, | 43 PrefixBuilder, |
59 TypeDeclarationBuilder; | 44 TypeDeclarationBuilder; |
60 | 45 |
46 import 'kernel_shadow_ast.dart' | |
47 show | |
48 KernelArguments, | |
49 KernelComplexAssignment, | |
50 KernelIllegalAssignment, | |
51 KernelIndexAssign, | |
52 KernelPropertyAssign, | |
53 KernelStaticAssignment, | |
54 KernelThisExpression, | |
55 KernelTypeLiteral, | |
56 KernelVariableAssignment; | |
57 | |
58 import 'utils.dart' show offsetForToken; | |
59 | |
61 abstract class BuilderHelper { | 60 abstract class BuilderHelper { |
62 LibraryBuilder get library; | 61 LibraryBuilder get library; |
63 | 62 |
64 Uri get uri; | 63 Uri get uri; |
65 | 64 |
66 TypePromoter get typePromoter; | 65 TypePromoter get typePromoter; |
67 | 66 |
68 int get functionNestingLevel; | 67 int get functionNestingLevel; |
69 | 68 |
70 bool get constantExpressionRequired; | 69 bool get constantExpressionRequired; |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
212 new KernelIllegalAssignment(rhs); | 211 new KernelIllegalAssignment(rhs); |
213 } | 212 } |
214 | 213 |
215 abstract class ErrorAccessor implements FastaAccessor { | 214 abstract class ErrorAccessor implements FastaAccessor { |
216 /// Pass [arguments] that must be evaluated before throwing an error. At | 215 /// Pass [arguments] that must be evaluated before throwing an error. At |
217 /// most one of [isGetter] and [isSetter] should be true and they're passed | 216 /// most one of [isGetter] and [isSetter] should be true and they're passed |
218 /// to [BuilderHelper.buildThrowNoSuchMethodError] if it is used. | 217 /// to [BuilderHelper.buildThrowNoSuchMethodError] if it is used. |
219 Expression buildError(Arguments arguments, | 218 Expression buildError(Arguments arguments, |
220 {bool isGetter: false, bool isSetter: false, int offset}); | 219 {bool isGetter: false, bool isSetter: false, int offset}); |
221 | 220 |
222 Name get name => deprecated_internalProblem("Unsupported operation."); | 221 Name get name => unsupported("name", offsetForToken(token), uri); |
223 | 222 |
224 @override | 223 @override |
225 String get plainNameForRead => name.name; | 224 String get plainNameForRead => name.name; |
226 | 225 |
227 withReceiver(Object receiver, int operatorOffset, {bool isNullAware}) => this; | 226 withReceiver(Object receiver, int operatorOffset, {bool isNullAware}) => this; |
228 | 227 |
229 @override | 228 @override |
230 Initializer buildFieldInitializer(Map<String, int> initializedFields) { | 229 Initializer buildFieldInitializer(Map<String, int> initializedFields) { |
231 return helper.buildInvalidInitializer( | 230 return helper.buildInvalidInitializer( |
232 buildError(new Arguments.empty(), isSetter: true)); | 231 buildError(new Arguments.empty(), isSetter: true)); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
312 | 311 |
313 final Token token; | 312 final Token token; |
314 | 313 |
315 final bool isInitializer; | 314 final bool isInitializer; |
316 | 315 |
317 final bool isSuper; | 316 final bool isSuper; |
318 | 317 |
319 ThisAccessor(this.helper, this.token, this.isInitializer, | 318 ThisAccessor(this.helper, this.token, this.isInitializer, |
320 {this.isSuper: false}); | 319 {this.isSuper: false}); |
321 | 320 |
322 String get plainNameForRead => | 321 String get plainNameForRead { |
323 deprecated_internalProblem(isSuper ? "super" : "this"); | 322 return unsupported("${isSuper ? 'super' : 'this'}.plainNameForRead", |
323 offsetForToken(token), uri); | |
324 } | |
324 | 325 |
325 Expression buildSimpleRead() { | 326 Expression buildSimpleRead() { |
326 if (!isSuper) { | 327 if (!isSuper) { |
327 return new KernelThisExpression(); | 328 return new KernelThisExpression(); |
328 } else { | 329 } else { |
329 return helper.deprecated_buildCompileTimeError( | 330 return helper.deprecated_buildCompileTimeError( |
330 "Can't use `super` as an expression.", offsetForToken(token)); | 331 "Can't use `super` as an expression.", offsetForToken(token)); |
331 } | 332 } |
332 } | 333 } |
333 | 334 |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
482 @override | 483 @override |
483 final Arguments arguments; | 484 final Arguments arguments; |
484 | 485 |
485 SendAccessor(BuilderHelper helper, Token token, Name name, this.arguments) | 486 SendAccessor(BuilderHelper helper, Token token, Name name, this.arguments) |
486 : super(helper, token, name) { | 487 : super(helper, token, name) { |
487 assert(arguments != null); | 488 assert(arguments != null); |
488 } | 489 } |
489 | 490 |
490 String get plainNameForRead => name.name; | 491 String get plainNameForRead => name.name; |
491 | 492 |
492 Expression buildSimpleRead() { | 493 Expression buildSimpleRead() { |
Johnni Winther
2017/07/11 18:34:05
Here and many below: Should it be 'unhandled' inst
ahe
2017/07/12 14:04:02
Similar reasoning: I know now that this is unsuppo
| |
493 return deprecated_internalProblem("Unhandled"); | 494 return unsupported("buildSimpleRead", offsetForToken(token), uri); |
494 } | 495 } |
495 | 496 |
496 Expression buildAssignment(Expression value, {bool voidContext: false}) { | 497 Expression buildAssignment(Expression value, {bool voidContext: false}) { |
497 return deprecated_internalProblem("Unhandled"); | 498 return unsupported("buildAssignment", offsetForToken(token), uri); |
498 } | 499 } |
499 | 500 |
500 withReceiver(Object receiver, int operatorOffset, {bool isNullAware: false}) { | 501 withReceiver(Object receiver, int operatorOffset, {bool isNullAware: false}) { |
501 if (receiver is FastaAccessor) { | 502 if (receiver is FastaAccessor) { |
502 return receiver.buildPropertyAccess(this, operatorOffset, isNullAware); | 503 return receiver.buildPropertyAccess(this, operatorOffset, isNullAware); |
503 } | 504 } |
504 if (receiver is PrefixBuilder) { | 505 if (receiver is PrefixBuilder) { |
505 PrefixBuilder prefix = receiver; | 506 PrefixBuilder prefix = receiver; |
506 if (isNullAware) { | 507 if (isNullAware) { |
507 helper.deprecated_addCompileTimeError( | 508 helper.deprecated_addCompileTimeError( |
508 offsetForToken(token), | 509 offsetForToken(token), |
509 "Library prefix '${prefix.name}' can't be used with null-aware " | 510 "Library prefix '${prefix.name}' can't be used with null-aware " |
510 "operator.\nTry removing '?'."); | 511 "operator.\nTry removing '?'."); |
511 } | 512 } |
512 receiver = helper.scopeLookup(prefix.exports, name.name, token, | 513 receiver = helper.scopeLookup(prefix.exports, name.name, token, |
513 isQualified: true, prefix: prefix); | 514 isQualified: true, prefix: prefix); |
514 return helper.finishSend(receiver, arguments, offsetForToken(token)); | 515 return helper.finishSend(receiver, arguments, offsetForToken(token)); |
515 } | 516 } |
516 return helper.buildMethodInvocation( | 517 return helper.buildMethodInvocation( |
517 helper.toValue(receiver), name, arguments, offsetForToken(token), | 518 helper.toValue(receiver), name, arguments, offsetForToken(token), |
518 isNullAware: isNullAware); | 519 isNullAware: isNullAware); |
519 } | 520 } |
520 | 521 |
521 Expression buildNullAwareAssignment( | 522 Expression buildNullAwareAssignment( |
522 Expression value, DartType type, int offset, | 523 Expression value, DartType type, int offset, |
523 {bool voidContext: false}) { | 524 {bool voidContext: false}) { |
524 return deprecated_internalProblem("Unhandled"); | 525 return unsupported("buildNullAwareAssignment", offset, uri); |
525 } | 526 } |
526 | 527 |
527 Expression buildCompoundAssignment(Name binaryOperator, Expression value, | 528 Expression buildCompoundAssignment(Name binaryOperator, Expression value, |
528 {int offset, | 529 {int offset, |
529 bool voidContext: false, | 530 bool voidContext: false, |
530 Procedure interfaceTarget, | 531 Procedure interfaceTarget, |
531 bool isPreIncDec: false}) { | 532 bool isPreIncDec: false}) { |
532 return deprecated_internalProblem("Unhandled"); | 533 return unsupported( |
534 "buildCompoundAssignment", offset ?? offsetForToken(token), uri); | |
533 } | 535 } |
534 | 536 |
535 Expression buildPrefixIncrement(Name binaryOperator, | 537 Expression buildPrefixIncrement(Name binaryOperator, |
536 {int offset, bool voidContext: false, Procedure interfaceTarget}) { | 538 {int offset, bool voidContext: false, Procedure interfaceTarget}) { |
537 return deprecated_internalProblem("Unhandled"); | 539 return unsupported( |
540 "buildPrefixIncrement", offset ?? offsetForToken(token), uri); | |
538 } | 541 } |
539 | 542 |
540 Expression buildPostfixIncrement(Name binaryOperator, | 543 Expression buildPostfixIncrement(Name binaryOperator, |
541 {int offset, bool voidContext: false, Procedure interfaceTarget}) { | 544 {int offset, bool voidContext: false, Procedure interfaceTarget}) { |
542 return deprecated_internalProblem("Unhandled"); | 545 return unsupported( |
546 "buildPostfixIncrement", offset ?? offsetForToken(token), uri); | |
543 } | 547 } |
544 | 548 |
545 Expression doInvocation(int offset, Arguments arguments) { | 549 Expression doInvocation(int offset, Arguments arguments) { |
546 return deprecated_internalProblem("Unhandled"); | 550 return unsupported("doInvocation", offset, uri); |
547 } | 551 } |
548 | 552 |
549 toString() { | 553 toString() { |
550 int offset = offsetForToken(token); | 554 int offset = offsetForToken(token); |
551 return "SendAccessor($offset, $name, $arguments)"; | 555 return "SendAccessor($offset, $name, $arguments)"; |
552 } | 556 } |
553 } | 557 } |
554 | 558 |
555 class IncompletePropertyAccessor extends IncompleteSend { | 559 class IncompletePropertyAccessor extends IncompleteSend { |
556 IncompletePropertyAccessor(BuilderHelper helper, Token token, Name name) | 560 IncompletePropertyAccessor(BuilderHelper helper, Token token, Name name) |
557 : super(helper, token, name); | 561 : super(helper, token, name); |
558 | 562 |
559 String get plainNameForRead => name.name; | 563 String get plainNameForRead => name.name; |
560 | 564 |
561 Expression buildSimpleRead() => deprecated_internalProblem("Unhandled"); | 565 Expression buildSimpleRead() { |
566 return unsupported("buildSimpleRead", offsetForToken(token), uri); | |
567 } | |
562 | 568 |
563 Expression buildAssignment(Expression value, {bool voidContext: false}) { | 569 Expression buildAssignment(Expression value, {bool voidContext: false}) { |
564 return deprecated_internalProblem("Unhandled"); | 570 return unsupported("buildAssignment", offsetForToken(token), uri); |
565 } | 571 } |
566 | 572 |
567 withReceiver(Object receiver, int operatorOffset, {bool isNullAware: false}) { | 573 withReceiver(Object receiver, int operatorOffset, {bool isNullAware: false}) { |
568 if (receiver is FastaAccessor) { | 574 if (receiver is FastaAccessor) { |
569 return receiver.buildPropertyAccess(this, operatorOffset, isNullAware); | 575 return receiver.buildPropertyAccess(this, operatorOffset, isNullAware); |
570 } | 576 } |
571 if (receiver is PrefixBuilder) { | 577 if (receiver is PrefixBuilder) { |
572 PrefixBuilder prefix = receiver; | 578 PrefixBuilder prefix = receiver; |
573 if (isNullAware) { | 579 if (isNullAware) { |
574 helper.deprecated_addCompileTimeError( | 580 helper.deprecated_addCompileTimeError( |
575 offsetForToken(token), | 581 offsetForToken(token), |
576 "Library prefix '${prefix.name}' can't be used with null-aware " | 582 "Library prefix '${prefix.name}' can't be used with null-aware " |
577 "operator.\nTry removing '?'."); | 583 "operator.\nTry removing '?'."); |
578 } | 584 } |
579 return helper.scopeLookup(prefix.exports, name.name, token, | 585 return helper.scopeLookup(prefix.exports, name.name, token, |
580 isQualified: true, prefix: prefix); | 586 isQualified: true, prefix: prefix); |
581 } | 587 } |
582 | 588 |
583 return PropertyAccessor.make( | 589 return PropertyAccessor.make( |
584 helper, token, helper.toValue(receiver), name, null, null, isNullAware); | 590 helper, token, helper.toValue(receiver), name, null, null, isNullAware); |
585 } | 591 } |
586 | 592 |
587 Expression buildNullAwareAssignment( | 593 Expression buildNullAwareAssignment( |
588 Expression value, DartType type, int offset, | 594 Expression value, DartType type, int offset, |
589 {bool voidContext: false}) { | 595 {bool voidContext: false}) { |
590 return deprecated_internalProblem("Unhandled"); | 596 return unsupported("buildNullAwareAssignment", offset, uri); |
591 } | 597 } |
592 | 598 |
593 Expression buildCompoundAssignment(Name binaryOperator, Expression value, | 599 Expression buildCompoundAssignment(Name binaryOperator, Expression value, |
594 {int offset, | 600 {int offset, |
595 bool voidContext: false, | 601 bool voidContext: false, |
596 Procedure interfaceTarget, | 602 Procedure interfaceTarget, |
597 bool isPreIncDec: false}) { | 603 bool isPreIncDec: false}) { |
598 return deprecated_internalProblem("Unhandled"); | 604 return unsupported( |
605 "buildCompoundAssignment", offset ?? offsetForToken(token), uri); | |
599 } | 606 } |
600 | 607 |
601 Expression buildPrefixIncrement(Name binaryOperator, | 608 Expression buildPrefixIncrement(Name binaryOperator, |
602 {int offset, bool voidContext: false, Procedure interfaceTarget}) { | 609 {int offset, bool voidContext: false, Procedure interfaceTarget}) { |
603 return deprecated_internalProblem("Unhandled"); | 610 return unsupported( |
611 "buildPrefixIncrement", offset ?? offsetForToken(token), uri); | |
604 } | 612 } |
605 | 613 |
606 Expression buildPostfixIncrement(Name binaryOperator, | 614 Expression buildPostfixIncrement(Name binaryOperator, |
607 {int offset, bool voidContext: false, Procedure interfaceTarget}) { | 615 {int offset, bool voidContext: false, Procedure interfaceTarget}) { |
608 return deprecated_internalProblem("Unhandled"); | 616 return unsupported( |
617 "buildPostfixIncrement", offset ?? offsetForToken(token), uri); | |
609 } | 618 } |
610 | 619 |
611 Expression doInvocation(int offset, Arguments arguments) { | 620 Expression doInvocation(int offset, Arguments arguments) { |
612 return deprecated_internalProblem("Unhandled"); | 621 return unsupported("doInvocation", offset, uri); |
613 } | 622 } |
614 | 623 |
615 toString() { | 624 toString() { |
616 int offset = offsetForToken(token); | 625 int offset = offsetForToken(token); |
617 return "IncompletePropertyAccessor($offset, $name)"; | 626 return "IncompletePropertyAccessor($offset, $name)"; |
618 } | 627 } |
619 } | 628 } |
620 | 629 |
621 class IndexAccessor extends kernel.IndexAccessor with FastaAccessor { | 630 class IndexAccessor extends kernel.IndexAccessor with FastaAccessor { |
622 final BuilderHelper helper; | 631 final BuilderHelper helper; |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
700 | 709 |
701 class StaticAccessor extends kernel.StaticAccessor with FastaAccessor { | 710 class StaticAccessor extends kernel.StaticAccessor with FastaAccessor { |
702 StaticAccessor( | 711 StaticAccessor( |
703 BuilderHelper helper, Token token, Member readTarget, Member writeTarget) | 712 BuilderHelper helper, Token token, Member readTarget, Member writeTarget) |
704 : super(helper, readTarget, writeTarget, token) { | 713 : super(helper, readTarget, writeTarget, token) { |
705 assert(readTarget != null || writeTarget != null); | 714 assert(readTarget != null || writeTarget != null); |
706 } | 715 } |
707 | 716 |
708 factory StaticAccessor.fromBuilder(BuilderHelper helper, Builder builder, | 717 factory StaticAccessor.fromBuilder(BuilderHelper helper, Builder builder, |
709 Token token, Builder builderSetter) { | 718 Token token, Builder builderSetter) { |
710 if (builder is deprecated_AccessErrorBuilder) { | 719 if (builder is AccessErrorBuilder) { |
711 deprecated_AccessErrorBuilder error = builder; | 720 AccessErrorBuilder error = builder; |
712 builder = error.builder; | 721 builder = error.builder; |
713 // We should only see an access error here if we've looked up a setter | 722 // We should only see an access error here if we've looked up a setter |
714 // when not explicitly looking for a setter. | 723 // when not explicitly looking for a setter. |
715 assert(builder.isSetter); | 724 assert(builder.isSetter); |
716 } else if (builder.target == null) { | 725 } else if (builder.target == null) { |
717 return deprecated_internalProblem("Unhandled: ${builder}"); | 726 return unhandled("${builder.runtimeType}", "StaticAccessor.fromBuilder", |
727 offsetForToken(token), helper.uri); | |
718 } | 728 } |
719 Member getter = builder.target.hasGetter ? builder.target : null; | 729 Member getter = builder.target.hasGetter ? builder.target : null; |
720 Member setter = builder.target.hasSetter ? builder.target : null; | 730 Member setter = builder.target.hasSetter ? builder.target : null; |
721 if (setter == null) { | 731 if (setter == null) { |
722 if (builderSetter?.target?.hasSetter ?? false) { | 732 if (builderSetter?.target?.hasSetter ?? false) { |
723 setter = builderSetter.target; | 733 setter = builderSetter.target; |
724 } | 734 } |
725 } | 735 } |
726 return new StaticAccessor(helper, token, getter, setter); | 736 return new StaticAccessor(helper, token, getter, setter); |
727 } | 737 } |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
769 if (getter == null || isFieldOrGetter(getter)) { | 779 if (getter == null || isFieldOrGetter(getter)) { |
770 return helper.buildMethodInvocation( | 780 return helper.buildMethodInvocation( |
771 buildSimpleRead(), callName, arguments, offset, | 781 buildSimpleRead(), callName, arguments, offset, |
772 // This isn't a constant expression, but we have checked if a | 782 // This isn't a constant expression, but we have checked if a |
773 // constant expression error should be emitted already. | 783 // constant expression error should be emitted already. |
774 isConstantExpression: true, | 784 isConstantExpression: true, |
775 isImplicitCall: true); | 785 isImplicitCall: true); |
776 } else { | 786 } else { |
777 // TODO(ahe): This could be something like "super.property(...)" where | 787 // TODO(ahe): This could be something like "super.property(...)" where |
778 // property is a setter. | 788 // property is a setter. |
779 return deprecated_internalProblem( | 789 return unhandled("${getter.runtimeType}", "doInvocation", offset, uri); |
780 "Unhandled invocation ${getter.runtimeType}.", | |
781 helper.uri, | |
782 offsetForToken(token)); | |
783 } | 790 } |
784 } | 791 } |
785 | 792 |
786 toString() => "SuperPropertyAccessor()"; | 793 toString() => "SuperPropertyAccessor()"; |
787 | 794 |
788 @override | 795 @override |
789 KernelComplexAssignment startComplexAssignment(Expression rhs) => | 796 KernelComplexAssignment startComplexAssignment(Expression rhs) => |
790 new KernelPropertyAssign(null, rhs, isSuper: true); | 797 new KernelPropertyAssign(null, rhs, isSuper: true); |
791 } | 798 } |
792 | 799 |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
868 with FastaAccessor { | 875 with FastaAccessor { |
869 final BuilderHelper helper; | 876 final BuilderHelper helper; |
870 | 877 |
871 NullAwarePropertyAccessor(this.helper, Token token, Expression receiver, | 878 NullAwarePropertyAccessor(this.helper, Token token, Expression receiver, |
872 Name name, Member getter, Member setter, DartType type) | 879 Name name, Member getter, Member setter, DartType type) |
873 : super(helper, receiver, name, getter, setter, type, token); | 880 : super(helper, receiver, name, getter, setter, type, token); |
874 | 881 |
875 String get plainNameForRead => name.name; | 882 String get plainNameForRead => name.name; |
876 | 883 |
877 Expression doInvocation(int offset, Arguments arguments) { | 884 Expression doInvocation(int offset, Arguments arguments) { |
878 return deprecated_internalProblem("Not implemented yet."); | 885 return unimplemented("doInvocation", offset, uri); |
879 } | 886 } |
880 | 887 |
881 toString() => "NullAwarePropertyAccessor()"; | 888 toString() => "NullAwarePropertyAccessor()"; |
882 | 889 |
883 @override | 890 @override |
884 KernelComplexAssignment startComplexAssignment(Expression rhs) => | 891 KernelComplexAssignment startComplexAssignment(Expression rhs) => |
885 new KernelPropertyAssign(receiverExpression, rhs); | 892 new KernelPropertyAssign(receiverExpression, rhs); |
886 } | 893 } |
887 | 894 |
888 int adjustForImplicitCall(String name, int offset) { | 895 int adjustForImplicitCall(String name, int offset) { |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
983 Arguments arguments = send.arguments; | 990 Arguments arguments = send.arguments; |
984 | 991 |
985 if (declaration is KernelClassBuilder) { | 992 if (declaration is KernelClassBuilder) { |
986 KernelClassBuilder declaration = this.declaration; | 993 KernelClassBuilder declaration = this.declaration; |
987 Builder builder = declaration.findStaticBuilder( | 994 Builder builder = declaration.findStaticBuilder( |
988 name.name, offsetForToken(token), uri, helper.library); | 995 name.name, offsetForToken(token), uri, helper.library); |
989 | 996 |
990 FastaAccessor accessor; | 997 FastaAccessor accessor; |
991 if (builder == null) { | 998 if (builder == null) { |
992 // If we find a setter, [builder] is an | 999 // If we find a setter, [builder] is an |
993 // [deprecated_AccessErrorBuilder], not null. | 1000 // [AccessErrorBuilder], not null. |
994 accessor = new UnresolvedAccessor(helper, name, token); | 1001 accessor = new UnresolvedAccessor(helper, name, token); |
995 } else { | 1002 } else { |
996 Builder setter; | 1003 Builder setter; |
997 if (builder.isSetter) { | 1004 if (builder.isSetter) { |
998 setter = builder; | 1005 setter = builder; |
999 } else if (builder.isGetter) { | 1006 } else if (builder.isGetter) { |
1000 setter = declaration.findStaticBuilder( | 1007 setter = declaration.findStaticBuilder( |
1001 name.name, offsetForToken(token), uri, helper.library, | 1008 name.name, offsetForToken(token), uri, helper.library, |
1002 isSetter: true); | 1009 isSetter: true); |
1003 } else if (builder.isField && !builder.isFinal) { | 1010 } else if (builder.isField && !builder.isFinal) { |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1049 offset ??= offsetForToken(this.token); | 1056 offset ??= offsetForToken(this.token); |
1050 return helper.throwNoSuchMethodError(new NullLiteral()..fileOffset = offset, | 1057 return helper.throwNoSuchMethodError(new NullLiteral()..fileOffset = offset, |
1051 plainNameForRead, arguments, offset, | 1058 plainNameForRead, arguments, offset, |
1052 isGetter: isGetter, isSetter: isSetter); | 1059 isGetter: isGetter, isSetter: isSetter); |
1053 } | 1060 } |
1054 } | 1061 } |
1055 | 1062 |
1056 bool isFieldOrGetter(Member member) { | 1063 bool isFieldOrGetter(Member member) { |
1057 return member is Field || (member is Procedure && member.isGetter); | 1064 return member is Field || (member is Procedure && member.isGetter); |
1058 } | 1065 } |
OLD | NEW |