From 4f8af89290a16cf35b1002580990ad4a6ad99b78 Mon Sep 17 00:00:00 2001 From: Johnni Winther Date: Wed, 24 Sep 2025 01:18:32 -0700 Subject: [PATCH] [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 Reviewed-by: Erik Ernst Commit-Queue: Johnni Winther --- .../constructor/body_builder_context.dart | 2 - .../lib/src/fragment/factory/encoding.dart | 2 - .../lib/src/fragment/field/declaration.dart | 4 -- .../fragment/primary_constructor_field.dart | 2 - .../lib/src/kernel/body_builder.dart | 23 +++++--- .../lib/src/kernel/body_builder_context.dart | 1 - pkg/front_end/lib/src/kernel/forest.dart | 3 - .../lib/src/kernel/internal_ast.dart | 10 +++- pkg/front_end/lib/src/kernel/resolver.dart | 36 ++++-------- .../lib/src/kernel/resolver_helpers.dart | 30 ++-------- .../src/type_inference/inference_visitor.dart | 4 +- .../inference_visitor_base.dart | 4 -- .../lib/src/type_inference/type_inferrer.dart | 58 ++----------------- ...internal_ast_text_representation_test.dart | 28 +++++++-- ...onst_constructor_access.dart.strong.expect | 28 ++++----- ...structor_access.dart.strong.modular.expect | 28 ++++----- ...structor_access.dart.strong.outline.expect | 32 ++++------ ...ctor_access.dart.strong.transformed.expect | 28 ++++----- .../const_patterns.dart.strong.expect | 22 +++---- .../const_patterns.dart.strong.modular.expect | 22 +++---- ...st_patterns.dart.strong.transformed.expect | 22 +++---- .../issue48642.dart.strong.expect | 42 +++++--------- .../issue48642.dart.strong.modular.expect | 42 +++++--------- .../issue48642.dart.strong.outline.expect | 42 +++++--------- .../issue48642.dart.strong.transformed.expect | 42 +++++--------- .../const_locals_constant_locals_test.dart | 2 - tests/language/const/syntax_test.dart | 8 --- .../order_side_effects_error_test.dart | 4 -- .../patterns/invalid_const_pattern_test.dart | 4 -- 29 files changed, 203 insertions(+), 372 deletions(-) diff --git a/pkg/front_end/lib/src/fragment/constructor/body_builder_context.dart b/pkg/front_end/lib/src/fragment/constructor/body_builder_context.dart index 379ea35f34d..b0b7a5d5811 100644 --- a/pkg/front_end/lib/src/fragment/constructor/body_builder_context.dart +++ b/pkg/front_end/lib/src/fragment/constructor/body_builder_context.dart @@ -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, ); diff --git a/pkg/front_end/lib/src/fragment/factory/encoding.dart b/pkg/front_end/lib/src/fragment/factory/encoding.dart index 0e5bde30133..f7d7ef0d206 100644 --- a/pkg/front_end/lib/src/fragment/factory/encoding.dart +++ b/pkg/front_end/lib/src/fragment/factory/encoding.dart @@ -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( diff --git a/pkg/front_end/lib/src/fragment/field/declaration.dart b/pkg/front_end/lib/src/fragment/field/declaration.dart index 7e049eef1f4..e27712af9d7 100644 --- a/pkg/front_end/lib/src/fragment/field/declaration.dart +++ b/pkg/front_end/lib/src/fragment/field/declaration.dart @@ -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, }); diff --git a/pkg/front_end/lib/src/fragment/primary_constructor_field.dart b/pkg/front_end/lib/src/fragment/primary_constructor_field.dart index a083a9eef02..3a16a79f105 100644 --- a/pkg/front_end/lib/src/fragment/primary_constructor_field.dart +++ b/pkg/front_end/lib/src/fragment/primary_constructor_field.dart @@ -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, ) diff --git a/pkg/front_end/lib/src/kernel/body_builder.dart b/pkg/front_end/lib/src/kernel/body_builder.dart index 139bfc761b8..36fba08680f 100644 --- a/pkg/front_end/lib/src/kernel/body_builder.dart +++ b/pkg/front_end/lib/src/kernel/body_builder.dart @@ -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( diff --git a/pkg/front_end/lib/src/kernel/body_builder_context.dart b/pkg/front_end/lib/src/kernel/body_builder_context.dart index 064da7b9239..24c79cea2d9 100644 --- a/pkg/front_end/lib/src/kernel/body_builder_context.dart +++ b/pkg/front_end/lib/src/kernel/body_builder_context.dart @@ -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'); diff --git a/pkg/front_end/lib/src/kernel/forest.dart b/pkg/front_end/lib/src/kernel/forest.dart index 6f806d41935..a18947d8fb1 100644 --- a/pkg/front_end/lib/src/kernel/forest.dart +++ b/pkg/front_end/lib/src/kernel/forest.dart @@ -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. diff --git a/pkg/front_end/lib/src/kernel/internal_ast.dart b/pkg/front_end/lib/src/kernel/internal_ast.dart index e7c11635e8c..da3b2e1c7a2 100644 --- a/pkg/front_end/lib/src/kernel/internal_ast.dart +++ b/pkg/front_end/lib/src/kernel/internal_ast.dart @@ -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( diff --git a/pkg/front_end/lib/src/kernel/resolver.dart b/pkg/front_end/lib/src/kernel/resolver.dart index 52da7db3415..9b983404ce0 100644 --- a/pkg/front_end/lib/src/kernel/resolver.dart +++ b/pkg/front_end/lib/src/kernel/resolver.dart @@ -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? buildInitializersUnfinished({ @@ -581,11 +575,10 @@ class Resolver { annotatable.addAnnotation(expression); } context.inferSingleTargetAnnotation( - constantContext: constantContext, singleTarget: new SingleTargetAnnotations(annotatable), ); List 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, ); diff --git a/pkg/front_end/lib/src/kernel/resolver_helpers.dart b/pkg/front_end/lib/src/kernel/resolver_helpers.dart index 033166fa3c8..2d17825479e 100644 --- a/pkg/front_end/lib/src/kernel/resolver_helpers.dart +++ b/pkg/front_end/lib/src/kernel/resolver_helpers.dart @@ -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? 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 = 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 targets = multiTarget.targets; Annotatable firstTarget = targets.first; List 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); } diff --git a/pkg/front_end/lib/src/type_inference/inference_visitor.dart b/pkg/front_end/lib/src/type_inference/inference_visitor.dart index 3a76506e749..f7474aabd18 100644 --- a/pkg/front_end/lib/src/type_inference/inference_visitor.dart +++ b/pkg/front_end/lib/src/type_inference/inference_visitor.dart @@ -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 diff --git a/pkg/front_end/lib/src/type_inference/inference_visitor_base.dart b/pkg/front_end/lib/src/type_inference/inference_visitor_base.dart index e243fe9e9a5..118673091b1 100644 --- a/pkg/front_end/lib/src/type_inference/inference_visitor_base.dart +++ b/pkg/front_end/lib/src/type_inference/inference_visitor_base.dart @@ -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, ); diff --git a/pkg/front_end/lib/src/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/type_inference/type_inferrer.dart index 45cab3e9472..a615ab08968 100644 --- a/pkg/front_end/lib/src/type_inference/type_inferrer.dart +++ b/pkg/front_end/lib/src/type_inference/type_inferrer.dart @@ -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? 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 positionalArguments = []; 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? 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? 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; diff --git a/pkg/front_end/test/text_representation/internal_ast_text_representation_test.dart b/pkg/front_end/test/text_representation/internal_ast_text_representation_test.dart index 17e720fab99..4ef2420fd04 100644 --- a/pkg/front_end/test/text_representation/internal_ast_text_representation_test.dart +++ b/pkg/front_end/test/text_representation/internal_ast_text_representation_test.dart @@ -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(0, bar: 1)''', @@ -675,6 +691,7 @@ new library test:dummy::Class(0, bar: 1)''', [new IntLiteral(0)], named: [new NamedExpression('bar', new IntLiteral(1))], )..setExplicitTypeArguments([const VoidType()]), + isConst: false, ), ''' new Class.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(0, bar: 1)''', @@ -855,6 +874,7 @@ new library test:dummy::Typedef(0, bar: 1)''', [new IntLiteral(0)], named: [new NamedExpression('bar', new IntLiteral(1))], )..setExplicitTypeArguments([const VoidType()]), + isConst: false, ), ''' new Typedef.foo(0, bar: 1)''', diff --git a/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.expect b/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.expect index b2b6000cd66..e48f17f5424 100644 --- a/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.expect +++ b/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.expect @@ -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; diff --git a/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.modular.expect b/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.modular.expect index b2b6000cd66..e48f17f5424 100644 --- a/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.modular.expect +++ b/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.modular.expect @@ -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; diff --git a/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.outline.expect b/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.outline.expect index ad9aa56f1f5..19f3ac4a80d 100644 --- a/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.outline.expect +++ b/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.outline.expect @@ -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 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 diff --git a/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.transformed.expect index b2b6000cd66..e48f17f5424 100644 --- a/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.transformed.expect @@ -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; diff --git a/pkg/front_end/testcases/patterns/const_patterns.dart.strong.expect b/pkg/front_end/testcases/patterns/const_patterns.dart.strong.expect index f3d3e1847c0..7c3da52d388 100644 --- a/pkg/front_end/testcases/patterns/const_patterns.dart.strong.expect +++ b/pkg/front_end/testcases/patterns/const_patterns.dart.strong.expect @@ -296,14 +296,6 @@ library; // case const await 0: // Error // ^ // -// pkg/front_end/testcases/patterns/const_patterns.dart:102:22: Error: New expression is not a constant expression. -// case const new Class(): // Error -// ^ -// -// pkg/front_end/testcases/patterns/const_patterns.dart:103:16: Error: New expression is not a constant expression. -// case new Class(): // Error -// ^ -// import self as self; import "dart:core" as core; @@ -404,8 +396,12 @@ class Class extends core::Object /*hasConstConstructor*/ { synthesized core::bool #2#77; synthesized core::bool #2#77#isSet = false; final const synthesized core::Map #2#76 = #C23; - final const synthesized self::Class #2#78 = invalid-expression "New expression is not a constant expression."; - final const synthesized self::Class #2#80 = invalid-expression "New expression is not a constant expression."; + final const synthesized invalid-type #2#78 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:102:18: Error: New expression is not a constant expression. + case const new Class(): // Error + ^^^"; + final const synthesized invalid-type #2#80 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:103:12: Error: New expression is not a constant expression. + case new Class(): // Error + ^^^"; synthesized core::bool #2#83; synthesized core::bool #2#83#isSet = false; final const synthesized() #2#82 = #C24; @@ -439,7 +435,11 @@ class Class extends core::Object /*hasConstConstructor*/ { case const assert(false): // Error ^^^^^^" =={core::Object::==}{(core::Object) → core::bool} #2#0 || invalid-expression "Not a constant expression." =={core::Object::==}{(core::Object) → core::bool} #2#0 || invalid-expression "Not a constant expression." =={core::num::==}{(core::Object) → core::bool} #2#0 || (#2#2#isSet ?{core::bool} #2#2 : let final dynamic #t44 = #2#2#isSet = true in #2#2 = #C3 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#47#isSet ?{core::bool} #2#47 : let final dynamic #t45 = #2#47#isSet = true in #2#47 = #C14 =={core::num::==}{(core::Object) → core::bool} #2#0) || invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:79:20: Error: Not a constant expression. case const ++variable: // Error - ^^^^^^^^" =={core::Object::==}{(core::Object) → core::bool} #2#0 || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t46 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t47 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t48 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t49 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t50 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t51 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t52 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t53 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#71#isSet ?{core::bool} #2#71 : let final dynamic #t54 = #2#71#isSet = true in #2#71 = #C20 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#73#isSet ?{core::bool} #2#73 : let final dynamic #t55 = #2#73#isSet = true in #2#73 = #C21 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#75#isSet ?{core::bool} #2#75 : let final dynamic #t56 = #2#75#isSet = true in #2#75 = #C22 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#77#isSet ?{core::bool} #2#77 : let final dynamic #t57 = #2#77#isSet = true in #2#77 = #C23 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t58 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t59 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t60 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t61 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t62 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t63 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#71#isSet ?{core::bool} #2#71 : let final dynamic #t64 = #2#71#isSet = true in #2#71 = #C20 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#73#isSet ?{core::bool} #2#73 : let final dynamic #t65 = #2#73#isSet = true in #2#73 = #C21 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#75#isSet ?{core::bool} #2#75 : let final dynamic #t66 = #2#75#isSet = true in #2#75 = #C22 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#77#isSet ?{core::bool} #2#77 : let final dynamic #t67 = #2#77#isSet = true in #2#77 = #C23 =={core::Object::==}{(core::Object) → core::bool} #2#0) || invalid-expression "New expression is not a constant expression." =={core::Object::==}{(core::Object) → core::bool} #2#0 || invalid-expression "New expression is not a constant expression." =={core::Object::==}{(core::Object) → core::bool} #2#0 || (#2#83#isSet ?{core::bool} #2#83 : let final dynamic #t68 = #2#83#isSet = true in #2#83 = #C24 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#83#isSet ?{core::bool} #2#83 : let final dynamic #t69 = #2#83#isSet = true in #2#83 = #C24 =={core::Object::==}{(core::Object) → core::bool} #2#0) || #C25 =={core::num::==}{(core::Object) → core::bool} #2#0 || (#2#47#isSet ?{core::bool} #2#47 : let final dynamic #t70 = #2#47#isSet = true in #2#47 = #C14 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#12#isSet ?{core::bool} #2#12 : let final dynamic #t71 = #2#12#isSet = true in #2#12 = #C4 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#14#isSet ?{core::bool} #2#14 : let final dynamic #t72 = #2#14#isSet = true in #2#14 = #C5 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#37#isSet ?{core::bool} #2#37 : let final dynamic #t73 = #2#37#isSet = true in #2#37 = #C12 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t74 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t75 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t76 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t77 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t78 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t79 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t80 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t81 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t82 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t83 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0)) { + ^^^^^^^^" =={core::Object::==}{(core::Object) → core::bool} #2#0 || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t46 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t47 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t48 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t49 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t50 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t51 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t52 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t53 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#71#isSet ?{core::bool} #2#71 : let final dynamic #t54 = #2#71#isSet = true in #2#71 = #C20 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#73#isSet ?{core::bool} #2#73 : let final dynamic #t55 = #2#73#isSet = true in #2#73 = #C21 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#75#isSet ?{core::bool} #2#75 : let final dynamic #t56 = #2#75#isSet = true in #2#75 = #C22 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#77#isSet ?{core::bool} #2#77 : let final dynamic #t57 = #2#77#isSet = true in #2#77 = #C23 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t58 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t59 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t60 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t61 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t62 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t63 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#71#isSet ?{core::bool} #2#71 : let final dynamic #t64 = #2#71#isSet = true in #2#71 = #C20 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#73#isSet ?{core::bool} #2#73 : let final dynamic #t65 = #2#73#isSet = true in #2#73 = #C21 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#75#isSet ?{core::bool} #2#75 : let final dynamic #t66 = #2#75#isSet = true in #2#75 = #C22 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#77#isSet ?{core::bool} #2#77 : let final dynamic #t67 = #2#77#isSet = true in #2#77 = #C23 =={core::Object::==}{(core::Object) → core::bool} #2#0) || invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:102:18: Error: New expression is not a constant expression. + case const new Class(): // Error + ^^^" =={core::Object::==}{(core::Object) → core::bool} #2#0 || invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:103:12: Error: New expression is not a constant expression. + case new Class(): // Error + ^^^" =={core::Object::==}{(core::Object) → core::bool} #2#0 || (#2#83#isSet ?{core::bool} #2#83 : let final dynamic #t68 = #2#83#isSet = true in #2#83 = #C24 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#83#isSet ?{core::bool} #2#83 : let final dynamic #t69 = #2#83#isSet = true in #2#83 = #C24 =={core::Object::==}{(core::Object) → core::bool} #2#0) || #C25 =={core::num::==}{(core::Object) → core::bool} #2#0 || (#2#47#isSet ?{core::bool} #2#47 : let final dynamic #t70 = #2#47#isSet = true in #2#47 = #C14 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#12#isSet ?{core::bool} #2#12 : let final dynamic #t71 = #2#12#isSet = true in #2#12 = #C4 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#14#isSet ?{core::bool} #2#14 : let final dynamic #t72 = #2#14#isSet = true in #2#14 = #C5 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#37#isSet ?{core::bool} #2#37 : let final dynamic #t73 = #2#37#isSet = true in #2#37 = #C12 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t74 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t75 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t76 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t77 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t78 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t79 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t80 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t81 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t82 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t83 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0)) { { core::print(0); } diff --git a/pkg/front_end/testcases/patterns/const_patterns.dart.strong.modular.expect b/pkg/front_end/testcases/patterns/const_patterns.dart.strong.modular.expect index f3d3e1847c0..7c3da52d388 100644 --- a/pkg/front_end/testcases/patterns/const_patterns.dart.strong.modular.expect +++ b/pkg/front_end/testcases/patterns/const_patterns.dart.strong.modular.expect @@ -296,14 +296,6 @@ library; // case const await 0: // Error // ^ // -// pkg/front_end/testcases/patterns/const_patterns.dart:102:22: Error: New expression is not a constant expression. -// case const new Class(): // Error -// ^ -// -// pkg/front_end/testcases/patterns/const_patterns.dart:103:16: Error: New expression is not a constant expression. -// case new Class(): // Error -// ^ -// import self as self; import "dart:core" as core; @@ -404,8 +396,12 @@ class Class extends core::Object /*hasConstConstructor*/ { synthesized core::bool #2#77; synthesized core::bool #2#77#isSet = false; final const synthesized core::Map #2#76 = #C23; - final const synthesized self::Class #2#78 = invalid-expression "New expression is not a constant expression."; - final const synthesized self::Class #2#80 = invalid-expression "New expression is not a constant expression."; + final const synthesized invalid-type #2#78 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:102:18: Error: New expression is not a constant expression. + case const new Class(): // Error + ^^^"; + final const synthesized invalid-type #2#80 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:103:12: Error: New expression is not a constant expression. + case new Class(): // Error + ^^^"; synthesized core::bool #2#83; synthesized core::bool #2#83#isSet = false; final const synthesized() #2#82 = #C24; @@ -439,7 +435,11 @@ class Class extends core::Object /*hasConstConstructor*/ { case const assert(false): // Error ^^^^^^" =={core::Object::==}{(core::Object) → core::bool} #2#0 || invalid-expression "Not a constant expression." =={core::Object::==}{(core::Object) → core::bool} #2#0 || invalid-expression "Not a constant expression." =={core::num::==}{(core::Object) → core::bool} #2#0 || (#2#2#isSet ?{core::bool} #2#2 : let final dynamic #t44 = #2#2#isSet = true in #2#2 = #C3 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#47#isSet ?{core::bool} #2#47 : let final dynamic #t45 = #2#47#isSet = true in #2#47 = #C14 =={core::num::==}{(core::Object) → core::bool} #2#0) || invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:79:20: Error: Not a constant expression. case const ++variable: // Error - ^^^^^^^^" =={core::Object::==}{(core::Object) → core::bool} #2#0 || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t46 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t47 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t48 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t49 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t50 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t51 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t52 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t53 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#71#isSet ?{core::bool} #2#71 : let final dynamic #t54 = #2#71#isSet = true in #2#71 = #C20 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#73#isSet ?{core::bool} #2#73 : let final dynamic #t55 = #2#73#isSet = true in #2#73 = #C21 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#75#isSet ?{core::bool} #2#75 : let final dynamic #t56 = #2#75#isSet = true in #2#75 = #C22 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#77#isSet ?{core::bool} #2#77 : let final dynamic #t57 = #2#77#isSet = true in #2#77 = #C23 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t58 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t59 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t60 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t61 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t62 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t63 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#71#isSet ?{core::bool} #2#71 : let final dynamic #t64 = #2#71#isSet = true in #2#71 = #C20 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#73#isSet ?{core::bool} #2#73 : let final dynamic #t65 = #2#73#isSet = true in #2#73 = #C21 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#75#isSet ?{core::bool} #2#75 : let final dynamic #t66 = #2#75#isSet = true in #2#75 = #C22 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#77#isSet ?{core::bool} #2#77 : let final dynamic #t67 = #2#77#isSet = true in #2#77 = #C23 =={core::Object::==}{(core::Object) → core::bool} #2#0) || invalid-expression "New expression is not a constant expression." =={core::Object::==}{(core::Object) → core::bool} #2#0 || invalid-expression "New expression is not a constant expression." =={core::Object::==}{(core::Object) → core::bool} #2#0 || (#2#83#isSet ?{core::bool} #2#83 : let final dynamic #t68 = #2#83#isSet = true in #2#83 = #C24 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#83#isSet ?{core::bool} #2#83 : let final dynamic #t69 = #2#83#isSet = true in #2#83 = #C24 =={core::Object::==}{(core::Object) → core::bool} #2#0) || #C25 =={core::num::==}{(core::Object) → core::bool} #2#0 || (#2#47#isSet ?{core::bool} #2#47 : let final dynamic #t70 = #2#47#isSet = true in #2#47 = #C14 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#12#isSet ?{core::bool} #2#12 : let final dynamic #t71 = #2#12#isSet = true in #2#12 = #C4 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#14#isSet ?{core::bool} #2#14 : let final dynamic #t72 = #2#14#isSet = true in #2#14 = #C5 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#37#isSet ?{core::bool} #2#37 : let final dynamic #t73 = #2#37#isSet = true in #2#37 = #C12 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t74 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t75 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t76 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t77 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t78 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t79 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t80 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t81 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t82 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t83 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0)) { + ^^^^^^^^" =={core::Object::==}{(core::Object) → core::bool} #2#0 || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t46 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t47 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t48 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t49 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t50 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t51 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t52 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t53 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#71#isSet ?{core::bool} #2#71 : let final dynamic #t54 = #2#71#isSet = true in #2#71 = #C20 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#73#isSet ?{core::bool} #2#73 : let final dynamic #t55 = #2#73#isSet = true in #2#73 = #C21 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#75#isSet ?{core::bool} #2#75 : let final dynamic #t56 = #2#75#isSet = true in #2#75 = #C22 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#77#isSet ?{core::bool} #2#77 : let final dynamic #t57 = #2#77#isSet = true in #2#77 = #C23 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t58 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t59 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t60 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t61 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t62 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t63 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#71#isSet ?{core::bool} #2#71 : let final dynamic #t64 = #2#71#isSet = true in #2#71 = #C20 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#73#isSet ?{core::bool} #2#73 : let final dynamic #t65 = #2#73#isSet = true in #2#73 = #C21 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#75#isSet ?{core::bool} #2#75 : let final dynamic #t66 = #2#75#isSet = true in #2#75 = #C22 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#77#isSet ?{core::bool} #2#77 : let final dynamic #t67 = #2#77#isSet = true in #2#77 = #C23 =={core::Object::==}{(core::Object) → core::bool} #2#0) || invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:102:18: Error: New expression is not a constant expression. + case const new Class(): // Error + ^^^" =={core::Object::==}{(core::Object) → core::bool} #2#0 || invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:103:12: Error: New expression is not a constant expression. + case new Class(): // Error + ^^^" =={core::Object::==}{(core::Object) → core::bool} #2#0 || (#2#83#isSet ?{core::bool} #2#83 : let final dynamic #t68 = #2#83#isSet = true in #2#83 = #C24 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#83#isSet ?{core::bool} #2#83 : let final dynamic #t69 = #2#83#isSet = true in #2#83 = #C24 =={core::Object::==}{(core::Object) → core::bool} #2#0) || #C25 =={core::num::==}{(core::Object) → core::bool} #2#0 || (#2#47#isSet ?{core::bool} #2#47 : let final dynamic #t70 = #2#47#isSet = true in #2#47 = #C14 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#12#isSet ?{core::bool} #2#12 : let final dynamic #t71 = #2#12#isSet = true in #2#12 = #C4 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#14#isSet ?{core::bool} #2#14 : let final dynamic #t72 = #2#14#isSet = true in #2#14 = #C5 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#37#isSet ?{core::bool} #2#37 : let final dynamic #t73 = #2#37#isSet = true in #2#37 = #C12 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t74 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t75 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t76 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t77 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t78 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t79 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t80 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t81 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t82 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t83 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0)) { { core::print(0); } diff --git a/pkg/front_end/testcases/patterns/const_patterns.dart.strong.transformed.expect b/pkg/front_end/testcases/patterns/const_patterns.dart.strong.transformed.expect index f3d3e1847c0..7c3da52d388 100644 --- a/pkg/front_end/testcases/patterns/const_patterns.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/patterns/const_patterns.dart.strong.transformed.expect @@ -296,14 +296,6 @@ library; // case const await 0: // Error // ^ // -// pkg/front_end/testcases/patterns/const_patterns.dart:102:22: Error: New expression is not a constant expression. -// case const new Class(): // Error -// ^ -// -// pkg/front_end/testcases/patterns/const_patterns.dart:103:16: Error: New expression is not a constant expression. -// case new Class(): // Error -// ^ -// import self as self; import "dart:core" as core; @@ -404,8 +396,12 @@ class Class extends core::Object /*hasConstConstructor*/ { synthesized core::bool #2#77; synthesized core::bool #2#77#isSet = false; final const synthesized core::Map #2#76 = #C23; - final const synthesized self::Class #2#78 = invalid-expression "New expression is not a constant expression."; - final const synthesized self::Class #2#80 = invalid-expression "New expression is not a constant expression."; + final const synthesized invalid-type #2#78 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:102:18: Error: New expression is not a constant expression. + case const new Class(): // Error + ^^^"; + final const synthesized invalid-type #2#80 = invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:103:12: Error: New expression is not a constant expression. + case new Class(): // Error + ^^^"; synthesized core::bool #2#83; synthesized core::bool #2#83#isSet = false; final const synthesized() #2#82 = #C24; @@ -439,7 +435,11 @@ class Class extends core::Object /*hasConstConstructor*/ { case const assert(false): // Error ^^^^^^" =={core::Object::==}{(core::Object) → core::bool} #2#0 || invalid-expression "Not a constant expression." =={core::Object::==}{(core::Object) → core::bool} #2#0 || invalid-expression "Not a constant expression." =={core::num::==}{(core::Object) → core::bool} #2#0 || (#2#2#isSet ?{core::bool} #2#2 : let final dynamic #t44 = #2#2#isSet = true in #2#2 = #C3 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#47#isSet ?{core::bool} #2#47 : let final dynamic #t45 = #2#47#isSet = true in #2#47 = #C14 =={core::num::==}{(core::Object) → core::bool} #2#0) || invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:79:20: Error: Not a constant expression. case const ++variable: // Error - ^^^^^^^^" =={core::Object::==}{(core::Object) → core::bool} #2#0 || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t46 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t47 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t48 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t49 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t50 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t51 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t52 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t53 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#71#isSet ?{core::bool} #2#71 : let final dynamic #t54 = #2#71#isSet = true in #2#71 = #C20 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#73#isSet ?{core::bool} #2#73 : let final dynamic #t55 = #2#73#isSet = true in #2#73 = #C21 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#75#isSet ?{core::bool} #2#75 : let final dynamic #t56 = #2#75#isSet = true in #2#75 = #C22 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#77#isSet ?{core::bool} #2#77 : let final dynamic #t57 = #2#77#isSet = true in #2#77 = #C23 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t58 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t59 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t60 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t61 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t62 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t63 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#71#isSet ?{core::bool} #2#71 : let final dynamic #t64 = #2#71#isSet = true in #2#71 = #C20 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#73#isSet ?{core::bool} #2#73 : let final dynamic #t65 = #2#73#isSet = true in #2#73 = #C21 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#75#isSet ?{core::bool} #2#75 : let final dynamic #t66 = #2#75#isSet = true in #2#75 = #C22 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#77#isSet ?{core::bool} #2#77 : let final dynamic #t67 = #2#77#isSet = true in #2#77 = #C23 =={core::Object::==}{(core::Object) → core::bool} #2#0) || invalid-expression "New expression is not a constant expression." =={core::Object::==}{(core::Object) → core::bool} #2#0 || invalid-expression "New expression is not a constant expression." =={core::Object::==}{(core::Object) → core::bool} #2#0 || (#2#83#isSet ?{core::bool} #2#83 : let final dynamic #t68 = #2#83#isSet = true in #2#83 = #C24 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#83#isSet ?{core::bool} #2#83 : let final dynamic #t69 = #2#83#isSet = true in #2#83 = #C24 =={core::Object::==}{(core::Object) → core::bool} #2#0) || #C25 =={core::num::==}{(core::Object) → core::bool} #2#0 || (#2#47#isSet ?{core::bool} #2#47 : let final dynamic #t70 = #2#47#isSet = true in #2#47 = #C14 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#12#isSet ?{core::bool} #2#12 : let final dynamic #t71 = #2#12#isSet = true in #2#12 = #C4 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#14#isSet ?{core::bool} #2#14 : let final dynamic #t72 = #2#14#isSet = true in #2#14 = #C5 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#37#isSet ?{core::bool} #2#37 : let final dynamic #t73 = #2#37#isSet = true in #2#37 = #C12 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t74 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t75 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t76 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t77 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t78 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t79 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t80 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t81 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t82 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t83 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0)) { + ^^^^^^^^" =={core::Object::==}{(core::Object) → core::bool} #2#0 || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t46 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t47 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t48 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t49 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t50 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t51 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t52 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t53 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#71#isSet ?{core::bool} #2#71 : let final dynamic #t54 = #2#71#isSet = true in #2#71 = #C20 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#73#isSet ?{core::bool} #2#73 : let final dynamic #t55 = #2#73#isSet = true in #2#73 = #C21 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#75#isSet ?{core::bool} #2#75 : let final dynamic #t56 = #2#75#isSet = true in #2#75 = #C22 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#77#isSet ?{core::bool} #2#77 : let final dynamic #t57 = #2#77#isSet = true in #2#77 = #C23 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t58 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#65#isSet ?{core::bool} #2#65 : let final dynamic #t59 = #2#65#isSet = true in #2#65 = #C17 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t60 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#67#isSet ?{core::bool} #2#67 : let final dynamic #t61 = #2#67#isSet = true in #2#67 = #C18 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t62 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#69#isSet ?{core::bool} #2#69 : let final dynamic #t63 = #2#69#isSet = true in #2#69 = #C19 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#71#isSet ?{core::bool} #2#71 : let final dynamic #t64 = #2#71#isSet = true in #2#71 = #C20 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#73#isSet ?{core::bool} #2#73 : let final dynamic #t65 = #2#73#isSet = true in #2#73 = #C21 =={core::List::==}{(core::Object) → core::bool} #2#0) || (#2#75#isSet ?{core::bool} #2#75 : let final dynamic #t66 = #2#75#isSet = true in #2#75 = #C22 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#77#isSet ?{core::bool} #2#77 : let final dynamic #t67 = #2#77#isSet = true in #2#77 = #C23 =={core::Object::==}{(core::Object) → core::bool} #2#0) || invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:102:18: Error: New expression is not a constant expression. + case const new Class(): // Error + ^^^" =={core::Object::==}{(core::Object) → core::bool} #2#0 || invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:103:12: Error: New expression is not a constant expression. + case new Class(): // Error + ^^^" =={core::Object::==}{(core::Object) → core::bool} #2#0 || (#2#83#isSet ?{core::bool} #2#83 : let final dynamic #t68 = #2#83#isSet = true in #2#83 = #C24 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#83#isSet ?{core::bool} #2#83 : let final dynamic #t69 = #2#83#isSet = true in #2#83 = #C24 =={core::Object::==}{(core::Object) → core::bool} #2#0) || #C25 =={core::num::==}{(core::Object) → core::bool} #2#0 || (#2#47#isSet ?{core::bool} #2#47 : let final dynamic #t70 = #2#47#isSet = true in #2#47 = #C14 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#12#isSet ?{core::bool} #2#12 : let final dynamic #t71 = #2#12#isSet = true in #2#12 = #C4 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#14#isSet ?{core::bool} #2#14 : let final dynamic #t72 = #2#14#isSet = true in #2#14 = #C5 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#37#isSet ?{core::bool} #2#37 : let final dynamic #t73 = #2#37#isSet = true in #2#37 = #C12 =={core::num::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t74 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t75 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t76 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t77 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t78 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t79 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t80 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#87#isSet ?{core::bool} #2#87 : let final dynamic #t81 = #2#87#isSet = true in #2#87 = #C26 =={core::Type::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t82 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0) || (#2#89#isSet ?{core::bool} #2#89 : let final dynamic #t83 = #2#89#isSet = true in #2#89 = #C28 =={core::Object::==}{(core::Object) → core::bool} #2#0)) { { core::print(0); } diff --git a/pkg/front_end/testcases/super_parameters/issue48642.dart.strong.expect b/pkg/front_end/testcases/super_parameters/issue48642.dart.strong.expect index ee720c7c0f1..f5966cc8062 100644 --- a/pkg/front_end/testcases/super_parameters/issue48642.dart.strong.expect +++ b/pkg/front_end/testcases/super_parameters/issue48642.dart.strong.expect @@ -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 {} diff --git a/pkg/front_end/testcases/super_parameters/issue48642.dart.strong.modular.expect b/pkg/front_end/testcases/super_parameters/issue48642.dart.strong.modular.expect index ee720c7c0f1..f5966cc8062 100644 --- a/pkg/front_end/testcases/super_parameters/issue48642.dart.strong.modular.expect +++ b/pkg/front_end/testcases/super_parameters/issue48642.dart.strong.modular.expect @@ -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 {} diff --git a/pkg/front_end/testcases/super_parameters/issue48642.dart.strong.outline.expect b/pkg/front_end/testcases/super_parameters/issue48642.dart.strong.outline.expect index 30193e6d1a2..9dc47f02941 100644 --- a/pkg/front_end/testcases/super_parameters/issue48642.dart.strong.outline.expect +++ b/pkg/front_end/testcases/super_parameters/issue48642.dart.strong.outline.expect @@ -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 diff --git a/pkg/front_end/testcases/super_parameters/issue48642.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/issue48642.dart.strong.transformed.expect index ee720c7c0f1..f5966cc8062 100644 --- a/pkg/front_end/testcases/super_parameters/issue48642.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/super_parameters/issue48642.dart.strong.transformed.expect @@ -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 {} diff --git a/tests/language/const/const_locals_constant_locals_test.dart b/tests/language/const/const_locals_constant_locals_test.dart index ca8dc7db6a2..f66f8d2ac27 100644 --- a/tests/language/const/const_locals_constant_locals_test.dart +++ b/tests/language/const/const_locals_constant_locals_test.dart @@ -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(); } diff --git a/tests/language/const/syntax_test.dart b/tests/language/const/syntax_test.dart index 3e115f225cb..c12b5ce6f99 100644 --- a/tests/language/const/syntax_test.dart +++ b/tests/language/const/syntax_test.dart @@ -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)); diff --git a/tests/language/named_arguments_anywhere/order_side_effects_error_test.dart b/tests/language/named_arguments_anywhere/order_side_effects_error_test.dart index cfc7ca859cc..a308fd1f7f4 100644 --- a/tests/language/named_arguments_anywhere/order_side_effects_error_test.dart +++ b/tests/language/named_arguments_anywhere/order_side_effects_error_test.dart @@ -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 // ^ diff --git a/tests/language/patterns/invalid_const_pattern_test.dart b/tests/language/patterns/invalid_const_pattern_test.dart index 55dc14f7661..261d2658f31 100644 --- a/tests/language/patterns/invalid_const_pattern_test.dart +++ b/tests/language/patterns/invalid_const_pattern_test.dart @@ -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) {