Chromium Code Reviews| 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 |