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, KernelComplexAssignment, KernelThisExpression; | 8 show |
| 9 KernelArguments, |
| 10 KernelComplexAssignment, |
| 11 KernelIndexAssign, |
| 12 KernelThisExpression, |
| 13 KernelVariableAssignment; |
9 | 14 |
10 import 'package:front_end/src/fasta/kernel/utils.dart' show offsetForToken; | 15 import 'package:front_end/src/fasta/kernel/utils.dart' show offsetForToken; |
11 | 16 |
12 import 'package:front_end/src/scanner/token.dart' show Token; | 17 import 'package:front_end/src/scanner/token.dart' show Token; |
13 | 18 |
14 import 'frontend_accessors.dart' show Accessor; | 19 import 'frontend_accessors.dart' show Accessor; |
15 | 20 |
16 import 'package:front_end/src/fasta/type_inference/type_promotion.dart' | 21 import 'package:front_end/src/fasta/type_inference/type_promotion.dart' |
17 show TypePromoter; | 22 show TypePromoter; |
18 | 23 |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
239 | 244 |
240 @override | 245 @override |
241 Expression buildAssignment(Expression value, {bool voidContext: false}) { | 246 Expression buildAssignment(Expression value, {bool voidContext: false}) { |
242 return buildError(new KernelArguments(<Expression>[value]), isSetter: true); | 247 return buildError(new KernelArguments(<Expression>[value]), isSetter: true); |
243 } | 248 } |
244 | 249 |
245 @override | 250 @override |
246 Expression buildCompoundAssignment(Name binaryOperator, Expression value, | 251 Expression buildCompoundAssignment(Name binaryOperator, Expression value, |
247 {int offset: TreeNode.noOffset, | 252 {int offset: TreeNode.noOffset, |
248 bool voidContext: false, | 253 bool voidContext: false, |
249 Procedure interfaceTarget}) { | 254 Procedure interfaceTarget, |
| 255 bool isPreIncDec: false}) { |
250 return buildError(new KernelArguments(<Expression>[value]), isGetter: true); | 256 return buildError(new KernelArguments(<Expression>[value]), isGetter: true); |
251 } | 257 } |
252 | 258 |
253 @override | 259 @override |
254 Expression buildPrefixIncrement(Name binaryOperator, | 260 Expression buildPrefixIncrement(Name binaryOperator, |
255 {int offset: TreeNode.noOffset, | 261 {int offset: TreeNode.noOffset, |
256 bool voidContext: false, | 262 bool voidContext: false, |
257 Procedure interfaceTarget}) { | 263 Procedure interfaceTarget}) { |
258 return buildError(new KernelArguments(<Expression>[new IntLiteral(1)]), | 264 return buildError(new KernelArguments(<Expression>[new IntLiteral(1)]), |
259 isGetter: true); | 265 isGetter: true); |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
382 } | 388 } |
383 | 389 |
384 Expression buildNullAwareAssignment(Expression value, DartType type, | 390 Expression buildNullAwareAssignment(Expression value, DartType type, |
385 {bool voidContext: false}) { | 391 {bool voidContext: false}) { |
386 return buildAssignmentError(); | 392 return buildAssignmentError(); |
387 } | 393 } |
388 | 394 |
389 Expression buildCompoundAssignment(Name binaryOperator, Expression value, | 395 Expression buildCompoundAssignment(Name binaryOperator, Expression value, |
390 {int offset: TreeNode.noOffset, | 396 {int offset: TreeNode.noOffset, |
391 bool voidContext: false, | 397 bool voidContext: false, |
392 Procedure interfaceTarget}) { | 398 Procedure interfaceTarget, |
| 399 bool isPreIncDec: false}) { |
393 return buildAssignmentError(); | 400 return buildAssignmentError(); |
394 } | 401 } |
395 | 402 |
396 Expression buildPrefixIncrement(Name binaryOperator, | 403 Expression buildPrefixIncrement(Name binaryOperator, |
397 {int offset: TreeNode.noOffset, | 404 {int offset: TreeNode.noOffset, |
398 bool voidContext: false, | 405 bool voidContext: false, |
399 Procedure interfaceTarget}) { | 406 Procedure interfaceTarget}) { |
400 return buildAssignmentError(); | 407 return buildAssignmentError(); |
401 } | 408 } |
402 | 409 |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
484 helper.toValue(receiver), name, arguments, offsetForToken(token), | 491 helper.toValue(receiver), name, arguments, offsetForToken(token), |
485 isNullAware: isNullAware); | 492 isNullAware: isNullAware); |
486 } | 493 } |
487 | 494 |
488 Expression buildNullAwareAssignment(Expression value, DartType type, | 495 Expression buildNullAwareAssignment(Expression value, DartType type, |
489 {bool voidContext: false}) { | 496 {bool voidContext: false}) { |
490 return internalError("Unhandled"); | 497 return internalError("Unhandled"); |
491 } | 498 } |
492 | 499 |
493 Expression buildCompoundAssignment(Name binaryOperator, Expression value, | 500 Expression buildCompoundAssignment(Name binaryOperator, Expression value, |
494 {int offset, bool voidContext: false, Procedure interfaceTarget}) { | 501 {int offset, |
| 502 bool voidContext: false, |
| 503 Procedure interfaceTarget, |
| 504 bool isPreIncDec: false}) { |
495 return internalError("Unhandled"); | 505 return internalError("Unhandled"); |
496 } | 506 } |
497 | 507 |
498 Expression buildPrefixIncrement(Name binaryOperator, | 508 Expression buildPrefixIncrement(Name binaryOperator, |
499 {int offset, bool voidContext: false, Procedure interfaceTarget}) { | 509 {int offset, bool voidContext: false, Procedure interfaceTarget}) { |
500 return internalError("Unhandled"); | 510 return internalError("Unhandled"); |
501 } | 511 } |
502 | 512 |
503 Expression buildPostfixIncrement(Name binaryOperator, | 513 Expression buildPostfixIncrement(Name binaryOperator, |
504 {int offset, bool voidContext: false, Procedure interfaceTarget}) { | 514 {int offset, bool voidContext: false, Procedure interfaceTarget}) { |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
540 return PropertyAccessor.make( | 550 return PropertyAccessor.make( |
541 helper, token, helper.toValue(receiver), name, null, null, isNullAware); | 551 helper, token, helper.toValue(receiver), name, null, null, isNullAware); |
542 } | 552 } |
543 | 553 |
544 Expression buildNullAwareAssignment(Expression value, DartType type, | 554 Expression buildNullAwareAssignment(Expression value, DartType type, |
545 {bool voidContext: false}) { | 555 {bool voidContext: false}) { |
546 return internalError("Unhandled"); | 556 return internalError("Unhandled"); |
547 } | 557 } |
548 | 558 |
549 Expression buildCompoundAssignment(Name binaryOperator, Expression value, | 559 Expression buildCompoundAssignment(Name binaryOperator, Expression value, |
550 {int offset, bool voidContext: false, Procedure interfaceTarget}) { | 560 {int offset, |
| 561 bool voidContext: false, |
| 562 Procedure interfaceTarget, |
| 563 bool isPreIncDec: false}) { |
551 return internalError("Unhandled"); | 564 return internalError("Unhandled"); |
552 } | 565 } |
553 | 566 |
554 Expression buildPrefixIncrement(Name binaryOperator, | 567 Expression buildPrefixIncrement(Name binaryOperator, |
555 {int offset, bool voidContext: false, Procedure interfaceTarget}) { | 568 {int offset, bool voidContext: false, Procedure interfaceTarget}) { |
556 return internalError("Unhandled"); | 569 return internalError("Unhandled"); |
557 } | 570 } |
558 | 571 |
559 Expression buildPostfixIncrement(Name binaryOperator, | 572 Expression buildPostfixIncrement(Name binaryOperator, |
560 {int offset, bool voidContext: false, Procedure interfaceTarget}) { | 573 {int offset, bool voidContext: false, Procedure interfaceTarget}) { |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
600 if (receiver is ThisExpression) { | 613 if (receiver is ThisExpression) { |
601 return new ThisIndexAccessor(helper, token, index, getter, setter); | 614 return new ThisIndexAccessor(helper, token, index, getter, setter); |
602 } else { | 615 } else { |
603 return new IndexAccessor.internal( | 616 return new IndexAccessor.internal( |
604 helper, token, receiver, index, getter, setter); | 617 helper, token, receiver, index, getter, setter); |
605 } | 618 } |
606 } | 619 } |
607 | 620 |
608 @override | 621 @override |
609 KernelComplexAssignment startComplexAssignment(Expression rhs) => | 622 KernelComplexAssignment startComplexAssignment(Expression rhs) => |
610 new KernelComplexAssignment() | 623 new KernelIndexAssign(receiver, index, rhs); |
611 ..receiver = receiver | |
612 ..index = index | |
613 ..rhs = rhs; | |
614 } | 624 } |
615 | 625 |
616 class PropertyAccessor extends kernel.PropertyAccessor with FastaAccessor { | 626 class PropertyAccessor extends kernel.PropertyAccessor with FastaAccessor { |
617 final BuilderHelper helper; | 627 final BuilderHelper helper; |
618 | 628 |
619 PropertyAccessor.internal(this.helper, Token token, Expression receiver, | 629 PropertyAccessor.internal(this.helper, Token token, Expression receiver, |
620 Name name, Member getter, Member setter) | 630 Name name, Member getter, Member setter) |
621 : super.internal(helper, receiver, name, getter, setter, token); | 631 : super.internal(helper, receiver, name, getter, setter, token); |
622 | 632 |
623 String get plainNameForRead => name.name; | 633 String get plainNameForRead => name.name; |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
836 | 846 |
837 String get plainNameForRead => variable.name; | 847 String get plainNameForRead => variable.name; |
838 | 848 |
839 Expression doInvocation(int offset, Arguments arguments) { | 849 Expression doInvocation(int offset, Arguments arguments) { |
840 return helper.buildMethodInvocation(buildSimpleRead(), callName, arguments, | 850 return helper.buildMethodInvocation(buildSimpleRead(), callName, arguments, |
841 adjustForImplicitCall(plainNameForRead, offset), | 851 adjustForImplicitCall(plainNameForRead, offset), |
842 isImplicitCall: true); | 852 isImplicitCall: true); |
843 } | 853 } |
844 | 854 |
845 toString() => "VariableAccessor()"; | 855 toString() => "VariableAccessor()"; |
| 856 |
| 857 @override |
| 858 KernelComplexAssignment startComplexAssignment(Expression rhs) => |
| 859 new KernelVariableAssignment(rhs); |
846 } | 860 } |
847 | 861 |
848 class ReadOnlyAccessor extends kernel.ReadOnlyAccessor with FastaAccessor { | 862 class ReadOnlyAccessor extends kernel.ReadOnlyAccessor with FastaAccessor { |
849 final String plainNameForRead; | 863 final String plainNameForRead; |
850 | 864 |
851 ReadOnlyAccessor(BuilderHelper helper, Expression expression, | 865 ReadOnlyAccessor(BuilderHelper helper, Expression expression, |
852 this.plainNameForRead, Token token) | 866 this.plainNameForRead, Token token) |
853 : super(helper, expression, token); | 867 : super(helper, expression, token); |
854 | 868 |
855 Expression doInvocation(int offset, Arguments arguments) { | 869 Expression doInvocation(int offset, Arguments arguments) { |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
981 offset ??= offsetForToken(this.token); | 995 offset ??= offsetForToken(this.token); |
982 return helper.throwNoSuchMethodError(new NullLiteral()..fileOffset = offset, | 996 return helper.throwNoSuchMethodError(new NullLiteral()..fileOffset = offset, |
983 plainNameForRead, arguments, offset, | 997 plainNameForRead, arguments, offset, |
984 isGetter: isGetter, isSetter: isSetter); | 998 isGetter: isGetter, isSetter: isSetter); |
985 } | 999 } |
986 } | 1000 } |
987 | 1001 |
988 bool isFieldOrGetter(Member member) { | 1002 bool isFieldOrGetter(Member member) { |
989 return member is Field || (member is Procedure && member.isGetter); | 1003 return member is Field || (member is Procedure && member.isGetter); |
990 } | 1004 } |
OLD | NEW |