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 export 'package:kernel/frontend/accessors.dart' show wrapInvalid; | 7 export 'package:kernel/frontend/accessors.dart' show wrapInvalid; |
8 | 8 |
9 import 'package:kernel/frontend/accessors.dart' | 9 import 'package:kernel/frontend/accessors.dart' |
10 show Accessor, buildIsNull, makeLet; | 10 show Accessor, buildIsNull, makeLet; |
11 | 11 |
12 import 'package:kernel/ast.dart'; | 12 import 'package:kernel/ast.dart'; |
13 | 13 |
14 import '../errors.dart' show internalError; | 14 import '../errors.dart' show internalError; |
15 | 15 |
16 import '../scope.dart' show AccessErrorBuilder, ProblemBuilder; | 16 import '../scope.dart' show AccessErrorBuilder, ProblemBuilder, Scope; |
17 | 17 |
18 import 'package:kernel/frontend/accessors.dart' as kernel | 18 import 'package:kernel/frontend/accessors.dart' as kernel |
19 show | 19 show |
20 IndexAccessor, | 20 IndexAccessor, |
21 NullAwarePropertyAccessor, | 21 NullAwarePropertyAccessor, |
22 PropertyAccessor, | 22 PropertyAccessor, |
23 ReadOnlyAccessor, | 23 ReadOnlyAccessor, |
24 StaticAccessor, | 24 StaticAccessor, |
25 SuperIndexAccessor, | 25 SuperIndexAccessor, |
26 SuperPropertyAccessor, | 26 SuperPropertyAccessor, |
(...skipping 10 matching lines...) Expand all Loading... |
37 Uri get uri; | 37 Uri get uri; |
38 | 38 |
39 Constructor lookupConstructor(Name name, {bool isSuper}); | 39 Constructor lookupConstructor(Name name, {bool isSuper}); |
40 | 40 |
41 Expression toSuperMethodInvocation(MethodInvocation node); | 41 Expression toSuperMethodInvocation(MethodInvocation node); |
42 | 42 |
43 Expression toValue(node); | 43 Expression toValue(node); |
44 | 44 |
45 Member lookupSuperMember(Name name, {bool isSetter: false}); | 45 Member lookupSuperMember(Name name, {bool isSetter: false}); |
46 | 46 |
47 builderToFirstExpression(Builder builder, String name, int offset); | 47 scopeLookup(Scope scope, String name, int offset, {bool isQualified: false}); |
48 | 48 |
49 finishSend(Object receiver, Arguments arguments, int offset); | 49 finishSend(Object receiver, Arguments arguments, int offset); |
50 | 50 |
51 Expression buildCompileTimeError(error, [int offset]); | 51 Expression buildCompileTimeError(error, [int offset]); |
52 | 52 |
53 Initializer buildCompileTimeErrorIntializer(error, [int offset]); | 53 Initializer buildCompileTimeErrorIntializer(error, [int offset]); |
54 | 54 |
55 Expression buildStaticInvocation(Procedure target, Arguments arguments); | 55 Expression buildStaticInvocation(Procedure target, Arguments arguments); |
56 | 56 |
57 Expression buildProblemExpression(ProblemBuilder builder, int offset); | 57 Expression buildProblemExpression(ProblemBuilder builder, int offset); |
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 if (receiver is TypeDeclarationBuilder) { | 425 if (receiver is TypeDeclarationBuilder) { |
426 /// `SomeType?.toString` is the same as `SomeType.toString`, not | 426 /// `SomeType?.toString` is the same as `SomeType.toString`, not |
427 /// `(SomeType).toString`. | 427 /// `(SomeType).toString`. |
428 isNullAware = false; | 428 isNullAware = false; |
429 } | 429 } |
430 if (receiver is FastaAccessor) { | 430 if (receiver is FastaAccessor) { |
431 return receiver.buildPropertyAccess(this, isNullAware); | 431 return receiver.buildPropertyAccess(this, isNullAware); |
432 } | 432 } |
433 if (receiver is PrefixBuilder) { | 433 if (receiver is PrefixBuilder) { |
434 PrefixBuilder prefix = receiver; | 434 PrefixBuilder prefix = receiver; |
435 receiver = helper.builderToFirstExpression( | 435 receiver = helper.scopeLookup(prefix.exports, name.name, offset, |
436 prefix.exports[name.name], "${prefix.name}.${name.name}", offset); | 436 isQualified: true); |
437 return helper.finishSend(receiver, arguments, offset); | 437 return helper.finishSend(receiver, arguments, offset); |
438 } | 438 } |
439 Expression result; | 439 Expression result; |
440 if (receiver is KernelClassBuilder) { | 440 if (receiver is KernelClassBuilder) { |
441 Builder builder = receiver.findStaticBuilder(name.name, offset, uri); | 441 Builder builder = receiver.findStaticBuilder(name.name, offset, uri); |
442 if (builder == null || builder is AccessErrorBuilder) { | 442 if (builder == null || builder is AccessErrorBuilder) { |
443 return buildThrowNoSuchMethodError(arguments); | 443 return buildThrowNoSuchMethodError(arguments); |
444 } | 444 } |
445 if (builder.hasProblem) { | 445 if (builder.hasProblem) { |
446 result = helper.buildProblemExpression(builder, offset); | 446 result = helper.buildProblemExpression(builder, offset); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
511 /// For reasons beyond comprehension, `SomeType?.toString` is the same as | 511 /// For reasons beyond comprehension, `SomeType?.toString` is the same as |
512 /// `SomeType.toString`, not `(SomeType).toString`. WTAF!?! | 512 /// `SomeType.toString`, not `(SomeType).toString`. WTAF!?! |
513 // | 513 // |
514 isNullAware = false; | 514 isNullAware = false; |
515 } | 515 } |
516 if (receiver is FastaAccessor) { | 516 if (receiver is FastaAccessor) { |
517 return receiver.buildPropertyAccess(this, isNullAware); | 517 return receiver.buildPropertyAccess(this, isNullAware); |
518 } | 518 } |
519 if (receiver is PrefixBuilder) { | 519 if (receiver is PrefixBuilder) { |
520 PrefixBuilder prefix = receiver; | 520 PrefixBuilder prefix = receiver; |
521 return helper.builderToFirstExpression( | 521 return helper.scopeLookup(prefix.exports, name.name, offset, |
522 prefix.exports[name.name], name.name, offset); | 522 isQualified: true); |
523 } | 523 } |
524 if (receiver is KernelClassBuilder) { | 524 if (receiver is KernelClassBuilder) { |
525 Builder builder = receiver.findStaticBuilder(name.name, offset, uri); | 525 Builder builder = receiver.findStaticBuilder(name.name, offset, uri); |
526 if (builder == null) { | 526 if (builder == null) { |
527 // If we find a setter, [builder] is an [AccessErrorBuilder], not null. | 527 // If we find a setter, [builder] is an [AccessErrorBuilder], not null. |
528 return buildThrowNoSuchMethodError(new Arguments.empty(), | 528 return buildThrowNoSuchMethodError(new Arguments.empty(), |
529 isGetter: true); | 529 isGetter: true); |
530 } | 530 } |
531 Builder setter; | 531 Builder setter; |
532 if (builder.isSetter) { | 532 if (builder.isSetter) { |
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
872 new ConditionalExpression( | 872 new ConditionalExpression( |
873 buildIsNull(new VariableGet(variable)), | 873 buildIsNull(new VariableGet(variable)), |
874 new NullLiteral(), | 874 new NullLiteral(), |
875 new MethodInvocation(new VariableGet(variable), name, arguments) | 875 new MethodInvocation(new VariableGet(variable), name, arguments) |
876 ..fileOffset = offset, | 876 ..fileOffset = offset, |
877 const DynamicType())); | 877 const DynamicType())); |
878 } else { | 878 } else { |
879 return new MethodInvocation(receiver, name, arguments)..fileOffset = offset; | 879 return new MethodInvocation(receiver, name, arguments)..fileOffset = offset; |
880 } | 880 } |
881 } | 881 } |
OLD | NEW |