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

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

Issue 2927613002: Improve NSM handling. (Closed)
Patch Set: Address review comments. 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
« no previous file with comments | « pkg/front_end/lib/src/fasta/kernel/body_builder.dart ('k') | pkg/front_end/lib/src/fasta/loader.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 843ac200e4e7bb512347824c03dd1400c97145e7..0f5a467466b76c5bd9adf01f7f5b47509bf42abc 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
@@ -91,8 +91,12 @@ abstract class BuilderHelper {
Expression buildProblemExpression(ProblemBuilder builder, int offset);
Expression throwNoSuchMethodError(
- String name, Arguments arguments, int offset,
- {bool isSuper, bool isGetter, bool isSetter});
+ Expression receiver, String name, Arguments arguments, int offset,
+ {bool isSuper, bool isGetter, bool isSetter, bool isStatic});
+
+ Expression invokeSuperNoSuchMethod(
+ String name, Arguments arguments, int charOffset,
+ {bool isGetter, bool isSetter});
bool checkArguments(FunctionNode function, Arguments arguments,
List<TypeParameter> typeParameters);
@@ -137,11 +141,16 @@ abstract class FastaAccessor implements Accessor {
}
Expression makeInvalidRead() {
- return buildThrowNoSuchMethodError(new Arguments.empty(), isGetter: true);
+ return buildThrowNoSuchMethodError(
+ new NullLiteral()..fileOffset = offsetForToken(token),
+ new Arguments.empty(),
+ isGetter: true);
}
Expression makeInvalidWrite(Expression value) {
- return buildThrowNoSuchMethodError(new KernelArguments(<Expression>[value]),
+ return buildThrowNoSuchMethodError(
+ new NullLiteral()..fileOffset = offsetForToken(token),
+ new KernelArguments(<Expression>[value]),
isSetter: true);
}
@@ -165,15 +174,19 @@ abstract class FastaAccessor implements Accessor {
}
/* Expression | FastaAccessor */ buildThrowNoSuchMethodError(
- Arguments arguments,
+ Expression receiver, Arguments arguments,
{bool isSuper: false,
bool isGetter: false,
bool isSetter: false,
+ bool isStatic: false,
String name,
int offset}) {
- return helper.throwNoSuchMethodError(name ?? plainNameForWrite, arguments,
- offset ?? offsetForToken(this.token),
- isGetter: isGetter, isSetter: isSetter, isSuper: isSuper);
+ return helper.throwNoSuchMethodError(receiver, name ?? plainNameForWrite,
+ arguments, offset ?? offsetForToken(this.token),
+ isGetter: isGetter,
+ isSetter: isSetter,
+ isSuper: isSuper,
+ isStatic: isStatic);
}
bool get isThisPropertyAccessor => false;
@@ -211,10 +224,11 @@ abstract class ErrorAccessor implements FastaAccessor {
}
@override
- buildThrowNoSuchMethodError(Arguments arguments,
+ buildThrowNoSuchMethodError(Expression receiver, Arguments arguments,
{bool isSuper: false,
- isGetter: false,
- isSetter: false,
+ bool isGetter: false,
+ bool isSetter: false,
+ bool isStatic: false,
String name,
int offset}) {
return this;
@@ -348,7 +362,8 @@ class ThisAccessor extends FastaAccessor {
!helper.checkArguments(
constructor.function, arguments, <TypeParameter>[])) {
return helper.buildInvalidInitializer(
- buildThrowNoSuchMethodError(arguments,
+ buildThrowNoSuchMethodError(
+ new NullLiteral()..fileOffset = offset, arguments,
isSuper: isSuper, name: name.name, offset: offset),
offset);
} else if (isSuper) {
@@ -700,6 +715,21 @@ class SuperPropertyAccessor extends kernel.SuperPropertyAccessor
}
}
+ Expression makeInvalidRead() {
+ int offset = offsetForToken(token);
+ return helper.invokeSuperNoSuchMethod(
+ plainNameForRead, new Arguments.empty()..fileOffset = offset, offset,
+ isGetter: true);
+ }
+
+ Expression makeInvalidWrite(Expression value) {
+ return helper.invokeSuperNoSuchMethod(
+ plainNameForRead,
+ new Arguments(<Expression>[value])..fileOffset = value.fileOffset,
+ offsetForToken(token),
+ isSetter: true);
+ }
+
toString() => "SuperPropertyAccessor()";
}
@@ -856,6 +886,7 @@ class TypeDeclarationAccessor extends ReadOnlyAccessor {
Expression makeInvalidWrite(Expression value) {
return buildThrowNoSuchMethodError(
+ new NullLiteral()..fileOffset = offsetForToken(token),
new Arguments(<Expression>[value])..fileOffset = value.fileOffset,
isSetter: true);
}
@@ -933,8 +964,9 @@ class UnresolvedAccessor extends FastaAccessor with ErrorAccessor {
@override
Expression buildError(Arguments arguments,
{bool isGetter: false, bool isSetter: false, int offset}) {
- return helper.throwNoSuchMethodError(
- plainNameForRead, arguments, offset ?? offsetForToken(this.token),
+ offset ??= offsetForToken(this.token);
+ return helper.throwNoSuchMethodError(new NullLiteral()..fileOffset = offset,
+ plainNameForRead, arguments, offset,
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/loader.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698