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; | 8 show KernelArguments; |
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; |
(...skipping 19 matching lines...) Expand all Loading... |
30 PropertyAccessor, | 30 PropertyAccessor, |
31 ReadOnlyAccessor, | 31 ReadOnlyAccessor, |
32 StaticAccessor, | 32 StaticAccessor, |
33 SuperIndexAccessor, | 33 SuperIndexAccessor, |
34 SuperPropertyAccessor, | 34 SuperPropertyAccessor, |
35 ThisIndexAccessor, | 35 ThisIndexAccessor, |
36 ThisPropertyAccessor, | 36 ThisPropertyAccessor, |
37 VariableAccessor; | 37 VariableAccessor; |
38 | 38 |
39 import 'kernel_builder.dart' | 39 import 'kernel_builder.dart' |
40 show Builder, KernelClassBuilder, PrefixBuilder, TypeDeclarationBuilder; | 40 show |
| 41 Builder, |
| 42 KernelClassBuilder, |
| 43 LibraryBuilder, |
| 44 PrefixBuilder, |
| 45 TypeDeclarationBuilder; |
41 | 46 |
42 import '../names.dart' show callName, lengthName; | 47 import '../names.dart' show callName, lengthName; |
43 | 48 |
44 abstract class BuilderHelper { | 49 abstract class BuilderHelper { |
| 50 LibraryBuilder get library; |
| 51 |
45 Uri get uri; | 52 Uri get uri; |
46 | 53 |
47 TypePromoter get typePromoter; | 54 TypePromoter get typePromoter; |
48 | 55 |
49 int get functionNestingLevel; | 56 int get functionNestingLevel; |
50 | 57 |
51 bool get constantExpressionRequired; | 58 bool get constantExpressionRequired; |
52 | 59 |
53 Constructor lookupConstructor(Name name, {bool isSuper}); | 60 Constructor lookupConstructor(Name name, {bool isSuper}); |
54 | 61 |
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
440 return receiver.buildPropertyAccess(this, isNullAware); | 447 return receiver.buildPropertyAccess(this, isNullAware); |
441 } | 448 } |
442 if (receiver is PrefixBuilder) { | 449 if (receiver is PrefixBuilder) { |
443 PrefixBuilder prefix = receiver; | 450 PrefixBuilder prefix = receiver; |
444 receiver = helper.scopeLookup(prefix.exports, name.name, token, | 451 receiver = helper.scopeLookup(prefix.exports, name.name, token, |
445 isQualified: true, prefix: prefix); | 452 isQualified: true, prefix: prefix); |
446 return helper.finishSend(receiver, arguments, offsetForToken(token)); | 453 return helper.finishSend(receiver, arguments, offsetForToken(token)); |
447 } | 454 } |
448 Expression result; | 455 Expression result; |
449 if (receiver is KernelClassBuilder) { | 456 if (receiver is KernelClassBuilder) { |
450 Builder builder = | 457 Builder builder = receiver.findStaticBuilder( |
451 receiver.findStaticBuilder(name.name, offsetForToken(token), uri); | 458 name.name, offsetForToken(token), uri, helper.library); |
452 if (builder == null || builder is AccessErrorBuilder) { | 459 if (builder == null || builder is AccessErrorBuilder) { |
453 return buildThrowNoSuchMethodError(arguments); | 460 return buildThrowNoSuchMethodError(arguments); |
454 } | 461 } |
455 if (builder.hasProblem) { | 462 if (builder.hasProblem) { |
456 result = helper.buildProblemExpression(builder, offsetForToken(token)); | 463 result = helper.buildProblemExpression(builder, offsetForToken(token)); |
457 } else { | 464 } else { |
458 Member target = builder.target; | 465 Member target = builder.target; |
459 if (target != null) { | 466 if (target != null) { |
460 if (target is Field) { | 467 if (target is Field) { |
461 result = helper.buildMethodInvocation( | 468 result = helper.buildMethodInvocation( |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
532 } | 539 } |
533 if (receiver is FastaAccessor) { | 540 if (receiver is FastaAccessor) { |
534 return receiver.buildPropertyAccess(this, isNullAware); | 541 return receiver.buildPropertyAccess(this, isNullAware); |
535 } | 542 } |
536 if (receiver is PrefixBuilder) { | 543 if (receiver is PrefixBuilder) { |
537 PrefixBuilder prefix = receiver; | 544 PrefixBuilder prefix = receiver; |
538 return helper.scopeLookup(prefix.exports, name.name, token, | 545 return helper.scopeLookup(prefix.exports, name.name, token, |
539 isQualified: true, prefix: prefix); | 546 isQualified: true, prefix: prefix); |
540 } | 547 } |
541 if (receiver is KernelClassBuilder) { | 548 if (receiver is KernelClassBuilder) { |
542 Builder builder = | 549 Builder builder = receiver.findStaticBuilder( |
543 receiver.findStaticBuilder(name.name, offsetForToken(token), uri); | 550 name.name, offsetForToken(token), uri, helper.library); |
544 if (builder == null) { | 551 if (builder == null) { |
545 // If we find a setter, [builder] is an [AccessErrorBuilder], not null. | 552 // If we find a setter, [builder] is an [AccessErrorBuilder], not null. |
546 return buildThrowNoSuchMethodError(new Arguments.empty(), | 553 return buildThrowNoSuchMethodError(new Arguments.empty(), |
547 isGetter: true); | 554 isGetter: true); |
548 } | 555 } |
549 Builder setter; | 556 Builder setter; |
550 if (builder.isSetter) { | 557 if (builder.isSetter) { |
551 setter = builder; | 558 setter = builder; |
552 } else if (builder.isGetter) { | 559 } else if (builder.isGetter) { |
553 setter = receiver.findStaticBuilder( | 560 setter = receiver.findStaticBuilder( |
554 name.name, offsetForToken(token), uri, | 561 name.name, offsetForToken(token), uri, helper.library, |
555 isSetter: true); | 562 isSetter: true); |
556 } else if (builder.isField && !builder.isFinal) { | 563 } else if (builder.isField && !builder.isFinal) { |
557 setter = builder; | 564 setter = builder; |
558 } | 565 } |
559 return new StaticAccessor.fromBuilder(helper, builder, token, setter); | 566 return new StaticAccessor.fromBuilder(helper, builder, token, setter); |
560 } | 567 } |
561 return PropertyAccessor.make( | 568 return PropertyAccessor.make( |
562 helper, token, helper.toValue(receiver), name, null, null, isNullAware); | 569 helper, token, helper.toValue(receiver), name, null, null, isNullAware); |
563 } | 570 } |
564 | 571 |
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
883 {bool isGetter: false, bool isSetter: false, int offset}) { | 890 {bool isGetter: false, bool isSetter: false, int offset}) { |
884 return helper.throwNoSuchMethodError( | 891 return helper.throwNoSuchMethodError( |
885 plainNameForRead, arguments, offset ?? offsetForToken(this.token), | 892 plainNameForRead, arguments, offset ?? offsetForToken(this.token), |
886 isGetter: isGetter, isSetter: isSetter); | 893 isGetter: isGetter, isSetter: isSetter); |
887 } | 894 } |
888 } | 895 } |
889 | 896 |
890 bool isFieldOrGetter(Member member) { | 897 bool isFieldOrGetter(Member member) { |
891 return member is Field || (member is Procedure && member.isGetter); | 898 return member is Field || (member is Procedure && member.isGetter); |
892 } | 899 } |
OLD | NEW |