[cfe] Report error on variable declaration in pattern assignment

Change-Id: I5d9f06309f915460dfc9fe9549b6e7d5c814ef3c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/280261
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
Johnni Winther
2023-02-03 00:32:15 +00:00
committed by Commit Queue
parent 7d9dab0e7a
commit 3448fbc93c
14 changed files with 513 additions and 8 deletions
@@ -10613,6 +10613,37 @@ const MessageCode messagePatchNonExternal = const MessageCode(
r"""Can't apply this patch as its origin declaration isn't external.""",
correctionMessage: r"""Try adding 'external' to the origin declaration.""");
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Template<
Message Function(
String
name)> templatePatternAssignmentDeclaresVariable = const Template<
Message Function(String name)>(
problemMessageTemplate:
r"""Variable '#name' can't be declared in a pattern assignment.""",
correctionMessageTemplate:
r"""Try using a preexisting variable or changing the assignment to a pattern variable declaration.""",
withArguments: _withArgumentsPatternAssignmentDeclaresVariable);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Code<Message Function(String name)>
codePatternAssignmentDeclaresVariable =
const Code<Message Function(String name)>(
"PatternAssignmentDeclaresVariable",
);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsPatternAssignmentDeclaresVariable(String name) {
if (name.isEmpty) throw 'No name provided';
name = demangleMixinApplicationName(name);
return new Message(codePatternAssignmentDeclaresVariable,
problemMessage:
"""Variable '${name}' can't be declared in a pattern assignment.""",
correctionMessage:
"""Try using a preexisting variable or changing the assignment to a pattern variable declaration.""",
arguments: {'name': name});
}
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Code<Null> codePlatformPrivateLibraryAccess =
messagePlatformPrivateLibraryAccess;
@@ -8889,21 +8889,27 @@ class BodyBuilder extends StackListenerImpl
reportIfNotEnabled(
libraryFeatures.patterns, variable.charOffset, variable.charCount);
// ignore: unused_local_variable
TypeBuilder? type = pop(NullValues.TypeBuilder) as TypeBuilder?;
DartType? patternType = type?.build(libraryBuilder, TypeUse.variableType);
Pattern pattern;
if (variable.lexeme == "_") {
pattern = new WildcardPattern(patternType, variable.charOffset);
} else if (inAssignmentPattern) {
Expression variableUse =
toValue(scopeLookup(scope, variable.lexeme, variable));
if (variableUse is VariableGet) {
pattern = new AssignedVariablePattern(variableUse.variable,
offset: variable.charOffset);
String name = variable.lexeme;
if (keyword != null || type != null) {
pattern = new InvalidPattern(buildProblem(
fasta.templatePatternAssignmentDeclaresVariable.withArguments(name),
variable.charOffset,
variable.charCount));
} else {
// Recover by using [WildcardPattern] instead.
pattern = new WildcardPattern(patternType, variable.charOffset);
Expression variableUse = toValue(scopeLookup(scope, name, variable));
if (variableUse is VariableGet) {
pattern = new AssignedVariablePattern(variableUse.variable,
offset: variable.charOffset);
} else {
// Recover by using [WildcardPattern] instead.
pattern = new WildcardPattern(patternType, variable.charOffset);
}
}
} else {
VariableDeclaration declaredVariable = forest.createVariableDeclaration(
+1
View File
@@ -836,6 +836,7 @@ PatchInjectionFailed/analyzerCode: Fail
PatchInjectionFailed/example: Fail
PatchNonExternal/analyzerCode: Fail
PatchNonExternal/example: Fail
PatternAssignmentDeclaresVariable/analyzerCode: Fail
PlatformPrivateLibraryAccess/example: Fail
PositionalAfterNamedArgument/example: Fail
PositionalSuperParametersAndArguments/analyzerCode: Fail
+10
View File
@@ -6308,3 +6308,13 @@ UnnamedObjectPatternField:
method(x) {
if (x case int(5)) {}
}
PatternAssignmentDeclaresVariable:
problemMessage: "Variable '#name' can't be declared in a pattern assignment."
correctionMessage: "Try using a preexisting variable or changing the assignment to a pattern variable declaration."
experiments: patterns
script: |
method(x) {
var y;
[y, var z] = x;
}
@@ -79,6 +79,7 @@ part(s)
patch(es)
patterns
placing
preexisting
pubspec.yaml
r
re
@@ -0,0 +1,15 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
class Class {
dynamic field1;
dynamic field2;
}
method(x, y, z) {
var a;
(a, int b, final int c) = x;
[a, final d] = y;
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
}
@@ -0,0 +1,81 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:12:11: Error: Variable 'b' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// (a, int b, final int c) = x;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:12:24: Error: Variable 'c' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// (a, int b, final int c) = x;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:13:13: Error: Variable 'd' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// [a, final d] = y;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:34: Error: Variable 'e' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:49: Error: Variable 'f' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
// ^
//
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
class Class extends core::Object {
field dynamic field1 = null;
field dynamic field2 = null;
synthetic constructor •() → self::Class
: super core::Object::•()
;
}
static method method(dynamic x, dynamic y, dynamic z) → dynamic {
dynamic a;
block {
final dynamic #0#0 = x;
if(!(#0#0 is{ForNonNullableByDefault} (core::Object?, core::Object?, core::Object?) && (let final dynamic #t1 = a = #0#0{(core::Object?, core::Object?, core::Object?)}.$1{core::Object?} in true) && invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:12:11: Error: Variable 'b' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
(a, int b, final int c) = x;
^" && invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:12:24: Error: Variable 'c' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
(a, int b, final int c) = x;
^"))
throw new _in::ReachabilityError::•();
} =>#0#0;
block {
final dynamic #1#0 = y;
if(!(#1#0 is{ForNonNullableByDefault} core::List<dynamic> && #1#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t2 = a = #1#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in true) && (let final dynamic #t3 = #1#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:13:13: Error: Variable 'd' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
[a, final d] = y;
^")))
throw new _in::ReachabilityError::•();
} =>#1#0;
block {
final dynamic #2#0 = z;
late final dynamic #2#3 = #2#0{self::Class}.{self::Class::field2}{dynamic};
late final dynamic #2#9 = #2#3{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
late final dynamic #2#16 = #2#3{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic};
if(!(#2#0 is{ForNonNullableByDefault} self::Class && (let final dynamic #t4 = a = #2#0{self::Class}.{self::Class::field1}{dynamic} in true) && (#2#3 is{ForNonNullableByDefault} core::List<dynamic> && #2#3{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#2#9 is{ForNonNullableByDefault} core::List<dynamic> && #2#9{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t5 = #2#9{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:34: Error: Variable 'e' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && (let final dynamic #t7 = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:49: Error: Variable 'f' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^")))))
throw new _in::ReachabilityError::•();
} =>#2#0;
}
constants {
#C1 = 2
#C2 = 1
}
@@ -0,0 +1,87 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:12:11: Error: Variable 'b' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// (a, int b, final int c) = x;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:12:24: Error: Variable 'c' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// (a, int b, final int c) = x;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:13:13: Error: Variable 'd' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// [a, final d] = y;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:34: Error: Variable 'e' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:49: Error: Variable 'f' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
// ^
//
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
class Class extends core::Object {
field dynamic field1 = null;
field dynamic field2 = null;
synthetic constructor •() → self::Class
: super core::Object::•()
;
}
static method method(dynamic x, dynamic y, dynamic z) → dynamic {
dynamic a;
block {
final dynamic #0#0 = x;
if(!(#0#0 is{ForNonNullableByDefault} (core::Object?, core::Object?, core::Object?) && (let final core::Object? #t1 = a = #0#0{(core::Object?, core::Object?, core::Object?)}.$1{core::Object?} in true) && invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:12:11: Error: Variable 'b' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
(a, int b, final int c) = x;
^" && invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:12:24: Error: Variable 'c' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
(a, int b, final int c) = x;
^"))
throw new _in::ReachabilityError::•();
} =>#0#0;
block {
final dynamic #1#0 = y;
if(!(#1#0 is{ForNonNullableByDefault} core::List<dynamic> && #1#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t2 = a = #1#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in true) && (let final dynamic #t3 = #1#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:13:13: Error: Variable 'd' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
[a, final d] = y;
^")))
throw new _in::ReachabilityError::•();
} =>#1#0;
block {
final dynamic #2#0 = z;
function ##2#3#initializer() → dynamic
return #2#0{self::Class}.{self::Class::field2}{dynamic};
late final dynamic #2#3 = ##2#3#initializer(){() → dynamic};
function ##2#9#initializer() → dynamic
return #2#3{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
late final dynamic #2#9 = ##2#9#initializer(){() → dynamic};
function ##2#16#initializer() → dynamic
return #2#3{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic};
late final dynamic #2#16 = ##2#16#initializer(){() → dynamic};
if(!(#2#0 is{ForNonNullableByDefault} self::Class && (let final dynamic #t4 = a = #2#0{self::Class}.{self::Class::field1}{dynamic} in true) && (#2#3 is{ForNonNullableByDefault} core::List<dynamic> && #2#3{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#2#9 is{ForNonNullableByDefault} core::List<dynamic> && #2#9{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t5 = #2#9{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:34: Error: Variable 'e' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && (let final dynamic #t7 = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:49: Error: Variable 'f' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^")))))
throw new _in::ReachabilityError::•();
} =>#2#0;
}
constants {
#C1 = 2
#C2 = 1
}
@@ -0,0 +1,6 @@
class Class {
dynamic field1;
dynamic field2;
}
method(x, y, z) {}
@@ -0,0 +1,6 @@
class Class {
dynamic field1;
dynamic field2;
}
method(x, y, z) {}
@@ -0,0 +1,81 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:12:11: Error: Variable 'b' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// (a, int b, final int c) = x;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:12:24: Error: Variable 'c' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// (a, int b, final int c) = x;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:13:13: Error: Variable 'd' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// [a, final d] = y;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:34: Error: Variable 'e' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:49: Error: Variable 'f' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
// ^
//
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
class Class extends core::Object {
field dynamic field1 = null;
field dynamic field2 = null;
synthetic constructor •() → self::Class
: super core::Object::•()
;
}
static method method(dynamic x, dynamic y, dynamic z) → dynamic {
dynamic a;
block {
final dynamic #0#0 = x;
if(!(#0#0 is{ForNonNullableByDefault} (core::Object?, core::Object?, core::Object?) && (let final dynamic #t1 = a = #0#0{(core::Object?, core::Object?, core::Object?)}.$1{core::Object?} in true) && invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:12:11: Error: Variable 'b' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
(a, int b, final int c) = x;
^" && invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:12:24: Error: Variable 'c' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
(a, int b, final int c) = x;
^"))
throw new _in::ReachabilityError::•();
} =>#0#0;
block {
final dynamic #1#0 = y;
if(!(#1#0 is{ForNonNullableByDefault} core::List<dynamic> && #1#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t2 = a = #1#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in true) && (let final dynamic #t3 = #1#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:13:13: Error: Variable 'd' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
[a, final d] = y;
^")))
throw new _in::ReachabilityError::•();
} =>#1#0;
block {
final dynamic #2#0 = z;
late final dynamic #2#3 = #2#0{self::Class}.{self::Class::field2}{dynamic};
late final dynamic #2#9 = #2#3{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
late final dynamic #2#16 = #2#3{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic};
if(!(#2#0 is{ForNonNullableByDefault} self::Class && (let final dynamic #t4 = a = #2#0{self::Class}.{self::Class::field1}{dynamic} in true) && (#2#3 is{ForNonNullableByDefault} core::List<dynamic> && #2#3{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#2#9 is{ForNonNullableByDefault} core::List<dynamic> && #2#9{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t5 = #2#9{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:34: Error: Variable 'e' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && (let final dynamic #t7 = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:49: Error: Variable 'f' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^")))))
throw new _in::ReachabilityError::•();
} =>#2#0;
}
constants {
#C1 = 2
#C2 = 1
}
@@ -0,0 +1,81 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:12:11: Error: Variable 'b' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// (a, int b, final int c) = x;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:12:24: Error: Variable 'c' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// (a, int b, final int c) = x;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:13:13: Error: Variable 'd' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// [a, final d] = y;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:34: Error: Variable 'e' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:49: Error: Variable 'f' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
// ^
//
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
class Class extends core::Object {
field dynamic field1 = null;
field dynamic field2 = null;
synthetic constructor •() → self::Class
: super core::Object::•()
;
}
static method method(dynamic x, dynamic y, dynamic z) → dynamic {
dynamic a;
block {
final dynamic #0#0 = x;
if(!(#0#0 is{ForNonNullableByDefault} (core::Object?, core::Object?, core::Object?) && (let final dynamic #t1 = a = #0#0{(core::Object?, core::Object?, core::Object?)}.$1{core::Object?} in true) && invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:12:11: Error: Variable 'b' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
(a, int b, final int c) = x;
^" && invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:12:24: Error: Variable 'c' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
(a, int b, final int c) = x;
^"))
throw new _in::ReachabilityError::•();
} =>#0#0;
block {
final dynamic #1#0 = y;
if(!(#1#0 is{ForNonNullableByDefault} core::List<dynamic> && #1#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t2 = a = #1#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in true) && (let final dynamic #t3 = #1#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:13:13: Error: Variable 'd' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
[a, final d] = y;
^")))
throw new _in::ReachabilityError::•();
} =>#1#0;
block {
final dynamic #2#0 = z;
late final dynamic #2#3 = #2#0{self::Class}.{self::Class::field2}{dynamic};
late final dynamic #2#9 = #2#3{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
late final dynamic #2#16 = #2#3{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic};
if(!(#2#0 is{ForNonNullableByDefault} self::Class && (let final dynamic #t4 = a = #2#0{self::Class}.{self::Class::field1}{dynamic} in true) && (#2#3 is{ForNonNullableByDefault} core::List<dynamic> && #2#3{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#2#9 is{ForNonNullableByDefault} core::List<dynamic> && #2#9{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t5 = #2#9{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:34: Error: Variable 'e' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && (let final dynamic #t7 = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:49: Error: Variable 'f' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^")))))
throw new _in::ReachabilityError::•();
} =>#2#0;
}
constants {
#C1 = 2
#C2 = 1
}
@@ -0,0 +1,12 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class Class extends core::Object {
field dynamic field1;
field dynamic field2;
synthetic constructor •() → self::Class
;
}
static method method(dynamic x, dynamic y, dynamic z) → dynamic
;
@@ -0,0 +1,87 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:12:11: Error: Variable 'b' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// (a, int b, final int c) = x;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:12:24: Error: Variable 'c' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// (a, int b, final int c) = x;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:13:13: Error: Variable 'd' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// [a, final d] = y;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:34: Error: Variable 'e' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:49: Error: Variable 'f' can't be declared in a pattern assignment.
// Try using a preexisting variable or changing the assignment to a pattern variable declaration.
// Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
// ^
//
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
class Class extends core::Object {
field dynamic field1 = null;
field dynamic field2 = null;
synthetic constructor •() → self::Class
: super core::Object::•()
;
}
static method method(dynamic x, dynamic y, dynamic z) → dynamic {
dynamic a;
block {
final dynamic #0#0 = x;
if(!(#0#0 is{ForNonNullableByDefault} (core::Object?, core::Object?, core::Object?) && (let final core::Object? #t1 = a = #0#0{(core::Object?, core::Object?, core::Object?)}.$1{core::Object?} in true) && invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:12:11: Error: Variable 'b' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
(a, int b, final int c) = x;
^" && invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:12:24: Error: Variable 'c' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
(a, int b, final int c) = x;
^"))
throw new _in::ReachabilityError::•();
} =>#0#0;
block {
final dynamic #1#0 = y;
if(!(#1#0 is{ForNonNullableByDefault} core::List<dynamic> && #1#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t2 = a = #1#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in true) && (let final dynamic #t3 = #1#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:13:13: Error: Variable 'd' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
[a, final d] = y;
^")))
throw new _in::ReachabilityError::•();
} =>#1#0;
block {
final dynamic #2#0 = z;
function ##2#3#initializer() → dynamic
return #2#0{self::Class}.{self::Class::field2}{dynamic};
late final dynamic #2#3 = ##2#3#initializer(){() → dynamic};
function ##2#9#initializer() → dynamic
return #2#3{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
late final dynamic #2#9 = ##2#9#initializer(){() → dynamic};
function ##2#16#initializer() → dynamic
return #2#3{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic};
late final dynamic #2#16 = ##2#16#initializer(){() → dynamic};
if(!(#2#0 is{ForNonNullableByDefault} self::Class && (let final dynamic #t4 = a = #2#0{self::Class}.{self::Class::field1}{dynamic} in true) && (#2#3 is{ForNonNullableByDefault} core::List<dynamic> && #2#3{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#2#9 is{ForNonNullableByDefault} core::List<dynamic> && #2#9{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t5 = #2#9{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:34: Error: Variable 'e' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && (let final dynamic #t7 = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:49: Error: Variable 'f' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^")))))
throw new _in::ReachabilityError::•();
} =>#2#0;
}
constants {
#C1 = 2
#C2 = 1
}