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

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

Issue 2916333002: Setup correct scope for initializers and complain about fields initialized more than once. (Closed)
Patch Set: More typos. Created 3 years, 6 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 4ab29f91e69b9370f2b6842a017b182944c93363..f5b921fc2b7d14f4ef2351379d58d0e28ec3fd53 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
@@ -73,7 +73,10 @@ abstract class BuilderHelper {
Expression buildCompileTimeError(error, [int offset]);
- Initializer buildInvalidIntializer(Expression expression, [int offset]);
+ Initializer buildInvalidInitializer(Expression expression, [int offset]);
+
+ Initializer buildFieldInitializer(
+ String name, int offset, Expression expression);
Initializer buildSuperInitializer(
Constructor constructor, Arguments arguments,
@@ -123,10 +126,9 @@ abstract class FastaAccessor implements Accessor {
Expression buildForEffect() => buildSimpleRead();
- Initializer buildFieldInitializer(
- Map<String, FieldInitializer> initializers) {
+ Initializer buildFieldInitializer(Map<String, int> initializedFields) {
int offset = offsetForToken(token);
- return helper.buildInvalidIntializer(
+ return helper.buildInvalidInitializer(
helper.buildCompileTimeError(
// TODO(ahe): This error message is really bad.
"Can't use $plainNameForRead here.",
@@ -192,9 +194,8 @@ abstract class ErrorAccessor implements FastaAccessor {
withReceiver(Object receiver, int operatorOffset, {bool isNullAware}) => this;
@override
- Initializer buildFieldInitializer(
- Map<String, FieldInitializer> initializers) {
- return helper.buildInvalidIntializer(
+ Initializer buildFieldInitializer(Map<String, int> initializedFields) {
+ return helper.buildInvalidInitializer(
buildError(new Arguments.empty(), isSetter: true));
}
@@ -293,11 +294,11 @@ class ThisAccessor extends FastaAccessor {
}
}
- Initializer buildFieldInitializer(
- Map<String, FieldInitializer> initializers) {
+ @override
+ Initializer buildFieldInitializer(Map<String, int> initializedFields) {
String keyword = isSuper ? "super" : "this";
int offset = offsetForToken(token);
- return helper.buildInvalidIntializer(
+ return helper.buildInvalidInitializer(
helper.buildCompileTimeError(
"Can't use '$keyword' here, did you mean '$keyword()'?", offset),
offset);
@@ -346,7 +347,7 @@ class ThisAccessor extends FastaAccessor {
if (constructor == null ||
!helper.checkArguments(
constructor.function, arguments, <TypeParameter>[])) {
- return helper.buildInvalidIntializer(
+ return helper.buildInvalidInitializer(
buildThrowNoSuchMethodError(arguments,
isSuper: isSuper, name: name.name, offset: offset),
offset);
@@ -779,6 +780,12 @@ class NullAwarePropertyAccessor extends kernel.NullAwarePropertyAccessor
toString() => "NullAwarePropertyAccessor()";
}
+int adjustForImplicitCall(String name, int offset) {
+ // 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 offset + (name?.length ?? 0);
+}
+
class VariableAccessor extends kernel.VariableAccessor with FastaAccessor {
VariableAccessor(
BuilderHelper helper, Token token, VariableDeclaration variable,
@@ -788,10 +795,8 @@ class VariableAccessor extends kernel.VariableAccessor with FastaAccessor {
String get plainNameForRead => variable.name;
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 helper.buildMethodInvocation(buildSimpleRead(), callName, arguments,
- offset + (variable.name?.length ?? 0));
+ adjustForImplicitCall(plainNameForRead, offset));
}
toString() => "VariableAccessor()";
@@ -805,15 +810,15 @@ class ReadOnlyAccessor extends kernel.ReadOnlyAccessor with FastaAccessor {
: super(helper, expression, token);
Expression doInvocation(int offset, Arguments arguments) {
- return helper.buildMethodInvocation(
- buildSimpleRead(), callName, arguments, offset);
+ return helper.buildMethodInvocation(buildSimpleRead(), callName, arguments,
+ adjustForImplicitCall(plainNameForRead, offset));
}
}
class ParenthesizedExpression extends ReadOnlyAccessor {
ParenthesizedExpression(
BuilderHelper helper, Expression expression, Token token)
- : super(helper, expression, "<a parenthesized expression>", token);
+ : super(helper, expression, null, token);
Expression makeInvalidWrite(Expression value) {
return helper.buildCompileTimeError(
« no previous file with comments | « pkg/front_end/lib/src/fasta/kernel/body_builder.dart ('k') | pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698