Files
sdk/pkg/front_end/testcases/patterns/pattern_assignment_non_variable.dart.strong.modular.expect
Johnni Winther 734c01da41 [cfe][PrimaryConstructors] Handle assignment to primary constructor parameter
This reports an error on assignment to primary constructor parameters in field initializers and initializer lists.

The change includes a rewrite of the handle of variable lookup and use that fixes and existing problem in pattern assignment, where it was until now possible to assign to const and final variable in some cases.

Part of #61700

Change-Id: Icfe566fd03b805e8fc21c4b373dbb8ab3dab4b7a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/484141
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
2026-03-02 03:22:54 -08:00

62 lines
3.3 KiB
Plaintext

library;
//
// Problems in library:
//
// pkg/front_end/testcases/patterns/pattern_assignment_non_variable.dart:19:9: Error: Only local variables or formal parameters can be used in pattern assignments.
// Try assigning to a local variable.
// global, // Error
// ^^^^^^
//
// pkg/front_end/testcases/patterns/pattern_assignment_non_variable.dart:20:9: Error: Only local variables or formal parameters can be used in pattern assignments.
// Try assigning to a local variable.
// superField, // Error
// ^^^^^^^^^^
//
// pkg/front_end/testcases/patterns/pattern_assignment_non_variable.dart:21:9: Error: Only local variables or formal parameters can be used in pattern assignments.
// Try assigning to a local variable.
// instanceField, // Error
// ^^^^^^^^^^^^^
//
// pkg/front_end/testcases/patterns/pattern_assignment_non_variable.dart:22:9: Error: Only local variables or formal parameters can be used in pattern assignments.
// Try assigning to a local variable.
// staticField // Error
// ^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
class Super extends core::Object {
field dynamic superField = null;
synthetic constructor •() → self::Super
: super core::Object::•()
;
}
class Class extends self::Super {
field dynamic instanceField = null;
static field dynamic staticField = null;
synthetic constructor •() → self::Class
: super self::Super::•()
;
method method(dynamic o, dynamic parameter) → dynamic {
dynamic local;
{
final synthesized dynamic #0#0 = o as{TypeError,ForDynamic} (dynamic, dynamic, invalid-type, invalid-type, invalid-type, invalid-type);
if(!(#0#0 is (core::Object?, core::Object?, core::Object?, core::Object?, core::Object?, core::Object?) && (let final dynamic #t1 = local = #0#0{(core::Object?, core::Object?, core::Object?, core::Object?, core::Object?, core::Object?)}.$1{core::Object?} in true) && (let final dynamic #t2 = parameter = #0#0{(core::Object?, core::Object?, core::Object?, core::Object?, core::Object?, core::Object?)}.$2{core::Object?} in true) && invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_non_variable.dart:19:9: Error: Only local variables or formal parameters can be used in pattern assignments.
Try assigning to a local variable.
global, // Error
^^^^^^" && invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_non_variable.dart:20:9: Error: Only local variables or formal parameters can be used in pattern assignments.
Try assigning to a local variable.
superField, // Error
^^^^^^^^^^" && invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_non_variable.dart:21:9: Error: Only local variables or formal parameters can be used in pattern assignments.
Try assigning to a local variable.
instanceField, // Error
^^^^^^^^^^^^^" && invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_non_variable.dart:22:9: Error: Only local variables or formal parameters can be used in pattern assignments.
Try assigning to a local variable.
staticField // Error
^^^^^^^^^^^"))
throw{for-error-handling} new core::StateError::•("Pattern matching error");
}
}
}
static field dynamic global;