From e1fe4d48a5c19a93587500a8a15ae3f78b382ec1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20von=20der=20Ahe=CC=81?= Date: Mon, 10 Sep 2018 09:05:59 +0000 Subject: [PATCH] Remove type inferrer from generators MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The type inferrer is no longer used (and wasn't necessary to begin with, it should have been exposed via the helper object instead). Also some other tweaks that should help me avoid merge conflicts. Change-Id: I1f2aade93f9c836cc02dac6c002f48156caf2c76 Reviewed-on: https://dart-review.googlesource.com/74063 Reviewed-by: Jens Johansen Commit-Queue: Peter von der Ahé --- .../lib/src/fasta/kernel/body_builder.dart | 12 ++-- .../fasta/kernel/expression_generator.dart | 61 +++++++------------ .../fasta/kernel/kernel_class_builder.dart | 9 ++- .../kernel/kernel_expression_generator.dart | 10 --- .../src/fasta/kernel/kernel_shadow_ast.dart | 7 +-- .../kernel/kernel_type_variable_builder.dart | 14 +++-- .../lib/src/fasta/rewrite_severity.dart | 6 -- 7 files changed, 43 insertions(+), 76 deletions(-) diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart index f78891c5de8..5cddc1360de 100644 --- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart +++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart @@ -2285,8 +2285,7 @@ abstract class BodyBuilder extends ScopeListener } } if (name is Generator) { - push(name.buildTypeWithBuiltArguments(arguments, - typeInferrer: _typeInferrer)); + push(name.buildTypeWithBuiltArguments(arguments)); } else if (name is TypeBuilder) { push(name.build(library)); } else { @@ -2898,7 +2897,7 @@ abstract class BodyBuilder extends ScopeListener LocatedMessage argMessage = checkArgumentsForFunction( target.function, arguments, charOffset, typeParameters); if (argMessage != null) { - var error = throwNoSuchMethodError( + Expression error = throwNoSuchMethodError( forest.literalNull(null)..fileOffset = charOffset, target.name.name, arguments, @@ -3598,13 +3597,12 @@ abstract class BodyBuilder extends ScopeListener @override void endRethrowStatement(Token rethrowToken, Token endToken) { debugEvent("RethrowStatement"); - var error = inCatchBlock + push(new ExpressionStatementJudgment(new RethrowJudgment(inCatchBlock ? null : buildProblem(fasta.messageRethrowNotCatch, offsetForToken(rethrowToken), lengthForToken(rethrowToken)) - .desugared; - push(new ExpressionStatementJudgment( - new RethrowJudgment(error)..fileOffset = offsetForToken(rethrowToken))); + .desugared) + ..fileOffset = offsetForToken(rethrowToken))); } @override diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart index 404bfe8f107..5954efe6703 100644 --- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart +++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart @@ -45,8 +45,6 @@ import '../parser.dart' show lengthForToken, lengthOfSpan, offsetForToken; import '../problems.dart' show unhandled, unsupported; -import '../type_inference/type_inferrer.dart' show TypeInferrer; - import 'constness.dart' show Constness; import 'expression_generator_helper.dart' show ExpressionGeneratorHelper; @@ -82,12 +80,9 @@ import 'kernel_ast_api.dart' import 'kernel_builder.dart' show AccessErrorBuilder, - BuiltinTypeBuilder, Declaration, - FunctionTypeAliasBuilder, KernelClassBuilder, - KernelFunctionTypeAliasBuilder, - KernelTypeVariableBuilder; + KernelFunctionTypeAliasBuilder; import 'kernel_expression_generator.dart' show IncompleteSendGenerator, SendAccessGenerator; @@ -220,7 +215,7 @@ abstract class Generator implements ExpressionGenerator { } DartType buildTypeWithBuiltArguments(List arguments, - {bool nonInstanceAccessIsError: false, TypeInferrer typeInferrer}) { + {bool nonInstanceAccessIsError: false}) { helper.addProblem(templateNotAType.withArguments(token.lexeme), offsetForToken(token), lengthForToken(token)); return const InvalidType(); @@ -241,13 +236,14 @@ abstract class Generator implements ExpressionGenerator { assert(forest.argumentsTypeArguments(arguments).isEmpty); forest.argumentsSetTypeArguments(arguments, typeArguments); } - var error = helper.throwNoSuchMethodError( - forest.literalNull(token), - name == "" ? plainNameForRead : "${plainNameForRead}.$name", - arguments, - nameToken.charOffset); - - return new InvalidConstructorInvocationJudgment(error, null, arguments); + return new InvalidConstructorInvocationJudgment( + helper.throwNoSuchMethodError( + forest.literalNull(token), + name == "" ? plainNameForRead : "${plainNameForRead}.$name", + arguments, + nameToken.charOffset), + null, + arguments); } bool get isThisPropertyAccess => false; @@ -495,7 +491,7 @@ abstract class DeferredAccessGenerator implements Generator { @override buildPropertyAccess( IncompleteSendGenerator send, int operatorOffset, bool isNullAware) { - var propertyAccess = + Object propertyAccess = suffixGenerator.buildPropertyAccess(send, operatorOffset, isNullAware); if (propertyAccess is Generator) { return new DeferredAccessGenerator( @@ -518,12 +514,11 @@ abstract class DeferredAccessGenerator implements Generator { @override DartType buildTypeWithBuiltArguments(List arguments, - {bool nonInstanceAccessIsError: false, TypeInferrer typeInferrer}) { + {bool nonInstanceAccessIsError: false}) { helper.addProblem( templateDeferredTypeAnnotation.withArguments( suffixGenerator.buildTypeWithBuiltArguments(arguments, - nonInstanceAccessIsError: nonInstanceAccessIsError, - typeInferrer: typeInferrer), + nonInstanceAccessIsError: nonInstanceAccessIsError), prefixGenerator.plainNameForRead), offsetForToken(prefixGenerator.token), lengthOfSpan(prefixGenerator.token, token)); @@ -576,23 +571,9 @@ abstract class TypeUseGenerator implements Generator { @override DartType buildTypeWithBuiltArguments(List arguments, - {bool nonInstanceAccessIsError: false, TypeInferrer typeInferrer}) { - var declaration = this.declaration; + {bool nonInstanceAccessIsError: false}) { if (arguments != null) { - int expected = 0; - if (declaration is KernelClassBuilder) { - expected = declaration.target.typeParameters.length; - } else if (declaration is FunctionTypeAliasBuilder) { - expected = declaration.target.typeParameters.length; - } else if (declaration is KernelTypeVariableBuilder) { - // Type arguments on a type variable - error reported elsewhere. - } else if (declaration is BuiltinTypeBuilder) { - // Type arguments on a built-in type, for example, dynamic or void. - expected = 0; - } else { - return unhandled("${declaration.runtimeType}", - "TypeUseGenerator.buildType", offsetForToken(token), helper.uri); - } + int expected = declaration.typeVariablesCount; if (arguments.length != expected) { helper.warnTypeArgumentsMismatch( declaration.name, expected, offsetForToken(token)); @@ -1087,12 +1068,12 @@ abstract class PrefixUseGenerator implements Generator { @override /* Expression | Generator | Initializer */ doInvocation( int offset, Arguments arguments) { - var error = helper.wrapInLocatedProblem( - helper.evaluateArgumentsBefore(arguments, forest.literalNull(token)), - messageCantUsePrefixAsExpression.withLocation( - helper.uri, offsetForToken(token), lengthForToken(token))); return new StaticInvocationJudgment(null, forest.castArguments(arguments), - desugaredError: error) + desugaredError: helper.wrapInLocatedProblem( + helper.evaluateArgumentsBefore( + arguments, forest.literalNull(token)), + messageCantUsePrefixAsExpression.withLocation( + helper.uri, offsetForToken(token), lengthForToken(token)))) ..fileOffset = offset; } @@ -1172,7 +1153,7 @@ abstract class UnexpectedQualifiedUseGenerator implements Generator { @override DartType buildTypeWithBuiltArguments(List arguments, - {bool nonInstanceAccessIsError: false, TypeInferrer typeInferrer}) { + {bool nonInstanceAccessIsError: false}) { Template template = isUnresolved ? templateUnresolvedPrefixInTypeAnnotation : templateNotAPrefixInTypeAnnotation; diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart index e277db11bf1..10c696abdb8 100644 --- a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart +++ b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart @@ -301,7 +301,7 @@ abstract class KernelClassBuilder declaration.setRedirectingFactoryBody( targetBuilder.member, typeArguments); } else { - var message = templateRedirectionTargetNotFound + Message message = templateRedirectionTargetNotFound .withArguments(redirectionTarget.fullNameForErrors); if (declaration.isConst) { addProblem(message, declaration.charOffset, noLength); @@ -794,7 +794,8 @@ abstract class KernelClassBuilder ]); } else if (library.loader.target.backendTarget.strongMode && declaredFunction?.typeParameters != null) { - var substitutionMap = {}; + Map substitutionMap = + {}; for (int i = 0; i < declaredFunction.typeParameters.length; ++i) { substitutionMap[interfaceFunction.typeParameters[i]] = new TypeParameterType(declaredFunction.typeParameters[i]); @@ -862,7 +863,9 @@ abstract class KernelClassBuilder // a type which is a subtype of the parameter it overrides. } else { // Report an error. - var declaredMemberName = '$name::${declaredMember.name.name}'; + // TODO(ahe): The double-colon notation shouldn't be used in error + // messages. + String declaredMemberName = '$name::${declaredMember.name.name}'; Message message; int fileOffset; if (declaredParameter == null) { diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart index 483d160b43b..807c57530a7 100644 --- a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart +++ b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart @@ -31,8 +31,6 @@ import '../parser.dart' show lengthForToken, offsetForToken; import '../problems.dart' show unhandled, unsupported; -import '../type_inference/type_inferrer.dart' show TypeInferrer; - import 'body_builder.dart' show noLocation; import 'constness.dart' show Constness; @@ -1122,14 +1120,6 @@ class KernelStaticAccessGenerator extends KernelGenerator return write; } - @override - DartType buildTypeWithBuiltArguments(List arguments, - {bool nonInstanceAccessIsError: false, TypeInferrer typeInferrer}) { - return super.buildTypeWithBuiltArguments(arguments, - nonInstanceAccessIsError: nonInstanceAccessIsError, - typeInferrer: typeInferrer); - } - @override Expression doInvocation(int offset, Arguments arguments) { Expression error; diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart index f81dae3d004..14df1f6b704 100644 --- a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart +++ b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart @@ -1581,8 +1581,7 @@ class ListLiteralJudgment extends ListLiteral implements ExpressionJudgment { isVoidAllowed: typeArgument is VoidType); } } - var inferredType = new InterfaceType(listClass, [inferredTypeArgument]); - this.inferredType = inferredType; + inferredType = new InterfaceType(listClass, [inferredTypeArgument]); return null; } } @@ -2217,8 +2216,7 @@ class StaticInvocationJudgment extends StaticInvocation : new FunctionType([], const DynamicType()); var inferenceResult = inferrer.inferInvocation(typeContext, fileOffset, calleeType, calleeType.returnType, argumentJudgments); - var inferredType = inferenceResult.type; - this.inferredType = inferredType; + inferredType = inferenceResult.type; if (desugaredError != null) { parent.replaceChild(this, desugaredError); parent = null; @@ -2422,6 +2420,7 @@ class SymbolLiteralJudgment extends SymbolLiteral /// Synthetic judgment class representing an attempt to invoke an unresolved /// constructor, or a constructor that cannot be invoked, or a resolved /// constructor with wrong number of arguments. +// TODO(ahe): Remove this? class InvalidConstructorInvocationJudgment extends SyntheticExpressionJudgment { final Member constructor; final Arguments arguments; diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart index 1290f111f44..6d1bca2e81a 100644 --- a/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart +++ b/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart @@ -7,8 +7,6 @@ library fasta.kernel_type_variable_builder; import 'package:kernel/ast.dart' show DartType, TypeParameter, TypeParameterType; -import '../deprecated_problems.dart' show deprecated_inputError; - import '../fasta_codes.dart' show templateTypeArgumentsOnTypeVariable; import 'kernel_builder.dart' @@ -66,11 +64,15 @@ class KernelTypeVariableBuilder DartType buildTypesWithBuiltArguments( LibraryBuilder library, List arguments) { if (arguments != null) { - return deprecated_inputError(null, null, - "Can't use type arguments with type parameter $parameter"); - } else { - return buildType(library, null); + int charOffset = -1; // TODO(ahe): Provide these. + Uri fileUri = null; // TODO(ahe): Provide these. + library.addProblem( + templateTypeArgumentsOnTypeVariable.withArguments(name), + charOffset, + name.length, + fileUri); } + return buildType(library, null); } KernelTypeBuilder asTypeBuilder() { diff --git a/pkg/front_end/lib/src/fasta/rewrite_severity.dart b/pkg/front_end/lib/src/fasta/rewrite_severity.dart index 6fc85811aab..ae106ad84d7 100644 --- a/pkg/front_end/lib/src/fasta/rewrite_severity.dart +++ b/pkg/front_end/lib/src/fasta/rewrite_severity.dart @@ -43,18 +43,12 @@ Severity rewriteSeverity( // sites. switch (path.substring(fastaPath.length + index)) { case "command_line.dart": - case "command_line_reporting.dart": case "deprecated_problems.dart": case "entry_points.dart": case "kernel/body_builder.dart": - case "kernel/expression_generator.dart": - case "kernel/kernel_expression_generator.dart": - case "kernel/kernel_expression_generator_impl.dart": - case "kernel/kernel_type_variable_builder.dart": case "source/diet_listener.dart": case "source/source_library_builder.dart": case "source/source_loader.dart": - case "source/stack_listener.dart": return severity; } } else if (code == msg.codeMissingExplicitTypeArguments) {