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 8b44a31c2c7adedf7b815e2e0ed9977d8d17f32e..37dcb05cd781f51c2254f102c8500f9c6295b9cd 100644 |
--- a/pkg/front_end/lib/src/fasta/kernel/builder_accessors.dart |
+++ b/pkg/front_end/lib/src/fasta/kernel/builder_accessors.dart |
@@ -4,9 +4,10 @@ |
library fasta.builder_accessors; |
-export 'frontend_accessors.dart' show wrapInvalid; |
+export 'package:kernel/frontend/accessors.dart' show wrapInvalid; |
-import 'frontend_accessors.dart' show Accessor; |
+import 'package:kernel/frontend/accessors.dart' |
+ show Accessor, buildIsNull, makeLet; |
import 'package:kernel/ast.dart'; |
@@ -14,7 +15,7 @@ import '../errors.dart' show internalError; |
import '../builder/scope.dart' show AccessErrorBuilder, ProblemBuilder; |
-import 'frontend_accessors.dart' as kernel |
+import 'package:kernel/frontend/accessors.dart' as kernel |
show |
IndexAccessor, |
NullAwarePropertyAccessor, |
@@ -26,8 +27,6 @@ import 'frontend_accessors.dart' as kernel |
ThisPropertyAccessor, |
VariableAccessor; |
-import 'frontend_accessors.dart' show buildIsNull, makeLet; |
- |
import 'kernel_builder.dart' |
show Builder, KernelClassBuilder, PrefixBuilder, TypeDeclarationBuilder; |
@@ -44,28 +43,26 @@ abstract class BuilderHelper { |
Member lookupSuperMember(Name name, {bool isSetter: false}); |
- builderToFirstExpression(Builder builder, String name, int charOffset); |
+ builderToFirstExpression(Builder builder, String name, int offset); |
- finishSend(Object receiver, Arguments arguments, int charOffset); |
+ finishSend(Object receiver, Arguments arguments, int offset); |
- Expression buildCompileTimeError(error, [int charOffset]); |
+ Expression buildCompileTimeError(error, [int offset]); |
- Initializer buildCompileTimeErrorIntializer(error, [int charOffset]); |
+ Initializer buildCompileTimeErrorIntializer(error, [int offset]); |
Expression buildStaticInvocation(Procedure target, Arguments arguments); |
- Expression buildProblemExpression(ProblemBuilder builder, int charOffset); |
+ Expression buildProblemExpression(ProblemBuilder builder, int offset); |
Expression throwNoSuchMethodError( |
- String name, Arguments arguments, int charOffset, |
+ String name, Arguments arguments, int offset, |
{bool isSuper: false, isGetter: false, isSetter: false}); |
} |
abstract class BuilderAccessor implements Accessor { |
BuilderHelper get helper; |
- int get charOffset; |
- |
String get plainNameForRead; |
Uri get uri => helper.uri; |
@@ -78,7 +75,7 @@ abstract class BuilderAccessor implements Accessor { |
Map<String, FieldInitializer> initializers) { |
// TODO(ahe): This error message is really bad. |
return helper.buildCompileTimeErrorIntializer( |
- "Can't use $plainNameForRead here.", charOffset); |
+ "Can't use $plainNameForRead here.", offset); |
} |
Expression makeInvalidRead() { |
@@ -91,16 +88,16 @@ abstract class BuilderAccessor implements Accessor { |
} |
/* Expression | BuilderAccessor */ doInvocation( |
- int charOffset, Arguments arguments); |
+ int offset, Arguments arguments); |
/* Expression | BuilderAccessor */ buildPropertyAccess( |
IncompleteSend send, bool isNullAware) { |
if (send is SendAccessor) { |
return buildMethodInvocation( |
- buildSimpleRead(), send.name, send.arguments, send.charOffset, |
+ buildSimpleRead(), send.name, send.arguments, send.offset, |
isNullAware: isNullAware); |
} else { |
- return PropertyAccessor.make(helper, send.charOffset, buildSimpleRead(), |
+ return PropertyAccessor.make(helper, send.offset, buildSimpleRead(), |
send.name, null, null, isNullAware); |
} |
} |
@@ -111,9 +108,9 @@ abstract class BuilderAccessor implements Accessor { |
isGetter: false, |
isSetter: false, |
String name, |
- int charOffset}) { |
+ int offset}) { |
return helper.throwNoSuchMethodError( |
- name ?? plainNameForWrite, arguments, charOffset ?? this.charOffset, |
+ name ?? plainNameForWrite, arguments, offset ?? this.offset, |
isGetter: isGetter, isSetter: isSetter, isSuper: isSuper); |
} |
@@ -121,6 +118,22 @@ abstract class BuilderAccessor implements Accessor { |
} |
abstract class CompileTimeErrorAccessor implements BuilderAccessor { |
+ @override |
+ Expression get builtBinary => internalError("Unsupported operation."); |
+ |
+ @override |
+ void set builtBinary(Expression expression) { |
+ internalError("Unsupported operation."); |
+ } |
+ |
+ @override |
+ Expression get builtGetter => internalError("Unsupported operation."); |
+ |
+ @override |
+ void set builtGetter(Expression expression) { |
+ internalError("Unsupported operation."); |
+ } |
+ |
Expression buildError(); |
Name get name => internalError("Unsupported operation."); |
@@ -134,7 +147,7 @@ abstract class CompileTimeErrorAccessor implements BuilderAccessor { |
return new LocalInitializer(new VariableDeclaration.forValue(buildError())); |
} |
- doInvocation(int charOffset, Arguments arguments) => this; |
+ doInvocation(int offset, Arguments arguments) => this; |
buildPropertyAccess(IncompleteSend send, bool isNullAware) => this; |
@@ -143,7 +156,7 @@ abstract class CompileTimeErrorAccessor implements BuilderAccessor { |
isGetter: false, |
isSetter: false, |
String name, |
- int charOffset}) { |
+ int offset}) { |
return this; |
} |
@@ -151,19 +164,24 @@ abstract class CompileTimeErrorAccessor implements BuilderAccessor { |
return buildError(); |
} |
- Expression buildCompoundAssignment( |
- Name binaryOperator, Expression value, int charOffset, |
- {bool voidContext: false, Procedure interfaceTarget}) { |
+ Expression buildCompoundAssignment(Name binaryOperator, Expression value, |
+ {int offset: TreeNode.noOffset, |
+ bool voidContext: false, |
+ Procedure interfaceTarget}) { |
return buildError(); |
} |
- Expression buildPrefixIncrement(Name binaryOperator, int charOffset, |
- {bool voidContext: false, Procedure interfaceTarget}) { |
+ Expression buildPrefixIncrement(Name binaryOperator, |
+ {int offset: TreeNode.noOffset, |
+ bool voidContext: false, |
+ Procedure interfaceTarget}) { |
return buildError(); |
} |
- Expression buildPostfixIncrement(Name binaryOperator, int charOffset, |
- {bool voidContext: false, Procedure interfaceTarget}) { |
+ Expression buildPostfixIncrement(Name binaryOperator, |
+ {int offset: TreeNode.noOffset, |
+ bool voidContext: false, |
+ Procedure interfaceTarget}) { |
return buildError(); |
} |
@@ -182,15 +200,31 @@ abstract class CompileTimeErrorAccessor implements BuilderAccessor { |
class ThisAccessor extends BuilderAccessor { |
final BuilderHelper helper; |
- final int charOffset; |
+ final int offset; |
final bool isInitializer; |
final bool isSuper; |
- ThisAccessor(this.helper, this.charOffset, this.isInitializer, |
+ ThisAccessor(this.helper, this.offset, this.isInitializer, |
{this.isSuper: false}); |
+ @override |
+ Expression get builtBinary => internalError("Unsupported operation."); |
+ |
+ @override |
+ void set builtBinary(Expression expression) { |
+ internalError("Unsupported operation."); |
+ } |
+ |
+ @override |
+ Expression get builtGetter => internalError("Unsupported operation."); |
+ |
+ @override |
+ void set builtGetter(Expression expression) { |
+ internalError("Unsupported operation."); |
+ } |
+ |
String get plainNameForRead => internalError(isSuper ? "super" : "this"); |
Expression buildSimpleRead() { |
@@ -198,7 +232,7 @@ class ThisAccessor extends BuilderAccessor { |
return new ThisExpression(); |
} else { |
return helper.buildCompileTimeError( |
- "Can't use `super` as an expression.", charOffset); |
+ "Can't use `super` as an expression.", offset); |
} |
} |
@@ -206,56 +240,56 @@ class ThisAccessor extends BuilderAccessor { |
Map<String, FieldInitializer> initializers) { |
String keyword = isSuper ? "super" : "this"; |
return helper.buildCompileTimeErrorIntializer( |
- "Can't use '$keyword' here, did you mean '$keyword()'?", charOffset); |
+ "Can't use '$keyword' here, did you mean '$keyword()'?", offset); |
} |
buildPropertyAccess(IncompleteSend send, bool isNullAware) { |
if (isInitializer && send is SendAccessor) { |
return buildConstructorInitializer( |
- send.charOffset, send.name, send.arguments); |
+ send.offset, send.name, send.arguments); |
} |
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); |
+ new ThisExpression(), send.name, send.arguments, offset); |
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, send.charOffset, send.name, getter, setter); |
+ helper, send.offset, send.name, getter, setter); |
} else { |
return new ThisPropertyAccessor( |
- helper, send.charOffset, send.name, null, null); |
+ helper, send.offset, send.name, null, null); |
} |
} |
} |
- doInvocation(int charOffset, Arguments arguments) { |
+ doInvocation(int offset, Arguments arguments) { |
if (isInitializer) { |
- return buildConstructorInitializer(charOffset, new Name(""), arguments); |
+ return buildConstructorInitializer(offset, new Name(""), arguments); |
} else { |
return buildMethodInvocation( |
- new ThisExpression(), callName, arguments, charOffset); |
+ new ThisExpression(), callName, arguments, offset); |
} |
} |
Initializer buildConstructorInitializer( |
- int charOffset, Name name, Arguments arguments) { |
+ int offset, Name name, Arguments arguments) { |
Constructor constructor = helper.lookupConstructor(name, isSuper: isSuper); |
Initializer result; |
if (constructor == null) { |
result = new LocalInitializer(new VariableDeclaration.forValue( |
buildThrowNoSuchMethodError(arguments, |
- isSuper: isSuper, name: name.name, charOffset: charOffset))); |
+ isSuper: isSuper, name: name.name, offset: offset))); |
} else if (isSuper) { |
result = new SuperInitializer(constructor, arguments); |
} else { |
result = new RedirectingInitializer(constructor, arguments); |
} |
- return result..fileOffset = charOffset; |
+ return result..fileOffset = offset; |
} |
Expression buildAssignment(Expression value, {bool voidContext: false}) { |
@@ -267,39 +301,61 @@ class ThisAccessor extends BuilderAccessor { |
return buildAssignmentError(); |
} |
- Expression buildCompoundAssignment( |
- Name binaryOperator, Expression value, int charOffset, |
- {bool voidContext: false, Procedure interfaceTarget}) { |
+ Expression buildCompoundAssignment(Name binaryOperator, Expression value, |
+ {int offset: TreeNode.noOffset, |
+ bool voidContext: false, |
+ Procedure interfaceTarget}) { |
return buildAssignmentError(); |
} |
- Expression buildPrefixIncrement(Name binaryOperator, int charOffset, |
- {bool voidContext: false, Procedure interfaceTarget}) { |
+ Expression buildPrefixIncrement(Name binaryOperator, |
+ {int offset: TreeNode.noOffset, |
+ bool voidContext: false, |
+ Procedure interfaceTarget}) { |
return buildAssignmentError(); |
} |
- Expression buildPostfixIncrement(Name binaryOperator, int charOffset, |
- {bool voidContext: false, Procedure interfaceTarget}) { |
+ Expression buildPostfixIncrement(Name binaryOperator, |
+ {int offset: TreeNode.noOffset, |
+ bool voidContext: false, |
+ Procedure interfaceTarget}) { |
return buildAssignmentError(); |
} |
Expression buildAssignmentError() { |
String message = |
isSuper ? "Can't assign to 'super'." : "Can't assign to 'this'."; |
- return helper.buildCompileTimeError(message, charOffset); |
+ return helper.buildCompileTimeError(message, offset); |
} |
- toString() => "ThisAccessor($charOffset${isSuper ? ', super' : ''})"; |
+ toString() => "ThisAccessor($offset${isSuper ? ', super' : ''})"; |
} |
abstract class IncompleteSend extends BuilderAccessor { |
final BuilderHelper helper; |
- final int charOffset; |
+ @override |
+ final int offset; |
final Name name; |
- IncompleteSend(this.helper, this.charOffset, this.name); |
+ IncompleteSend(this.helper, this.offset, this.name); |
+ |
+ @override |
+ Expression get builtBinary => internalError("Unsupported operation."); |
+ |
+ @override |
+ void set builtBinary(Expression expression) { |
+ internalError("Unsupported operation."); |
+ } |
+ |
+ @override |
+ Expression get builtGetter => internalError("Unsupported operation."); |
+ |
+ @override |
+ void set builtGetter(Expression expression) { |
+ internalError("Unsupported operation."); |
+ } |
withReceiver(Object receiver, {bool isNullAware}); |
} |
@@ -307,19 +363,19 @@ abstract class IncompleteSend extends BuilderAccessor { |
class IncompleteError extends IncompleteSend with CompileTimeErrorAccessor { |
final Object error; |
- IncompleteError(BuilderHelper helper, int charOffset, this.error) |
- : super(helper, charOffset, null); |
+ IncompleteError(BuilderHelper helper, int offset, this.error) |
+ : super(helper, offset, null); |
Expression buildError() { |
- return helper.buildCompileTimeError(error, charOffset); |
+ return helper.buildCompileTimeError(error, offset); |
} |
} |
class SendAccessor extends IncompleteSend { |
final Arguments arguments; |
- SendAccessor(BuilderHelper helper, int charOffset, Name name, this.arguments) |
- : super(helper, charOffset, name) { |
+ SendAccessor(BuilderHelper helper, int offset, Name name, this.arguments) |
+ : super(helper, offset, name) { |
assert(arguments != null); |
} |
@@ -345,36 +401,35 @@ class SendAccessor extends IncompleteSend { |
if (receiver is PrefixBuilder) { |
PrefixBuilder prefix = receiver; |
receiver = helper.builderToFirstExpression( |
- prefix.exports[name.name], "${prefix.name}.${name.name}", charOffset); |
- return helper.finishSend(receiver, arguments, charOffset); |
+ prefix.exports[name.name], "${prefix.name}.${name.name}", offset); |
+ return helper.finishSend(receiver, arguments, offset); |
} |
Expression result; |
if (receiver is KernelClassBuilder) { |
- Builder builder = receiver.findStaticBuilder(name.name, charOffset, uri); |
+ Builder builder = receiver.findStaticBuilder(name.name, offset, uri); |
if (builder == null) { |
return buildThrowNoSuchMethodError(arguments); |
} |
if (builder.hasProblem) { |
- result = helper.buildProblemExpression(builder, charOffset); |
+ result = helper.buildProblemExpression(builder, offset); |
} else { |
Member target = builder.target; |
if (target != null) { |
if (target is Field) { |
result = buildMethodInvocation(new StaticGet(target), callName, |
- arguments, charOffset + (target.name?.name?.length ?? 0), |
+ arguments, offset + (target.name?.name?.length ?? 0), |
isNullAware: isNullAware); |
} else { |
result = helper.buildStaticInvocation(target, arguments) |
- ..fileOffset = charOffset; |
+ ..fileOffset = offset; |
} |
} else { |
- result = buildThrowNoSuchMethodError(arguments) |
- ..fileOffset = charOffset; |
+ result = buildThrowNoSuchMethodError(arguments)..fileOffset = offset; |
} |
} |
} else { |
result = buildMethodInvocation( |
- helper.toValue(receiver), name, arguments, charOffset, |
+ helper.toValue(receiver), name, arguments, offset, |
isNullAware: isNullAware); |
} |
return result; |
@@ -385,32 +440,31 @@ class SendAccessor extends IncompleteSend { |
return internalError("Unhandled"); |
} |
- Expression buildCompoundAssignment( |
- Name binaryOperator, Expression value, int charOffset, |
- {bool voidContext: false, Procedure interfaceTarget}) { |
+ Expression buildCompoundAssignment(Name binaryOperator, Expression value, |
+ {int offset, bool voidContext: false, Procedure interfaceTarget}) { |
return internalError("Unhandled"); |
} |
- Expression buildPrefixIncrement(Name binaryOperator, int charOffset, |
- {bool voidContext: false, Procedure interfaceTarget}) { |
+ Expression buildPrefixIncrement(Name binaryOperator, |
+ {int offset, bool voidContext: false, Procedure interfaceTarget}) { |
return internalError("Unhandled"); |
} |
- Expression buildPostfixIncrement(Name binaryOperator, int charOffset, |
- {bool voidContext: false, Procedure interfaceTarget}) { |
+ Expression buildPostfixIncrement(Name binaryOperator, |
+ {int offset, bool voidContext: false, Procedure interfaceTarget}) { |
return internalError("Unhandled"); |
} |
- Expression doInvocation(int charOffset, Arguments arguments) { |
+ Expression doInvocation(int offset, Arguments arguments) { |
return internalError("Unhandled"); |
} |
- toString() => "SendAccessor($charOffset, $name, $arguments)"; |
+ toString() => "SendAccessor($offset, $name, $arguments)"; |
} |
class IncompletePropertyAccessor extends IncompleteSend { |
- IncompletePropertyAccessor(BuilderHelper helper, int charOffset, Name name) |
- : super(helper, charOffset, name); |
+ IncompletePropertyAccessor(BuilderHelper helper, int offset, Name name) |
+ : super(helper, offset, name); |
String get plainNameForRead => name.name; |
@@ -433,10 +487,10 @@ class IncompletePropertyAccessor extends IncompleteSend { |
if (receiver is PrefixBuilder) { |
PrefixBuilder prefix = receiver; |
return helper.builderToFirstExpression( |
- prefix.exports[name.name], name.name, charOffset); |
+ prefix.exports[name.name], name.name, offset); |
} |
if (receiver is KernelClassBuilder) { |
- Builder builder = receiver.findStaticBuilder(name.name, charOffset, uri); |
+ Builder builder = receiver.findStaticBuilder(name.name, offset, uri); |
if (builder == null) { |
// If we find a setter, [builder] is an [AccessErrorBuilder], not null. |
return buildThrowNoSuchMethodError(new Arguments.empty(), |
@@ -446,16 +500,15 @@ class IncompletePropertyAccessor extends IncompleteSend { |
if (builder.isSetter) { |
setter = builder; |
} else if (builder.isGetter) { |
- setter = receiver.findStaticBuilder(name.name, charOffset, uri, |
- isSetter: true); |
+ setter = |
+ receiver.findStaticBuilder(name.name, offset, uri, isSetter: true); |
} else if (builder.isField && !builder.isFinal) { |
setter = builder; |
} |
- return new StaticAccessor.fromBuilder( |
- helper, builder, charOffset, setter); |
+ return new StaticAccessor.fromBuilder(helper, builder, offset, setter); |
} |
- return PropertyAccessor.make(helper, charOffset, helper.toValue(receiver), |
- name, null, null, isNullAware); |
+ return PropertyAccessor.make(helper, offset, helper.toValue(receiver), name, |
+ null, null, isNullAware); |
} |
Expression buildNullAwareAssignment(Expression value, DartType type, |
@@ -463,59 +516,58 @@ class IncompletePropertyAccessor extends IncompleteSend { |
return internalError("Unhandled"); |
} |
- Expression buildCompoundAssignment( |
- Name binaryOperator, Expression value, int charOffset, |
- {bool voidContext: false, Procedure interfaceTarget}) { |
+ Expression buildCompoundAssignment(Name binaryOperator, Expression value, |
+ {int offset, bool voidContext: false, Procedure interfaceTarget}) { |
return internalError("Unhandled"); |
} |
- Expression buildPrefixIncrement(Name binaryOperator, int charOffset, |
- {bool voidContext: false, Procedure interfaceTarget}) { |
+ Expression buildPrefixIncrement(Name binaryOperator, |
+ {int offset, bool voidContext: false, Procedure interfaceTarget}) { |
return internalError("Unhandled"); |
} |
- Expression buildPostfixIncrement(Name binaryOperator, int charOffset, |
- {bool voidContext: false, Procedure interfaceTarget}) { |
+ Expression buildPostfixIncrement(Name binaryOperator, |
+ {int offset, bool voidContext: false, Procedure interfaceTarget}) { |
return internalError("Unhandled"); |
} |
- Expression doInvocation(int charOffset, Arguments arguments) { |
+ Expression doInvocation(int offset, Arguments arguments) { |
return internalError("Unhandled"); |
} |
- toString() => "IncompletePropertyAccessor($charOffset, $name)"; |
+ toString() => "IncompletePropertyAccessor($offset, $name)"; |
} |
class IndexAccessor extends kernel.IndexAccessor with BuilderAccessor { |
final BuilderHelper helper; |
- IndexAccessor.internal(this.helper, int charOffset, Expression receiver, |
+ IndexAccessor.internal(this.helper, int offset, Expression receiver, |
Expression index, Procedure getter, Procedure setter) |
- : super.internal(receiver, index, getter, setter, charOffset); |
+ : super.internal(receiver, index, getter, setter, offset); |
String get plainNameForRead => "[]"; |
String get plainNameForWrite => "[]="; |
- Expression doInvocation(int charOffset, Arguments arguments) { |
+ Expression doInvocation(int offset, Arguments arguments) { |
return buildMethodInvocation( |
- buildSimpleRead(), callName, arguments, charOffset); |
+ buildSimpleRead(), callName, arguments, offset); |
} |
toString() => "IndexAccessor()"; |
static BuilderAccessor make( |
BuilderHelper helper, |
- int charOffset, |
+ int offset, |
Expression receiver, |
Expression index, |
Procedure getter, |
Procedure setter) { |
if (receiver is ThisExpression) { |
- return new ThisIndexAccessor(helper, charOffset, index, getter, setter); |
+ return new ThisIndexAccessor(helper, offset, index, getter, setter); |
} else { |
return new IndexAccessor.internal( |
- helper, charOffset, receiver, index, getter, setter); |
+ helper, offset, receiver, index, getter, setter); |
} |
} |
} |
@@ -523,36 +575,36 @@ class IndexAccessor extends kernel.IndexAccessor with BuilderAccessor { |
class PropertyAccessor extends kernel.PropertyAccessor with BuilderAccessor { |
final BuilderHelper helper; |
- PropertyAccessor.internal(this.helper, int charOffset, Expression receiver, |
+ PropertyAccessor.internal(this.helper, int offset, Expression receiver, |
Name name, Member getter, Member setter) |
- : super.internal(receiver, name, getter, setter, charOffset); |
+ : super.internal(receiver, name, getter, setter, offset); |
String get plainNameForRead => name.name; |
bool get isThisPropertyAccessor => receiver is ThisExpression; |
- Expression doInvocation(int charOffset, Arguments arguments) { |
- return buildMethodInvocation(receiver, name, arguments, charOffset); |
+ Expression doInvocation(int offset, Arguments arguments) { |
+ return buildMethodInvocation(receiver, name, arguments, offset); |
} |
toString() => "PropertyAccessor()"; |
static BuilderAccessor make( |
BuilderHelper helper, |
- int charOffset, |
+ int offset, |
Expression receiver, |
Name name, |
Member getter, |
Member setter, |
bool isNullAware) { |
if (receiver is ThisExpression) { |
- return new ThisPropertyAccessor(helper, charOffset, name, getter, setter); |
+ return new ThisPropertyAccessor(helper, offset, name, getter, setter); |
} else { |
return isNullAware |
? new NullAwarePropertyAccessor( |
- helper, charOffset, receiver, name, getter, setter, null) |
+ helper, offset, receiver, name, getter, setter, null) |
: new PropertyAccessor.internal( |
- helper, charOffset, receiver, name, getter, setter); |
+ helper, offset, receiver, name, getter, setter); |
} |
} |
} |
@@ -560,14 +612,13 @@ class PropertyAccessor extends kernel.PropertyAccessor with BuilderAccessor { |
class StaticAccessor extends kernel.StaticAccessor with BuilderAccessor { |
final BuilderHelper helper; |
- StaticAccessor( |
- this.helper, int charOffset, Member readTarget, Member writeTarget) |
- : super(readTarget, writeTarget, charOffset) { |
+ StaticAccessor(this.helper, int offset, Member readTarget, Member writeTarget) |
+ : super(readTarget, writeTarget, offset) { |
assert(readTarget != null || writeTarget != null); |
} |
factory StaticAccessor.fromBuilder(BuilderHelper helper, Builder builder, |
- int charOffset, Builder builderSetter) { |
+ int offset, Builder builderSetter) { |
if (builder is AccessErrorBuilder) { |
AccessErrorBuilder error = builder; |
builder = error.builder; |
@@ -584,18 +635,18 @@ class StaticAccessor extends kernel.StaticAccessor with BuilderAccessor { |
setter = builderSetter.target; |
} |
} |
- return new StaticAccessor(helper, charOffset, getter, setter); |
+ return new StaticAccessor(helper, offset, getter, setter); |
} |
String get plainNameForRead => (readTarget ?? writeTarget).name.name; |
- Expression doInvocation(int charOffset, Arguments arguments) { |
+ Expression doInvocation(int offset, Arguments arguments) { |
if (readTarget == null || isFieldOrGetter(readTarget)) { |
return buildMethodInvocation(buildSimpleRead(), callName, arguments, |
- charOffset + (readTarget?.name?.name?.length ?? 0)); |
+ offset + (readTarget?.name?.name?.length ?? 0)); |
} else { |
return helper.buildStaticInvocation(readTarget, arguments) |
- ..fileOffset = charOffset; |
+ ..fileOffset = offset; |
} |
} |
@@ -607,18 +658,18 @@ class SuperPropertyAccessor extends kernel.SuperPropertyAccessor |
final BuilderHelper helper; |
SuperPropertyAccessor( |
- this.helper, int charOffset, Name name, Member getter, Member setter) |
- : super(name, getter, setter, charOffset); |
+ this.helper, int offset, Name name, Member getter, Member setter) |
+ : super(name, getter, setter, offset); |
String get plainNameForRead => name.name; |
- Expression doInvocation(int charOffset, Arguments arguments) { |
+ Expression doInvocation(int offset, Arguments arguments) { |
if (getter == null || isFieldOrGetter(getter)) { |
return buildMethodInvocation( |
- buildSimpleRead(), callName, arguments, charOffset); |
+ buildSimpleRead(), callName, arguments, offset); |
} else { |
return new DirectMethodInvocation(new ThisExpression(), getter, arguments) |
- ..fileOffset = charOffset; |
+ ..fileOffset = offset; |
} |
} |
@@ -628,19 +679,17 @@ class SuperPropertyAccessor extends kernel.SuperPropertyAccessor |
class ThisIndexAccessor extends kernel.ThisIndexAccessor with BuilderAccessor { |
final BuilderHelper helper; |
- final int charOffset; |
- |
- ThisIndexAccessor(this.helper, this.charOffset, Expression index, |
- Procedure getter, Procedure setter) |
- : super(index, getter, setter); |
+ ThisIndexAccessor(this.helper, int offset, Expression index, Procedure getter, |
+ Procedure setter) |
+ : super(index, getter, setter, offset); |
String get plainNameForRead => "[]"; |
String get plainNameForWrite => "[]="; |
- Expression doInvocation(int charOffset, Arguments arguments) { |
+ Expression doInvocation(int offset, Arguments arguments) { |
return buildMethodInvocation( |
- buildSimpleRead(), callName, arguments, charOffset); |
+ buildSimpleRead(), callName, arguments, offset); |
} |
toString() => "ThisIndexAccessor()"; |
@@ -650,19 +699,17 @@ class SuperIndexAccessor extends kernel.SuperIndexAccessor |
with BuilderAccessor { |
final BuilderHelper helper; |
- final int charOffset; |
- |
- SuperIndexAccessor(this.helper, this.charOffset, Expression index, |
- Member getter, Member setter) |
- : super(index, getter, setter); |
+ SuperIndexAccessor( |
+ this.helper, int offset, Expression index, Member getter, Member setter) |
+ : super(index, getter, setter, offset); |
String get plainNameForRead => "[]"; |
String get plainNameForWrite => "[]="; |
- Expression doInvocation(int charOffset, Arguments arguments) { |
+ Expression doInvocation(int offset, Arguments arguments) { |
return buildMethodInvocation( |
- buildSimpleRead(), callName, arguments, charOffset); |
+ buildSimpleRead(), callName, arguments, offset); |
} |
toString() => "SuperIndexAccessor()"; |
@@ -673,22 +720,21 @@ class ThisPropertyAccessor extends kernel.ThisPropertyAccessor |
final BuilderHelper helper; |
ThisPropertyAccessor( |
- this.helper, int charOffset, Name name, Member getter, Member setter) |
- : super(name, getter, setter, charOffset); |
+ this.helper, int offset, Name name, Member getter, Member setter) |
+ : super(name, getter, setter, offset); |
String get plainNameForRead => name.name; |
bool get isThisPropertyAccessor => true; |
- Expression doInvocation(int charOffset, Arguments arguments) { |
+ Expression doInvocation(int offset, Arguments arguments) { |
Member interfaceTarget = getter; |
if (interfaceTarget is Field) { |
// TODO(ahe): In strong mode we should probably rewrite this to |
// `this.name.call(arguments)`. |
interfaceTarget = null; |
} |
- return buildMethodInvocation( |
- new ThisExpression(), name, arguments, charOffset); |
+ return buildMethodInvocation(new ThisExpression(), name, arguments, offset); |
} |
toString() => "ThisPropertyAccessor()"; |
@@ -698,15 +744,13 @@ class NullAwarePropertyAccessor extends kernel.NullAwarePropertyAccessor |
with BuilderAccessor { |
final BuilderHelper helper; |
- final int charOffset; |
- |
- NullAwarePropertyAccessor(this.helper, this.charOffset, Expression receiver, |
+ NullAwarePropertyAccessor(this.helper, int offset, Expression receiver, |
Name name, Member getter, Member setter, DartType type) |
- : super(receiver, name, getter, setter, type); |
+ : super(receiver, name, getter, setter, type, offset); |
String get plainNameForRead => name.name; |
- Expression doInvocation(int charOffset, Arguments arguments) { |
+ Expression doInvocation(int offset, Arguments arguments) { |
return internalError("Not implemented yet."); |
} |
@@ -716,17 +760,17 @@ class NullAwarePropertyAccessor extends kernel.NullAwarePropertyAccessor |
class VariableAccessor extends kernel.VariableAccessor with BuilderAccessor { |
final BuilderHelper helper; |
- VariableAccessor(this.helper, int charOffset, VariableDeclaration variable, |
+ VariableAccessor(this.helper, int offset, VariableDeclaration variable, |
[DartType promotedType]) |
- : super.internal(variable, charOffset, promotedType); |
+ : super(variable, promotedType, offset); |
String get plainNameForRead => variable.name; |
- Expression doInvocation(int charOffset, Arguments arguments) { |
+ Expression doInvocation(int offset, Arguments arguments) { |
// Normally the offset is at the start of the token, but in this case, |
// because we insert a '.call', we want it at the end instead. |
return buildMethodInvocation(buildSimpleRead(), callName, arguments, |
- charOffset + (variable.name?.length ?? 0)); |
+ offset + (variable.name?.length ?? 0)); |
} |
toString() => "VariableAccessor()"; |
@@ -737,7 +781,7 @@ bool isFieldOrGetter(Member member) { |
} |
Expression buildMethodInvocation( |
- Expression receiver, Name name, Arguments arguments, int charOffset, |
+ Expression receiver, Name name, Arguments arguments, int offset, |
{bool isNullAware: false}) { |
if (isNullAware) { |
VariableDeclaration variable = new VariableDeclaration.forValue(receiver); |
@@ -747,10 +791,9 @@ Expression buildMethodInvocation( |
buildIsNull(new VariableGet(variable)), |
new NullLiteral(), |
new MethodInvocation(new VariableGet(variable), name, arguments) |
- ..fileOffset = charOffset, |
+ ..fileOffset = offset, |
const DynamicType())); |
} else { |
- return new MethodInvocation(receiver, name, arguments) |
- ..fileOffset = charOffset; |
+ return new MethodInvocation(receiver, name, arguments)..fileOffset = offset; |
} |
} |