| 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.builder_accessors; | 5 library fasta.builder_accessors; |
| 6 | 6 |
| 7 export 'frontend_accessors.dart' show wrapInvalid; | 7 export 'frontend_accessors.dart' show wrapInvalid; |
| 8 | 8 |
| 9 import 'frontend_accessors.dart' show Accessor; | 9 import 'frontend_accessors.dart' show Accessor; |
| 10 | 10 |
| (...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 346 if (builder == null) { | 346 if (builder == null) { |
| 347 return buildThrowNoSuchMethodError(arguments); | 347 return buildThrowNoSuchMethodError(arguments); |
| 348 } | 348 } |
| 349 if (builder.hasProblem) { | 349 if (builder.hasProblem) { |
| 350 result = helper.buildProblemExpression(builder, name.name); | 350 result = helper.buildProblemExpression(builder, name.name); |
| 351 } else { | 351 } else { |
| 352 Member target = builder.target; | 352 Member target = builder.target; |
| 353 if (target != null) { | 353 if (target != null) { |
| 354 if (target is Field) { | 354 if (target is Field) { |
| 355 result = buildMethodInvocation( | 355 result = buildMethodInvocation( |
| 356 new StaticGet(target), new Name("call"), arguments, charOffset, | 356 new StaticGet(target), |
| 357 new Name("call"), |
| 358 arguments, |
| 359 charOffset + (target.name?.name?.length ?? 0), |
| 357 isNullAware: isNullAware); | 360 isNullAware: isNullAware); |
| 358 } else { | 361 } else { |
| 359 result = helper.buildStaticInvocation(target, arguments); | 362 result = helper.buildStaticInvocation(target, arguments) |
| 363 ..fileOffset = charOffset; |
| 360 } | 364 } |
| 361 } else { | 365 } else { |
| 362 result = buildThrowNoSuchMethodError(arguments); | 366 result = buildThrowNoSuchMethodError(arguments) |
| 367 ..fileOffset = charOffset; |
| 363 } | 368 } |
| 364 } | 369 } |
| 365 } else { | 370 } else { |
| 366 result = buildMethodInvocation( | 371 result = buildMethodInvocation( |
| 367 helper.toValue(receiver), name, arguments, charOffset, | 372 helper.toValue(receiver), name, arguments, charOffset, |
| 368 isNullAware: isNullAware); | 373 isNullAware: isNullAware); |
| 369 } | 374 } |
| 370 return result..fileOffset = charOffset; | 375 return result; |
| 371 } | 376 } |
| 372 | 377 |
| 373 Expression buildNullAwareAssignment(Expression value, DartType type, | 378 Expression buildNullAwareAssignment(Expression value, DartType type, |
| 374 {bool voidContext: false}) { | 379 {bool voidContext: false}) { |
| 375 return internalError("Unhandled"); | 380 return internalError("Unhandled"); |
| 376 } | 381 } |
| 377 | 382 |
| 378 Expression buildCompoundAssignment( | 383 Expression buildCompoundAssignment( |
| 379 Name binaryOperator, Expression value, int charOffset, | 384 Name binaryOperator, Expression value, int charOffset, |
| 380 {bool voidContext: false, Procedure interfaceTarget}) { | 385 {bool voidContext: false, Procedure interfaceTarget}) { |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 558 helper, charOffset, receiver, name, getter, setter, null) | 563 helper, charOffset, receiver, name, getter, setter, null) |
| 559 : new PropertyAccessor.internal( | 564 : new PropertyAccessor.internal( |
| 560 helper, charOffset, receiver, name, getter, setter); | 565 helper, charOffset, receiver, name, getter, setter); |
| 561 } | 566 } |
| 562 } | 567 } |
| 563 } | 568 } |
| 564 | 569 |
| 565 class StaticAccessor extends kernel.StaticAccessor with BuilderAccessor { | 570 class StaticAccessor extends kernel.StaticAccessor with BuilderAccessor { |
| 566 final BuilderHelper helper; | 571 final BuilderHelper helper; |
| 567 | 572 |
| 568 final int charOffset; | |
| 569 | |
| 570 StaticAccessor( | 573 StaticAccessor( |
| 571 this.helper, this.charOffset, Member readTarget, Member writeTarget) | 574 this.helper, int charOffset, Member readTarget, Member writeTarget) |
| 572 : super(readTarget, writeTarget) { | 575 : super(readTarget, writeTarget, charOffset) { |
| 573 assert(readTarget != null || writeTarget != null); | 576 assert(readTarget != null || writeTarget != null); |
| 574 } | 577 } |
| 575 | 578 |
| 576 String get plainNameForRead => (readTarget ?? writeTarget).name.name; | 579 String get plainNameForRead => (readTarget ?? writeTarget).name.name; |
| 577 | 580 |
| 578 Expression doInvocation(int charOffset, Arguments arguments) { | 581 Expression doInvocation(int charOffset, Arguments arguments) { |
| 579 if (readTarget == null || isFieldOrGetter(readTarget)) { | 582 if (readTarget == null || isFieldOrGetter(readTarget)) { |
| 580 return buildMethodInvocation( | 583 return buildMethodInvocation(buildSimpleRead(), new Name("call"), |
| 581 buildSimpleRead(), new Name("call"), arguments, charOffset); | 584 arguments, charOffset + (readTarget?.name?.name?.length ?? 0)); |
| 582 } else { | 585 } else { |
| 583 return helper.buildStaticInvocation(readTarget, arguments) | 586 return helper.buildStaticInvocation(readTarget, arguments) |
| 584 ..fileOffset = charOffset; | 587 ..fileOffset = charOffset; |
| 585 } | 588 } |
| 586 } | 589 } |
| 587 | 590 |
| 588 toString() => "StaticAccessor()"; | 591 toString() => "StaticAccessor()"; |
| 589 } | 592 } |
| 590 | 593 |
| 591 class SuperPropertyAccessor extends kernel.SuperPropertyAccessor | 594 class SuperPropertyAccessor extends kernel.SuperPropertyAccessor |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 653 buildSimpleRead(), new Name("call"), arguments, charOffset); | 656 buildSimpleRead(), new Name("call"), arguments, charOffset); |
| 654 } | 657 } |
| 655 | 658 |
| 656 toString() => "SuperIndexAccessor()"; | 659 toString() => "SuperIndexAccessor()"; |
| 657 } | 660 } |
| 658 | 661 |
| 659 class ThisPropertyAccessor extends kernel.ThisPropertyAccessor | 662 class ThisPropertyAccessor extends kernel.ThisPropertyAccessor |
| 660 with BuilderAccessor { | 663 with BuilderAccessor { |
| 661 final BuilderHelper helper; | 664 final BuilderHelper helper; |
| 662 | 665 |
| 663 final int charOffset; | |
| 664 | |
| 665 ThisPropertyAccessor( | 666 ThisPropertyAccessor( |
| 666 this.helper, this.charOffset, Name name, Member getter, Member setter) | 667 this.helper, int charOffset, Name name, Member getter, Member setter) |
| 667 : super(name, getter, setter); | 668 : super(name, getter, setter, charOffset); |
| 668 | 669 |
| 669 String get plainNameForRead => name.name; | 670 String get plainNameForRead => name.name; |
| 670 | 671 |
| 671 bool get isThisPropertyAccessor => true; | 672 bool get isThisPropertyAccessor => true; |
| 672 | 673 |
| 673 Expression doInvocation(int charOffset, Arguments arguments) { | 674 Expression doInvocation(int charOffset, Arguments arguments) { |
| 674 Member interfaceTarget = getter; | 675 Member interfaceTarget = getter; |
| 675 if (interfaceTarget is Field) { | 676 if (interfaceTarget is Field) { |
| 676 // TODO(ahe): In strong mode we should probably rewrite this to | 677 // TODO(ahe): In strong mode we should probably rewrite this to |
| 677 // `this.name.call(arguments)`. | 678 // `this.name.call(arguments)`. |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 756 buildIsNull(new VariableGet(variable)), | 757 buildIsNull(new VariableGet(variable)), |
| 757 new NullLiteral(), | 758 new NullLiteral(), |
| 758 new MethodInvocation(new VariableGet(variable), name, arguments) | 759 new MethodInvocation(new VariableGet(variable), name, arguments) |
| 759 ..fileOffset = charOffset, | 760 ..fileOffset = charOffset, |
| 760 const DynamicType())); | 761 const DynamicType())); |
| 761 } else { | 762 } else { |
| 762 return new MethodInvocation(receiver, name, arguments) | 763 return new MethodInvocation(receiver, name, arguments) |
| 763 ..fileOffset = charOffset; | 764 ..fileOffset = charOffset; |
| 764 } | 765 } |
| 765 } | 766 } |
| OLD | NEW |