c4724e5a89
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>
51 lines
2.4 KiB
Plaintext
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;
|