mirror of
https://github.com/dart-lang/sdk
synced 2024-10-06 14:59:41 +00:00
Split UnresolvedNameGenerator
This prepares the generator to be implemented by the analyzer. Change-Id: I487a1704943fbe40ca20031372a436f74ef32752 Reviewed-on: https://dart-review.googlesource.com/57320 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
parent
f50873d345
commit
3b6caa3517
|
@ -601,6 +601,15 @@ class AstBuildingForest
|
|||
throw new UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Generator<Expression, Statement, _Arguments> unresolvedNameGenerator(
|
||||
ExpressionGeneratorHelper<Expression, Statement, _Arguments> helper,
|
||||
Token token,
|
||||
kernel.Name name) {
|
||||
// TODO(brianwilkerson) Implement this.
|
||||
throw new UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
VariableDeclarationStatement variablesDeclaration(
|
||||
List<VariableDeclaration> declarations, Uri uri) {
|
||||
|
|
|
@ -15,11 +15,12 @@ import '../fasta_codes.dart'
|
|||
messageInvalidInitializer,
|
||||
templateDeferredTypeAnnotation,
|
||||
templateIntegerLiteralIsOutOfRange,
|
||||
templateNotAType;
|
||||
templateNotAType,
|
||||
templateUnresolvedPrefixInTypeAnnotation;
|
||||
|
||||
import '../names.dart' show lengthName;
|
||||
|
||||
import '../parser.dart' show lengthForToken, offsetForToken;
|
||||
import '../parser.dart' show lengthForToken, lengthOfSpan, offsetForToken;
|
||||
|
||||
import '../problems.dart' show unhandled, unsupported;
|
||||
|
||||
|
@ -67,7 +68,6 @@ export 'kernel_expression_generator.dart'
|
|||
ParenthesizedExpressionGenerator,
|
||||
SendAccessGenerator,
|
||||
ThisAccessGenerator,
|
||||
UnresolvedNameGenerator,
|
||||
buildIsNull;
|
||||
|
||||
abstract class ExpressionGenerator<Expression, Statement, Arguments> {
|
||||
|
@ -797,3 +797,42 @@ abstract class ErroneousExpressionGenerator<Expression, Statement, Arguments>
|
|||
isSetter: true);
|
||||
}
|
||||
}
|
||||
|
||||
abstract class UnresolvedNameGenerator<Expression, Statement, Arguments>
|
||||
implements ErroneousExpressionGenerator<Expression, Statement, Arguments> {
|
||||
factory UnresolvedNameGenerator(
|
||||
ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
|
||||
Token token,
|
||||
Name name) {
|
||||
return helper.forest.unresolvedNameGenerator(helper, token, name);
|
||||
}
|
||||
|
||||
String get debugName => "UnresolvedNameGenerator";
|
||||
|
||||
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
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -58,6 +58,7 @@ import 'kernel_expression_generator.dart'
|
|||
KernelThisIndexedAccessGenerator,
|
||||
KernelThisPropertyAccessGenerator,
|
||||
KernelTypeUseGenerator,
|
||||
KernelUnresolvedNameGenerator,
|
||||
KernelVariableUseGenerator;
|
||||
|
||||
import 'kernel_shadow_ast.dart'
|
||||
|
@ -756,6 +757,14 @@ class Fangorn extends Forest<Expression, Statement, Token, Arguments> {
|
|||
Token token) {
|
||||
return new KernelLargeIntAccessGenerator(helper, token);
|
||||
}
|
||||
|
||||
@override
|
||||
KernelUnresolvedNameGenerator unresolvedNameGenerator(
|
||||
ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
|
||||
Token token,
|
||||
Name name) {
|
||||
return new KernelUnresolvedNameGenerator(helper, token, name);
|
||||
}
|
||||
}
|
||||
|
||||
class _VariablesDeclaration extends Statement {
|
||||
|
|
|
@ -454,6 +454,11 @@ abstract class Forest<Expression, Statement, Location, Arguments> {
|
|||
ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
|
||||
Location location);
|
||||
|
||||
Generator<Expression, Statement, Arguments> unresolvedNameGenerator(
|
||||
ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
|
||||
Location location,
|
||||
kernel.Name name);
|
||||
|
||||
// TODO(ahe): Remove this method when all users are moved here.
|
||||
kernel.Arguments castArguments(Arguments arguments) {
|
||||
dynamic a = arguments;
|
||||
|
|
|
@ -13,8 +13,7 @@ import '../fasta_codes.dart'
|
|||
LocatedMessage,
|
||||
messageLoadLibraryTakesNoArguments,
|
||||
messageSuperAsExpression,
|
||||
templateNotAPrefixInTypeAnnotation,
|
||||
templateUnresolvedPrefixInTypeAnnotation;
|
||||
templateNotAPrefixInTypeAnnotation;
|
||||
|
||||
import '../messages.dart' show Message, noLength;
|
||||
|
||||
|
@ -62,6 +61,7 @@ import 'expression_generator.dart'
|
|||
ThisIndexedAccessGenerator,
|
||||
ThisPropertyAccessGenerator,
|
||||
TypeUseGenerator,
|
||||
UnresolvedNameGenerator,
|
||||
VariableUseGenerator;
|
||||
|
||||
import 'expression_generator_helper.dart' show ExpressionGeneratorHelper;
|
||||
|
@ -1431,6 +1431,37 @@ class KernelLargeIntAccessGenerator extends KernelGenerator
|
|||
}
|
||||
}
|
||||
|
||||
class KernelUnresolvedNameGenerator extends KernelGenerator
|
||||
with
|
||||
ErroneousExpressionGenerator<Expression, Statement, Arguments>,
|
||||
UnresolvedNameGenerator<Expression, Statement, Arguments> {
|
||||
@override
|
||||
final Name name;
|
||||
|
||||
KernelUnresolvedNameGenerator(
|
||||
ExpressionGeneratorHelper<dynamic, dynamic, dynamic> helper,
|
||||
Token token,
|
||||
this.name)
|
||||
: super(helper, token);
|
||||
|
||||
@override
|
||||
Expression _makeRead(ShadowComplexAssignment complexAssignment) {
|
||||
return unsupported("_makeRead", offsetForToken(token), uri);
|
||||
}
|
||||
|
||||
@override
|
||||
Expression _makeWrite(Expression value, bool voidContext,
|
||||
ShadowComplexAssignment complexAssignment) {
|
||||
return unsupported("_makeWrite", offsetForToken(token), uri);
|
||||
}
|
||||
|
||||
@override
|
||||
void printOn(StringSink sink) {
|
||||
sink.write(", name: ");
|
||||
sink.write(name.name);
|
||||
}
|
||||
}
|
||||
|
||||
Expression makeLet(VariableDeclaration variable, Expression body) {
|
||||
if (variable == null) return body;
|
||||
return new Let(variable, body);
|
||||
|
|
|
@ -217,64 +217,6 @@ abstract class IncompleteSendGenerator extends KernelGenerator {
|
|||
}
|
||||
}
|
||||
|
||||
class UnresolvedNameGenerator extends KernelGenerator
|
||||
with ErroneousExpressionGenerator<Expression, Statement, Arguments> {
|
||||
@override
|
||||
final Name name;
|
||||
|
||||
UnresolvedNameGenerator(
|
||||
ExpressionGeneratorHelper<dynamic, dynamic, dynamic> helper,
|
||||
Token token,
|
||||
this.name)
|
||||
: super(helper, token);
|
||||
|
||||
String get debugName => "UnresolvedNameGenerator";
|
||||
|
||||
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
|
||||
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
|
||||
Expression _makeRead(ShadowComplexAssignment complexAssignment) {
|
||||
return unsupported("_makeRead", offsetForToken(token), uri);
|
||||
}
|
||||
|
||||
@override
|
||||
Expression _makeWrite(Expression value, bool voidContext,
|
||||
ShadowComplexAssignment complexAssignment) {
|
||||
return unsupported("_makeWrite", offsetForToken(token), uri);
|
||||
}
|
||||
|
||||
@override
|
||||
void printOn(StringSink sink) {
|
||||
sink.write(", name: ");
|
||||
sink.write(name.name);
|
||||
}
|
||||
}
|
||||
|
||||
class IncompleteErrorGenerator extends IncompleteSendGenerator
|
||||
with ErroneousExpressionGenerator<Expression, Statement, Arguments> {
|
||||
final Message message;
|
||||
|
|
|
@ -74,7 +74,7 @@ import 'package:front_end/src/fasta/kernel/kernel_expression_generator.dart'
|
|||
ParenthesizedExpressionGenerator,
|
||||
SendAccessGenerator,
|
||||
ThisAccessGenerator,
|
||||
UnresolvedNameGenerator;
|
||||
KernelUnresolvedNameGenerator;
|
||||
|
||||
import 'package:front_end/src/fasta/scanner.dart' show Token, scanString;
|
||||
|
||||
|
@ -228,6 +228,6 @@ main() {
|
|||
new KernelTypeUseGenerator(
|
||||
helper, token, prefixBuilder, -1, declaration, "foo"));
|
||||
check("UnresolvedNameGenerator(offset: 4, name: bar)",
|
||||
new UnresolvedNameGenerator(helper, token, name));
|
||||
new KernelUnresolvedNameGenerator(helper, token, name));
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue