[cfe] fix order of pattern fields

Fixes #50826

Change-Id: I5e71c4dd0e4f937c4570e4851cd4c1e3446d888a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/277003
Commit-Queue: Chloe Stefantsova <cstefantsova@google.com>
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
This commit is contained in:
Ahmed Ashour 2022-12-28 09:50:27 +00:00 committed by Commit Queue
parent cdd9e43b2c
commit f8307ed296
10 changed files with 239 additions and 0 deletions

View file

@ -8337,6 +8337,13 @@ class BodyBuilder extends StackListenerImpl
// TODO(cstefantsova): Report an error.
}
}
if (fields != null) {
for (int i = 0, j = fields.length - 1; i < j; i++, j--) {
NamedPattern field = fields[i];
fields[i] = fields[j];
fields[j] = field;
}
}
push(fields ?? NullValue.PatternList);
}

View file

@ -0,0 +1,16 @@
// Copyright (c) 2022, 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 A {
String get foo => "foo";
Object? get bar => null;
}
test(dynamic x) {
if (x case A(foo: "", bar: String y as String)) {
return y;
} else {
return null;
}
}

View file

@ -0,0 +1,38 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class A extends core::Object {
synthetic constructor •() → self::A
: super core::Object::•()
;
get foo() → core::String
return "foo";
get bar() → core::Object?
return null;
}
static method test(dynamic x) → dynamic {
final dynamic #t1 = x;
final core::bool #t2 = true;
final dynamic #t3 = #t1;
if(#t3 is self::A) {
final core::String #t4 = #t3{self::A}.{self::A::foo}{core::String};
final core::Object? #t5 = #t3{self::A}.{self::A::bar}{core::Object?};
if(#t4 =={core::String::==}{(core::Object) → core::bool} "") {
final core::String #t6 = #t5 as{ForNonNullableByDefault} core::String;
final core::String #t7 = #t6;
if(#t7 is core::String) {
#t2 = false;
{
core::String y = #t7{core::String};
{
return y;
}
}
}
}
}
if(#t2) {
return null;
}
}

View file

@ -0,0 +1,38 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class A extends core::Object {
synthetic constructor •() → self::A
: super core::Object::•()
;
get foo() → core::String
return "foo";
get bar() → core::Object?
return null;
}
static method test(dynamic x) → dynamic {
final dynamic #t1 = x;
final core::bool #t2 = true;
final dynamic #t3 = #t1;
if(#t3 is self::A) {
final core::String #t4 = #t3{self::A}.{self::A::foo}{core::String};
final core::Object? #t5 = #t3{self::A}.{self::A::bar}{core::Object?};
if(#t4 =={core::String::==}{(core::Object) → core::bool} "") {
final core::String #t6 = #t5 as{ForNonNullableByDefault} core::String;
final core::String #t7 = #t6;
if(#t7 is core::String) {
#t2 = false;
{
core::String y = #t7{core::String};
{
return y;
}
}
}
}
}
if(#t2) {
return null;
}
}

View file

@ -0,0 +1,6 @@
class A {
String get foo => "foo";
Object? get bar => null;
}
test(dynamic x) {}

View file

@ -0,0 +1,6 @@
class A {
Object? get bar => null;
String get foo => "foo";
}
test(dynamic x) {}

View file

@ -0,0 +1,38 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class A extends core::Object {
synthetic constructor •() → self::A
: super core::Object::•()
;
get foo() → core::String
return "foo";
get bar() → core::Object?
return null;
}
static method test(dynamic x) → dynamic {
final dynamic #t1 = x;
final core::bool #t2 = true;
final dynamic #t3 = #t1;
if(#t3 is self::A) {
final core::String #t4 = #t3{self::A}.{self::A::foo}{core::String};
final core::Object? #t5 = #t3{self::A}.{self::A::bar}{core::Object?};
if(#t4 =={core::String::==}{(core::Object) → core::bool} "") {
final core::String #t6 = #t5 as{ForNonNullableByDefault} core::String;
final core::String #t7 = #t6;
if(#t7 is core::String) {
#t2 = false;
{
core::String y = #t7{core::String};
{
return y;
}
}
}
}
}
if(#t2) {
return null;
}
}

View file

@ -0,0 +1,38 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class A extends core::Object {
synthetic constructor •() → self::A
: super core::Object::•()
;
get foo() → core::String
return "foo";
get bar() → core::Object?
return null;
}
static method test(dynamic x) → dynamic {
final dynamic #t1 = x;
final core::bool #t2 = true;
final dynamic #t3 = #t1;
if(#t3 is self::A) {
final core::String #t4 = #t3{self::A}.{self::A::foo}{core::String};
final core::Object? #t5 = #t3{self::A}.{self::A::bar}{core::Object?};
if(#t4 =={core::String::==}{(core::Object) → core::bool} "") {
final core::String #t6 = #t5 as{ForNonNullableByDefault} core::String;
final core::String #t7 = #t6;
if(#t7 is core::String) {
#t2 = false;
{
core::String y = #t7{core::String};
{
return y;
}
}
}
}
}
if(#t2) {
return null;
}
}

View file

@ -0,0 +1,14 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class A extends core::Object {
synthetic constructor •() → self::A
;
get foo() → core::String
;
get bar() → core::Object?
;
}
static method test(dynamic x) → dynamic
;

View file

@ -0,0 +1,38 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class A extends core::Object {
synthetic constructor •() → self::A
: super core::Object::•()
;
get foo() → core::String
return "foo";
get bar() → core::Object?
return null;
}
static method test(dynamic x) → dynamic {
final dynamic #t1 = x;
final core::bool #t2 = true;
final dynamic #t3 = #t1;
if(#t3 is self::A) {
final core::String #t4 = #t3{self::A}.{self::A::foo}{core::String};
final core::Object? #t5 = #t3{self::A}.{self::A::bar}{core::Object?};
if(#t4 =={core::String::==}{(core::Object) → core::bool} "") {
final core::String #t6 = #t5 as{ForNonNullableByDefault} core::String;
final core::String #t7 = #t6;
if(#t7 is core::String) {
#t2 = false;
{
core::String y = #t7{core::String};
{
return y;
}
}
}
}
}
if(#t2) {
return null;
}
}