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:front_end/src/fasta/kernel/kernel_shadow_ast.dart' | 7 import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart' |
8 show | 8 show |
9 KernelArguments, | 9 KernelArguments, |
10 KernelComplexAssignment, | 10 KernelComplexAssignment, |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 [int charOffset = -1]); | 95 [int charOffset = -1]); |
96 | 96 |
97 Expression buildStaticInvocation(Procedure target, Arguments arguments); | 97 Expression buildStaticInvocation(Procedure target, Arguments arguments); |
98 | 98 |
99 Expression buildProblemExpression(ProblemBuilder builder, int offset); | 99 Expression buildProblemExpression(ProblemBuilder builder, int offset); |
100 | 100 |
101 Expression throwNoSuchMethodError( | 101 Expression throwNoSuchMethodError( |
102 Expression receiver, String name, Arguments arguments, int offset, | 102 Expression receiver, String name, Arguments arguments, int offset, |
103 {bool isSuper, bool isGetter, bool isSetter, bool isStatic}); | 103 {bool isSuper, bool isGetter, bool isSetter, bool isStatic}); |
104 | 104 |
105 Expression invokeSuperNoSuchMethod( | |
106 String name, Arguments arguments, int charOffset, | |
107 {bool isGetter, bool isSetter}); | |
108 | |
109 bool checkArguments(FunctionNode function, Arguments arguments, | 105 bool checkArguments(FunctionNode function, Arguments arguments, |
110 List<TypeParameter> typeParameters); | 106 List<TypeParameter> typeParameters); |
111 | 107 |
112 StaticGet makeStaticGet(Member readTarget, Token token); | 108 StaticGet makeStaticGet(Member readTarget, Token token); |
113 | 109 |
114 dynamic addCompileTimeError(int charOffset, String message, {bool silent}); | 110 dynamic addCompileTimeError(int charOffset, String message, {bool silent}); |
115 | 111 |
116 bool isIdentical(Member member); | 112 bool isIdentical(Member member); |
117 | 113 |
118 Expression buildMethodInvocation( | 114 Expression buildMethodInvocation( |
119 Expression receiver, Name name, Arguments arguments, int offset, | 115 Expression receiver, Name name, Arguments arguments, int offset, |
120 {bool isConstantExpression, bool isNullAware, bool isImplicitCall}); | 116 {bool isConstantExpression, bool isNullAware, bool isImplicitCall}); |
121 | 117 |
122 DartType validatedTypeVariableUse( | 118 DartType validatedTypeVariableUse( |
123 TypeParameterType type, int offset, bool nonInstanceAccessIsError); | 119 TypeParameterType type, int offset, bool nonInstanceAccessIsError); |
124 | 120 |
125 void warning(String message, [int charOffset]); | 121 void warning(String message, [int charOffset]); |
| 122 |
| 123 void warnUnresolvedSuperGet(Name name, int charOffset); |
| 124 |
| 125 void warnUnresolvedSuperSet(Name name, int charOffset); |
| 126 |
| 127 void warnUnresolvedSuperMethod(Name name, int charOffset); |
126 } | 128 } |
127 | 129 |
128 abstract class FastaAccessor implements Accessor { | 130 abstract class FastaAccessor implements Accessor { |
129 BuilderHelper get helper; | 131 BuilderHelper get helper; |
130 | 132 |
131 String get plainNameForRead; | 133 String get plainNameForRead; |
132 | 134 |
133 Uri get uri => helper.uri; | 135 Uri get uri => helper.uri; |
134 | 136 |
135 String get plainNameForWrite => plainNameForRead; | 137 String get plainNameForWrite => plainNameForRead; |
(...skipping 618 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
754 helper.addCompileTimeError(offset, "Not a constant expression."); | 756 helper.addCompileTimeError(offset, "Not a constant expression."); |
755 } | 757 } |
756 if (getter == null || isFieldOrGetter(getter)) { | 758 if (getter == null || isFieldOrGetter(getter)) { |
757 return helper.buildMethodInvocation( | 759 return helper.buildMethodInvocation( |
758 buildSimpleRead(), callName, arguments, offset, | 760 buildSimpleRead(), callName, arguments, offset, |
759 // This isn't a constant expression, but we have checked if a | 761 // This isn't a constant expression, but we have checked if a |
760 // constant expression error should be emitted already. | 762 // constant expression error should be emitted already. |
761 isConstantExpression: true, | 763 isConstantExpression: true, |
762 isImplicitCall: true); | 764 isImplicitCall: true); |
763 } else { | 765 } else { |
764 return new DirectMethodInvocation( | 766 // TODO(ahe): This could be something like "super.property(...)" where |
765 new KernelThisExpression(), getter, arguments) | 767 // property is a setter. |
766 ..fileOffset = offset; | 768 return internalError("Unhandled invocation ${getter.runtimeType}.", |
| 769 helper.uri, offsetForToken(token)); |
767 } | 770 } |
768 } | 771 } |
769 | 772 |
770 Expression makeInvalidRead() { | |
771 int offset = offsetForToken(token); | |
772 return helper.invokeSuperNoSuchMethod( | |
773 plainNameForRead, new Arguments.empty()..fileOffset = offset, offset, | |
774 isGetter: true); | |
775 } | |
776 | |
777 Expression makeInvalidWrite(Expression value) { | |
778 return helper.invokeSuperNoSuchMethod( | |
779 plainNameForRead, | |
780 new Arguments(<Expression>[value])..fileOffset = value.fileOffset, | |
781 offsetForToken(token), | |
782 isSetter: true); | |
783 } | |
784 | |
785 toString() => "SuperPropertyAccessor()"; | 773 toString() => "SuperPropertyAccessor()"; |
786 | 774 |
787 @override | 775 @override |
788 KernelComplexAssignment startComplexAssignment(Expression rhs) => | 776 KernelComplexAssignment startComplexAssignment(Expression rhs) => |
789 new KernelPropertyAssign(null, rhs, isSuper: true); | 777 new KernelPropertyAssign(null, rhs, isSuper: true); |
790 } | 778 } |
791 | 779 |
792 class ThisIndexAccessor extends kernel.ThisIndexAccessor with FastaAccessor { | 780 class ThisIndexAccessor extends kernel.ThisIndexAccessor with FastaAccessor { |
793 ThisIndexAccessor(BuilderHelper helper, Token token, Expression index, | 781 ThisIndexAccessor(BuilderHelper helper, Token token, Expression index, |
794 Procedure getter, Procedure setter) | 782 Procedure getter, Procedure setter) |
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1047 offset ??= offsetForToken(this.token); | 1035 offset ??= offsetForToken(this.token); |
1048 return helper.throwNoSuchMethodError(new NullLiteral()..fileOffset = offset, | 1036 return helper.throwNoSuchMethodError(new NullLiteral()..fileOffset = offset, |
1049 plainNameForRead, arguments, offset, | 1037 plainNameForRead, arguments, offset, |
1050 isGetter: isGetter, isSetter: isSetter); | 1038 isGetter: isGetter, isSetter: isSetter); |
1051 } | 1039 } |
1052 } | 1040 } |
1053 | 1041 |
1054 bool isFieldOrGetter(Member member) { | 1042 bool isFieldOrGetter(Member member) { |
1055 return member is Field || (member is Procedure && member.isGetter); | 1043 return member is Field || (member is Procedure && member.isGetter); |
1056 } | 1044 } |
OLD | NEW |