Files
sdk/pkg/front_end/testcases/patterns/pattern_inForInitializer_element.dart.strong.expect
T
Johnni Winther c4724e5a89 [cfe] Add Throw.forErrorHandling
This adds a `forErrorHandling` to the `Throw` node. This is used that the `throw` is *not* present in the source code but added to ensure
correctness and/or soundness of the generated code.

This is used for instance in the lowering for handling duplicate writes
to a late final field or for pattern assignments that don't match.

In response to https://github.com/dart-lang/sdk/issues/53519

TEST=updated ast-to-text

Change-Id: Ie103829d98fda9cd7b64e9e3d893e77d1e86d7d8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/347900
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
Reviewed-by: Liam Appelbe <liama@google.com>
2024-02-19 12:12:02 +00:00

51 lines
2.4 KiB
Plaintext

library;
import self as self;
import "dart:core" as core;
import "dart:collection" as col;
static method f(dynamic x) → void
return block {
final core::List<dynamic> #t1 = <dynamic>[];
hoisted dynamic a;
hoisted dynamic b;
{
final synthesized dynamic #0#0 = x as{TypeError,ForDynamic} (dynamic, dynamic);
if(!(#0#0 is (core::Object?, core::Object?) && (let final dynamic #t2 = a = #0#0{(core::Object?, core::Object?)}.$1{core::Object?} in true) && (let final dynamic #t3 = b = #0#0{(core::Object?, core::Object?)}.$2{core::Object?} in true)))
throw{for-error-handling} new core::StateError::•("Pattern matching error");
}
final dynamic #t4 = a;
final dynamic #t5 = b;
for (dynamic a = #t4, dynamic b = #t5; ; )
#t1.{core::List::add}{Invariant}(a){(dynamic) → void};
} =>#t1;
static method g(dynamic x) → void
return block {
final core::Set<dynamic> #t6 = col::LinkedHashSet::•<dynamic>();
hoisted dynamic a;
hoisted dynamic b;
{
final synthesized dynamic #0#0 = x as{TypeError,ForDynamic} (dynamic, dynamic);
if(!(#0#0 is (core::Object?, core::Object?) && (let final dynamic #t7 = a = #0#0{(core::Object?, core::Object?)}.$1{core::Object?} in true) && (let final dynamic #t8 = b = #0#0{(core::Object?, core::Object?)}.$2{core::Object?} in true)))
throw{for-error-handling} new core::StateError::•("Pattern matching error");
}
final dynamic #t9 = a;
final dynamic #t10 = b;
for (dynamic a = #t9, dynamic b = #t10; ; )
#t6.{core::Set::add}{Invariant}(b){(dynamic) → core::bool};
} =>#t6;
static method h(dynamic x) → void
return block {
final core::Map<dynamic, dynamic> #t11 = <dynamic, dynamic>{};
hoisted dynamic a;
hoisted dynamic b;
{
final synthesized dynamic #0#0 = x as{TypeError,ForDynamic} (dynamic, dynamic);
if(!(#0#0 is (core::Object?, core::Object?) && (let final dynamic #t12 = a = #0#0{(core::Object?, core::Object?)}.$1{core::Object?} in true) && (let final dynamic #t13 = b = #0#0{(core::Object?, core::Object?)}.$2{core::Object?} in true)))
throw{for-error-handling} new core::StateError::•("Pattern matching error");
}
final dynamic #t14 = a;
final dynamic #t15 = b;
for (dynamic a = #t14, dynamic b = #t15; ; )
#t11.{core::Map::[]=}{Invariant}(a, b){(dynamic, dynamic) → void};
} =>#t11;