[cfe] Remove the need for TypeInferrer.constantContext

This changes the body builder to create an InvalidExpression for new expressions in constant contexts, thus avoiding the need to handle this case in the inference, avoiding the need for passing constantContext to the inferrer.

Change-Id: Ia8d5b3a6462e7a1570a092d5808bf262345b424b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/451021
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
Reviewed-by: Erik Ernst <eernst@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
Johnni Winther
2025-09-24 01:18:32 -07:00
committed by Commit Queue
parent 952d76898c
commit 4f8af89290
29 changed files with 203 additions and 372 deletions
@@ -139,12 +139,10 @@ class ConstructorBodyBuilderContext extends BodyBuilderContext {
InitializerInferenceResult inferInitializer({
required TypeInferrer typeInferrer,
required Uri fileUri,
required ConstantContext constantContext,
required Initializer initializer,
}) {
return typeInferrer.inferInitializer(
fileUri: fileUri,
constantContext: constantContext,
constructorBuilder: _builder,
initializer: initializer,
);
@@ -7,7 +7,6 @@ import 'package:kernel/class_hierarchy.dart';
import 'package:kernel/type_algebra.dart';
import 'package:kernel/type_environment.dart';
import '../../base/constant_context.dart';
import '../../base/identifiers.dart';
import '../../base/lookup_result.dart';
import '../../base/messages.dart';
@@ -282,7 +281,6 @@ class FactoryEncoding implements InferredTypeListener {
targetType: target.function!.computeFunctionType(
Nullability.nonNullable,
),
constantContext: ConstantContext.none,
);
if (typeArguments == null) {
assert(
@@ -10,7 +10,6 @@ import 'package:kernel/core_types.dart';
import 'package:kernel/type_environment.dart';
import '../../api_prototype/experimental_flags.dart';
import '../../base/constant_context.dart';
import '../../base/messages.dart';
import '../../base/problems.dart';
import '../../base/scope.dart';
@@ -314,7 +313,6 @@ class RegularFieldDeclaration
required TypeInferrer typeInferrer,
required CoreTypes coreTypes,
required Uri fileUri,
required ConstantContext constantContext,
Expression? initializer,
}) {
if (initializer != null) {
@@ -322,7 +320,6 @@ class RegularFieldDeclaration
initializer = typeInferrer
.inferFieldInitializer(
fileUri: fileUri,
constantContext: constantContext,
declaredType: fieldType,
initializer: initializer,
)
@@ -920,7 +917,6 @@ abstract class FieldFragmentDeclaration {
required TypeInferrer typeInferrer,
required CoreTypes coreTypes,
required Uri fileUri,
required ConstantContext constantContext,
Expression? initializer,
});
@@ -130,7 +130,6 @@ class PrimaryConstructorFieldDeclaration
required TypeInferrer typeInferrer,
required CoreTypes coreTypes,
required Uri fileUri,
required ConstantContext constantContext,
Expression? initializer,
}) {
if (initializer != null) {
@@ -138,7 +137,6 @@ class PrimaryConstructorFieldDeclaration
initializer = typeInferrer
.inferFieldInitializer(
fileUri: fileUri,
constantContext: constantContext,
declaredType: fieldType,
initializer: initializer,
)
+15 -8
View File
@@ -365,7 +365,7 @@ class BodyBuilderImpl extends StackListenerImpl
required this.uri,
required this.assignedVariables,
required this.typeEnvironment,
required this.constantContext,
required ConstantContext constantContext,
}) : _context = context,
forest = const Forest(),
enableNative = libraryBuilder.loader.target.backendTarget.enableNative(
@@ -377,6 +377,7 @@ class BodyBuilderImpl extends StackListenerImpl
benchmarker = libraryBuilder.loader.target.benchmarker,
_localScopes = new LocalStack([enclosingScope]),
_labelScopes = new LocalStack([new LabelScopeImpl()]) {
this.constantContext = constantContext;
if (formalParameterScope != null) {
for (VariableBuilder builder in formalParameterScope!.localVariables) {
assignedVariables.declare(builder.variable!);
@@ -6368,13 +6369,6 @@ class BodyBuilderImpl extends StackListenerImpl
void beginNewExpression(Token token) {
debugEvent("beginNewExpression");
super.push(constantContext);
if (constantContext != ConstantContext.none) {
addProblem(
cfe.codeNotConstantExpression.withArgumentsOld('New expression'),
token.charOffset,
token.length,
);
}
constantContext = ConstantContext.none;
}
@@ -6416,6 +6410,19 @@ class BodyBuilderImpl extends StackListenerImpl
inMetadata: false,
inImplicitCreationContext: false,
);
if (constantContext != ConstantContext.none) {
pop(); // Pop the created new expression.
push(
buildProblem(
message: cfe.codeNotConstantExpression.withArgumentsOld(
'New expression',
),
fileUri: uri,
fileOffset: token.charOffset,
length: token.length,
),
);
}
}
void _buildConstructorReferenceInvocation(
@@ -375,7 +375,6 @@ abstract class BodyBuilderContext {
InitializerInferenceResult inferInitializer({
required TypeInferrer typeInferrer,
required Uri fileUri,
required ConstantContext constantContext,
required Initializer initializer,
}) {
throw new UnsupportedError('${runtimeType}.inferInitializer');
-3
View File
@@ -6,9 +6,7 @@ import 'package:kernel/ast.dart';
import 'package:kernel/src/printer.dart';
import '../base/problems.dart' show unsupported;
import '../type_inference/type_schema.dart';
import 'collections.dart'
show
ForElement,
@@ -24,7 +22,6 @@ import 'collections.dart'
PatternForElement,
PatternForMapEntry,
SpreadElement;
import 'internal_ast.dart';
/// A shadow tree factory.
@@ -453,12 +453,14 @@ class FactoryConstructorInvocation extends InternalExpression {
bool hasBeenInferred = false;
final Procedure target;
ArgumentsImpl arguments;
/// If `true`, this invocation is constant, either explicit or inferred.
final bool isConst;
FactoryConstructorInvocation(
this.target,
this.arguments, {
this.isConst = false,
required this.isConst,
}) {
arguments.parent = this;
}
@@ -548,13 +550,15 @@ class TypeAliasedFactoryInvocation extends InternalExpression {
final TypeAliasBuilder typeAliasBuilder;
final Procedure target;
ArgumentsImpl arguments;
/// If `true`, this invocation is constant, either explicit or inferred.
final bool isConst;
TypeAliasedFactoryInvocation(
this.typeAliasBuilder,
this.target,
this.arguments, {
this.isConst = false,
required this.isConst,
}) {
arguments.parent = this;
}
@@ -4456,6 +4460,8 @@ class DotShorthandInvocation extends InternalExpression {
final Name name;
final int nameOffset;
final ArgumentsImpl arguments;
/// If `true`, this invocation is constant, either explicit or inferred.
final bool isConst;
DotShorthandInvocation(
+11 -25
View File
@@ -122,14 +122,13 @@ class Resolver {
annotatable.addAnnotation(expression);
}
context.inferSingleTargetAnnotation(
constantContext: constantContext,
singleTarget: new SingleTargetAnnotations(
annotatable,
indicesOfAnnotationsToBeInferred,
),
);
// TODO(johnniwinther): We need to process annotations within annotations.
context.performBacklog(null, constantContext);
context.performBacklog(null);
for (Annotation annotation in annotations) {
annotation.expression =
@@ -211,7 +210,6 @@ class Resolver {
problemReporting: problemReporting,
libraryFeatures: libraryFeatures,
typeEnvironment: context.typeEnvironment,
constantContext: constantContext,
target: constructorBuilder.invokeTarget,
arguments: arguments,
fileUri: fileUri,
@@ -220,14 +218,13 @@ class Resolver {
ExpressionInferenceResult inferenceResult = context.typeInferrer
.inferFieldInitializer(
fileUri: fileUri,
constantContext: constantContext,
declaredType: const UnknownType(),
initializer: initializer,
);
initializer = inferenceResult.expression;
fieldType = inferenceResult.inferredType;
}
context.performBacklog(result?.annotations, constantContext);
context.performBacklog(result?.annotations);
return (initializer, fieldType);
}
@@ -267,7 +264,6 @@ class Resolver {
);
DartType inferredType = context.typeInferrer.inferImplicitFieldType(
fileUri: fileUri,
constantContext: constantContext,
initializer: result.initializer,
);
// TODO(johnniwinther): We through away the initializer and don't process
@@ -307,12 +303,11 @@ class Resolver {
Expression initializer = context.typeInferrer
.inferFieldInitializer(
fileUri: fileUri,
constantContext: constantContext,
declaredType: fieldType,
initializer: result.initializer,
)
.expression;
context.performBacklog(result.annotations, constantContext);
context.performBacklog(result.annotations);
return initializer;
}
@@ -359,11 +354,10 @@ class Resolver {
typeInferrer: context.typeInferrer,
coreTypes: _coreTypes,
fileUri: fileUri,
constantContext: constantContext,
initializer: initializer,
);
}
context.performBacklog(result.annotations, constantContext);
context.performBacklog(result.annotations);
}
void buildFunctionBody({
@@ -430,7 +424,7 @@ class Resolver {
constantContext: constantContext,
needsImplicitSuperInitializer: result.needsImplicitSuperInitializer,
);
context.performBacklog(result.annotations, constantContext);
context.performBacklog(result.annotations);
}
// Coverage-ignore(suite): Not run.
on DebugAbort {
@@ -510,7 +504,7 @@ class Resolver {
initializers: initializers,
);
}
context.performBacklog(result.annotations, constantContext);
context.performBacklog(result.annotations);
}
List<Initializer>? buildInitializersUnfinished({
@@ -581,11 +575,10 @@ class Resolver {
annotatable.addAnnotation(expression);
}
context.inferSingleTargetAnnotation(
constantContext: constantContext,
singleTarget: new SingleTargetAnnotations(annotatable),
);
List<Expression> expressions = annotatable.annotations;
context.performBacklog(result.annotations, constantContext);
context.performBacklog(result.annotations);
return expressions;
}
@@ -620,9 +613,8 @@ class Resolver {
initializer: result.initializer,
declaredType: declaredType,
hasDeclaredInitializer: hasDeclaredInitializer,
constantContext: constantContext,
);
context.performBacklog(result.annotations, constantContext);
context.performBacklog(result.annotations);
return initializer;
}
@@ -686,7 +678,7 @@ class Resolver {
needsImplicitSuperInitializer: bodyBuilderContext
.needsImplicitSuperInitializer(_coreTypes),
);
context.performBacklog(result.annotations, constantContext);
context.performBacklog(result.annotations);
}
// Coverage-ignore(suite): Not run.
on DebugAbort {
@@ -739,7 +731,7 @@ class Resolver {
);
BuildRedirectingFactoryMethodResult result = bodyBuilder
.buildRedirectingFactoryMethod(token: token, metadata: metadata);
context.performBacklog(result.annotations, constantContext);
context.performBacklog(result.annotations);
_benchmarker
// Coverage-ignore(suite): Not run.
?.endSubdivide();
@@ -854,7 +846,6 @@ class Resolver {
fileUri: fileUri,
fileOffset: fileOffset,
returnType: const DynamicType(),
constantContext: constantContext,
asyncMarker: AsyncMarker.Sync,
body: fakeReturn,
expressionEvaluationHelper: expressionEvaluationHelper,
@@ -864,7 +855,7 @@ class Resolver {
"Previously implicit assumption about inferFunctionBody "
"not returning anything different.",
);
context.performBacklog(result.annotations, constantContext);
context.performBacklog(result.annotations);
return fakeReturn.expression!;
}
@@ -873,7 +864,6 @@ class Resolver {
required ProblemReporting problemReporting,
required LibraryFeatures libraryFeatures,
required TypeEnvironment typeEnvironment,
required ConstantContext constantContext,
required Member target,
required ArgumentsImpl arguments,
required Uri fileUri,
@@ -1308,7 +1298,6 @@ class Resolver {
initializers.length,
(index) => bodyBuilderContext.inferInitializer(
typeInferrer: context.typeInferrer,
constantContext: constantContext,
fileUri: fileUri,
initializer: initializers[index],
),
@@ -1585,7 +1574,6 @@ class Resolver {
.inferInitializer(
typeInferrer: context.typeInferrer,
fileUri: fileUri,
constantContext: constantContext,
initializer: initializer,
);
if (!bodyBuilderContext.addInferredInitializer(
@@ -1700,7 +1688,6 @@ class Resolver {
initializer: initializer,
declaredType: originParameter.type,
hasDeclaredInitializer: parameter.hasDeclaredInitializer,
constantContext: constantContext,
);
originParameter.initializer = initializer..parent = originParameter;
if (initializer is InvalidExpression) {
@@ -1749,7 +1736,6 @@ class Resolver {
fileUri: fileUri,
fileOffset: bodyBuilderContext.memberNameOffset,
returnType: bodyBuilderContext.returnTypeContext,
constantContext: constantContext,
asyncMarker: asyncModifier,
body: body,
);
@@ -120,7 +120,6 @@ class _ResolverContext {
/// If [indices] is provided, only the annotations at the given indices are
/// inferred. Otherwise all annotations are inferred.
void _inferAnnotations({
required ConstantContext constantContext,
required Annotatable annotatable,
List<int>? indices,
}) {
@@ -128,35 +127,25 @@ class _ResolverContext {
fileUri: fileUri,
annotatable: annotatable,
indices: indices,
// TODO(johnniwinther): Should this always be implicit?
constantContext: constantContext,
);
}
void inferSingleTargetAnnotation({
required ConstantContext constantContext,
required SingleTargetAnnotations singleTarget,
}) {
_inferAnnotations(
constantContext: constantContext,
annotatable: singleTarget.target,
indices: singleTarget.indicesOfAnnotationsToBeInferred,
);
}
void _inferPendingAnnotations({
required ConstantContext constantContext,
required PendingAnnotations annotations,
}) {
void _inferPendingAnnotations({required PendingAnnotations annotations}) {
List<SingleTargetAnnotations>? singleTargetAnnotations =
annotations.singleTargetAnnotations;
if (singleTargetAnnotations != null) {
for (int i = 0; i < singleTargetAnnotations.length; i++) {
SingleTargetAnnotations singleTarget = singleTargetAnnotations[i];
inferSingleTargetAnnotation(
constantContext: constantContext,
singleTarget: singleTarget,
);
inferSingleTargetAnnotation(singleTarget: singleTarget);
}
}
@@ -168,10 +157,7 @@ class _ResolverContext {
List<Annotatable> targets = multiTarget.targets;
Annotatable firstTarget = targets.first;
List<Expression> annotations = firstTarget.annotations;
_inferAnnotations(
constantContext: constantContext,
annotatable: firstTarget,
);
_inferAnnotations(annotatable: firstTarget);
for (int i = 1; i < targets.length; i++) {
Annotatable target = targets[i];
for (int i = 0; i < annotations.length; i++) {
@@ -182,15 +168,9 @@ class _ResolverContext {
}
}
void performBacklog(
PendingAnnotations? annotations,
ConstantContext constantContext,
) {
void performBacklog(PendingAnnotations? annotations) {
if (annotations != null) {
_inferPendingAnnotations(
constantContext: constantContext,
annotations: annotations,
);
_inferPendingAnnotations(annotations: annotations);
}
libraryBuilder.checkPendingBoundsChecks(typeEnvironment);
}
@@ -23,7 +23,6 @@ import 'package:kernel/type_algebra.dart';
import '../api_prototype/experimental_flags.dart';
import '../base/compiler_context.dart';
import '../base/constant_context.dart';
import '../base/instrumentation.dart'
show
InstrumentationValueForMember,
@@ -197,7 +196,6 @@ class InferenceVisitorImpl extends InferenceVisitorBase
InferenceVisitorImpl(
super.inferrer,
super.fileUri,
super.constantContext,
this._constructorBuilder,
this.operations,
this.typeAnalyzerOptions,
@@ -2620,7 +2618,6 @@ class InferenceVisitorImpl extends InferenceVisitorBase
if (result != null) {
return result;
}
isConst |= constantContext != ConstantContext.none;
if (target is Constructor) {
if (isConst && !target.isConst) {
// Coverage-ignore-block(suite): Not run.
@@ -2645,6 +2642,7 @@ class InferenceVisitorImpl extends InferenceVisitorBase
} else {
Procedure procedure = target as Procedure;
if (isConst && !procedure.isConst) {
// Coverage-ignore-block(suite): Not run.
if (procedure.isExtensionTypeMember) {
// Both generative constructors and factory constructors from
// extension type declarations are encoded as procedures so we use
@@ -23,7 +23,6 @@ import 'package:kernel/type_environment.dart';
import '../api_prototype/experimental_flags.dart';
import '../api_prototype/lowering_predicates.dart';
import '../base/compiler_context.dart';
import '../base/constant_context.dart';
import '../base/instrumentation.dart'
show
Instrumentation,
@@ -148,12 +147,9 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
final Uri fileUri;
final ConstantContext constantContext;
InferenceVisitorBase(
this._inferrer,
this.fileUri,
this.constantContext,
this.expressionEvaluationHelper,
);
@@ -10,7 +10,6 @@ import 'package:_fe_analyzer_shared/src/types/shared_type.dart';
import 'package:kernel/ast.dart';
import 'package:kernel/type_environment.dart';
import '../base/constant_context.dart';
import '../base/instrumentation.dart' show Instrumentation;
import '../base/scope.dart';
import '../kernel/benchmarker.dart' show BenchmarkSubdivides, Benchmarker;
@@ -51,14 +50,12 @@ abstract class TypeInferrer {
/// returns the computed field type.
DartType inferImplicitFieldType({
required Uri fileUri,
required ConstantContext constantContext,
required Expression initializer,
});
/// Performs full type inference on the given field initializer.
ExpressionInferenceResult inferFieldInitializer({
required Uri fileUri,
required ConstantContext constantContext,
required DartType declaredType,
required Expression initializer,
});
@@ -68,7 +65,6 @@ abstract class TypeInferrer {
required Uri fileUri,
required int fileOffset,
required DartType returnType,
required ConstantContext constantContext,
required AsyncMarker asyncMarker,
required Statement body,
ExpressionEvaluationHelper? expressionEvaluationHelper,
@@ -77,7 +73,6 @@ abstract class TypeInferrer {
/// Performs type inference on the given constructor initializer.
InitializerInferenceResult inferInitializer({
required Uri fileUri,
required ConstantContext constantContext,
required SourceConstructorBuilder constructorBuilder,
required Initializer initializer,
});
@@ -90,7 +85,6 @@ abstract class TypeInferrer {
required Uri fileUri,
required Annotatable annotatable,
required List<int>? indices,
required ConstantContext constantContext,
});
/// Performs type inference on the given function parameter initializer
@@ -100,7 +94,6 @@ abstract class TypeInferrer {
required Expression initializer,
required DartType declaredType,
required bool hasDeclaredInitializer,
required ConstantContext constantContext,
});
/// Infers the type arguments a redirecting factory target reference.
@@ -111,7 +104,6 @@ abstract class TypeInferrer {
required int fileOffset,
required Member target,
required FunctionType targetType,
required ConstantContext constantContext,
});
}
@@ -204,7 +196,6 @@ class TypeInferrerImpl implements TypeInferrer {
InferenceVisitorBase _createInferenceVisitor({
required Uri fileUri,
required ConstantContext constantContext,
SourceConstructorBuilder? constructorBuilder,
ExpressionEvaluationHelper? expressionEvaluationHelper,
}) {
@@ -213,7 +204,6 @@ class TypeInferrerImpl implements TypeInferrer {
return new InferenceVisitorImpl(
this,
fileUri,
constantContext,
constructorBuilder,
operations,
typeAnalyzerOptions,
@@ -224,13 +214,9 @@ class TypeInferrerImpl implements TypeInferrer {
@override
DartType inferImplicitFieldType({
required Uri fileUri,
required ConstantContext constantContext,
required Expression initializer,
}) {
InferenceVisitorBase visitor = _createInferenceVisitor(
fileUri: fileUri,
constantContext: constantContext,
);
InferenceVisitorBase visitor = _createInferenceVisitor(fileUri: fileUri);
ExpressionInferenceResult result = visitor.inferExpression(
initializer,
const UnknownType(),
@@ -244,15 +230,11 @@ class TypeInferrerImpl implements TypeInferrer {
@override
ExpressionInferenceResult inferFieldInitializer({
required Uri fileUri,
required ConstantContext constantContext,
required DartType declaredType,
required Expression initializer,
}) {
assert(!isTopLevel);
InferenceVisitorBase visitor = _createInferenceVisitor(
fileUri: fileUri,
constantContext: constantContext,
);
InferenceVisitorBase visitor = _createInferenceVisitor(fileUri: fileUri);
ExpressionInferenceResult initializerResult = visitor.inferExpression(
initializer,
declaredType,
@@ -272,14 +254,12 @@ class TypeInferrerImpl implements TypeInferrer {
required Uri fileUri,
required int fileOffset,
required DartType returnType,
required ConstantContext constantContext,
required AsyncMarker asyncMarker,
required Statement body,
ExpressionEvaluationHelper? expressionEvaluationHelper,
}) {
InferenceVisitorBase visitor = _createInferenceVisitor(
fileUri: fileUri,
constantContext: constantContext,
expressionEvaluationHelper: expressionEvaluationHelper,
);
ClosureContext closureContext = new ClosureContext(
@@ -324,12 +304,8 @@ class TypeInferrerImpl implements TypeInferrer {
required int fileOffset,
required Member target,
required FunctionType targetType,
required ConstantContext constantContext,
}) {
InferenceVisitorBase visitor = _createInferenceVisitor(
fileUri: fileUri,
constantContext: constantContext,
);
InferenceVisitorBase visitor = _createInferenceVisitor(fileUri: fileUri);
List<Expression> positionalArguments = <Expression>[];
for (VariableDeclaration parameter
in redirectingFactoryFunction.positionalParameters) {
@@ -379,7 +355,6 @@ class TypeInferrerImpl implements TypeInferrer {
@override
InitializerInferenceResult inferInitializer({
required Uri fileUri,
required ConstantContext constantContext,
required SourceConstructorBuilder constructorBuilder,
required Initializer initializer,
}) {
@@ -390,7 +365,6 @@ class TypeInferrerImpl implements TypeInferrer {
// checks).
InferenceVisitorBase visitor = _createInferenceVisitor(
fileUri: fileUri,
constantContext: constantContext,
constructorBuilder: constructorBuilder,
);
InitializerInferenceResult result = visitor.inferInitializer(initializer);
@@ -403,12 +377,8 @@ class TypeInferrerImpl implements TypeInferrer {
required Uri fileUri,
required Annotatable annotatable,
required List<int>? indices,
required ConstantContext constantContext,
}) {
InferenceVisitorBase visitor = _createInferenceVisitor(
fileUri: fileUri,
constantContext: constantContext,
);
InferenceVisitorBase visitor = _createInferenceVisitor(fileUri: fileUri);
visitor.inferMetadata(visitor, annotatable, indices: indices);
visitor.checkCleanState();
}
@@ -419,12 +389,8 @@ class TypeInferrerImpl implements TypeInferrer {
required Expression initializer,
required DartType declaredType,
required bool hasDeclaredInitializer,
required ConstantContext constantContext,
}) {
InferenceVisitorBase visitor = _createInferenceVisitor(
fileUri: fileUri,
constantContext: constantContext,
);
InferenceVisitorBase visitor = _createInferenceVisitor(fileUri: fileUri);
ExpressionInferenceResult result = visitor.inferExpression(
initializer,
declaredType,
@@ -485,13 +451,11 @@ class TypeInferrerImplBenchmarked implements TypeInferrer {
@override
DartType inferImplicitFieldType({
required Uri fileUri,
required ConstantContext constantContext,
required Expression initializer,
}) {
benchmarker.beginSubdivide(BenchmarkSubdivides.inferImplicitFieldType);
DartType result = impl.inferImplicitFieldType(
fileUri: fileUri,
constantContext: constantContext,
initializer: initializer,
);
benchmarker.endSubdivide();
@@ -501,14 +465,12 @@ class TypeInferrerImplBenchmarked implements TypeInferrer {
@override
ExpressionInferenceResult inferFieldInitializer({
required Uri fileUri,
required ConstantContext constantContext,
required DartType declaredType,
required Expression initializer,
}) {
benchmarker.beginSubdivide(BenchmarkSubdivides.inferFieldInitializer);
ExpressionInferenceResult result = impl.inferFieldInitializer(
fileUri: fileUri,
constantContext: constantContext,
declaredType: declaredType,
initializer: initializer,
);
@@ -521,7 +483,6 @@ class TypeInferrerImplBenchmarked implements TypeInferrer {
required Uri fileUri,
required int fileOffset,
required DartType returnType,
required ConstantContext constantContext,
required AsyncMarker asyncMarker,
required Statement body,
ExpressionEvaluationHelper? expressionEvaluationHelper,
@@ -531,7 +492,6 @@ class TypeInferrerImplBenchmarked implements TypeInferrer {
fileUri: fileUri,
fileOffset: fileOffset,
returnType: returnType,
constantContext: constantContext,
asyncMarker: asyncMarker,
body: body,
expressionEvaluationHelper: expressionEvaluationHelper,
@@ -543,14 +503,12 @@ class TypeInferrerImplBenchmarked implements TypeInferrer {
@override
InitializerInferenceResult inferInitializer({
required Uri fileUri,
required ConstantContext constantContext,
required SourceConstructorBuilder constructorBuilder,
required Initializer initializer,
}) {
benchmarker.beginSubdivide(BenchmarkSubdivides.inferInitializer);
InitializerInferenceResult result = impl.inferInitializer(
fileUri: fileUri,
constantContext: constantContext,
constructorBuilder: constructorBuilder,
initializer: initializer,
);
@@ -563,14 +521,12 @@ class TypeInferrerImplBenchmarked implements TypeInferrer {
required Uri fileUri,
required Annotatable annotatable,
required List<int>? indices,
required ConstantContext constantContext,
}) {
benchmarker.beginSubdivide(BenchmarkSubdivides.inferMetadata);
impl.inferMetadata(
fileUri: fileUri,
annotatable: annotatable,
indices: indices,
constantContext: constantContext,
);
benchmarker.endSubdivide();
}
@@ -581,7 +537,6 @@ class TypeInferrerImplBenchmarked implements TypeInferrer {
required Expression initializer,
required DartType declaredType,
required bool hasDeclaredInitializer,
required ConstantContext constantContext,
}) {
benchmarker.beginSubdivide(BenchmarkSubdivides.inferParameterInitializer);
Expression result = impl.inferParameterInitializer(
@@ -589,7 +544,6 @@ class TypeInferrerImplBenchmarked implements TypeInferrer {
initializer: initializer,
declaredType: declaredType,
hasDeclaredInitializer: hasDeclaredInitializer,
constantContext: constantContext,
);
benchmarker.endSubdivide();
return result;
@@ -603,7 +557,6 @@ class TypeInferrerImplBenchmarked implements TypeInferrer {
required int fileOffset,
required Member target,
required FunctionType targetType,
required ConstantContext constantContext,
}) {
benchmarker.beginSubdivide(
BenchmarkSubdivides.inferRedirectingFactoryTypeArguments,
@@ -615,7 +568,6 @@ class TypeInferrerImplBenchmarked implements TypeInferrer {
fileOffset: fileOffset,
target: target,
targetType: targetType,
constantContext: constantContext,
);
benchmarker.endSubdivide();
return result;
@@ -128,7 +128,7 @@ void main() {
_testBreakStatementImpl();
_testCascade();
_testDeferredCheck();
_testFactoryConstructorInvocationJudgment();
_testFactoryConstructorInvocation();
_testTypeAliasedConstructorInvocation(c);
_testTypeAliasedFactoryInvocation(c);
_testFunctionDeclarationImpl();
@@ -632,7 +632,7 @@ void _testDeferredCheck() {
let final dynamic #0 = pre.checkLibraryIsLoaded() in 0''');
}
void _testFactoryConstructorInvocationJudgment() {
void _testFactoryConstructorInvocation() {
Library library = new Library(dummyUri, fileUri: dummyUri);
Class cls = new Class(name: 'Class', fileUri: dummyUri);
library.addClass(cls);
@@ -645,21 +645,37 @@ void _testFactoryConstructorInvocationJudgment() {
cls.addProcedure(factoryConstructor);
testExpression(
new FactoryConstructorInvocation(factoryConstructor, new ArgumentsImpl([])),
new FactoryConstructorInvocation(
factoryConstructor,
new ArgumentsImpl([]),
isConst: false,
),
'''
new Class()''',
verbose: '''
new library test:dummy::Class()''',
);
testExpression(
new FactoryConstructorInvocation(
factoryConstructor,
new ArgumentsImpl([]),
isConst: true,
),
'''
const Class()''',
verbose: '''
const library test:dummy::Class()''',
);
testExpression(
new FactoryConstructorInvocation(
factoryConstructor,
new ArgumentsImpl(
[new IntLiteral(0)],
named: [new NamedExpression('bar', new IntLiteral(1))],
)..setExplicitTypeArguments([const VoidType()]),
isConst: false,
),
'''
new Class<void>(0, bar: 1)''',
@@ -675,6 +691,7 @@ new library test:dummy::Class<void>(0, bar: 1)''',
[new IntLiteral(0)],
named: [new NamedExpression('bar', new IntLiteral(1))],
)..setExplicitTypeArguments([const VoidType()]),
isConst: false,
),
'''
new Class<void>.foo(0, bar: 1)''',
@@ -824,6 +841,7 @@ void _testTypeAliasedFactoryInvocation(CompilerContext c) {
typeAliasBuilder,
factoryConstructor,
new ArgumentsImpl([]),
isConst: false,
),
'''
new Typedef()''',
@@ -839,6 +857,7 @@ new library test:dummy::Typedef()''',
[new IntLiteral(0)],
named: [new NamedExpression('bar', new IntLiteral(1))],
)..setExplicitTypeArguments([const VoidType()]),
isConst: false,
),
'''
new Typedef<void>(0, bar: 1)''',
@@ -855,6 +874,7 @@ new library test:dummy::Typedef<void>(0, bar: 1)''',
[new IntLiteral(0)],
named: [new NamedExpression('bar', new IntLiteral(1))],
)..setExplicitTypeArguments([const VoidType()]),
isConst: false,
),
'''
new Typedef<void>.foo(0, bar: 1)''',
@@ -16,11 +16,6 @@ library;
// const newConst1 = new ExtensionType1(0); /* Error */
// ^^^
//
// pkg/front_end/testcases/extension_types/const_constructor_access.dart:9:23: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const newConst1 = new ExtensionType1(0); /* Error */
// ^
//
// pkg/front_end/testcases/extension_types/const_constructor_access.dart:13:31: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const implicitConstAliased1 = Typedef1(0); /* Error */
@@ -35,11 +30,6 @@ library;
// const newConstAliased1 = new Typedef1(0); /* Error */
// ^^^
//
// pkg/front_end/testcases/extension_types/const_constructor_access.dart:15:30: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const newConstAliased1 = new Typedef1(0); /* Error */
// ^
//
// pkg/front_end/testcases/extension_types/const_constructor_access.dart:21:19: Error: New expression is not a constant expression.
// const newConst2 = new ExtensionType2(0); /* Error */
// ^^^
@@ -71,10 +61,9 @@ static field invalid-type explicitConst1 = invalid-expression "pkg/front_end/tes
Try using a constructor or factory that is 'const'.
var explicitConst1 = const ExtensionType1(0); /* Error */
^^^^^^^^^^^^^^";
static const field self::ExtensionType1% /* erasure=core::int, declared=! */ newConst1 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:9:23: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
static const field invalid-type newConst1 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:9:19: Error: New expression is not a constant expression.
const newConst1 = new ExtensionType1(0); /* Error */
^";
^^^";
static const field invalid-type implicitConstAliased1 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:13:31: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
const implicitConstAliased1 = Typedef1(0); /* Error */
@@ -83,16 +72,19 @@ static field invalid-type explicitConstAliased1 = invalid-expression "pkg/front_
Try using a constructor or factory that is 'const'.
var explicitConstAliased1 = const Typedef1(0); /* Error */
^^^^^^^^";
static const field self::ExtensionType1% /* erasure=core::int, declared=! */ newConstAliased1 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:15:30: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
static const field invalid-type newConstAliased1 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:15:26: Error: New expression is not a constant expression.
const newConstAliased1 = new Typedef1(0); /* Error */
^";
^^^";
static const field self::ExtensionType2% /* erasure=core::int, declared=! */ implicitConst2 = #C1;
static field self::ExtensionType2% /* erasure=core::int, declared=! */ explicitConst2 = #C1;
static const field self::ExtensionType2% /* erasure=core::int, declared=! */ newConst2 = #C1;
static const field invalid-type newConst2 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:21:19: Error: New expression is not a constant expression.
const newConst2 = new ExtensionType2(0); /* Error */
^^^";
static const field self::ExtensionType2% /* erasure=core::int, declared=! */ implicitConstAliased2 = #C1;
static field self::ExtensionType2% /* erasure=core::int, declared=! */ explicitConstAliased2 = #C1;
static const field self::ExtensionType2% /* erasure=core::int, declared=! */ newConstAliased2 = #C1;
static const field invalid-type newConstAliased2 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:27:26: Error: New expression is not a constant expression.
const newConstAliased2 = new Typedef2(0); /* Error */
^^^";
static extension-type-member method ExtensionType1|constructor#(core::int i) → self::ExtensionType1% /* erasure=core::int, declared=! */ {
lowered final self::ExtensionType1% /* erasure=core::int, declared=! */ #this = i;
return #this;
@@ -16,11 +16,6 @@ library;
// const newConst1 = new ExtensionType1(0); /* Error */
// ^^^
//
// pkg/front_end/testcases/extension_types/const_constructor_access.dart:9:23: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const newConst1 = new ExtensionType1(0); /* Error */
// ^
//
// pkg/front_end/testcases/extension_types/const_constructor_access.dart:13:31: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const implicitConstAliased1 = Typedef1(0); /* Error */
@@ -35,11 +30,6 @@ library;
// const newConstAliased1 = new Typedef1(0); /* Error */
// ^^^
//
// pkg/front_end/testcases/extension_types/const_constructor_access.dart:15:30: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const newConstAliased1 = new Typedef1(0); /* Error */
// ^
//
// pkg/front_end/testcases/extension_types/const_constructor_access.dart:21:19: Error: New expression is not a constant expression.
// const newConst2 = new ExtensionType2(0); /* Error */
// ^^^
@@ -71,10 +61,9 @@ static field invalid-type explicitConst1 = invalid-expression "pkg/front_end/tes
Try using a constructor or factory that is 'const'.
var explicitConst1 = const ExtensionType1(0); /* Error */
^^^^^^^^^^^^^^";
static const field self::ExtensionType1% /* erasure=core::int, declared=! */ newConst1 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:9:23: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
static const field invalid-type newConst1 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:9:19: Error: New expression is not a constant expression.
const newConst1 = new ExtensionType1(0); /* Error */
^";
^^^";
static const field invalid-type implicitConstAliased1 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:13:31: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
const implicitConstAliased1 = Typedef1(0); /* Error */
@@ -83,16 +72,19 @@ static field invalid-type explicitConstAliased1 = invalid-expression "pkg/front_
Try using a constructor or factory that is 'const'.
var explicitConstAliased1 = const Typedef1(0); /* Error */
^^^^^^^^";
static const field self::ExtensionType1% /* erasure=core::int, declared=! */ newConstAliased1 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:15:30: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
static const field invalid-type newConstAliased1 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:15:26: Error: New expression is not a constant expression.
const newConstAliased1 = new Typedef1(0); /* Error */
^";
^^^";
static const field self::ExtensionType2% /* erasure=core::int, declared=! */ implicitConst2 = #C1;
static field self::ExtensionType2% /* erasure=core::int, declared=! */ explicitConst2 = #C1;
static const field self::ExtensionType2% /* erasure=core::int, declared=! */ newConst2 = #C1;
static const field invalid-type newConst2 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:21:19: Error: New expression is not a constant expression.
const newConst2 = new ExtensionType2(0); /* Error */
^^^";
static const field self::ExtensionType2% /* erasure=core::int, declared=! */ implicitConstAliased2 = #C1;
static field self::ExtensionType2% /* erasure=core::int, declared=! */ explicitConstAliased2 = #C1;
static const field self::ExtensionType2% /* erasure=core::int, declared=! */ newConstAliased2 = #C1;
static const field invalid-type newConstAliased2 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:27:26: Error: New expression is not a constant expression.
const newConstAliased2 = new Typedef2(0); /* Error */
^^^";
static extension-type-member method ExtensionType1|constructor#(core::int i) → self::ExtensionType1% /* erasure=core::int, declared=! */ {
lowered final self::ExtensionType1% /* erasure=core::int, declared=! */ #this = i;
return #this;
@@ -16,11 +16,6 @@ library;
// const newConst1 = new ExtensionType1(0); /* Error */
// ^^^
//
// pkg/front_end/testcases/extension_types/const_constructor_access.dart:9:23: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const newConst1 = new ExtensionType1(0); /* Error */
// ^
//
// pkg/front_end/testcases/extension_types/const_constructor_access.dart:13:31: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const implicitConstAliased1 = Typedef1(0); /* Error */
@@ -35,11 +30,6 @@ library;
// const newConstAliased1 = new Typedef1(0); /* Error */
// ^^^
//
// pkg/front_end/testcases/extension_types/const_constructor_access.dart:15:30: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const newConstAliased1 = new Typedef1(0); /* Error */
// ^
//
// pkg/front_end/testcases/extension_types/const_constructor_access.dart:21:19: Error: New expression is not a constant expression.
// const newConst2 = new ExtensionType2(0); /* Error */
// ^^^
@@ -68,25 +58,27 @@ Try using a constructor or factory that is 'const'.
const implicitConst1 = ExtensionType1(0); /* Error */
^^^^^^^^^^^^^^";
static field invalid-type explicitConst1;
static const field self::ExtensionType1% /* erasure=core::int, declared=! */ newConst1 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:9:23: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
static const field invalid-type newConst1 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:9:19: Error: New expression is not a constant expression.
const newConst1 = new ExtensionType1(0); /* Error */
^";
^^^";
static const field invalid-type implicitConstAliased1 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:13:31: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
const implicitConstAliased1 = Typedef1(0); /* Error */
^^^^^^^^";
static field invalid-type explicitConstAliased1;
static const field self::ExtensionType1% /* erasure=core::int, declared=! */ newConstAliased1 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:15:30: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
static const field invalid-type newConstAliased1 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:15:26: Error: New expression is not a constant expression.
const newConstAliased1 = new Typedef1(0); /* Error */
^";
^^^";
static const field self::ExtensionType2% /* erasure=core::int, declared=! */ implicitConst2 = const self::ExtensionType2|constructor#(0);
static field self::ExtensionType2% /* erasure=core::int, declared=! */ explicitConst2;
static const field self::ExtensionType2% /* erasure=core::int, declared=! */ newConst2 = const self::ExtensionType2|constructor#(0);
static const field invalid-type newConst2 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:21:19: Error: New expression is not a constant expression.
const newConst2 = new ExtensionType2(0); /* Error */
^^^";
static const field self::ExtensionType2% /* erasure=core::int, declared=! */ implicitConstAliased2 = const self::ExtensionType2|constructor#(0);
static field self::ExtensionType2% /* erasure=core::int, declared=! */ explicitConstAliased2;
static const field self::ExtensionType2% /* erasure=core::int, declared=! */ newConstAliased2 = const self::ExtensionType2|constructor#(0);
static const field invalid-type newConstAliased2 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:27:26: Error: New expression is not a constant expression.
const newConstAliased2 = new Typedef2(0); /* Error */
^^^";
static extension-type-member method ExtensionType1|constructor#(core::int i) → self::ExtensionType1% /* erasure=core::int, declared=! */
;
static extension-type-member synthetic method ExtensionType1|constructor#_#new#tearOff(core::int i) → self::ExtensionType1% /* erasure=core::int, declared=! */
@@ -105,7 +97,5 @@ static synthetic method _#Typedef2#new#tearOff<unrelated X extends core::Object?
Extra constant evaluation status:
Evaluated: StaticInvocation @ org-dartlang-testcase:///const_constructor_access.dart:19:24 -> IntConstant(0)
Evaluated: StaticInvocation @ org-dartlang-testcase:///const_constructor_access.dart:21:23 -> IntConstant(0)
Evaluated: StaticInvocation @ org-dartlang-testcase:///const_constructor_access.dart:25:31 -> IntConstant(0)
Evaluated: StaticInvocation @ org-dartlang-testcase:///const_constructor_access.dart:27:30 -> IntConstant(0)
Extra constant evaluation: evaluated: 14, effectively constant: 4
Extra constant evaluation: evaluated: 12, effectively constant: 2
@@ -16,11 +16,6 @@ library;
// const newConst1 = new ExtensionType1(0); /* Error */
// ^^^
//
// pkg/front_end/testcases/extension_types/const_constructor_access.dart:9:23: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const newConst1 = new ExtensionType1(0); /* Error */
// ^
//
// pkg/front_end/testcases/extension_types/const_constructor_access.dart:13:31: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const implicitConstAliased1 = Typedef1(0); /* Error */
@@ -35,11 +30,6 @@ library;
// const newConstAliased1 = new Typedef1(0); /* Error */
// ^^^
//
// pkg/front_end/testcases/extension_types/const_constructor_access.dart:15:30: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const newConstAliased1 = new Typedef1(0); /* Error */
// ^
//
// pkg/front_end/testcases/extension_types/const_constructor_access.dart:21:19: Error: New expression is not a constant expression.
// const newConst2 = new ExtensionType2(0); /* Error */
// ^^^
@@ -71,10 +61,9 @@ static field invalid-type explicitConst1 = invalid-expression "pkg/front_end/tes
Try using a constructor or factory that is 'const'.
var explicitConst1 = const ExtensionType1(0); /* Error */
^^^^^^^^^^^^^^";
static const field self::ExtensionType1% /* erasure=core::int, declared=! */ newConst1 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:9:23: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
static const field invalid-type newConst1 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:9:19: Error: New expression is not a constant expression.
const newConst1 = new ExtensionType1(0); /* Error */
^";
^^^";
static const field invalid-type implicitConstAliased1 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:13:31: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
const implicitConstAliased1 = Typedef1(0); /* Error */
@@ -83,16 +72,19 @@ static field invalid-type explicitConstAliased1 = invalid-expression "pkg/front_
Try using a constructor or factory that is 'const'.
var explicitConstAliased1 = const Typedef1(0); /* Error */
^^^^^^^^";
static const field self::ExtensionType1% /* erasure=core::int, declared=! */ newConstAliased1 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:15:30: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
static const field invalid-type newConstAliased1 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:15:26: Error: New expression is not a constant expression.
const newConstAliased1 = new Typedef1(0); /* Error */
^";
^^^";
static const field self::ExtensionType2% /* erasure=core::int, declared=! */ implicitConst2 = #C1;
static field self::ExtensionType2% /* erasure=core::int, declared=! */ explicitConst2 = #C1;
static const field self::ExtensionType2% /* erasure=core::int, declared=! */ newConst2 = #C1;
static const field invalid-type newConst2 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:21:19: Error: New expression is not a constant expression.
const newConst2 = new ExtensionType2(0); /* Error */
^^^";
static const field self::ExtensionType2% /* erasure=core::int, declared=! */ implicitConstAliased2 = #C1;
static field self::ExtensionType2% /* erasure=core::int, declared=! */ explicitConstAliased2 = #C1;
static const field self::ExtensionType2% /* erasure=core::int, declared=! */ newConstAliased2 = #C1;
static const field invalid-type newConstAliased2 = invalid-expression "pkg/front_end/testcases/extension_types/const_constructor_access.dart:27:26: Error: New expression is not a constant expression.
const newConstAliased2 = new Typedef2(0); /* Error */
^^^";
static extension-type-member method ExtensionType1|constructor#(core::int i) → self::ExtensionType1% /* erasure=core::int, declared=! */ {
lowered final self::ExtensionType1% /* erasure=core::int, declared=! */ #this = i;
return #this;
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -26,21 +26,6 @@ library;
// const B9.bar({super.y}) : super(new Test.bar()); // Error.
// ^^^
//
// pkg/front_end/testcases/super_parameters/issue48642.dart:70:42: Error: Cannot invoke a non-'const' factory where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
// ^
//
// pkg/front_end/testcases/super_parameters/issue48642.dart:79:40: Error: Cannot invoke a non-'const' factory where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const B8.bar(super.x) : super(y: new Test.bar()); // Error.
// ^
//
// pkg/front_end/testcases/super_parameters/issue48642.dart:88:39: Error: Cannot invoke a non-'const' factory where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const B9.bar({super.y}) : super(new Test.bar()); // Error.
// ^
//
import self as self;
import "dart:core" as core;
@@ -135,13 +120,14 @@ class A7 extends core::Object /*hasConstConstructor*/ {
}
class B7 extends self::A7 /*hasConstConstructor*/ {
const constructor foo({dynamic x = #C1}) → self::B7
: super self::A7::•(y: new self::Test::foo(), x: x)
: super self::A7::•(y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:69:38: Error: New expression is not a constant expression.
const B7.foo({super.x}) : super(y: new Test.foo()); // Error.
^^^", x: x)
;
const constructor bar({dynamic x = #C1}) → self::B7
: super self::A7::•(y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:70:42: Error: Cannot invoke a non-'const' factory where a const expression is expected.
Try using a constructor or factory that is 'const'.
: super self::A7::•(y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:70:38: Error: New expression is not a constant expression.
const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
^", x: x)
^^^", x: x)
;
}
class A8 extends core::Object /*hasConstConstructor*/ {
@@ -151,13 +137,14 @@ class A8 extends core::Object /*hasConstConstructor*/ {
}
class B8 extends self::A8 /*hasConstConstructor*/ {
const constructor foo(dynamic x) → self::B8
: super self::A8::•(x, y: new self::Test::foo())
: super self::A8::•(x, y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:78:36: Error: New expression is not a constant expression.
const B8.foo(super.x) : super(y: new Test.foo()); // Error.
^^^")
;
const constructor bar(dynamic x) → self::B8
: super self::A8::•(x, y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:79:40: Error: Cannot invoke a non-'const' factory where a const expression is expected.
Try using a constructor or factory that is 'const'.
: super self::A8::•(x, y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:79:36: Error: New expression is not a constant expression.
const B8.bar(super.x) : super(y: new Test.bar()); // Error.
^")
^^^")
;
}
class A9 extends core::Object /*hasConstConstructor*/ {
@@ -167,13 +154,14 @@ class A9 extends core::Object /*hasConstConstructor*/ {
}
class B9 extends self::A9 /*hasConstConstructor*/ {
const constructor foo({dynamic y = #C1}) → self::B9
: super self::A9::•(new self::Test::foo(), y: y)
: super self::A9::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:87:35: Error: New expression is not a constant expression.
const B9.foo({super.y}) : super(new Test.foo()); // Error.
^^^", y: y)
;
const constructor bar({dynamic y = #C1}) → self::B9
: super self::A9::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:88:39: Error: Cannot invoke a non-'const' factory where a const expression is expected.
Try using a constructor or factory that is 'const'.
: super self::A9::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:88:35: Error: New expression is not a constant expression.
const B9.bar({super.y}) : super(new Test.bar()); // Error.
^", y: y)
^^^", y: y)
;
}
static method main() → dynamic {}
@@ -26,21 +26,6 @@ library;
// const B9.bar({super.y}) : super(new Test.bar()); // Error.
// ^^^
//
// pkg/front_end/testcases/super_parameters/issue48642.dart:70:42: Error: Cannot invoke a non-'const' factory where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
// ^
//
// pkg/front_end/testcases/super_parameters/issue48642.dart:79:40: Error: Cannot invoke a non-'const' factory where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const B8.bar(super.x) : super(y: new Test.bar()); // Error.
// ^
//
// pkg/front_end/testcases/super_parameters/issue48642.dart:88:39: Error: Cannot invoke a non-'const' factory where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const B9.bar({super.y}) : super(new Test.bar()); // Error.
// ^
//
import self as self;
import "dart:core" as core;
@@ -135,13 +120,14 @@ class A7 extends core::Object /*hasConstConstructor*/ {
}
class B7 extends self::A7 /*hasConstConstructor*/ {
const constructor foo({dynamic x = #C1}) → self::B7
: super self::A7::•(y: new self::Test::foo(), x: x)
: super self::A7::•(y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:69:38: Error: New expression is not a constant expression.
const B7.foo({super.x}) : super(y: new Test.foo()); // Error.
^^^", x: x)
;
const constructor bar({dynamic x = #C1}) → self::B7
: super self::A7::•(y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:70:42: Error: Cannot invoke a non-'const' factory where a const expression is expected.
Try using a constructor or factory that is 'const'.
: super self::A7::•(y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:70:38: Error: New expression is not a constant expression.
const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
^", x: x)
^^^", x: x)
;
}
class A8 extends core::Object /*hasConstConstructor*/ {
@@ -151,13 +137,14 @@ class A8 extends core::Object /*hasConstConstructor*/ {
}
class B8 extends self::A8 /*hasConstConstructor*/ {
const constructor foo(dynamic x) → self::B8
: super self::A8::•(x, y: new self::Test::foo())
: super self::A8::•(x, y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:78:36: Error: New expression is not a constant expression.
const B8.foo(super.x) : super(y: new Test.foo()); // Error.
^^^")
;
const constructor bar(dynamic x) → self::B8
: super self::A8::•(x, y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:79:40: Error: Cannot invoke a non-'const' factory where a const expression is expected.
Try using a constructor or factory that is 'const'.
: super self::A8::•(x, y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:79:36: Error: New expression is not a constant expression.
const B8.bar(super.x) : super(y: new Test.bar()); // Error.
^")
^^^")
;
}
class A9 extends core::Object /*hasConstConstructor*/ {
@@ -167,13 +154,14 @@ class A9 extends core::Object /*hasConstConstructor*/ {
}
class B9 extends self::A9 /*hasConstConstructor*/ {
const constructor foo({dynamic y = #C1}) → self::B9
: super self::A9::•(new self::Test::foo(), y: y)
: super self::A9::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:87:35: Error: New expression is not a constant expression.
const B9.foo({super.y}) : super(new Test.foo()); // Error.
^^^", y: y)
;
const constructor bar({dynamic y = #C1}) → self::B9
: super self::A9::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:88:39: Error: Cannot invoke a non-'const' factory where a const expression is expected.
Try using a constructor or factory that is 'const'.
: super self::A9::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:88:35: Error: New expression is not a constant expression.
const B9.bar({super.y}) : super(new Test.bar()); // Error.
^", y: y)
^^^", y: y)
;
}
static method main() → dynamic {}
@@ -26,21 +26,6 @@ library;
// const B9.bar({super.y}) : super(new Test.bar()); // Error.
// ^^^
//
// pkg/front_end/testcases/super_parameters/issue48642.dart:70:42: Error: Cannot invoke a non-'const' factory where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
// ^
//
// pkg/front_end/testcases/super_parameters/issue48642.dart:79:40: Error: Cannot invoke a non-'const' factory where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const B8.bar(super.x) : super(y: new Test.bar()); // Error.
// ^
//
// pkg/front_end/testcases/super_parameters/issue48642.dart:88:39: Error: Cannot invoke a non-'const' factory where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const B9.bar({super.y}) : super(new Test.bar()); // Error.
// ^
//
import self as self;
import "dart:core" as core;
@@ -120,13 +105,14 @@ class A7 extends core::Object /*hasConstConstructor*/ {
}
class B7 extends self::A7 /*hasConstConstructor*/ {
const constructor foo({dynamic x = null}) → self::B7
: super self::A7::•(y: new self::Test::foo(), x: x)
: super self::A7::•(y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:69:38: Error: New expression is not a constant expression.
const B7.foo({super.x}) : super(y: new Test.foo()); // Error.
^^^", x: x)
;
const constructor bar({dynamic x = null}) → self::B7
: super self::A7::•(y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:70:42: Error: Cannot invoke a non-'const' factory where a const expression is expected.
Try using a constructor or factory that is 'const'.
: super self::A7::•(y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:70:38: Error: New expression is not a constant expression.
const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
^", x: x)
^^^", x: x)
;
}
class A8 extends core::Object /*hasConstConstructor*/ {
@@ -136,13 +122,14 @@ class A8 extends core::Object /*hasConstConstructor*/ {
}
class B8 extends self::A8 /*hasConstConstructor*/ {
const constructor foo(dynamic x) → self::B8
: super self::A8::•(x, y: new self::Test::foo())
: super self::A8::•(x, y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:78:36: Error: New expression is not a constant expression.
const B8.foo(super.x) : super(y: new Test.foo()); // Error.
^^^")
;
const constructor bar(dynamic x) → self::B8
: super self::A8::•(x, y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:79:40: Error: Cannot invoke a non-'const' factory where a const expression is expected.
Try using a constructor or factory that is 'const'.
: super self::A8::•(x, y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:79:36: Error: New expression is not a constant expression.
const B8.bar(super.x) : super(y: new Test.bar()); // Error.
^")
^^^")
;
}
class A9 extends core::Object /*hasConstConstructor*/ {
@@ -152,13 +139,14 @@ class A9 extends core::Object /*hasConstConstructor*/ {
}
class B9 extends self::A9 /*hasConstConstructor*/ {
const constructor foo({dynamic y = null}) → self::B9
: super self::A9::•(new self::Test::foo(), y: y)
: super self::A9::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:87:35: Error: New expression is not a constant expression.
const B9.foo({super.y}) : super(new Test.foo()); // Error.
^^^", y: y)
;
const constructor bar({dynamic y = null}) → self::B9
: super self::A9::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:88:39: Error: Cannot invoke a non-'const' factory where a const expression is expected.
Try using a constructor or factory that is 'const'.
: super self::A9::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:88:35: Error: New expression is not a constant expression.
const B9.bar({super.y}) : super(new Test.bar()); // Error.
^", y: y)
^^^", y: y)
;
}
static method main() → dynamic
@@ -26,21 +26,6 @@ library;
// const B9.bar({super.y}) : super(new Test.bar()); // Error.
// ^^^
//
// pkg/front_end/testcases/super_parameters/issue48642.dart:70:42: Error: Cannot invoke a non-'const' factory where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
// ^
//
// pkg/front_end/testcases/super_parameters/issue48642.dart:79:40: Error: Cannot invoke a non-'const' factory where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const B8.bar(super.x) : super(y: new Test.bar()); // Error.
// ^
//
// pkg/front_end/testcases/super_parameters/issue48642.dart:88:39: Error: Cannot invoke a non-'const' factory where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const B9.bar({super.y}) : super(new Test.bar()); // Error.
// ^
//
import self as self;
import "dart:core" as core;
@@ -135,13 +120,14 @@ class A7 extends core::Object /*hasConstConstructor*/ {
}
class B7 extends self::A7 /*hasConstConstructor*/ {
const constructor foo({dynamic x = #C1}) → self::B7
: super self::A7::•(y: new self::Test::foo(), x: x)
: super self::A7::•(y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:69:38: Error: New expression is not a constant expression.
const B7.foo({super.x}) : super(y: new Test.foo()); // Error.
^^^", x: x)
;
const constructor bar({dynamic x = #C1}) → self::B7
: super self::A7::•(y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:70:42: Error: Cannot invoke a non-'const' factory where a const expression is expected.
Try using a constructor or factory that is 'const'.
: super self::A7::•(y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:70:38: Error: New expression is not a constant expression.
const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
^", x: x)
^^^", x: x)
;
}
class A8 extends core::Object /*hasConstConstructor*/ {
@@ -151,13 +137,14 @@ class A8 extends core::Object /*hasConstConstructor*/ {
}
class B8 extends self::A8 /*hasConstConstructor*/ {
const constructor foo(dynamic x) → self::B8
: super self::A8::•(x, y: new self::Test::foo())
: super self::A8::•(x, y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:78:36: Error: New expression is not a constant expression.
const B8.foo(super.x) : super(y: new Test.foo()); // Error.
^^^")
;
const constructor bar(dynamic x) → self::B8
: super self::A8::•(x, y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:79:40: Error: Cannot invoke a non-'const' factory where a const expression is expected.
Try using a constructor or factory that is 'const'.
: super self::A8::•(x, y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:79:36: Error: New expression is not a constant expression.
const B8.bar(super.x) : super(y: new Test.bar()); // Error.
^")
^^^")
;
}
class A9 extends core::Object /*hasConstConstructor*/ {
@@ -167,13 +154,14 @@ class A9 extends core::Object /*hasConstConstructor*/ {
}
class B9 extends self::A9 /*hasConstConstructor*/ {
const constructor foo({dynamic y = #C1}) → self::B9
: super self::A9::•(new self::Test::foo(), y: y)
: super self::A9::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:87:35: Error: New expression is not a constant expression.
const B9.foo({super.y}) : super(new Test.foo()); // Error.
^^^", y: y)
;
const constructor bar({dynamic y = #C1}) → self::B9
: super self::A9::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:88:39: Error: Cannot invoke a non-'const' factory where a const expression is expected.
Try using a constructor or factory that is 'const'.
: super self::A9::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:88:35: Error: New expression is not a constant expression.
const B9.bar({super.y}) : super(new Test.bar()); // Error.
^", y: y)
^^^", y: y)
;
}
static method main() → dynamic {}
@@ -29,8 +29,6 @@ void main() {
// ^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
// [cfe] New expression is not a constant expression.
// ^
// [cfe] New expression is not a constant expression.
const c8 = const Class();
}
-8
View File
@@ -45,8 +45,6 @@ main() {
// ^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
// [cfe] New expression is not a constant expression.
// ^
// [cfe] New expression is not a constant expression.
var f4 = B4;
var f5 = B5;
@@ -88,14 +86,10 @@ const P2 = new Point(0, 0);
// ^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
// [cfe] New expression is not a constant expression.
// ^
// [cfe] New expression is not a constant expression.
const P3 = new Point(0, 0) + 1;
// ^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
// [cfe] New expression is not a constant expression.
// ^
// [cfe] New expression is not a constant expression.
// Check that we cannot have cyclic references in compile time
// expressions.
@@ -148,6 +142,4 @@ const B4 = identical(1, new Point(1, 2));
// ^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
// [cfe] New expression is not a constant expression.
// ^
// [cfe] New expression is not a constant expression.
const B5 = identical(1, const Point(1, 2));
@@ -30,14 +30,10 @@ test() {
// ^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
// [cfe] New expression is not a constant expression.
// ^
// [cfe] New expression is not a constant expression.
foo(y: const B(new A(42)), const B(const A(0)));
// ^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT
// [cfe] New expression is not a constant expression.
// ^
// [cfe] New expression is not a constant expression.
// ^^^^^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_EVAL_THROWS_EXCEPTION
// ^
@@ -480,8 +480,6 @@ class Class {
// ^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.CONSTANT_PATTERN_WITH_NON_CONSTANT_EXPRESSION
// [cfe] New expression is not a constant expression.
// ^
// [cfe] New expression is not a constant expression.
}
switch (o) {
@@ -489,8 +487,6 @@ class Class {
// ^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.CONSTANT_PATTERN_WITH_NON_CONSTANT_EXPRESSION
// [cfe] New expression is not a constant expression.
// ^
// [cfe] New expression is not a constant expression.
}
switch (o) {