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 KernelArguments, KernelThisExpression; | 8 show KernelArguments, KernelComplexAssignment, KernelThisExpression; |
9 | 9 |
10 import 'package:front_end/src/fasta/kernel/utils.dart' show offsetForToken; | 10 import 'package:front_end/src/fasta/kernel/utils.dart' show offsetForToken; |
11 | 11 |
12 import 'package:front_end/src/scanner/token.dart' show Token; | 12 import 'package:front_end/src/scanner/token.dart' show Token; |
13 | 13 |
14 import 'frontend_accessors.dart' show Accessor; | 14 import 'frontend_accessors.dart' show Accessor; |
15 | 15 |
16 import 'package:front_end/src/fasta/type_inference/type_promotion.dart' | 16 import 'package:front_end/src/fasta/type_inference/type_promotion.dart' |
17 show TypePromoter; | 17 show TypePromoter; |
18 | 18 |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 int offset}) { | 183 int offset}) { |
184 return helper.throwNoSuchMethodError(receiver, name ?? plainNameForWrite, | 184 return helper.throwNoSuchMethodError(receiver, name ?? plainNameForWrite, |
185 arguments, offset ?? offsetForToken(this.token), | 185 arguments, offset ?? offsetForToken(this.token), |
186 isGetter: isGetter, | 186 isGetter: isGetter, |
187 isSetter: isSetter, | 187 isSetter: isSetter, |
188 isSuper: isSuper, | 188 isSuper: isSuper, |
189 isStatic: isStatic); | 189 isStatic: isStatic); |
190 } | 190 } |
191 | 191 |
192 bool get isThisPropertyAccessor => false; | 192 bool get isThisPropertyAccessor => false; |
| 193 |
| 194 @override |
| 195 KernelComplexAssignment startComplexAssignment(Expression rhs) => null; |
193 } | 196 } |
194 | 197 |
195 abstract class ErrorAccessor implements FastaAccessor { | 198 abstract class ErrorAccessor implements FastaAccessor { |
196 /// Pass [arguments] that must be evaluated before throwing an error. At | 199 /// Pass [arguments] that must be evaluated before throwing an error. At |
197 /// most one of [isGetter] and [isSetter] should be true and they're passed | 200 /// most one of [isGetter] and [isSetter] should be true and they're passed |
198 /// to [BuilderHelper.buildThrowNoSuchMethodError] if it is used. | 201 /// to [BuilderHelper.buildThrowNoSuchMethodError] if it is used. |
199 Expression buildError(Arguments arguments, | 202 Expression buildError(Arguments arguments, |
200 {bool isGetter: false, bool isSetter: false, int offset}); | 203 {bool isGetter: false, bool isSetter: false, int offset}); |
201 | 204 |
202 Name get name => internalError("Unsupported operation."); | 205 Name get name => internalError("Unsupported operation."); |
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
594 Expression index, | 597 Expression index, |
595 Procedure getter, | 598 Procedure getter, |
596 Procedure setter) { | 599 Procedure setter) { |
597 if (receiver is ThisExpression) { | 600 if (receiver is ThisExpression) { |
598 return new ThisIndexAccessor(helper, token, index, getter, setter); | 601 return new ThisIndexAccessor(helper, token, index, getter, setter); |
599 } else { | 602 } else { |
600 return new IndexAccessor.internal( | 603 return new IndexAccessor.internal( |
601 helper, token, receiver, index, getter, setter); | 604 helper, token, receiver, index, getter, setter); |
602 } | 605 } |
603 } | 606 } |
| 607 |
| 608 @override |
| 609 KernelComplexAssignment startComplexAssignment(Expression rhs) => |
| 610 new KernelComplexAssignment() |
| 611 ..receiver = receiver |
| 612 ..index = index |
| 613 ..rhs = rhs; |
604 } | 614 } |
605 | 615 |
606 class PropertyAccessor extends kernel.PropertyAccessor with FastaAccessor { | 616 class PropertyAccessor extends kernel.PropertyAccessor with FastaAccessor { |
607 final BuilderHelper helper; | 617 final BuilderHelper helper; |
608 | 618 |
609 PropertyAccessor.internal(this.helper, Token token, Expression receiver, | 619 PropertyAccessor.internal(this.helper, Token token, Expression receiver, |
610 Name name, Member getter, Member setter) | 620 Name name, Member getter, Member setter) |
611 : super.internal(helper, receiver, name, getter, setter, token); | 621 : super.internal(helper, receiver, name, getter, setter, token); |
612 | 622 |
613 String get plainNameForRead => name.name; | 623 String get plainNameForRead => name.name; |
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
971 offset ??= offsetForToken(this.token); | 981 offset ??= offsetForToken(this.token); |
972 return helper.throwNoSuchMethodError(new NullLiteral()..fileOffset = offset, | 982 return helper.throwNoSuchMethodError(new NullLiteral()..fileOffset = offset, |
973 plainNameForRead, arguments, offset, | 983 plainNameForRead, arguments, offset, |
974 isGetter: isGetter, isSetter: isSetter); | 984 isGetter: isGetter, isSetter: isSetter); |
975 } | 985 } |
976 } | 986 } |
977 | 987 |
978 bool isFieldOrGetter(Member member) { | 988 bool isFieldOrGetter(Member member) { |
979 return member is Field || (member is Procedure && member.isGetter); | 989 return member is Field || (member is Procedure && member.isGetter); |
980 } | 990 } |
OLD | NEW |