Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Unified Diff: pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart

Issue 2841863002: Change accessors and AstFactory to use tokens rather than file offsets. (Closed)
Patch Set: Address code review comments, rebase Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
diff --git a/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart b/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
index 4a731400740f86d03c70ac95e16c3dbaa9a07277..bdaf32bd151f4753b8a6a8f6663fdec1500d8bbf 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
@@ -6,6 +6,10 @@ library fasta.fasta_accessors;
export 'frontend_accessors.dart' show wrapInvalid;
+import 'package:front_end/src/fasta/kernel/utils.dart' show offsetForToken;
+
+import 'package:front_end/src/fasta/scanner/token.dart' show Token;
+
import 'frontend_accessors.dart' show Accessor, buildIsNull, makeLet;
import 'package:front_end/src/fasta/builder/ast_factory.dart' show AstFactory;
@@ -54,7 +58,7 @@ abstract class BuilderHelper {
Member lookupSuperMember(Name name, {bool isSetter: false});
- scopeLookup(Scope scope, String name, int offset,
+ scopeLookup(Scope scope, String name, Token token,
{bool isQualified: false, PrefixBuilder prefix});
finishSend(Object receiver, Arguments arguments, int offset);
@@ -82,7 +86,7 @@ abstract class BuilderHelper {
bool checkArguments(FunctionNode function, Arguments arguments,
List<TypeParameter> typeParameters);
- StaticGet makeStaticGet(Member readTarget, int offset);
+ StaticGet makeStaticGet(Member readTarget, Token token);
}
abstract class FastaAccessor implements Accessor {
@@ -100,6 +104,7 @@ abstract class FastaAccessor implements Accessor {
Initializer buildFieldInitializer(
Map<String, FieldInitializer> initializers) {
+ int offset = offsetForToken(token);
return helper.buildInvalidIntializer(
helper.buildCompileTimeError(
// TODO(ahe): This error message is really bad.
@@ -123,11 +128,11 @@ abstract class FastaAccessor implements Accessor {
/* Expression | FastaAccessor */ buildPropertyAccess(
IncompleteSend send, bool isNullAware) {
if (send is SendAccessor) {
- return buildMethodInvocation(
- buildSimpleRead(), send.name, send.arguments, send.offset,
+ return buildMethodInvocation(buildSimpleRead(), send.name, send.arguments,
+ offsetForToken(send.token),
isNullAware: isNullAware);
} else {
- return PropertyAccessor.make(helper, send.offset, buildSimpleRead(),
+ return PropertyAccessor.make(helper, send.token, buildSimpleRead(),
send.name, null, null, isNullAware);
}
}
@@ -139,8 +144,8 @@ abstract class FastaAccessor implements Accessor {
bool isSetter: false,
String name,
int offset}) {
- return helper.throwNoSuchMethodError(
- name ?? plainNameForWrite, arguments, offset ?? this.offset,
+ return helper.throwNoSuchMethodError(name ?? plainNameForWrite, arguments,
+ offset ?? offsetForToken(this.token),
isGetter: isGetter, isSetter: isSetter, isSuper: isSuper);
}
@@ -256,13 +261,13 @@ abstract class ErrorAccessor implements FastaAccessor {
class ThisAccessor extends FastaAccessor {
final BuilderHelper helper;
- final int offset;
+ final Token token;
final bool isInitializer;
final bool isSuper;
- ThisAccessor(this.helper, this.offset, this.isInitializer,
+ ThisAccessor(this.helper, this.token, this.isInitializer,
{this.isSuper: false});
@override
@@ -288,13 +293,14 @@ class ThisAccessor extends FastaAccessor {
return new ThisExpression();
} else {
return helper.buildCompileTimeError(
- "Can't use `super` as an expression.", offset);
+ "Can't use `super` as an expression.", offsetForToken(token));
}
}
Initializer buildFieldInitializer(
Map<String, FieldInitializer> initializers) {
String keyword = isSuper ? "super" : "this";
+ int offset = offsetForToken(token);
return helper.buildInvalidIntializer(
helper.buildCompileTimeError(
"Can't use '$keyword' here, did you mean '$keyword()'?", offset),
@@ -304,23 +310,23 @@ class ThisAccessor extends FastaAccessor {
buildPropertyAccess(IncompleteSend send, bool isNullAware) {
if (isInitializer && send is SendAccessor) {
return buildConstructorInitializer(
- send.offset, send.name, send.arguments);
+ offsetForToken(send.token), 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, offset);
+ MethodInvocation result = buildMethodInvocation(new ThisExpression(),
+ send.name, send.arguments, offsetForToken(token));
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.offset, send.name, getter, setter);
+ helper, send.token, send.name, getter, setter);
} else {
return new ThisPropertyAccessor(
- helper, send.offset, send.name, null, null);
+ helper, send.token, send.name, null, null);
}
}
}
@@ -384,21 +390,24 @@ class ThisAccessor extends FastaAccessor {
Expression buildAssignmentError() {
String message =
isSuper ? "Can't assign to 'super'." : "Can't assign to 'this'.";
- return helper.buildCompileTimeError(message, offset);
+ return helper.buildCompileTimeError(message, offsetForToken(token));
}
- toString() => "ThisAccessor($offset${isSuper ? ', super' : ''})";
+ toString() {
+ int offset = offsetForToken(token);
+ return "ThisAccessor($offset${isSuper ? ', super' : ''})";
+ }
}
abstract class IncompleteSend extends FastaAccessor {
final BuilderHelper helper;
@override
- final int offset;
+ final Token token;
final Name name;
- IncompleteSend(this.helper, this.offset, this.name);
+ IncompleteSend(this.helper, this.token, this.name);
@override
Expression get builtBinary => internalError("Unsupported operation.");
@@ -422,13 +431,14 @@ abstract class IncompleteSend extends FastaAccessor {
class IncompleteError extends IncompleteSend with ErrorAccessor {
final Object error;
- IncompleteError(BuilderHelper helper, int offset, this.error)
- : super(helper, offset, null);
+ IncompleteError(BuilderHelper helper, Token token, this.error)
+ : super(helper, token, null);
@override
Expression buildError(Arguments arguments,
{bool isGetter: false, bool isSetter: false, int offset}) {
- return helper.buildCompileTimeError(error, offset ?? this.offset);
+ return helper.buildCompileTimeError(
+ error, offset ?? offsetForToken(this.token));
}
@override
@@ -438,8 +448,8 @@ class IncompleteError extends IncompleteSend with ErrorAccessor {
class SendAccessor extends IncompleteSend {
final Arguments arguments;
- SendAccessor(BuilderHelper helper, int offset, Name name, this.arguments)
- : super(helper, offset, name) {
+ SendAccessor(BuilderHelper helper, Token token, Name name, this.arguments)
+ : super(helper, token, name) {
assert(arguments != null);
}
@@ -464,36 +474,41 @@ class SendAccessor extends IncompleteSend {
}
if (receiver is PrefixBuilder) {
PrefixBuilder prefix = receiver;
- receiver = helper.scopeLookup(prefix.exports, name.name, offset,
+ receiver = helper.scopeLookup(prefix.exports, name.name, token,
isQualified: true, prefix: prefix);
- return helper.finishSend(receiver, arguments, offset);
+ return helper.finishSend(receiver, arguments, offsetForToken(token));
}
Expression result;
if (receiver is KernelClassBuilder) {
- Builder builder = receiver.findStaticBuilder(name.name, offset, uri);
+ Builder builder =
+ receiver.findStaticBuilder(name.name, offsetForToken(token), uri);
if (builder == null || builder is AccessErrorBuilder) {
return buildThrowNoSuchMethodError(arguments);
}
if (builder.hasProblem) {
- result = helper.buildProblemExpression(builder, offset);
+ result = helper.buildProblemExpression(builder, offsetForToken(token));
} else {
Member target = builder.target;
if (target != null) {
if (target is Field) {
- result = buildMethodInvocation(new StaticGet(target), callName,
- arguments, offset + (target.name?.name?.length ?? 0),
+ result = buildMethodInvocation(
+ new StaticGet(target),
+ callName,
+ arguments,
+ offsetForToken(token) + (target.name?.name?.length ?? 0),
isNullAware: isNullAware);
} else {
result = helper.buildStaticInvocation(target, arguments)
- ..fileOffset = offset;
+ ..fileOffset = offsetForToken(token);
}
} else {
- result = buildThrowNoSuchMethodError(arguments)..fileOffset = offset;
+ result = buildThrowNoSuchMethodError(arguments)
+ ..fileOffset = offsetForToken(token);
}
}
} else {
result = buildMethodInvocation(
- helper.toValue(receiver), name, arguments, offset,
+ helper.toValue(receiver), name, arguments, offsetForToken(token),
isNullAware: isNullAware);
}
return result;
@@ -523,12 +538,15 @@ class SendAccessor extends IncompleteSend {
return internalError("Unhandled");
}
- toString() => "SendAccessor($offset, $name, $arguments)";
+ toString() {
+ int offset = offsetForToken(token);
+ return "SendAccessor($offset, $name, $arguments)";
+ }
}
class IncompletePropertyAccessor extends IncompleteSend {
- IncompletePropertyAccessor(BuilderHelper helper, int offset, Name name)
- : super(helper, offset, name);
+ IncompletePropertyAccessor(BuilderHelper helper, Token token, Name name)
+ : super(helper, token, name);
String get plainNameForRead => name.name;
@@ -550,11 +568,12 @@ class IncompletePropertyAccessor extends IncompleteSend {
}
if (receiver is PrefixBuilder) {
PrefixBuilder prefix = receiver;
- return helper.scopeLookup(prefix.exports, name.name, offset,
+ return helper.scopeLookup(prefix.exports, name.name, token,
isQualified: true, prefix: prefix);
}
if (receiver is KernelClassBuilder) {
- Builder builder = receiver.findStaticBuilder(name.name, offset, uri);
+ Builder builder =
+ receiver.findStaticBuilder(name.name, offsetForToken(token), uri);
if (builder == null) {
// If we find a setter, [builder] is an [AccessErrorBuilder], not null.
return buildThrowNoSuchMethodError(new Arguments.empty(),
@@ -564,15 +583,16 @@ class IncompletePropertyAccessor extends IncompleteSend {
if (builder.isSetter) {
setter = builder;
} else if (builder.isGetter) {
- setter =
- receiver.findStaticBuilder(name.name, offset, uri, isSetter: true);
+ setter = receiver.findStaticBuilder(
+ name.name, offsetForToken(token), uri,
+ isSetter: true);
} else if (builder.isField && !builder.isFinal) {
setter = builder;
}
- return new StaticAccessor.fromBuilder(helper, builder, offset, setter);
+ return new StaticAccessor.fromBuilder(helper, builder, token, setter);
}
- return PropertyAccessor.make(helper, offset, helper.toValue(receiver), name,
- null, null, isNullAware);
+ return PropertyAccessor.make(
+ helper, token, helper.toValue(receiver), name, null, null, isNullAware);
}
Expression buildNullAwareAssignment(Expression value, DartType type,
@@ -599,15 +619,18 @@ class IncompletePropertyAccessor extends IncompleteSend {
return internalError("Unhandled");
}
- toString() => "IncompletePropertyAccessor($offset, $name)";
+ toString() {
+ int offset = offsetForToken(token);
+ return "IncompletePropertyAccessor($offset, $name)";
+ }
}
class IndexAccessor extends kernel.IndexAccessor with FastaAccessor {
final BuilderHelper helper;
- IndexAccessor.internal(this.helper, int offset, Expression receiver,
+ IndexAccessor.internal(this.helper, Token token, Expression receiver,
Expression index, Procedure getter, Procedure setter)
- : super.internal(receiver, index, getter, setter, offset);
+ : super.internal(receiver, index, getter, setter, token);
String get plainNameForRead => "[]";
@@ -622,16 +645,16 @@ class IndexAccessor extends kernel.IndexAccessor with FastaAccessor {
static FastaAccessor make(
BuilderHelper helper,
- int offset,
+ Token token,
Expression receiver,
Expression index,
Procedure getter,
Procedure setter) {
if (receiver is ThisExpression) {
- return new ThisIndexAccessor(helper, offset, index, getter, setter);
+ return new ThisIndexAccessor(helper, token, index, getter, setter);
} else {
return new IndexAccessor.internal(
- helper, offset, receiver, index, getter, setter);
+ helper, token, receiver, index, getter, setter);
}
}
}
@@ -639,9 +662,9 @@ class IndexAccessor extends kernel.IndexAccessor with FastaAccessor {
class PropertyAccessor extends kernel.PropertyAccessor with FastaAccessor {
final BuilderHelper helper;
- PropertyAccessor.internal(this.helper, int offset, Expression receiver,
+ PropertyAccessor.internal(this.helper, Token token, Expression receiver,
Name name, Member getter, Member setter)
- : super.internal(receiver, name, getter, setter, offset);
+ : super.internal(receiver, name, getter, setter, token);
String get plainNameForRead => name.name;
@@ -655,33 +678,33 @@ class PropertyAccessor extends kernel.PropertyAccessor with FastaAccessor {
static FastaAccessor make(
BuilderHelper helper,
- int offset,
+ Token token,
Expression receiver,
Name name,
Member getter,
Member setter,
bool isNullAware) {
if (receiver is ThisExpression) {
- return new ThisPropertyAccessor(helper, offset, name, getter, setter);
+ return new ThisPropertyAccessor(helper, token, name, getter, setter);
} else {
return isNullAware
? new NullAwarePropertyAccessor(
- helper, offset, receiver, name, getter, setter, null)
+ helper, token, receiver, name, getter, setter, null)
: new PropertyAccessor.internal(
- helper, offset, receiver, name, getter, setter);
+ helper, token, receiver, name, getter, setter);
}
}
}
class StaticAccessor extends kernel.StaticAccessor with FastaAccessor {
StaticAccessor(
- BuilderHelper helper, int offset, Member readTarget, Member writeTarget)
- : super(helper, readTarget, writeTarget, offset) {
+ BuilderHelper helper, Token token, Member readTarget, Member writeTarget)
+ : super(helper, readTarget, writeTarget, token) {
assert(readTarget != null || writeTarget != null);
}
factory StaticAccessor.fromBuilder(BuilderHelper helper, Builder builder,
- int offset, Builder builderSetter) {
+ Token token, Builder builderSetter) {
if (builder is AccessErrorBuilder) {
AccessErrorBuilder error = builder;
builder = error.builder;
@@ -698,7 +721,7 @@ class StaticAccessor extends kernel.StaticAccessor with FastaAccessor {
setter = builderSetter.target;
}
}
- return new StaticAccessor(helper, offset, getter, setter);
+ return new StaticAccessor(helper, token, getter, setter);
}
String get plainNameForRead => (readTarget ?? writeTarget).name.name;
@@ -721,8 +744,8 @@ class SuperPropertyAccessor extends kernel.SuperPropertyAccessor
final BuilderHelper helper;
SuperPropertyAccessor(
- this.helper, int offset, Name name, Member getter, Member setter)
- : super(name, getter, setter, offset);
+ this.helper, Token token, Name name, Member getter, Member setter)
+ : super(name, getter, setter, token);
String get plainNameForRead => name.name;
@@ -742,9 +765,9 @@ class SuperPropertyAccessor extends kernel.SuperPropertyAccessor
class ThisIndexAccessor extends kernel.ThisIndexAccessor with FastaAccessor {
final BuilderHelper helper;
- ThisIndexAccessor(this.helper, int offset, Expression index, Procedure getter,
- Procedure setter)
- : super(index, getter, setter, offset);
+ ThisIndexAccessor(this.helper, Token token, Expression index,
+ Procedure getter, Procedure setter)
+ : super(index, getter, setter, token);
String get plainNameForRead => "[]";
@@ -762,8 +785,8 @@ class SuperIndexAccessor extends kernel.SuperIndexAccessor with FastaAccessor {
final BuilderHelper helper;
SuperIndexAccessor(
- this.helper, int offset, Expression index, Member getter, Member setter)
- : super(index, getter, setter, offset);
+ this.helper, Token token, Expression index, Member getter, Member setter)
+ : super(index, getter, setter, token);
String get plainNameForRead => "[]";
@@ -782,8 +805,8 @@ class ThisPropertyAccessor extends kernel.ThisPropertyAccessor
final BuilderHelper helper;
ThisPropertyAccessor(
- this.helper, int offset, Name name, Member getter, Member setter)
- : super(name, getter, setter, offset);
+ this.helper, Token token, Name name, Member getter, Member setter)
+ : super(name, getter, setter, token);
String get plainNameForRead => name.name;
@@ -806,9 +829,9 @@ class NullAwarePropertyAccessor extends kernel.NullAwarePropertyAccessor
with FastaAccessor {
final BuilderHelper helper;
- NullAwarePropertyAccessor(this.helper, int offset, Expression receiver,
+ NullAwarePropertyAccessor(this.helper, Token token, Expression receiver,
Name name, Member getter, Member setter, DartType type)
- : super(receiver, name, getter, setter, type, offset);
+ : super(receiver, name, getter, setter, type, token);
String get plainNameForRead => name.name;
@@ -823,9 +846,9 @@ class VariableAccessor extends kernel.VariableAccessor with FastaAccessor {
@override
final BuilderHelper helper;
- VariableAccessor(this.helper, int offset, VariableDeclaration variable,
+ VariableAccessor(this.helper, Token token, VariableDeclaration variable,
[DartType promotedType])
- : super(variable, promotedType, offset);
+ : super(variable, promotedType, token);
String get plainNameForRead => variable.name;
@@ -845,8 +868,8 @@ class ReadOnlyAccessor extends kernel.ReadOnlyAccessor with FastaAccessor {
final String plainNameForRead;
ReadOnlyAccessor(
- this.helper, Expression expression, this.plainNameForRead, int offset)
- : super(expression, offset);
+ this.helper, Expression expression, this.plainNameForRead, Token token)
+ : super(expression, token);
Expression doInvocation(int offset, Arguments arguments) {
return buildMethodInvocation(
@@ -856,18 +879,18 @@ class ReadOnlyAccessor extends kernel.ReadOnlyAccessor with FastaAccessor {
class ParenthesizedExpression extends ReadOnlyAccessor {
ParenthesizedExpression(
- BuilderHelper helper, Expression expression, int offset)
- : super(helper, expression, "<a parenthesized expression>", offset);
+ BuilderHelper helper, Expression expression, Token token)
+ : super(helper, expression, "<a parenthesized expression>", token);
Expression makeInvalidWrite(Expression value) {
return helper.buildCompileTimeError(
- "Can't assign to a parenthesized expression.", offset);
+ "Can't assign to a parenthesized expression.", offsetForToken(token));
}
}
class UnresolvedAccessor extends FastaAccessor with ErrorAccessor {
@override
- final int offset;
+ final Token token;
@override
final BuilderHelper helper;
@@ -875,7 +898,7 @@ class UnresolvedAccessor extends FastaAccessor with ErrorAccessor {
@override
final Name name;
- UnresolvedAccessor(this.helper, this.name, this.offset);
+ UnresolvedAccessor(this.helper, this.name, this.token);
Expression doInvocation(int charOffset, Arguments arguments) {
return buildError(arguments, offset: charOffset);
@@ -885,7 +908,7 @@ class UnresolvedAccessor extends FastaAccessor with ErrorAccessor {
Expression buildError(Arguments arguments,
{bool isGetter: false, bool isSetter: false, int offset}) {
return helper.throwNoSuchMethodError(
- plainNameForRead, arguments, offset ?? this.offset,
+ plainNameForRead, arguments, offset ?? offsetForToken(this.token),
isGetter: isGetter, isSetter: isSetter);
}
}
« no previous file with comments | « pkg/front_end/lib/src/fasta/kernel/body_builder.dart ('k') | pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698