mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 12:30:03 +00:00
Convert UnresolvedAccessor to UnresolvedNameGenerator
Change-Id: Ie28b5d963ab575383b36551657c0f0109b5de53d Reviewed-on: https://dart-review.googlesource.com/55963 Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
This commit is contained in:
parent
b5c6143d74
commit
bbdf560ee7
|
@ -105,7 +105,7 @@ import 'expression_generator.dart'
|
|||
ThisAccessGenerator,
|
||||
ThisPropertyAccessGenerator,
|
||||
TypeDeclarationAccessor,
|
||||
UnresolvedAccessor,
|
||||
UnresolvedNameGenerator,
|
||||
VariableUseGenerator,
|
||||
buildIsNull;
|
||||
|
||||
|
@ -437,7 +437,7 @@ abstract class BodyBuilder<Expression, Statement, Arguments>
|
|||
var expression = pop();
|
||||
if (expression is Identifier) {
|
||||
Identifier identifier = expression;
|
||||
expression = new UnresolvedAccessor(
|
||||
expression = new UnresolvedNameGenerator(
|
||||
this, identifier.token, new Name(identifier.name, library.library));
|
||||
}
|
||||
if (name?.isNotEmpty ?? false) {
|
||||
|
@ -1378,7 +1378,7 @@ abstract class BodyBuilder<Expression, Statement, Arguments>
|
|||
if (!isQualified && isInstanceContext) {
|
||||
assert(builder == null);
|
||||
if (constantContext != ConstantContext.none || member.isField) {
|
||||
return new UnresolvedAccessor(this, token, n);
|
||||
return new UnresolvedNameGenerator(this, token, n);
|
||||
}
|
||||
return new ThisPropertyAccessGenerator(this, token, n,
|
||||
lookupInstanceMember(n), lookupInstanceMember(n, isSetter: true));
|
||||
|
@ -1387,7 +1387,7 @@ abstract class BodyBuilder<Expression, Statement, Arguments>
|
|||
member?.name == "_getMainClosure") {
|
||||
return storeOffset(forest.literalNull(null), charOffset);
|
||||
} else {
|
||||
return new UnresolvedAccessor(this, token, n);
|
||||
return new UnresolvedNameGenerator(this, token, n);
|
||||
}
|
||||
} else if (builder.isTypeDeclaration) {
|
||||
if (constantContext != ConstantContext.none &&
|
||||
|
@ -2564,7 +2564,7 @@ abstract class BodyBuilder<Expression, Statement, Arguments>
|
|||
String name = suffix == null
|
||||
? "${prefix.plainNameForRead}.${identifier.name}"
|
||||
: "${prefix.plainNameForRead}.${identifier.name}.$suffix";
|
||||
type = new UnresolvedAccessor(
|
||||
type = new UnresolvedNameGenerator(
|
||||
this, prefix.token, new Name(name, library.library));
|
||||
} else {
|
||||
unhandled("${prefix.runtimeType}", "pushQualifiedReference",
|
||||
|
|
|
@ -1743,6 +1743,62 @@ abstract class IncompleteSendGenerator<Arguments> extends Generator<Arguments> {
|
|||
}
|
||||
}
|
||||
|
||||
class UnresolvedNameGenerator<Arguments> extends Generator<Arguments>
|
||||
with ErroneousExpressionGenerator<Arguments> {
|
||||
@override
|
||||
final Name name;
|
||||
|
||||
UnresolvedNameGenerator(
|
||||
BuilderHelper<dynamic, dynamic, Arguments> helper, Token token, this.name)
|
||||
: super(helper, token);
|
||||
|
||||
String get debugName => "UnresolvedNameGenerator";
|
||||
|
||||
kernel.Expression doInvocation(int charOffset, Arguments arguments) {
|
||||
return buildError(arguments, offset: charOffset);
|
||||
}
|
||||
|
||||
@override
|
||||
DartType buildErroneousTypeNotAPrefix(Identifier suffix) {
|
||||
helper.addProblem(
|
||||
templateUnresolvedPrefixInTypeAnnotation.withArguments(
|
||||
name.name, suffix.name),
|
||||
offsetForToken(token),
|
||||
lengthOfSpan(token, suffix.token));
|
||||
return const InvalidType();
|
||||
}
|
||||
|
||||
@override
|
||||
kernel.Expression buildError(Arguments arguments,
|
||||
{bool isGetter: false, bool isSetter: false, int offset}) {
|
||||
offset ??= offsetForToken(this.token);
|
||||
return helper.throwNoSuchMethodError(
|
||||
storeOffset(forest.literalNull(null), offset),
|
||||
plainNameForRead,
|
||||
arguments,
|
||||
offset,
|
||||
isGetter: isGetter,
|
||||
isSetter: isSetter);
|
||||
}
|
||||
|
||||
@override
|
||||
kernel.Expression _makeRead(ShadowComplexAssignment complexAssignment) {
|
||||
return unsupported("_makeRead", offsetForToken(token), uri);
|
||||
}
|
||||
|
||||
@override
|
||||
kernel.Expression _makeWrite(kernel.Expression value, bool voidContext,
|
||||
ShadowComplexAssignment complexAssignment) {
|
||||
return unsupported("_makeWrite", offsetForToken(token), uri);
|
||||
}
|
||||
|
||||
@override
|
||||
void printOn(StringSink sink) {
|
||||
sink.write(", name: ");
|
||||
sink.write(name.name);
|
||||
}
|
||||
}
|
||||
|
||||
kernel.Expression makeLet(
|
||||
VariableDeclaration variable, kernel.Expression body) {
|
||||
if (variable == null) return body;
|
||||
|
|
|
@ -568,7 +568,7 @@ class TypeDeclarationAccessor<Arguments>
|
|||
if (builder == null) {
|
||||
// If we find a setter, [builder] is an [AccessErrorBuilder], not null.
|
||||
if (send is IncompletePropertyAccessor) {
|
||||
accessor = new UnresolvedAccessor(helper, send.token, name);
|
||||
accessor = new UnresolvedNameGenerator(helper, send.token, name);
|
||||
} else {
|
||||
return helper.buildConstructorInvocation(declaration, send.token,
|
||||
arguments, name.name, null, token.charOffset, Constness.implicit);
|
||||
|
@ -655,55 +655,6 @@ class TypeDeclarationAccessor<Arguments>
|
|||
}
|
||||
}
|
||||
|
||||
class UnresolvedAccessor<Arguments> extends FastaAccessor<Arguments>
|
||||
with GeneratorImpl, ErroneousExpressionGenerator<Arguments> {
|
||||
@override
|
||||
final Token token;
|
||||
|
||||
@override
|
||||
final BuilderHelper<dynamic, dynamic, Arguments> helper;
|
||||
|
||||
@override
|
||||
final Name name;
|
||||
|
||||
UnresolvedAccessor(this.helper, this.token, this.name);
|
||||
|
||||
String get debugName => "UnresolvedAccessor";
|
||||
|
||||
kernel.Expression doInvocation(int charOffset, Arguments arguments) {
|
||||
return buildError(arguments, offset: charOffset);
|
||||
}
|
||||
|
||||
@override
|
||||
DartType buildErroneousTypeNotAPrefix(Identifier suffix) {
|
||||
helper.addProblem(
|
||||
templateUnresolvedPrefixInTypeAnnotation.withArguments(
|
||||
name.name, suffix.name),
|
||||
offsetForToken(token),
|
||||
lengthOfSpan(token, suffix.token));
|
||||
return const InvalidType();
|
||||
}
|
||||
|
||||
@override
|
||||
kernel.Expression buildError(Arguments arguments,
|
||||
{bool isGetter: false, bool isSetter: false, int offset}) {
|
||||
offset ??= offsetForToken(this.token);
|
||||
return helper.throwNoSuchMethodError(
|
||||
storeOffset(forest.literalNull(null), offset),
|
||||
plainNameForRead,
|
||||
arguments,
|
||||
offset,
|
||||
isGetter: isGetter,
|
||||
isSetter: isSetter);
|
||||
}
|
||||
|
||||
@override
|
||||
void printOn(StringSink sink) {
|
||||
sink.write(", name: ");
|
||||
sink.write(name.name);
|
||||
}
|
||||
}
|
||||
|
||||
bool isFieldOrGetter(Member member) {
|
||||
return member is Field || (member is Procedure && member.isGetter);
|
||||
}
|
||||
|
|
|
@ -65,7 +65,7 @@ import 'package:front_end/src/fasta/kernel/expression_generator.dart'
|
|||
ThisIndexedAccessGenerator,
|
||||
ThisPropertyAccessGenerator,
|
||||
TypeDeclarationAccessor,
|
||||
UnresolvedAccessor,
|
||||
UnresolvedNameGenerator,
|
||||
VariableUseGenerator;
|
||||
|
||||
import 'package:front_end/src/fasta/kernel/body_builder.dart'
|
||||
|
@ -226,7 +226,7 @@ main() {
|
|||
" plainNameForRead: foo, value: null)",
|
||||
new TypeDeclarationAccessor<Arguments>(
|
||||
helper, token, prefixBuilder, -1, declaration, "foo"));
|
||||
check("UnresolvedAccessor(offset: 4, name: bar)",
|
||||
new UnresolvedAccessor<Arguments>(helper, token, name));
|
||||
check("UnresolvedNameGenerator(offset: 4, name: bar)",
|
||||
new UnresolvedNameGenerator<Arguments>(helper, token, name));
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue