| Index: pkg/front_end/lib/src/fasta/kernel/builder_accessors.dart
|
| diff --git a/pkg/front_end/lib/src/fasta/kernel/builder_accessors.dart b/pkg/front_end/lib/src/fasta/kernel/builder_accessors.dart
|
| index c81b083a7a3467478057172277e88191a336075c..e79aff2c89af444dbe818248c45a9ee2690e85fe 100644
|
| --- a/pkg/front_end/lib/src/fasta/kernel/builder_accessors.dart
|
| +++ b/pkg/front_end/lib/src/fasta/kernel/builder_accessors.dart
|
| @@ -4,41 +4,32 @@
|
|
|
| library fasta.builder_accessors;
|
|
|
| -export 'frontend_accessors.dart' show
|
| - wrapInvalid;
|
| +export 'frontend_accessors.dart' show wrapInvalid;
|
|
|
| -import 'frontend_accessors.dart' show
|
| - Accessor;
|
| +import 'frontend_accessors.dart' show Accessor;
|
|
|
| import 'package:kernel/ast.dart';
|
|
|
| -import 'package:kernel/core_types.dart' show
|
| - CoreTypes;
|
| -
|
| -import '../errors.dart' show
|
| - internalError,
|
| - printUnexpected;
|
| -
|
| -import 'frontend_accessors.dart' as kernel show
|
| - IndexAccessor,
|
| - NullAwarePropertyAccessor,
|
| - PropertyAccessor,
|
| - StaticAccessor,
|
| - SuperIndexAccessor,
|
| - SuperPropertyAccessor,
|
| - ThisIndexAccessor,
|
| - ThisPropertyAccessor,
|
| - VariableAccessor;
|
| -
|
| -import 'frontend_accessors.dart' show
|
| - buildIsNull,
|
| - makeLet;
|
| -
|
| -import 'kernel_builder.dart' show
|
| - Builder,
|
| - KernelClassBuilder,
|
| - PrefixBuilder,
|
| - TypeDeclarationBuilder;
|
| +import 'package:kernel/core_types.dart' show CoreTypes;
|
| +
|
| +import '../errors.dart' show internalError, printUnexpected;
|
| +
|
| +import 'frontend_accessors.dart' as kernel
|
| + show
|
| + IndexAccessor,
|
| + NullAwarePropertyAccessor,
|
| + PropertyAccessor,
|
| + StaticAccessor,
|
| + SuperIndexAccessor,
|
| + SuperPropertyAccessor,
|
| + ThisIndexAccessor,
|
| + ThisPropertyAccessor,
|
| + VariableAccessor;
|
| +
|
| +import 'frontend_accessors.dart' show buildIsNull, makeLet;
|
| +
|
| +import 'kernel_builder.dart'
|
| + show Builder, KernelClassBuilder, PrefixBuilder, TypeDeclarationBuilder;
|
|
|
| abstract class BuilderHelper {
|
| Uri get uri;
|
| @@ -89,8 +80,9 @@ abstract class BuilderAccessor implements Accessor {
|
| }
|
|
|
| Expression makeInvalidRead() {
|
| - return throwNoSuchMethodError(plainNameForRead, new Arguments.empty(), uri,
|
| - charOffset, coreTypes, isGetter: true);
|
| + return throwNoSuchMethodError(
|
| + plainNameForRead, new Arguments.empty(), uri, charOffset, coreTypes,
|
| + isGetter: true);
|
| }
|
|
|
| Expression makeInvalidWrite(Expression value) {
|
| @@ -103,8 +95,9 @@ abstract class BuilderAccessor implements Accessor {
|
|
|
| buildPropertyAccess(IncompleteSend send, bool isNullAware) {
|
| if (send is SendAccessor) {
|
| - return buildMethodInvocation(buildSimpleRead(), send.name, send.arguments,
|
| - charOffset, isNullAware: isNullAware);
|
| + return buildMethodInvocation(
|
| + buildSimpleRead(), send.name, send.arguments, charOffset,
|
| + isNullAware: isNullAware);
|
| } else {
|
| return PropertyAccessor.make(helper, charOffset, buildSimpleRead(),
|
| send.name, null, null, isNullAware);
|
| @@ -117,8 +110,9 @@ abstract class BuilderAccessor implements Accessor {
|
| arguments = new Arguments.empty();
|
| isGetter = true;
|
| }
|
| - return throwNoSuchMethodError(plainNameForWrite, arguments, uri, charOffset,
|
| - coreTypes, isGetter: isGetter);
|
| + return throwNoSuchMethodError(
|
| + plainNameForWrite, arguments, uri, charOffset, coreTypes,
|
| + isGetter: isGetter);
|
| }
|
|
|
| bool get isThisPropertyAccessor => false;
|
| @@ -213,18 +207,18 @@ class ThisAccessor extends BuilderAccessor {
|
| if (send is SendAccessor) {
|
| // Notice that 'this' or 'super' can't be null. So we can ignore the
|
| // value of [isNullAware].
|
| - MethodInvocation result = buildMethodInvocation(new ThisExpression(),
|
| - send.name, send.arguments, charOffset);
|
| + MethodInvocation result = buildMethodInvocation(
|
| + new ThisExpression(), send.name, send.arguments, charOffset);
|
| return isSuper ? helper.toSuperMethodInvocation(result) : result;
|
| } else {
|
| if (isSuper) {
|
| Member getter = helper.lookupSuperMember(send.name);
|
| Member setter = helper.lookupSuperMember(send.name, isSetter: true);
|
| - return new SuperPropertyAccessor(helper, charOffset, send.name, getter,
|
| - setter);
|
| + return new SuperPropertyAccessor(
|
| + helper, charOffset, send.name, getter, setter);
|
| } else {
|
| - return new ThisPropertyAccessor(helper, charOffset, send.name, null,
|
| - null);
|
| + return new ThisPropertyAccessor(
|
| + helper, charOffset, send.name, null, null);
|
| }
|
| }
|
| }
|
| @@ -233,28 +227,26 @@ class ThisAccessor extends BuilderAccessor {
|
| if (isInitializer) {
|
| return buildConstructorInitializer(charOffset, new Name(""), arguments);
|
| } else {
|
| - return buildMethodInvocation(new ThisExpression(), new Name("call"),
|
| - arguments, charOffset);
|
| + return buildMethodInvocation(
|
| + new ThisExpression(), new Name("call"), arguments, charOffset);
|
| }
|
| }
|
|
|
| - Initializer buildConstructorInitializer(int charOffset, Name name,
|
| - Arguments arguments) {
|
| + Initializer buildConstructorInitializer(
|
| + int charOffset, Name name, Arguments arguments) {
|
| Constructor constructor = helper.lookupConstructor(name, isSuper: isSuper);
|
| Initializer result;
|
| if (constructor == null) {
|
| - result = new LocalInitializer(
|
| - new VariableDeclaration.forValue(
|
| - throwNoSuchMethodError(
|
| - name.name, arguments, uri, charOffset, coreTypes,
|
| - isSuper: isSuper)));
|
| + result = new LocalInitializer(new VariableDeclaration.forValue(
|
| + throwNoSuchMethodError(
|
| + name.name, arguments, uri, charOffset, coreTypes,
|
| + isSuper: isSuper)));
|
| } else if (isSuper) {
|
| result = new SuperInitializer(constructor, arguments);
|
| } else {
|
| result = new RedirectingInitializer(constructor, arguments);
|
| }
|
| - return result
|
| - ..fileOffset = charOffset;
|
| + return result..fileOffset = charOffset;
|
| }
|
|
|
| Expression buildAssignment(Expression value, {bool voidContext: false}) {
|
| @@ -352,8 +344,8 @@ class SendAccessor extends IncompleteSend {
|
| Member target = builder.target;
|
| if (target != null) {
|
| if (target is Field) {
|
| - result = buildMethodInvocation(new StaticGet(target),
|
| - new Name("call"), arguments, charOffset,
|
| + result = buildMethodInvocation(
|
| + new StaticGet(target), new Name("call"), arguments, charOffset,
|
| isNullAware: isNullAware);
|
| } else {
|
| result = helper.buildStaticInvocation(target, arguments);
|
| @@ -363,8 +355,9 @@ class SendAccessor extends IncompleteSend {
|
| }
|
| }
|
| } else {
|
| - result = buildMethodInvocation(helper.toValue(receiver), name,
|
| - arguments, charOffset, isNullAware: isNullAware);
|
| + result = buildMethodInvocation(
|
| + helper.toValue(receiver), name, arguments, charOffset,
|
| + isNullAware: isNullAware);
|
| }
|
| return result..fileOffset = charOffset;
|
| }
|
| @@ -428,15 +421,15 @@ class IncompletePropertyAccessor extends IncompleteSend {
|
| Member getter = builder?.target;
|
| Member setter;
|
| if (builder == null) {
|
| - builder = receiver.findStaticBuilder(
|
| - name.name, charOffset, uri, isSetter: true);
|
| + builder = receiver.findStaticBuilder(name.name, charOffset, uri,
|
| + isSetter: true);
|
| if (builder == null) {
|
| return buildThrowNoSuchMethodError(null);
|
| }
|
| }
|
| if (builder.hasProblem) {
|
| return helper.buildProblemExpression(builder, name.name)
|
| - ..fileOffset = charOffset;
|
| + ..fileOffset = charOffset;
|
| }
|
| if (getter is Field) {
|
| if (!getter.isFinal && !getter.isConst) {
|
| @@ -444,8 +437,8 @@ class IncompletePropertyAccessor extends IncompleteSend {
|
| }
|
| } else if (getter is Procedure) {
|
| if (getter.isGetter) {
|
| - builder = receiver.findStaticBuilder(
|
| - name.name, charOffset, uri, isSetter: true);
|
| + builder = receiver.findStaticBuilder(name.name, charOffset, uri,
|
| + isSetter: true);
|
| if (builder != null && !builder.hasProblem) {
|
| setter = builder.target;
|
| }
|
| @@ -501,20 +494,24 @@ class IndexAccessor extends kernel.IndexAccessor with BuilderAccessor {
|
| String get plainNameForWrite => "[]=";
|
|
|
| Expression doInvocation(int charOffset, Arguments arguments) {
|
| - return buildMethodInvocation(buildSimpleRead(), new Name("call"), arguments,
|
| - charOffset);
|
| + return buildMethodInvocation(
|
| + buildSimpleRead(), new Name("call"), arguments, charOffset);
|
| }
|
|
|
| toString() => "IndexAccessor()";
|
|
|
| - static BuilderAccessor make(BuilderHelper helper, int charOffset,
|
| - Expression receiver, Expression index, Procedure getter,
|
| + static BuilderAccessor make(
|
| + BuilderHelper helper,
|
| + int charOffset,
|
| + Expression receiver,
|
| + Expression index,
|
| + Procedure getter,
|
| Procedure setter) {
|
| if (receiver is ThisExpression) {
|
| return new ThisIndexAccessor(helper, charOffset, index, getter, setter);
|
| } else {
|
| - return new IndexAccessor.internal(helper, charOffset, receiver, index,
|
| - getter, setter);
|
| + return new IndexAccessor.internal(
|
| + helper, charOffset, receiver, index, getter, setter);
|
| }
|
| }
|
| }
|
| @@ -538,17 +535,22 @@ class PropertyAccessor extends kernel.PropertyAccessor with BuilderAccessor {
|
|
|
| toString() => "PropertyAccessor()";
|
|
|
| - static BuilderAccessor make(BuilderHelper helper, int charOffset,
|
| - Expression receiver, Name name, Member getter, Member setter,
|
| + static BuilderAccessor make(
|
| + BuilderHelper helper,
|
| + int charOffset,
|
| + Expression receiver,
|
| + Name name,
|
| + Member getter,
|
| + Member setter,
|
| bool isNullAware) {
|
| if (receiver is ThisExpression) {
|
| return new ThisPropertyAccessor(helper, charOffset, name, getter, setter);
|
| } else {
|
| return isNullAware
|
| - ? new NullAwarePropertyAccessor(helper, charOffset, receiver, name,
|
| - getter, setter, null)
|
| - : new PropertyAccessor.internal(helper, charOffset, receiver, name,
|
| - getter, setter);
|
| + ? new NullAwarePropertyAccessor(
|
| + helper, charOffset, receiver, name, getter, setter, null)
|
| + : new PropertyAccessor.internal(
|
| + helper, charOffset, receiver, name, getter, setter);
|
| }
|
| }
|
| }
|
| @@ -558,8 +560,8 @@ class StaticAccessor extends kernel.StaticAccessor with BuilderAccessor {
|
|
|
| final int charOffset;
|
|
|
| - StaticAccessor(this.helper, this.charOffset, Member readTarget,
|
| - Member writeTarget)
|
| + StaticAccessor(
|
| + this.helper, this.charOffset, Member readTarget, Member writeTarget)
|
| : super(readTarget, writeTarget) {
|
| assert(readTarget != null || writeTarget != null);
|
| }
|
| @@ -568,11 +570,11 @@ class StaticAccessor extends kernel.StaticAccessor with BuilderAccessor {
|
|
|
| Expression doInvocation(int charOffset, Arguments arguments) {
|
| if (readTarget == null || isFieldOrGetter(readTarget)) {
|
| - return buildMethodInvocation(buildSimpleRead(), new Name("call"),
|
| - arguments, charOffset);
|
| + return buildMethodInvocation(
|
| + buildSimpleRead(), new Name("call"), arguments, charOffset);
|
| } else {
|
| return helper.buildStaticInvocation(readTarget, arguments)
|
| - ..fileOffset = charOffset;
|
| + ..fileOffset = charOffset;
|
| }
|
| }
|
|
|
| @@ -585,19 +587,19 @@ class SuperPropertyAccessor extends kernel.SuperPropertyAccessor
|
|
|
| final int charOffset;
|
|
|
| - SuperPropertyAccessor(this.helper, this.charOffset, Name name, Member getter,
|
| - Member setter)
|
| + SuperPropertyAccessor(
|
| + this.helper, this.charOffset, Name name, Member getter, Member setter)
|
| : super(name, getter, setter);
|
|
|
| String get plainNameForRead => name.name;
|
|
|
| Expression doInvocation(int charOffset, Arguments arguments) {
|
| if (getter == null || isFieldOrGetter(getter)) {
|
| - return buildMethodInvocation(buildSimpleRead(), new Name("call"),
|
| - arguments, charOffset);
|
| + return buildMethodInvocation(
|
| + buildSimpleRead(), new Name("call"), arguments, charOffset);
|
| } else {
|
| return new DirectMethodInvocation(new ThisExpression(), getter, arguments)
|
| - ..fileOffset = charOffset;
|
| + ..fileOffset = charOffset;
|
| }
|
| }
|
|
|
| @@ -618,15 +620,15 @@ class ThisIndexAccessor extends kernel.ThisIndexAccessor with BuilderAccessor {
|
| String get plainNameForWrite => "[]=";
|
|
|
| Expression doInvocation(int charOffset, Arguments arguments) {
|
| - return buildMethodInvocation(buildSimpleRead(), new Name("call"), arguments,
|
| - charOffset);
|
| + return buildMethodInvocation(
|
| + buildSimpleRead(), new Name("call"), arguments, charOffset);
|
| }
|
|
|
| toString() => "ThisIndexAccessor()";
|
| }
|
|
|
| -class SuperIndexAccessor
|
| - extends kernel.SuperIndexAccessor with BuilderAccessor {
|
| +class SuperIndexAccessor extends kernel.SuperIndexAccessor
|
| + with BuilderAccessor {
|
| final BuilderHelper helper;
|
|
|
| final int charOffset;
|
| @@ -640,8 +642,8 @@ class SuperIndexAccessor
|
| String get plainNameForWrite => "[]=";
|
|
|
| Expression doInvocation(int charOffset, Arguments arguments) {
|
| - return buildMethodInvocation(buildSimpleRead(), new Name("call"), arguments,
|
| - charOffset);
|
| + return buildMethodInvocation(
|
| + buildSimpleRead(), new Name("call"), arguments, charOffset);
|
| }
|
|
|
| toString() => "SuperIndexAccessor()";
|
| @@ -653,8 +655,8 @@ class ThisPropertyAccessor extends kernel.ThisPropertyAccessor
|
|
|
| final int charOffset;
|
|
|
| - ThisPropertyAccessor(this.helper, this.charOffset, Name name, Member getter,
|
| - Member setter)
|
| + ThisPropertyAccessor(
|
| + this.helper, this.charOffset, Name name, Member getter, Member setter)
|
| : super(name, getter, setter);
|
|
|
| String get plainNameForRead => name.name;
|
| @@ -668,8 +670,8 @@ class ThisPropertyAccessor extends kernel.ThisPropertyAccessor
|
| // `this.name.call(arguments)`.
|
| interfaceTarget = null;
|
| }
|
| - return buildMethodInvocation(new ThisExpression(), name, arguments,
|
| - charOffset);
|
| + return buildMethodInvocation(
|
| + new ThisExpression(), name, arguments, charOffset);
|
| }
|
|
|
| toString() => "ThisPropertyAccessor()";
|
| @@ -694,9 +696,7 @@ class NullAwarePropertyAccessor extends kernel.NullAwarePropertyAccessor
|
| toString() => "NullAwarePropertyAccessor()";
|
| }
|
|
|
| -
|
| -class VariableAccessor extends kernel.VariableAccessor
|
| - with BuilderAccessor {
|
| +class VariableAccessor extends kernel.VariableAccessor with BuilderAccessor {
|
| final BuilderHelper helper;
|
|
|
| final int charOffset;
|
| @@ -708,8 +708,8 @@ class VariableAccessor extends kernel.VariableAccessor
|
| String get plainNameForRead => variable.name;
|
|
|
| Expression doInvocation(int charOffset, Arguments arguments) {
|
| - return buildMethodInvocation(buildSimpleRead(), new Name("call"), arguments,
|
| - charOffset);
|
| + return buildMethodInvocation(
|
| + buildSimpleRead(), new Name("call"), arguments, charOffset);
|
| }
|
|
|
| toString() => "VariableAccessor()";
|
| @@ -719,26 +719,28 @@ Expression throwNoSuchMethodError(String name, Arguments arguments, Uri uri,
|
| int charOffset, CoreTypes coreTypes,
|
| {bool isSuper: false, isGetter: false, isSetter: false}) {
|
| printUnexpected(uri, charOffset, "Method not found: '$name'.");
|
| - Constructor constructor = coreTypes.getClass(
|
| - "dart:core", "NoSuchMethodError").constructors.first;
|
| + Constructor constructor =
|
| + coreTypes.getClass("dart:core", "NoSuchMethodError").constructors.first;
|
| return new Throw(new ConstructorInvocation(
|
| constructor,
|
| new Arguments(<Expression>[
|
| - new NullLiteral(),
|
| - new SymbolLiteral(name),
|
| - new ListLiteral(arguments.positional),
|
| - new MapLiteral(arguments.named.map((arg) {
|
| - return new MapEntry(new SymbolLiteral(arg.name), arg.value);
|
| - }).toList()),
|
| - new NullLiteral()])));
|
| + new NullLiteral(),
|
| + new SymbolLiteral(name),
|
| + new ListLiteral(arguments.positional),
|
| + new MapLiteral(arguments.named.map((arg) {
|
| + return new MapEntry(new SymbolLiteral(arg.name), arg.value);
|
| + }).toList()),
|
| + new NullLiteral()
|
| + ])));
|
| }
|
|
|
| bool isFieldOrGetter(Member member) {
|
| return member is Field || (member is Procedure && member.isGetter);
|
| }
|
|
|
| -Expression buildMethodInvocation(Expression receiver, Name name,
|
| - Arguments arguments, int charOffset, {bool isNullAware: false}) {
|
| +Expression buildMethodInvocation(
|
| + Expression receiver, Name name, Arguments arguments, int charOffset,
|
| + {bool isNullAware: false}) {
|
| if (isNullAware) {
|
| VariableDeclaration variable = new VariableDeclaration.forValue(receiver);
|
| return makeLet(
|
| @@ -747,10 +749,10 @@ Expression buildMethodInvocation(Expression receiver, Name name,
|
| buildIsNull(new VariableGet(variable)),
|
| new NullLiteral(),
|
| new MethodInvocation(new VariableGet(variable), name, arguments)
|
| - ..fileOffset = charOffset,
|
| + ..fileOffset = charOffset,
|
| const DynamicType()));
|
| } else {
|
| return new MethodInvocation(receiver, name, arguments)
|
| - ..fileOffset = charOffset;
|
| + ..fileOffset = charOffset;
|
| }
|
| }
|
|
|