[vm/cfe] Elaborate for-in statements during async transform
This allows us TFA to analyze the iterator calls and we generate much tighter
code in AOT.
However, due to the increased inlining opportunities, we end up emitting 0.5%
more code. Inlining of the _GrowableList iterator specifically also includes the
concurrent modification check and error handling.
Calls to get:iterator, moveNext and get:current account for 7.12% of all InstanceCall
instructions in Flutter Gallery.
Fixes https://github.com/dart-lang/sdk/issues/39516
Issue https://github.com/dart-lang/sdk/issues/39566
Issue https://github.com/dart-lang/sdk/issues/39565
Change-Id: I8dcc08b7571137e869a16ceea8cc73539eb02a5a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/126381
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
diff --git a/DEPS b/DEPS
index 340260b..6b7e8af 100644
--- a/DEPS
+++ b/DEPS
@@ -476,7 +476,7 @@
"packages": [
{
"package": "dart/cfe/dart2js_dills",
- "version": "binary_version:29_36",
+ "version": "binary_version:29_37",
}
],
"dep_type": "cipd",
diff --git a/pkg/front_end/testcases/general/await_complex.dart.strong.transformed.expect b/pkg/front_end/testcases/general/await_complex.dart.strong.transformed.expect
index afff0fe..b6697d5 100644
--- a/pkg/front_end/testcases/general/await_complex.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/await_complex.dart.strong.transformed.expect
@@ -343,44 +343,50 @@
try {
#L6:
{
- for (final core::Function* #t26 in <core::Function*>[#C1, #C2]) {
- final <T extends core::Object* = dynamic>(T*) →* asy::FutureOr<T*>* func = #t26 as{TypeError} <T extends core::Object* = dynamic>(T*) →* asy::FutureOr<T*>*;
- assert {
- [yield] let dynamic #t27 = asy::_awaitHelper(func.call<core::bool*>(true), :async_op_then, :async_op_error, :async_op) in null;
- assert(_in::unsafeCast<core::bool*>(:result));
- }
- assert {
- if(self::id<core::bool*>(true) as{TypeError} core::bool*)
- ;
- else {
- [yield] let dynamic #t28 = asy::_awaitHelper(func.call<core::String*>("message"), :async_op_then, :async_op_error, :async_op) in null;
- assert(false, _in::unsafeCast<core::String*>(:result));
- }
- }
- assert {
- [yield] let dynamic #t29 = asy::_awaitHelper(func.call<core::bool*>(true), :async_op_then, :async_op_error, :async_op) in null;
- if(_in::unsafeCast<core::bool*>(:result))
- ;
- else {
- [yield] let dynamic #t30 = asy::_awaitHelper(func.call<core::String*>("message"), :async_op_then, :async_op_error, :async_op) in null;
- assert(false, _in::unsafeCast<core::String*>(:result));
- }
- }
- try {
- assert {
- [yield] let dynamic #t31 = asy::_awaitHelper(func.call<core::bool*>(false), :async_op_then, :async_op_error, :async_op) in null;
- if(_in::unsafeCast<core::bool*>(:result))
- ;
- else {
- [yield] let dynamic #t32 = asy::_awaitHelper(func.call<core::String*>("message"), :async_op_then, :async_op_error, :async_op) in null;
- assert(false, _in::unsafeCast<core::String*>(:result));
+ {
+ core::Iterator<core::Function*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::Function*>*>(<core::Function*>[#C1, #C2]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::Function* #t26 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final <T extends core::Object* = dynamic>(T*) →* asy::FutureOr<T*>* func = #t26 as{TypeError} <T extends core::Object* = dynamic>(T*) →* asy::FutureOr<T*>*;
+ assert {
+ [yield] let dynamic #t27 = asy::_awaitHelper(func.call<core::bool*>(true), :async_op_then, :async_op_error, :async_op) in null;
+ assert(_in::unsafeCast<core::bool*>(:result));
+ }
+ assert {
+ if(self::id<core::bool*>(true) as{TypeError} core::bool*)
+ ;
+ else {
+ [yield] let dynamic #t28 = asy::_awaitHelper(func.call<core::String*>("message"), :async_op_then, :async_op_error, :async_op) in null;
+ assert(false, _in::unsafeCast<core::String*>(:result));
+ }
+ }
+ assert {
+ [yield] let dynamic #t29 = asy::_awaitHelper(func.call<core::bool*>(true), :async_op_then, :async_op_error, :async_op) in null;
+ if(_in::unsafeCast<core::bool*>(:result))
+ ;
+ else {
+ [yield] let dynamic #t30 = asy::_awaitHelper(func.call<core::String*>("message"), :async_op_then, :async_op_error, :async_op) in null;
+ assert(false, _in::unsafeCast<core::String*>(:result));
+ }
+ }
+ try {
+ assert {
+ [yield] let dynamic #t31 = asy::_awaitHelper(func.call<core::bool*>(false), :async_op_then, :async_op_error, :async_op) in null;
+ if(_in::unsafeCast<core::bool*>(:result))
+ ;
+ else {
+ [yield] let dynamic #t32 = asy::_awaitHelper(func.call<core::String*>("message"), :async_op_then, :async_op_error, :async_op) in null;
+ assert(false, _in::unsafeCast<core::String*>(:result));
+ }
+ }
+ if(self::assertStatementsEnabled)
+ throw "Didn't throw";
+ }
+ on core::AssertionError* catch(final core::AssertionError* e) {
+ self::expect("message", e.{core::AssertionError::message});
}
}
- if(self::assertStatementsEnabled)
- throw "Didn't throw";
- }
- on core::AssertionError* catch(final core::AssertionError* e) {
- self::expect("message", e.{core::AssertionError::message});
}
}
}
@@ -416,251 +422,257 @@
try {
#L7:
{
- for (final core::Function* #t33 in <core::Function*>[#C1, #C2]) {
- final <T extends core::Object* = dynamic>(T*) →* asy::FutureOr<T*>* func = #t33 as{TypeError} <T extends core::Object* = dynamic>(T*) →* asy::FutureOr<T*>*;
- core::int* c = 0;
- {
- dynamic #t34 = true;
- core::int* #t35;
- #L8:
- while (true) {
- core::int* i;
- if(#t34) {
- #t34 = false;
- [yield] let dynamic #t36 = asy::_awaitHelper(func.call<core::int*>(0), :async_op_then, :async_op_error, :async_op) in null;
- i = _in::unsafeCast<core::int*>(:result);
+ {
+ core::Iterator<core::Function*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::Function*>*>(<core::Function*>[#C1, #C2]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::Function* #t33 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final <T extends core::Object* = dynamic>(T*) →* asy::FutureOr<T*>* func = #t33 as{TypeError} <T extends core::Object* = dynamic>(T*) →* asy::FutureOr<T*>*;
+ core::int* c = 0;
+ {
+ dynamic #t34 = true;
+ core::int* #t35;
+ #L8:
+ while (true) {
+ core::int* i;
+ if(#t34) {
+ #t34 = false;
+ [yield] let dynamic #t36 = asy::_awaitHelper(func.call<core::int*>(0), :async_op_then, :async_op_error, :async_op) in null;
+ i = _in::unsafeCast<core::int*>(:result);
+ }
+ else {
+ i = #t35;
+ [yield] let dynamic #t37 = asy::_awaitHelper(func.call<core::int*>(let final core::int* #t38 = i in let final core::int* #t39 = i = #t38.{core::num::+}(1) in #t38), :async_op_then, :async_op_error, :async_op) in null;
+ _in::unsafeCast<core::int*>(:result);
+ }
+ [yield] let dynamic #t40 = asy::_awaitHelper(func.call<core::bool*>(i.{core::num::<}(5)), :async_op_then, :async_op_error, :async_op) in null;
+ if(_in::unsafeCast<core::bool*>(:result)) {
+ {
+ c = c.{core::num::+}(1);
+ }
+ #t35 = i;
+ }
+ else
+ break #L8;
+ }
+ }
+ self::expect(5, c);
+ c = 0;
+ #L9:
+ while (true) {
+ [yield] let dynamic #t41 = asy::_awaitHelper(func.call<core::bool*>(c.{core::num::<}(5)), :async_op_then, :async_op_error, :async_op) in null;
+ if(_in::unsafeCast<core::bool*>(:result))
+ c = c.{core::num::+}(1);
+ else
+ break #L9;
+ }
+ self::expect(5, c);
+ c = 0;
+ do {
+ c = c.{core::num::+}(1);
+ [yield] let dynamic #t42 = asy::_awaitHelper(func.call<core::bool*>(c.{core::num::<}(5)), :async_op_then, :async_op_error, :async_op) in null;
+ }
+ while (_in::unsafeCast<core::bool*>(:result))
+ self::expect(5, c);
+ [yield] let dynamic #t43 = asy::_awaitHelper(func.call<core::bool*>(c.{core::num::==}(5)), :async_op_then, :async_op_error, :async_op) in null;
+ if(_in::unsafeCast<core::bool*>(:result)) {
+ self::expect(5, c);
}
else {
- i = #t35;
- [yield] let dynamic #t37 = asy::_awaitHelper(func.call<core::int*>(let final core::int* #t38 = i in let final core::int* #t39 = i = #t38.{core::num::+}(1) in #t38), :async_op_then, :async_op_error, :async_op) in null;
- _in::unsafeCast<core::int*>(:result);
+ throw "unreachable";
}
- [yield] let dynamic #t40 = asy::_awaitHelper(func.call<core::bool*>(i.{core::num::<}(5)), :async_op_then, :async_op_error, :async_op) in null;
- if(_in::unsafeCast<core::bool*>(:result)) {
- {
- c = c.{core::num::+}(1);
- }
- #t35 = i;
+ try {
+ [yield] let dynamic #t44 = asy::_awaitHelper(func.call<core::String*>("string"), :async_op_then, :async_op_error, :async_op) in null;
+ throw _in::unsafeCast<core::String*>(:result);
}
- else
- break #L8;
- }
- }
- self::expect(5, c);
- c = 0;
- #L9:
- while (true) {
- [yield] let dynamic #t41 = asy::_awaitHelper(func.call<core::bool*>(c.{core::num::<}(5)), :async_op_then, :async_op_error, :async_op) in null;
- if(_in::unsafeCast<core::bool*>(:result))
- c = c.{core::num::+}(1);
- else
- break #L9;
- }
- self::expect(5, c);
- c = 0;
- do {
- c = c.{core::num::+}(1);
- [yield] let dynamic #t42 = asy::_awaitHelper(func.call<core::bool*>(c.{core::num::<}(5)), :async_op_then, :async_op_error, :async_op) in null;
- }
- while (_in::unsafeCast<core::bool*>(:result))
- self::expect(5, c);
- [yield] let dynamic #t43 = asy::_awaitHelper(func.call<core::bool*>(c.{core::num::==}(5)), :async_op_then, :async_op_error, :async_op) in null;
- if(_in::unsafeCast<core::bool*>(:result)) {
- self::expect(5, c);
- }
- else {
- throw "unreachable";
- }
- try {
- [yield] let dynamic #t44 = asy::_awaitHelper(func.call<core::String*>("string"), :async_op_then, :async_op_error, :async_op) in null;
- throw _in::unsafeCast<core::String*>(:result);
- }
- on core::String* catch(no-exception-var) {
- }
- try {
- [yield] let dynamic #t45 = asy::_awaitHelper(throw "string", :async_op_then, :async_op_error, :async_op) in null;
- _in::unsafeCast<<BottomType>>(:result);
- }
- on core::String* catch(no-exception-var) {
- }
- try
- try {
+ on core::String* catch(no-exception-var) {
+ }
+ try {
+ [yield] let dynamic #t45 = asy::_awaitHelper(throw "string", :async_op_then, :async_op_error, :async_op) in null;
+ _in::unsafeCast<<BottomType>>(:result);
+ }
+ on core::String* catch(no-exception-var) {
+ }
try
try {
- throw "string";
+ try
+ try {
+ throw "string";
+ }
+ on dynamic catch(final dynamic e) {
+ self::expect("string", e);
+ [yield] let dynamic #t46 = asy::_awaitHelper(func.call<core::int*>(0), :async_op_then, :async_op_error, :async_op) in null;
+ self::expect(0, _in::unsafeCast<core::int*>(:result));
+ rethrow;
+ }
+ finally {
+ [yield] let dynamic #t47 = asy::_awaitHelper(func.call<core::int*>(0), :async_op_then, :async_op_error, :async_op) in null;
+ self::expect(0, _in::unsafeCast<core::int*>(:result));
+ }
}
on dynamic catch(final dynamic e) {
- self::expect("string", e);
- [yield] let dynamic #t46 = asy::_awaitHelper(func.call<core::int*>(0), :async_op_then, :async_op_error, :async_op) in null;
+ [yield] let dynamic #t48 = asy::_awaitHelper(func.call<core::int*>(0), :async_op_then, :async_op_error, :async_op) in null;
self::expect(0, _in::unsafeCast<core::int*>(:result));
- rethrow;
+ self::expect("string", e);
}
finally {
- [yield] let dynamic #t47 = asy::_awaitHelper(func.call<core::int*>(0), :async_op_then, :async_op_error, :async_op) in null;
+ [yield] let dynamic #t49 = asy::_awaitHelper(func.call<core::int*>(0), :async_op_then, :async_op_error, :async_op) in null;
self::expect(0, _in::unsafeCast<core::int*>(:result));
}
- }
- on dynamic catch(final dynamic e) {
- [yield] let dynamic #t48 = asy::_awaitHelper(func.call<core::int*>(0), :async_op_then, :async_op_error, :async_op) in null;
- self::expect(0, _in::unsafeCast<core::int*>(:result));
- self::expect("string", e);
- }
- finally {
- [yield] let dynamic #t49 = asy::_awaitHelper(func.call<core::int*>(0), :async_op_then, :async_op_error, :async_op) in null;
- self::expect(0, _in::unsafeCast<core::int*>(:result));
- }
- #L10:
- {
- [yield] let dynamic #t50 = asy::_awaitHelper(func.call<core::int*>(2), :async_op_then, :async_op_error, :async_op) in null;
- switch(_in::unsafeCast<core::int*>(:result)) {
- #L11:
- case #C3:
- {
- break #L10;
+ #L10:
+ {
+ [yield] let dynamic #t50 = asy::_awaitHelper(func.call<core::int*>(2), :async_op_then, :async_op_error, :async_op) in null;
+ switch(_in::unsafeCast<core::int*>(:result)) {
+ #L11:
+ case #C3:
+ {
+ break #L10;
+ }
+ #L12:
+ default:
+ {
+ throw "unreachable";
+ }
}
- #L12:
- default:
- {
- throw "unreachable";
- }
- }
- }
- [yield] let dynamic #t51 = asy::_awaitHelper((() → asy::Future<dynamic>* /* originally async */ {
- final asy::_AsyncAwaitCompleter<dynamic>* :async_completer = new asy::_AsyncAwaitCompleter::•<dynamic>();
- asy::FutureOr<dynamic>* :return_value;
- dynamic :async_stack_trace;
- dynamic :async_op_then;
- dynamic :async_op_error;
- core::int* :await_jump_var = 0;
- dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L13:
- {
- [yield] let dynamic #t52 = asy::_awaitHelper(func.call<dynamic>(42), :async_op_then, :async_op_error, :async_op) in null;
- :return_value = :result;
- break #L13;
- }
- asy::_completeOnAsyncReturn(:async_completer, :return_value);
- return;
}
- on dynamic catch(dynamic :exception, dynamic :stack_trace) {
- :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
- }
- :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_completer.start(:async_op);
- return :async_completer.{asy::Completer::future};
- }).call(), :async_op_then, :async_op_error, :async_op) in null;
- self::expect(42, :result);
- [yield] let dynamic #t53 = asy::_awaitHelper((() → asy::Future<dynamic>* /* originally async */ {
- final asy::_AsyncAwaitCompleter<dynamic>* :async_completer = new asy::_AsyncAwaitCompleter::•<dynamic>();
- asy::FutureOr<dynamic>* :return_value;
- dynamic :async_stack_trace;
- dynamic :async_op_then;
- dynamic :async_op_error;
- core::int* :await_jump_var = 0;
- dynamic :await_ctx_var;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L14:
- {
- :return_value = func.call<dynamic>(42);
- break #L14;
- }
- asy::_completeOnAsyncReturn(:async_completer, :return_value);
- return;
- }
- on dynamic catch(dynamic :exception, dynamic :stack_trace) {
- :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
- }
- :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_completer.start(:async_op);
- return :async_completer.{asy::Completer::future};
- }).call(), :async_op_then, :async_op_error, :async_op) in null;
- self::expect(42, :result);
- function testStream1() → asy::Stream<core::int*>* /* originally async* */ {
- asy::_AsyncStarStreamController<core::int*>* :controller;
- dynamic :controller_stream;
- dynamic :async_stack_trace;
- dynamic :async_op_then;
- dynamic :async_op_error;
- core::int* :await_jump_var = 0;
- dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- dynamic :saved_try_context_var1;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try
- try {
- #L15:
- {
- [yield] let dynamic #t54 = asy::_awaitHelper(func.call<core::int*>(42), :async_op_then, :async_op_error, :async_op) in null;
- if(:controller.{asy::_AsyncStarStreamController::add}(_in::unsafeCast<core::int*>(:result)))
- return null;
- else
- [yield] null;
+ [yield] let dynamic #t51 = asy::_awaitHelper((() → asy::Future<dynamic>* /* originally async */ {
+ final asy::_AsyncAwaitCompleter<dynamic>* :async_completer = new asy::_AsyncAwaitCompleter::•<dynamic>();
+ asy::FutureOr<dynamic>* :return_value;
+ dynamic :async_stack_trace;
+ dynamic :async_op_then;
+ dynamic :async_op_error;
+ core::int* :await_jump_var = 0;
+ dynamic :await_ctx_var;
+ dynamic :saved_try_context_var0;
+ function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
+ try {
+ #L13:
+ {
+ [yield] let dynamic #t52 = asy::_awaitHelper(func.call<dynamic>(42), :async_op_then, :async_op_error, :async_op) in null;
+ :return_value = :result;
+ break #L13;
+ }
+ asy::_completeOnAsyncReturn(:async_completer, :return_value);
+ return;
}
- return;
- }
- on dynamic catch(dynamic :exception, dynamic :stack_trace) {
- :controller.{asy::_AsyncStarStreamController::addError}(:exception, :stack_trace);
- }
- finally {
- :controller.{asy::_AsyncStarStreamController::close}();
- }
- :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :controller = new asy::_AsyncStarStreamController::•<core::int*>(:async_op);
- :controller_stream = :controller.{asy::_AsyncStarStreamController::stream};
- return :controller_stream;
- }
- :async_temporary_0 = <dynamic>[42];
- [yield] let dynamic #t55 = asy::_awaitHelper(testStream1.call().{asy::Stream::toList}(), :async_op_then, :async_op_error, :async_op) in null;
- self::expectList(:async_temporary_0, _in::unsafeCast<core::List<core::int*>*>(:result));
- function testStream2() → asy::Stream<core::int*>* /* originally async* */ {
- asy::_AsyncStarStreamController<core::int*>* :controller;
- dynamic :controller_stream;
- dynamic :async_stack_trace;
- dynamic :async_op_then;
- dynamic :async_op_error;
- core::int* :await_jump_var = 0;
- dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- dynamic :saved_try_context_var1;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try
- try {
- #L16:
- {
- [yield] let dynamic #t56 = asy::_awaitHelper(func.call<asy::Stream<core::int*>*>(self::intStream()), :async_op_then, :async_op_error, :async_op) in null;
- if(:controller.{asy::_AsyncStarStreamController::addStream}(_in::unsafeCast<asy::Stream<core::int*>*>(:result)))
- return null;
- else
- [yield] null;
+ on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+ :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
}
- return;
- }
- on dynamic catch(dynamic :exception, dynamic :stack_trace) {
- :controller.{asy::_AsyncStarStreamController::addError}(:exception, :stack_trace);
- }
- finally {
- :controller.{asy::_AsyncStarStreamController::close}();
+ :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+ :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+ :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+ :async_completer.start(:async_op);
+ return :async_completer.{asy::Completer::future};
+ }).call(), :async_op_then, :async_op_error, :async_op) in null;
+ self::expect(42, :result);
+ [yield] let dynamic #t53 = asy::_awaitHelper((() → asy::Future<dynamic>* /* originally async */ {
+ final asy::_AsyncAwaitCompleter<dynamic>* :async_completer = new asy::_AsyncAwaitCompleter::•<dynamic>();
+ asy::FutureOr<dynamic>* :return_value;
+ dynamic :async_stack_trace;
+ dynamic :async_op_then;
+ dynamic :async_op_error;
+ core::int* :await_jump_var = 0;
+ dynamic :await_ctx_var;
+ function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
+ try {
+ #L14:
+ {
+ :return_value = func.call<dynamic>(42);
+ break #L14;
+ }
+ asy::_completeOnAsyncReturn(:async_completer, :return_value);
+ return;
+ }
+ on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+ :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+ }
+ :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+ :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+ :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+ :async_completer.start(:async_op);
+ return :async_completer.{asy::Completer::future};
+ }).call(), :async_op_then, :async_op_error, :async_op) in null;
+ self::expect(42, :result);
+ function testStream1() → asy::Stream<core::int*>* /* originally async* */ {
+ asy::_AsyncStarStreamController<core::int*>* :controller;
+ dynamic :controller_stream;
+ dynamic :async_stack_trace;
+ dynamic :async_op_then;
+ dynamic :async_op_error;
+ core::int* :await_jump_var = 0;
+ dynamic :await_ctx_var;
+ dynamic :saved_try_context_var0;
+ dynamic :saved_try_context_var1;
+ function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
+ try
+ try {
+ #L15:
+ {
+ [yield] let dynamic #t54 = asy::_awaitHelper(func.call<core::int*>(42), :async_op_then, :async_op_error, :async_op) in null;
+ if(:controller.{asy::_AsyncStarStreamController::add}(_in::unsafeCast<core::int*>(:result)))
+ return null;
+ else
+ [yield] null;
+ }
+ return;
+ }
+ on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+ :controller.{asy::_AsyncStarStreamController::addError}(:exception, :stack_trace);
+ }
+ finally {
+ :controller.{asy::_AsyncStarStreamController::close}();
+ }
+ :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+ :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+ :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+ :controller = new asy::_AsyncStarStreamController::•<core::int*>(:async_op);
+ :controller_stream = :controller.{asy::_AsyncStarStreamController::stream};
+ return :controller_stream;
}
- :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :controller = new asy::_AsyncStarStreamController::•<core::int*>(:async_op);
- :controller_stream = :controller.{asy::_AsyncStarStreamController::stream};
- return :controller_stream;
+ :async_temporary_0 = <dynamic>[42];
+ [yield] let dynamic #t55 = asy::_awaitHelper(testStream1.call().{asy::Stream::toList}(), :async_op_then, :async_op_error, :async_op) in null;
+ self::expectList(:async_temporary_0, _in::unsafeCast<core::List<core::int*>*>(:result));
+ function testStream2() → asy::Stream<core::int*>* /* originally async* */ {
+ asy::_AsyncStarStreamController<core::int*>* :controller;
+ dynamic :controller_stream;
+ dynamic :async_stack_trace;
+ dynamic :async_op_then;
+ dynamic :async_op_error;
+ core::int* :await_jump_var = 0;
+ dynamic :await_ctx_var;
+ dynamic :saved_try_context_var0;
+ dynamic :saved_try_context_var1;
+ function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
+ try
+ try {
+ #L16:
+ {
+ [yield] let dynamic #t56 = asy::_awaitHelper(func.call<asy::Stream<core::int*>*>(self::intStream()), :async_op_then, :async_op_error, :async_op) in null;
+ if(:controller.{asy::_AsyncStarStreamController::addStream}(_in::unsafeCast<asy::Stream<core::int*>*>(:result)))
+ return null;
+ else
+ [yield] null;
+ }
+ return;
+ }
+ on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+ :controller.{asy::_AsyncStarStreamController::addError}(:exception, :stack_trace);
+ }
+ finally {
+ :controller.{asy::_AsyncStarStreamController::close}();
+ }
+ :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+ :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+ :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+ :controller = new asy::_AsyncStarStreamController::•<core::int*>(:async_op);
+ :controller_stream = :controller.{asy::_AsyncStarStreamController::stream};
+ return :controller_stream;
+ }
+ :async_temporary_1 = <dynamic>[42];
+ [yield] let dynamic #t57 = asy::_awaitHelper(testStream2.call().{asy::Stream::toList}(), :async_op_then, :async_op_error, :async_op) in null;
+ self::expectList(:async_temporary_1, _in::unsafeCast<core::List<core::int*>*>(:result));
+ }
}
- :async_temporary_1 = <dynamic>[42];
- [yield] let dynamic #t57 = asy::_awaitHelper(testStream2.call().{asy::Stream::toList}(), :async_op_then, :async_op_error, :async_op) in null;
- self::expectList(:async_temporary_1, _in::unsafeCast<core::List<core::int*>*>(:result));
}
}
asy::_completeOnAsyncReturn(:async_completer, :return_value);
diff --git a/pkg/front_end/testcases/general/control_flow_collection.dart.strong.transformed.expect b/pkg/front_end/testcases/general/control_flow_collection.dart.strong.transformed.expect
index f133a9d..ac4ad8d 100644
--- a/pkg/front_end/testcases/general/control_flow_collection.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection.dart.strong.transformed.expect
@@ -1,6 +1,7 @@
library;
import self as self;
import "dart:core" as core;
+import "dart:_internal" as _in;
import "dart:collection" as col;
static method main() → dynamic {
@@ -16,11 +17,21 @@
if(self::oracle() as{TypeError} core::bool*)
if(self::oracle() as{TypeError} core::bool*)
#t1.{core::List::add}(4);
- for (core::int* i in <core::int*>[5, 6, 7])
- #t1.{core::List::add}(i);
- for (core::int* i in <core::int*>[8, 9, 10])
- if(self::oracle() as{TypeError} core::bool*)
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[5, 6, 7]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ core::int* i = :sync-for-iterator.{core::Iterator::current};
#t1.{core::List::add}(i);
+ }
+ }
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[8, 9, 10]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ core::int* i = :sync-for-iterator.{core::Iterator::current};
+ if(self::oracle() as{TypeError} core::bool*)
+ #t1.{core::List::add}(i);
+ }
+ }
for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
#t1.{core::List::add}(i);
} =>#t1;
@@ -36,11 +47,21 @@
if(self::oracle() as{TypeError} core::bool*)
if(self::oracle() as{TypeError} core::bool*)
#t2.{core::Set::add}(4);
- for (core::int* i in <core::int*>[5, 6, 7])
- #t2.{core::Set::add}(i);
- for (core::int* i in <core::int*>[8, 9, 10])
- if(self::oracle() as{TypeError} core::bool*)
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[5, 6, 7]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ core::int* i = :sync-for-iterator.{core::Iterator::current};
#t2.{core::Set::add}(i);
+ }
+ }
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[8, 9, 10]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ core::int* i = :sync-for-iterator.{core::Iterator::current};
+ if(self::oracle() as{TypeError} core::bool*)
+ #t2.{core::Set::add}(i);
+ }
+ }
for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
#t2.{core::Set::add}(i);
} =>#t2;
@@ -56,11 +77,21 @@
if(self::oracle() as{TypeError} core::bool*)
if(self::oracle() as{TypeError} core::bool*)
#t3.{core::Map::[]=}(4, 4);
- for (core::int* i in <core::int*>[5, 6, 7])
- #t3.{core::Map::[]=}(i, i);
- for (core::int* i in <core::int*>[8, 9, 10])
- if(self::oracle() as{TypeError} core::bool*)
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[5, 6, 7]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ core::int* i = :sync-for-iterator.{core::Iterator::current};
#t3.{core::Map::[]=}(i, i);
+ }
+ }
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[8, 9, 10]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ core::int* i = :sync-for-iterator.{core::Iterator::current};
+ if(self::oracle() as{TypeError} core::bool*)
+ #t3.{core::Map::[]=}(i, i);
+ }
+ }
for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
#t3.{core::Map::[]=}(i, i);
} =>#t3;
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.strong.transformed.expect
index afb21c7..82dc289 100644
--- a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.strong.transformed.expect
@@ -424,8 +424,8 @@
import self as self;
import "dart:core" as core;
import "dart:collection" as col;
-import "dart:async" as asy;
import "dart:_internal" as _in;
+import "dart:async" as asy;
class A extends core::Object {
synthetic constructor •() → self::A*
@@ -495,144 +495,224 @@
} =>#t9;
core::List<core::int*>* list20 = block {
final core::List<core::int*>* #t10 = <core::int*>[];
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::int* #t11 in <core::int*>[42])
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t11 = :sync-for-iterator.{core::Iterator::current};
#t10.{core::List::add}(#t11);
+ }
+ }
} =>#t10;
core::Set<core::int*>* set20 = block {
final core::Set<core::int*>* #t12 = col::LinkedHashSet::•<core::int*>();
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::int* #t13 in <core::int*>[42])
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t13 = :sync-for-iterator.{core::Iterator::current};
#t12.{core::Set::add}(#t13);
+ }
+ }
#t12.{core::Set::add}(null);
} =>#t12;
core::Map<core::String*, core::int*>* map20 = block {
final core::Map<core::String*, core::int*>* #t14 = <core::String*, core::int*>{};
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::MapEntry<core::String*, core::int*>* #t15 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::int*>* #t15 = :sync-for-iterator.{core::Iterator::current};
#t14.{core::Map::[]=}(#t15.{core::MapEntry::key}, #t15.{core::MapEntry::value});
+ }
+ }
#t14.{core::Map::[]=}("baz", null);
} =>#t14;
core::List<dynamic>* list21 = block {
final core::List<dynamic>* #t16 = <dynamic>[];
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final dynamic #t17 in <dynamic>[dynVar])
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t17 = :sync-for-iterator.{core::Iterator::current};
#t16.{core::List::add}(#t17);
+ }
+ }
} =>#t16;
core::Set<dynamic>* set21 = block {
final core::Set<dynamic>* #t18 = col::LinkedHashSet::•<dynamic>();
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final dynamic #t19 in <dynamic>[dynVar])
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t19 = :sync-for-iterator.{core::Iterator::current};
#t18.{core::Set::add}(#t19);
+ }
+ }
#t18.{core::Set::add}(null);
} =>#t18;
core::Map<core::String*, dynamic>* map21 = block {
final core::Map<core::String*, dynamic>* #t20 = <core::String*, dynamic>{};
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::MapEntry<core::String*, dynamic>* #t21 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, dynamic>* #t21 = :sync-for-iterator.{core::Iterator::current};
#t20.{core::Map::[]=}(#t21.{core::MapEntry::key}, #t21.{core::MapEntry::value});
+ }
+ }
#t20.{core::Map::[]=}("baz", null);
} =>#t20;
core::List<core::List<core::int*>*>* list22 = block {
final core::List<core::List<core::int*>*>* #t22 = <core::List<core::int*>*>[];
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::List<core::int*>* #t23 in <core::List<core::int*>*>[<core::int*>[42]])
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t23 = :sync-for-iterator.{core::Iterator::current};
#t22.{core::List::add}(#t23);
+ }
+ }
} =>#t22;
core::Set<core::List<core::int*>*>* set22 = block {
final core::Set<core::List<core::int*>*>* #t24 = col::LinkedHashSet::•<core::List<core::int*>*>();
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::List<core::int*>* #t25 in <core::List<core::int*>*>[<core::int*>[42]])
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t25 = :sync-for-iterator.{core::Iterator::current};
#t24.{core::Set::add}(#t25);
+ }
+ }
#t24.{core::Set::add}(null);
} =>#t24;
core::Map<core::String*, core::List<core::int*>*>* map22 = block {
final core::Map<core::String*, core::List<core::int*>*>* #t26 = <core::String*, core::List<core::int*>*>{};
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t27 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::List<core::int*>*>* #t27 = :sync-for-iterator.{core::Iterator::current};
#t26.{core::Map::[]=}(#t27.{core::MapEntry::key}, #t27.{core::MapEntry::value});
+ }
+ }
#t26.{core::Map::[]=}("baz", null);
} =>#t26;
core::List<core::int*>* list30 = block {
final core::List<core::int*>* #t28 = <core::int*>[];
if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::int* #t29 in <core::int*>[42])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t29 = :sync-for-iterator.{core::Iterator::current};
#t28.{core::List::add}(#t29);
+ }
+ }
} =>#t28;
core::Set<core::int*>* set30 = block {
final core::Set<core::int*>* #t30 = col::LinkedHashSet::•<core::int*>();
if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::int* #t31 in <core::int*>[42])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t31 = :sync-for-iterator.{core::Iterator::current};
#t30.{core::Set::add}(#t31);
+ }
+ }
#t30.{core::Set::add}(null);
} =>#t30;
core::Map<core::String*, core::int*>* map30 = block {
final core::Map<core::String*, core::int*>* #t32 = <core::String*, core::int*>{};
if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::MapEntry<core::String*, core::int*>* #t33 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::int*>* #t33 = :sync-for-iterator.{core::Iterator::current};
#t32.{core::Map::[]=}(#t33.{core::MapEntry::key}, #t33.{core::MapEntry::value});
+ }
+ }
#t32.{core::Map::[]=}("baz", null);
} =>#t32;
core::List<dynamic>* list31 = block {
final core::List<dynamic>* #t34 = <dynamic>[];
if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final dynamic #t35 in <dynamic>[dynVar])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t35 = :sync-for-iterator.{core::Iterator::current};
#t34.{core::List::add}(#t35);
+ }
+ }
} =>#t34;
core::Set<dynamic>* set31 = block {
final core::Set<dynamic>* #t36 = col::LinkedHashSet::•<dynamic>();
if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final dynamic #t37 in <dynamic>[dynVar])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t37 = :sync-for-iterator.{core::Iterator::current};
#t36.{core::Set::add}(#t37);
+ }
+ }
#t36.{core::Set::add}(null);
} =>#t36;
core::Map<core::String*, dynamic>* map31 = block {
final core::Map<core::String*, dynamic>* #t38 = <core::String*, dynamic>{};
if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::MapEntry<core::String*, dynamic>* #t39 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, dynamic>* #t39 = :sync-for-iterator.{core::Iterator::current};
#t38.{core::Map::[]=}(#t39.{core::MapEntry::key}, #t39.{core::MapEntry::value});
+ }
+ }
#t38.{core::Map::[]=}("baz", null);
} =>#t38;
core::List<core::List<core::int*>*>* list33 = block {
final core::List<core::List<core::int*>*>* #t40 = <core::List<core::int*>*>[];
if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::List<core::int*>* #t41 in <core::List<core::int*>*>[<core::int*>[42]])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t41 = :sync-for-iterator.{core::Iterator::current};
#t40.{core::List::add}(#t41);
+ }
+ }
} =>#t40;
core::Set<core::List<core::int*>*>* set33 = block {
final core::Set<core::List<core::int*>*>* #t42 = col::LinkedHashSet::•<core::List<core::int*>*>();
if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::List<core::int*>* #t43 in <core::List<core::int*>*>[<core::int*>[42]])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t43 = :sync-for-iterator.{core::Iterator::current};
#t42.{core::Set::add}(#t43);
+ }
+ }
#t42.{core::Set::add}(null);
} =>#t42;
core::Map<core::String*, core::List<core::int*>*>* map33 = block {
final core::Map<core::String*, core::List<core::int*>*>* #t44 = <core::String*, core::List<core::int*>*>{};
if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t45 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::List<core::int*>*>* #t45 = :sync-for-iterator.{core::Iterator::current};
#t44.{core::Map::[]=}(#t45.{core::MapEntry::key}, #t45.{core::MapEntry::value});
+ }
+ }
#t44.{core::Map::[]=}("baz", null);
} =>#t44;
core::List<core::List<core::int*>*>* list40 = block {
final core::List<core::List<core::int*>*>* #t46 = <core::List<core::int*>*>[];
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::List<core::int*>* #t47 in <core::List<core::int*>*>[<core::int*>[]])
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t47 = :sync-for-iterator.{core::Iterator::current};
#t46.{core::List::add}(#t47);
+ }
+ }
} =>#t46;
core::Set<core::List<core::int*>*>* set40 = block {
final core::Set<core::List<core::int*>*>* #t48 = col::LinkedHashSet::•<core::List<core::int*>*>();
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::List<core::int*>* #t49 in <core::List<core::int*>*>[<core::int*>[]])
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t49 = :sync-for-iterator.{core::Iterator::current};
#t48.{core::Set::add}(#t49);
+ }
+ }
#t48.{core::Set::add}(null);
} =>#t48;
core::Map<core::String*, core::List<core::int*>*>* map40 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:39:34: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
@@ -640,137 +720,213 @@
^";
core::List<core::List<core::int*>*>* list41 = block {
final core::List<core::List<core::int*>*>* #t50 = <core::List<core::int*>*>[];
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::List<core::int*>* #t51 in let final core::Set<core::List<core::int*>*>* #t52 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t53 = #t52.{core::Set::add}(<core::int*>[]) in #t52)
- #t50.{core::List::add}(#t51);
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t51 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t52 = #t51.{core::Set::add}(<core::int*>[]) in #t51).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t53 = :sync-for-iterator.{core::Iterator::current};
+ #t50.{core::List::add}(#t53);
+ }
+ }
} =>#t50;
core::Set<core::List<core::int*>*>* set41 = block {
final core::Set<core::List<core::int*>*>* #t54 = col::LinkedHashSet::•<core::List<core::int*>*>();
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::List<core::int*>* #t55 in let final core::Set<core::List<core::int*>*>* #t56 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t57 = #t56.{core::Set::add}(<core::int*>[]) in #t56)
- #t54.{core::Set::add}(#t55);
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t55 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t56 = #t55.{core::Set::add}(<core::int*>[]) in #t55).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t57 = :sync-for-iterator.{core::Iterator::current};
+ #t54.{core::Set::add}(#t57);
+ }
+ }
#t54.{core::Set::add}(null);
} =>#t54;
core::List<core::List<core::int*>*>* list42 = block {
final core::List<core::List<core::int*>*>* #t58 = <core::List<core::int*>*>[];
if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::List<core::int*>* #t59 in <core::List<core::int*>*>[<core::int*>[]])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t59 = :sync-for-iterator.{core::Iterator::current};
#t58.{core::List::add}(#t59);
+ }
+ }
} =>#t58;
core::Set<core::List<core::int*>*>* set42 = block {
final core::Set<core::List<core::int*>*>* #t60 = col::LinkedHashSet::•<core::List<core::int*>*>();
if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::List<core::int*>* #t61 in <core::List<core::int*>*>[<core::int*>[]])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t61 = :sync-for-iterator.{core::Iterator::current};
#t60.{core::Set::add}(#t61);
+ }
+ }
#t60.{core::Set::add}(null);
} =>#t60;
core::Map<core::String*, core::List<core::int*>*>* map42 = block {
final core::Map<core::String*, core::List<core::int*>*>* #t62 = <core::String*, core::List<core::int*>*>{};
if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t63 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::List<core::int*>*>* #t63 = :sync-for-iterator.{core::Iterator::current};
#t62.{core::Map::[]=}(#t63.{core::MapEntry::key}, #t63.{core::MapEntry::value});
+ }
+ }
#t62.{core::Map::[]=}("baz", null);
} =>#t62;
core::List<core::int*>* list50 = block {
final core::List<core::int*>* #t64 = <core::int*>[];
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::int* #t65 in <core::int*>[])
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t65 = :sync-for-iterator.{core::Iterator::current};
#t64.{core::List::add}(#t65);
+ }
+ }
} =>#t64;
core::Set<core::int*>* set50 = block {
final core::Set<core::int*>* #t66 = col::LinkedHashSet::•<core::int*>();
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::int* #t67 in <core::int*>[])
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t67 = :sync-for-iterator.{core::Iterator::current};
#t66.{core::Set::add}(#t67);
+ }
+ }
#t66.{core::Set::add}(null);
} =>#t66;
core::Map<core::String*, core::int*>* map50 = block {
final core::Map<core::String*, core::int*>* #t68 = <core::String*, core::int*>{};
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::MapEntry<core::String*, core::int*>* #t69 in <core::String*, core::int*>{}.{core::Map::entries})
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::int*>* #t69 = :sync-for-iterator.{core::Iterator::current};
#t68.{core::Map::[]=}(#t69.{core::MapEntry::key}, #t69.{core::MapEntry::value});
+ }
+ }
#t68.{core::Map::[]=}("baz", null);
} =>#t68;
core::List<core::int*>* list51 = block {
final core::List<core::int*>* #t70 = <core::int*>[];
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::int* #t71 in let final core::Set<core::int*>* #t72 = col::LinkedHashSet::•<core::int*>() in #t72)
- #t70.{core::List::add}(#t71);
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t71 = col::LinkedHashSet::•<core::int*>() in #t71).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t72 = :sync-for-iterator.{core::Iterator::current};
+ #t70.{core::List::add}(#t72);
+ }
+ }
} =>#t70;
core::Set<core::int*>* set51 = block {
final core::Set<core::int*>* #t73 = col::LinkedHashSet::•<core::int*>();
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::int* #t74 in let final core::Set<core::int*>* #t75 = col::LinkedHashSet::•<core::int*>() in #t75)
- #t73.{core::Set::add}(#t74);
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t74 = col::LinkedHashSet::•<core::int*>() in #t74).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t75 = :sync-for-iterator.{core::Iterator::current};
+ #t73.{core::Set::add}(#t75);
+ }
+ }
#t73.{core::Set::add}(null);
} =>#t73;
core::List<core::int*>* list52 = block {
final core::List<core::int*>* #t76 = <core::int*>[];
if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::int* #t77 in <core::int*>[])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t77 = :sync-for-iterator.{core::Iterator::current};
#t76.{core::List::add}(#t77);
+ }
+ }
} =>#t76;
core::Set<core::int*>* set52 = block {
final core::Set<core::int*>* #t78 = col::LinkedHashSet::•<core::int*>();
if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::int* #t79 in <core::int*>[])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t79 = :sync-for-iterator.{core::Iterator::current};
#t78.{core::Set::add}(#t79);
+ }
+ }
#t78.{core::Set::add}(null);
} =>#t78;
core::Map<core::String*, core::int*>* map52 = block {
final core::Map<core::String*, core::int*>* #t80 = <core::String*, core::int*>{};
if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::MapEntry<core::String*, core::int*>* #t81 in <core::String*, core::int*>{}.{core::Map::entries})
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::int*>* #t81 = :sync-for-iterator.{core::Iterator::current};
#t80.{core::Map::[]=}(#t81.{core::MapEntry::key}, #t81.{core::MapEntry::value});
+ }
+ }
#t80.{core::Map::[]=}("baz", null);
} =>#t80;
core::List<core::List<core::int*>*>* list60 = block {
final core::List<core::List<core::int*>*>* #t82 = <core::List<core::int*>*>[];
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::List<core::int*>* #t83 in <core::List<core::int*>*>[<core::int*>[]])
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t83 = :sync-for-iterator.{core::Iterator::current};
#t82.{core::List::add}(#t83);
+ }
+ }
} =>#t82;
core::Set<core::List<core::int*>*>* set60 = block {
final core::Set<core::List<core::int*>*>* #t84 = col::LinkedHashSet::•<core::List<core::int*>*>();
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::List<core::int*>* #t85 in <core::List<core::int*>*>[<core::int*>[]])
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t85 = :sync-for-iterator.{core::Iterator::current};
#t84.{core::Set::add}(#t85);
+ }
+ }
#t84.{core::Set::add}(null);
} =>#t84;
core::Map<core::String*, core::List<core::int*>*>* map60 = block {
final core::Map<core::String*, core::List<core::int*>*>* #t86 = <core::String*, core::List<core::int*>*>{};
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t87 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::List<core::int*>*>* #t87 = :sync-for-iterator.{core::Iterator::current};
#t86.{core::Map::[]=}(#t87.{core::MapEntry::key}, #t87.{core::MapEntry::value});
+ }
+ }
#t86.{core::Map::[]=}("baz", null);
} =>#t86;
core::List<core::List<core::int*>*>* list61 = block {
final core::List<core::List<core::int*>*>* #t88 = <core::List<core::int*>*>[];
if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::List<core::int*>* #t89 in <core::List<core::int*>*>[<core::int*>[]])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t89 = :sync-for-iterator.{core::Iterator::current};
#t88.{core::List::add}(#t89);
+ }
+ }
} =>#t88;
core::Set<core::List<core::int*>*>* set61 = block {
final core::Set<core::List<core::int*>*>* #t90 = col::LinkedHashSet::•<core::List<core::int*>*>();
if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::List<core::int*>* #t91 in <core::List<core::int*>*>[<core::int*>[]])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t91 = :sync-for-iterator.{core::Iterator::current};
#t90.{core::Set::add}(#t91);
+ }
+ }
#t90.{core::Set::add}(null);
} =>#t90;
core::Map<core::String*, core::List<core::int*>*>* map61 = block {
final core::Map<core::String*, core::List<core::int*>*>* #t92 = <core::String*, core::List<core::int*>*>{};
if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t93 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::List<core::int*>*>* #t93 = :sync-for-iterator.{core::Iterator::current};
#t92.{core::Map::[]=}(#t93.{core::MapEntry::key}, #t93.{core::MapEntry::value});
+ }
+ }
#t92.{core::Map::[]=}("baz", null);
} =>#t92;
core::List<core::List<core::int*>*>* list70 = block {
@@ -822,50 +978,90 @@
} =>#t100;
core::List<core::num*>* list81 = block {
final core::List<core::num*>* #t101 = <core::num*>[];
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::num* #t102 in listInt)
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::num* #t102 = :sync-for-iterator.{core::Iterator::current};
#t101.{core::List::add}(#t102);
- else
- for (final core::num* #t103 in listDouble)
+ }
+ }
+ else {
+ core::Iterator<core::double*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::double*>*>(listDouble).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::num* #t103 = :sync-for-iterator.{core::Iterator::current};
#t101.{core::List::add}(#t103);
+ }
+ }
} =>#t101;
core::Set<core::num*>* set81 = block {
final core::Set<core::num*>* #t104 = col::LinkedHashSet::•<core::num*>();
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::num* #t105 in listInt)
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::num* #t105 = :sync-for-iterator.{core::Iterator::current};
#t104.{core::Set::add}(#t105);
- else
- for (final core::num* #t106 in listDouble)
+ }
+ }
+ else {
+ core::Iterator<core::double*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::double*>*>(listDouble).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::num* #t106 = :sync-for-iterator.{core::Iterator::current};
#t104.{core::Set::add}(#t106);
+ }
+ }
#t104.{core::Set::add}(null);
} =>#t104;
core::Map<core::String*, core::num*>* map81 = block {
final core::Map<core::String*, core::num*>* #t107 = <core::String*, core::num*>{};
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::MapEntry<core::String*, core::num*>* #t108 in mapToInt.{core::Map::entries})
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapToInt.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::num*>* #t108 = :sync-for-iterator.{core::Iterator::current};
#t107.{core::Map::[]=}(#t108.{core::MapEntry::key}, #t108.{core::MapEntry::value});
- else
- for (final core::MapEntry<core::String*, core::num*>* #t109 in mapToDouble.{core::Map::entries})
+ }
+ }
+ else {
+ core::Iterator<core::MapEntry<core::String*, core::double*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::double*>*>*>(mapToDouble.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::num*>* #t109 = :sync-for-iterator.{core::Iterator::current};
#t107.{core::Map::[]=}(#t109.{core::MapEntry::key}, #t109.{core::MapEntry::value});
+ }
+ }
#t107.{core::Map::[]=}("baz", null);
} =>#t107;
core::List<dynamic>* list82 = block {
final core::List<dynamic>* #t110 = <dynamic>[];
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final dynamic #t111 in listInt)
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t111 = :sync-for-iterator.{core::Iterator::current};
#t110.{core::List::add}(#t111);
- else
- for (final dynamic #t112 in dynVar as{TypeError} core::Iterable<dynamic>*)
+ }
+ }
+ else {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t112 = :sync-for-iterator.{core::Iterator::current};
#t110.{core::List::add}(#t112);
+ }
+ }
} =>#t110;
core::Set<dynamic>* set82 = block {
final core::Set<dynamic>* #t113 = col::LinkedHashSet::•<dynamic>();
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final dynamic #t114 in listInt)
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t114 = :sync-for-iterator.{core::Iterator::current};
#t113.{core::Set::add}(#t114);
- else
- for (final dynamic #t115 in dynVar as{TypeError} core::Iterable<dynamic>*)
+ }
+ }
+ else {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t115 = :sync-for-iterator.{core::Iterator::current};
#t113.{core::Set::add}(#t115);
+ }
+ }
#t113.{core::Set::add}(null);
} =>#t113;
core::Set<dynamic>* map82 = block {
@@ -875,33 +1071,49 @@
- 'Map' is from 'dart:core'.
var map82 = {if (oracle(\"foo\")) ...mapToInt else ...dynVar, null};
^");
- else
- for (final dynamic #t117 in dynVar as{TypeError} core::Iterable<dynamic>*)
+ else {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t117 = :sync-for-iterator.{core::Iterator::current};
#t116.{core::Set::add}(#t117);
+ }
+ }
#t116.{core::Set::add}(null);
} =>#t116;
core::List<core::num*>* list83 = block {
final core::List<core::num*>* #t118 = <core::num*>[];
if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
#t118.{core::List::add}(42);
- else
- for (final core::num* #t119 in listDouble)
+ else {
+ core::Iterator<core::double*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::double*>*>(listDouble).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::num* #t119 = :sync-for-iterator.{core::Iterator::current};
#t118.{core::List::add}(#t119);
+ }
+ }
} =>#t118;
core::Set<core::num*>* set83 = block {
final core::Set<core::num*>* #t120 = col::LinkedHashSet::•<core::num*>();
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::num* #t121 in listInt)
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::num* #t121 = :sync-for-iterator.{core::Iterator::current};
#t120.{core::Set::add}(#t121);
+ }
+ }
else
#t120.{core::Set::add}(3.14);
#t120.{core::Set::add}(null);
} =>#t120;
core::Map<core::String*, core::num*>* map83 = block {
final core::Map<core::String*, core::num*>* #t122 = <core::String*, core::num*>{};
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::MapEntry<core::String*, core::num*>* #t123 in mapToInt.{core::Map::entries})
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapToInt.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::num*>* #t123 = :sync-for-iterator.{core::Iterator::current};
#t122.{core::Map::[]=}(#t123.{core::MapEntry::key}, #t123.{core::MapEntry::value});
+ }
+ }
else
#t122.{core::Map::[]=}("bar", 3.14);
#t122.{core::Map::[]=}("baz", null);
@@ -925,29 +1137,44 @@
} =>#t126;
core::List<core::int*>* list91 = block {
final core::List<core::int*>* #t127 = <core::int*>[];
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final dynamic #t128 in dynVar as{TypeError} core::Iterable<dynamic>*) {
- final core::int* #t129 = #t128 as{TypeError} core::int*;
- #t127.{core::List::add}(#t129);
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t128 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int* #t129 = #t128 as{TypeError} core::int*;
+ #t127.{core::List::add}(#t129);
+ }
}
+ }
} =>#t127;
core::Set<core::int*>* set91 = block {
final core::Set<core::int*>* #t130 = col::LinkedHashSet::•<core::int*>();
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final dynamic #t131 in dynVar as{TypeError} core::Iterable<dynamic>*) {
- final core::int* #t132 = #t131 as{TypeError} core::int*;
- #t130.{core::Set::add}(#t132);
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t131 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int* #t132 = #t131 as{TypeError} core::int*;
+ #t130.{core::Set::add}(#t132);
+ }
}
+ }
#t130.{core::Set::add}(null);
} =>#t130;
core::Map<core::String*, core::int*>* map91 = block {
final core::Map<core::String*, core::int*>* #t133 = <core::String*, core::int*>{};
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::MapEntry<dynamic, dynamic>* #t134 in (dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
- final core::String* #t135 = #t134.{core::MapEntry::key} as{TypeError} core::String*;
- final core::int* #t136 = #t134.{core::MapEntry::value} as{TypeError} core::int*;
- #t133.{core::Map::[]=}(#t135, #t136);
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<dynamic, dynamic>* #t134 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::String* #t135 = #t134.{core::MapEntry::key} as{TypeError} core::String*;
+ final core::int* #t136 = #t134.{core::MapEntry::value} as{TypeError} core::int*;
+ #t133.{core::Map::[]=}(#t135, #t136);
+ }
}
+ }
#t133.{core::Map::[]=}("baz", null);
} =>#t133;
core::List<core::int*>* list100 = block {
@@ -992,28 +1219,40 @@
} =>#t144;
block {
final core::List<core::int*>* #t146 = <core::int*>[];
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::int* #t147 in <core::int*>[let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t147 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
<int>[if (oracle(\"foo\")) ...[\"bar\"]];
- ^" in "bar" as{TypeError} core::int*])
- #t146.{core::List::add}(#t147);
+ ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t148 = :sync-for-iterator.{core::Iterator::current};
+ #t146.{core::List::add}(#t148);
+ }
+ }
} =>#t146;
block {
final core::Set<core::int*>* #t149 = col::LinkedHashSet::•<core::int*>();
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::int* #t150 in <core::int*>[let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t150 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
<int>{if (oracle(\"foo\")) ...[\"bar\"], null};
- ^" in "bar" as{TypeError} core::int*])
- #t149.{core::Set::add}(#t150);
+ ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t151 = :sync-for-iterator.{core::Iterator::current};
+ #t149.{core::Set::add}(#t151);
+ }
+ }
#t149.{core::Set::add}(null);
} =>#t149;
block {
final core::Map<core::String*, core::int*>* #t152 = <core::String*, core::int*>{};
- if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
- for (final core::MapEntry<core::String*, core::int*>* #t153 in <core::String*, core::int*>{"bar": let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+ if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+ core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": let final<BottomType> #t153 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
<String, int>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
- ^" in "bar" as{TypeError} core::int*}.{core::Map::entries})
- #t152.{core::Map::[]=}(#t153.{core::MapEntry::key}, #t153.{core::MapEntry::value});
+ ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::int*>* #t154 = :sync-for-iterator.{core::Iterator::current};
+ #t152.{core::Map::[]=}(#t154.{core::MapEntry::key}, #t154.{core::MapEntry::value});
+ }
+ }
#t152.{core::Map::[]=}("baz", null);
} =>#t152;
block {
@@ -1269,278 +1508,434 @@
} =>#t196;
core::List<core::int*>* list20 = block {
final core::List<core::int*>* #t197 = <core::int*>[];
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::int* #t198 in <core::int*>[42])
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t198 = :sync-for-iterator.{core::Iterator::current};
#t197.{core::List::add}(#t198);
+ }
+ }
} =>#t197;
core::Set<core::int*>* set20 = block {
final core::Set<core::int*>* #t199 = col::LinkedHashSet::•<core::int*>();
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::int* #t200 in <core::int*>[42])
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t200 = :sync-for-iterator.{core::Iterator::current};
#t199.{core::Set::add}(#t200);
+ }
+ }
#t199.{core::Set::add}(null);
} =>#t199;
core::Map<core::String*, core::int*>* map20 = block {
final core::Map<core::String*, core::int*>* #t201 = <core::String*, core::int*>{};
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::MapEntry<core::String*, core::int*>* #t202 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::int*>* #t202 = :sync-for-iterator.{core::Iterator::current};
#t201.{core::Map::[]=}(#t202.{core::MapEntry::key}, #t202.{core::MapEntry::value});
+ }
+ }
#t201.{core::Map::[]=}("baz", null);
} =>#t201;
core::List<dynamic>* list21 = block {
final core::List<dynamic>* #t203 = <dynamic>[];
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final dynamic #t204 in <dynamic>[dynVar])
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t204 = :sync-for-iterator.{core::Iterator::current};
#t203.{core::List::add}(#t204);
+ }
+ }
} =>#t203;
core::Set<dynamic>* set21 = block {
final core::Set<dynamic>* #t205 = col::LinkedHashSet::•<dynamic>();
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final dynamic #t206 in <dynamic>[dynVar])
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t206 = :sync-for-iterator.{core::Iterator::current};
#t205.{core::Set::add}(#t206);
+ }
+ }
#t205.{core::Set::add}(null);
} =>#t205;
core::Map<core::String*, dynamic>* map21 = block {
final core::Map<core::String*, dynamic>* #t207 = <core::String*, dynamic>{};
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::MapEntry<core::String*, dynamic>* #t208 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, dynamic>* #t208 = :sync-for-iterator.{core::Iterator::current};
#t207.{core::Map::[]=}(#t208.{core::MapEntry::key}, #t208.{core::MapEntry::value});
+ }
+ }
#t207.{core::Map::[]=}("baz", null);
} =>#t207;
core::List<core::List<core::int*>*>* list22 = block {
final core::List<core::List<core::int*>*>* #t209 = <core::List<core::int*>*>[];
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::List<core::int*>* #t210 in <core::List<core::int*>*>[<core::int*>[42]])
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t210 = :sync-for-iterator.{core::Iterator::current};
#t209.{core::List::add}(#t210);
+ }
+ }
} =>#t209;
core::Set<core::List<core::int*>*>* set22 = block {
final core::Set<core::List<core::int*>*>* #t211 = col::LinkedHashSet::•<core::List<core::int*>*>();
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::List<core::int*>* #t212 in <core::List<core::int*>*>[<core::int*>[42]])
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t212 = :sync-for-iterator.{core::Iterator::current};
#t211.{core::Set::add}(#t212);
+ }
+ }
#t211.{core::Set::add}(null);
} =>#t211;
core::Map<core::String*, core::List<core::int*>*>* map22 = block {
final core::Map<core::String*, core::List<core::int*>*>* #t213 = <core::String*, core::List<core::int*>*>{};
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t214 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::List<core::int*>*>* #t214 = :sync-for-iterator.{core::Iterator::current};
#t213.{core::Map::[]=}(#t214.{core::MapEntry::key}, #t214.{core::MapEntry::value});
+ }
+ }
#t213.{core::Map::[]=}("baz", null);
} =>#t213;
core::List<core::int*>* list30 = block {
final core::List<core::int*>* #t215 = <core::int*>[];
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::int* #t216 in <core::int*>[42])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t216 = :sync-for-iterator.{core::Iterator::current};
#t215.{core::List::add}(#t216);
+ }
+ }
} =>#t215;
core::Set<core::int*>* set30 = block {
final core::Set<core::int*>* #t217 = col::LinkedHashSet::•<core::int*>();
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::int* #t218 in <core::int*>[42])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t218 = :sync-for-iterator.{core::Iterator::current};
#t217.{core::Set::add}(#t218);
+ }
+ }
#t217.{core::Set::add}(null);
} =>#t217;
core::Map<core::String*, core::int*>* map30 = block {
final core::Map<core::String*, core::int*>* #t219 = <core::String*, core::int*>{};
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::MapEntry<core::String*, core::int*>* #t220 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::int*>* #t220 = :sync-for-iterator.{core::Iterator::current};
#t219.{core::Map::[]=}(#t220.{core::MapEntry::key}, #t220.{core::MapEntry::value});
+ }
+ }
#t219.{core::Map::[]=}("baz", null);
} =>#t219;
core::List<dynamic>* list31 = block {
final core::List<dynamic>* #t221 = <dynamic>[];
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final dynamic #t222 in <dynamic>[dynVar])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t222 = :sync-for-iterator.{core::Iterator::current};
#t221.{core::List::add}(#t222);
+ }
+ }
} =>#t221;
core::Set<dynamic>* set31 = block {
final core::Set<dynamic>* #t223 = col::LinkedHashSet::•<dynamic>();
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final dynamic #t224 in <dynamic>[dynVar])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t224 = :sync-for-iterator.{core::Iterator::current};
#t223.{core::Set::add}(#t224);
+ }
+ }
#t223.{core::Set::add}(null);
} =>#t223;
core::Map<core::String*, dynamic>* map31 = block {
final core::Map<core::String*, dynamic>* #t225 = <core::String*, dynamic>{};
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::MapEntry<core::String*, dynamic>* #t226 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, dynamic>* #t226 = :sync-for-iterator.{core::Iterator::current};
#t225.{core::Map::[]=}(#t226.{core::MapEntry::key}, #t226.{core::MapEntry::value});
+ }
+ }
#t225.{core::Map::[]=}("baz", null);
} =>#t225;
core::List<core::List<core::int*>*>* list33 = block {
final core::List<core::List<core::int*>*>* #t227 = <core::List<core::int*>*>[];
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::List<core::int*>* #t228 in <core::List<core::int*>*>[<core::int*>[42]])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t228 = :sync-for-iterator.{core::Iterator::current};
#t227.{core::List::add}(#t228);
+ }
+ }
} =>#t227;
core::Set<core::List<core::int*>*>* set33 = block {
final core::Set<core::List<core::int*>*>* #t229 = col::LinkedHashSet::•<core::List<core::int*>*>();
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::List<core::int*>* #t230 in <core::List<core::int*>*>[<core::int*>[42]])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t230 = :sync-for-iterator.{core::Iterator::current};
#t229.{core::Set::add}(#t230);
+ }
+ }
#t229.{core::Set::add}(null);
} =>#t229;
core::Map<core::String*, core::List<core::int*>*>* map33 = block {
final core::Map<core::String*, core::List<core::int*>*>* #t231 = <core::String*, core::List<core::int*>*>{};
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t232 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::List<core::int*>*>* #t232 = :sync-for-iterator.{core::Iterator::current};
#t231.{core::Map::[]=}(#t232.{core::MapEntry::key}, #t232.{core::MapEntry::value});
+ }
+ }
#t231.{core::Map::[]=}("baz", null);
} =>#t231;
core::List<core::List<core::int*>*>* list40 = block {
final core::List<core::List<core::int*>*>* #t233 = <core::List<core::int*>*>[];
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::List<core::int*>* #t234 in <core::List<core::int*>*>[<core::int*>[]])
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t234 = :sync-for-iterator.{core::Iterator::current};
#t233.{core::List::add}(#t234);
+ }
+ }
} =>#t233;
core::Set<core::List<core::int*>*>* set40 = block {
final core::Set<core::List<core::int*>*>* #t235 = col::LinkedHashSet::•<core::List<core::int*>*>();
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::List<core::int*>* #t236 in <core::List<core::int*>*>[<core::int*>[]])
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t236 = :sync-for-iterator.{core::Iterator::current};
#t235.{core::Set::add}(#t236);
+ }
+ }
#t235.{core::Set::add}(null);
} =>#t235;
core::Map<core::String*, core::List<core::int*>*>* map40 = block {
final core::Map<core::String*, core::List<core::int*>*>* #t237 = <core::String*, core::List<core::int*>*>{};
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t238 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::List<core::int*>*>* #t238 = :sync-for-iterator.{core::Iterator::current};
#t237.{core::Map::[]=}(#t238.{core::MapEntry::key}, #t238.{core::MapEntry::value});
+ }
+ }
#t237.{core::Map::[]=}("baz", null);
} =>#t237;
core::List<core::List<core::int*>*>* list41 = block {
final core::List<core::List<core::int*>*>* #t239 = <core::List<core::int*>*>[];
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::List<core::int*>* #t240 in let final core::Set<core::List<core::int*>*>* #t241 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t242 = #t241.{core::Set::add}(<core::int*>[]) in #t241)
- #t239.{core::List::add}(#t240);
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t240 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t241 = #t240.{core::Set::add}(<core::int*>[]) in #t240).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t242 = :sync-for-iterator.{core::Iterator::current};
+ #t239.{core::List::add}(#t242);
+ }
+ }
} =>#t239;
core::Set<core::List<core::int*>*>* set41 = block {
final core::Set<core::List<core::int*>*>* #t243 = col::LinkedHashSet::•<core::List<core::int*>*>();
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::List<core::int*>* #t244 in let final core::Set<core::List<core::int*>*>* #t245 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t246 = #t245.{core::Set::add}(<core::int*>[]) in #t245)
- #t243.{core::Set::add}(#t244);
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t244 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t245 = #t244.{core::Set::add}(<core::int*>[]) in #t244).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t246 = :sync-for-iterator.{core::Iterator::current};
+ #t243.{core::Set::add}(#t246);
+ }
+ }
#t243.{core::Set::add}(null);
} =>#t243;
core::List<core::List<core::int*>*>* list42 = block {
final core::List<core::List<core::int*>*>* #t247 = <core::List<core::int*>*>[];
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::List<core::int*>* #t248 in <core::List<core::int*>*>[<core::int*>[]])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t248 = :sync-for-iterator.{core::Iterator::current};
#t247.{core::List::add}(#t248);
+ }
+ }
} =>#t247;
core::Set<core::List<core::int*>*>* set42 = block {
final core::Set<core::List<core::int*>*>* #t249 = col::LinkedHashSet::•<core::List<core::int*>*>();
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::List<core::int*>* #t250 in <core::List<core::int*>*>[<core::int*>[]])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t250 = :sync-for-iterator.{core::Iterator::current};
#t249.{core::Set::add}(#t250);
+ }
+ }
#t249.{core::Set::add}(null);
} =>#t249;
core::Map<core::String*, core::List<core::int*>*>* map42 = block {
final core::Map<core::String*, core::List<core::int*>*>* #t251 = <core::String*, core::List<core::int*>*>{};
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t252 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::List<core::int*>*>* #t252 = :sync-for-iterator.{core::Iterator::current};
#t251.{core::Map::[]=}(#t252.{core::MapEntry::key}, #t252.{core::MapEntry::value});
+ }
+ }
#t251.{core::Map::[]=}("baz", null);
} =>#t251;
core::List<core::int*>* list50 = block {
final core::List<core::int*>* #t253 = <core::int*>[];
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::int* #t254 in <core::int*>[])
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t254 = :sync-for-iterator.{core::Iterator::current};
#t253.{core::List::add}(#t254);
+ }
+ }
} =>#t253;
core::Set<core::int*>* set50 = block {
final core::Set<core::int*>* #t255 = col::LinkedHashSet::•<core::int*>();
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::int* #t256 in <core::int*>[])
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t256 = :sync-for-iterator.{core::Iterator::current};
#t255.{core::Set::add}(#t256);
+ }
+ }
#t255.{core::Set::add}(null);
} =>#t255;
core::Map<core::String*, core::int*>* map50 = block {
final core::Map<core::String*, core::int*>* #t257 = <core::String*, core::int*>{};
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::MapEntry<core::String*, core::int*>* #t258 in <core::String*, core::int*>{}.{core::Map::entries})
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::int*>* #t258 = :sync-for-iterator.{core::Iterator::current};
#t257.{core::Map::[]=}(#t258.{core::MapEntry::key}, #t258.{core::MapEntry::value});
+ }
+ }
#t257.{core::Map::[]=}("baz", null);
} =>#t257;
core::List<core::int*>* list51 = block {
final core::List<core::int*>* #t259 = <core::int*>[];
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::int* #t260 in let final core::Set<core::int*>* #t261 = col::LinkedHashSet::•<core::int*>() in #t261)
- #t259.{core::List::add}(#t260);
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t260 = col::LinkedHashSet::•<core::int*>() in #t260).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t261 = :sync-for-iterator.{core::Iterator::current};
+ #t259.{core::List::add}(#t261);
+ }
+ }
} =>#t259;
core::Set<core::int*>* set51 = block {
final core::Set<core::int*>* #t262 = col::LinkedHashSet::•<core::int*>();
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::int* #t263 in let final core::Set<core::int*>* #t264 = col::LinkedHashSet::•<core::int*>() in #t264)
- #t262.{core::Set::add}(#t263);
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t263 = col::LinkedHashSet::•<core::int*>() in #t263).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t264 = :sync-for-iterator.{core::Iterator::current};
+ #t262.{core::Set::add}(#t264);
+ }
+ }
#t262.{core::Set::add}(null);
} =>#t262;
core::List<core::int*>* list52 = block {
final core::List<core::int*>* #t265 = <core::int*>[];
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::int* #t266 in <core::int*>[])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t266 = :sync-for-iterator.{core::Iterator::current};
#t265.{core::List::add}(#t266);
+ }
+ }
} =>#t265;
core::Set<core::int*>* set52 = block {
final core::Set<core::int*>* #t267 = col::LinkedHashSet::•<core::int*>();
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::int* #t268 in <core::int*>[])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t268 = :sync-for-iterator.{core::Iterator::current};
#t267.{core::Set::add}(#t268);
+ }
+ }
#t267.{core::Set::add}(null);
} =>#t267;
core::List<core::List<core::int*>*>* list60 = block {
final core::List<core::List<core::int*>*>* #t269 = <core::List<core::int*>*>[];
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::List<core::int*>* #t270 in <core::List<core::int*>*>[<core::int*>[]])
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t270 = :sync-for-iterator.{core::Iterator::current};
#t269.{core::List::add}(#t270);
+ }
+ }
} =>#t269;
core::Set<core::List<core::int*>*>* set60 = block {
final core::Set<core::List<core::int*>*>* #t271 = col::LinkedHashSet::•<core::List<core::int*>*>();
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::List<core::int*>* #t272 in <core::List<core::int*>*>[<core::int*>[]])
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t272 = :sync-for-iterator.{core::Iterator::current};
#t271.{core::Set::add}(#t272);
+ }
+ }
#t271.{core::Set::add}(null);
} =>#t271;
core::Map<core::String*, core::List<core::int*>*>* map60 = block {
final core::Map<core::String*, core::List<core::int*>*>* #t273 = <core::String*, core::List<core::int*>*>{};
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t274 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::List<core::int*>*>* #t274 = :sync-for-iterator.{core::Iterator::current};
#t273.{core::Map::[]=}(#t274.{core::MapEntry::key}, #t274.{core::MapEntry::value});
+ }
+ }
#t273.{core::Map::[]=}("baz", null);
} =>#t273;
core::List<core::List<core::int*>*>* list61 = block {
final core::List<core::List<core::int*>*>* #t275 = <core::List<core::int*>*>[];
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::List<core::int*>* #t276 in <core::List<core::int*>*>[<core::int*>[]])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t276 = :sync-for-iterator.{core::Iterator::current};
#t275.{core::List::add}(#t276);
+ }
+ }
} =>#t275;
core::Set<core::List<core::int*>*>* set61 = block {
final core::Set<core::List<core::int*>*>* #t277 = col::LinkedHashSet::•<core::List<core::int*>*>();
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::List<core::int*>* #t278 in <core::List<core::int*>*>[<core::int*>[]])
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t278 = :sync-for-iterator.{core::Iterator::current};
#t277.{core::Set::add}(#t278);
+ }
+ }
#t277.{core::Set::add}(null);
} =>#t277;
core::Map<core::String*, core::List<core::int*>*>* map61 = block {
final core::Map<core::String*, core::List<core::int*>*>* #t279 = <core::String*, core::List<core::int*>*>{};
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t280 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::List<core::int*>*>* #t280 = :sync-for-iterator.{core::Iterator::current};
#t279.{core::Map::[]=}(#t280.{core::MapEntry::key}, #t280.{core::MapEntry::value});
+ }
+ }
#t279.{core::Map::[]=}("baz", null);
} =>#t279;
core::List<core::List<core::int*>*>* list70 = block {
@@ -1609,65 +2004,113 @@
core::List<core::num*>* list81 = block {
final core::List<core::num*>* #t290 = <core::num*>[];
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::num* #t291 in listInt)
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::num* #t291 = :sync-for-iterator.{core::Iterator::current};
#t290.{core::List::add}(#t291);
- else
- for (final core::num* #t292 in listDouble)
+ }
+ }
+ else {
+ core::Iterator<core::double*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::double*>*>(listDouble).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::num* #t292 = :sync-for-iterator.{core::Iterator::current};
#t290.{core::List::add}(#t292);
+ }
+ }
} =>#t290;
core::Set<core::num*>* set81 = block {
final core::Set<core::num*>* #t293 = col::LinkedHashSet::•<core::num*>();
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::num* #t294 in listInt)
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::num* #t294 = :sync-for-iterator.{core::Iterator::current};
#t293.{core::Set::add}(#t294);
- else
- for (final core::num* #t295 in listDouble)
+ }
+ }
+ else {
+ core::Iterator<core::double*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::double*>*>(listDouble).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::num* #t295 = :sync-for-iterator.{core::Iterator::current};
#t293.{core::Set::add}(#t295);
+ }
+ }
#t293.{core::Set::add}(null);
} =>#t293;
core::Map<core::String*, core::num*>* map81 = block {
final core::Map<core::String*, core::num*>* #t296 = <core::String*, core::num*>{};
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::MapEntry<core::String*, core::num*>* #t297 in mapStringInt.{core::Map::entries})
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapStringInt.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::num*>* #t297 = :sync-for-iterator.{core::Iterator::current};
#t296.{core::Map::[]=}(#t297.{core::MapEntry::key}, #t297.{core::MapEntry::value});
- else
- for (final core::MapEntry<core::String*, core::num*>* #t298 in mapStringDouble.{core::Map::entries})
+ }
+ }
+ else {
+ core::Iterator<core::MapEntry<core::String*, core::double*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::double*>*>*>(mapStringDouble.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::num*>* #t298 = :sync-for-iterator.{core::Iterator::current};
#t296.{core::Map::[]=}(#t298.{core::MapEntry::key}, #t298.{core::MapEntry::value});
+ }
+ }
#t296.{core::Map::[]=}("baz", null);
} =>#t296;
core::List<dynamic>* list82 = block {
final core::List<dynamic>* #t299 = <dynamic>[];
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final dynamic #t300 in listInt)
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t300 = :sync-for-iterator.{core::Iterator::current};
#t299.{core::List::add}(#t300);
- else
- for (final dynamic #t301 in dynVar as{TypeError} core::Iterable<dynamic>*)
+ }
+ }
+ else {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t301 = :sync-for-iterator.{core::Iterator::current};
#t299.{core::List::add}(#t301);
+ }
+ }
} =>#t299;
core::Set<dynamic>* set82 = block {
final core::Set<dynamic>* #t302 = col::LinkedHashSet::•<dynamic>();
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final dynamic #t303 in listInt)
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t303 = :sync-for-iterator.{core::Iterator::current};
#t302.{core::Set::add}(#t303);
- else
- for (final dynamic #t304 in dynVar as{TypeError} core::Iterable<dynamic>*)
+ }
+ }
+ else {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t304 = :sync-for-iterator.{core::Iterator::current};
#t302.{core::Set::add}(#t304);
+ }
+ }
#t302.{core::Set::add}(null);
} =>#t302;
core::Map<dynamic, dynamic>* map82 = block {
final core::Map<dynamic, dynamic>* #t305 = <dynamic, dynamic>{};
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::MapEntry<dynamic, dynamic>* #t306 in mapStringInt.{core::Map::entries})
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapStringInt.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<dynamic, dynamic>* #t306 = :sync-for-iterator.{core::Iterator::current};
#t305.{core::Map::[]=}(#t306.{core::MapEntry::key}, #t306.{core::MapEntry::value});
- else
- for (final core::MapEntry<dynamic, dynamic>* #t307 in (dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries})
+ }
+ }
+ else {
+ core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<dynamic, dynamic>* #t307 = :sync-for-iterator.{core::Iterator::current};
#t305.{core::Map::[]=}(#t307.{core::MapEntry::key}, #t307.{core::MapEntry::value});
+ }
+ }
#t305.{core::Map::[]=}("baz", null);
} =>#t305;
core::List<core::num*>* list83 = block {
@@ -1675,16 +2118,24 @@
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
if(self::oracle<dynamic>() as{TypeError} core::bool*)
#t308.{core::List::add}(42);
- else
- for (final core::num* #t309 in listDouble)
+ else {
+ core::Iterator<core::double*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::double*>*>(listDouble).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::num* #t309 = :sync-for-iterator.{core::Iterator::current};
#t308.{core::List::add}(#t309);
+ }
+ }
} =>#t308;
core::Set<core::num*>* set83 = block {
final core::Set<core::num*>* #t310 = col::LinkedHashSet::•<core::num*>();
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::num* #t311 in listInt)
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::num* #t311 = :sync-for-iterator.{core::Iterator::current};
#t310.{core::Set::add}(#t311);
+ }
+ }
else
#t310.{core::Set::add}(3.14);
#t310.{core::Set::add}(null);
@@ -1692,9 +2143,13 @@
core::Map<core::String*, core::num*>* map83 = block {
final core::Map<core::String*, core::num*>* #t312 = <core::String*, core::num*>{};
for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- if(self::oracle<dynamic>() as{TypeError} core::bool*)
- for (final core::MapEntry<core::String*, core::num*>* #t313 in mapStringInt.{core::Map::entries})
+ if(self::oracle<dynamic>() as{TypeError} core::bool*) {
+ core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapStringInt.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::num*>* #t313 = :sync-for-iterator.{core::Iterator::current};
#t312.{core::Map::[]=}(#t313.{core::MapEntry::key}, #t313.{core::MapEntry::value});
+ }
+ }
else
#t312.{core::Map::[]=}("bar", 3.14);
#t312.{core::Map::[]=}("baz", null);
@@ -1718,29 +2173,44 @@
} =>#t316;
core::List<core::int*>* list91 = block {
final core::List<core::int*>* #t317 = <core::int*>[];
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final dynamic #t318 in dynVar as{TypeError} core::Iterable<dynamic>*) {
- final core::int* #t319 = #t318 as{TypeError} core::int*;
- #t317.{core::List::add}(#t319);
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t318 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int* #t319 = #t318 as{TypeError} core::int*;
+ #t317.{core::List::add}(#t319);
+ }
}
+ }
} =>#t317;
core::Set<core::int*>* set91 = block {
final core::Set<core::int*>* #t320 = col::LinkedHashSet::•<core::int*>();
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final dynamic #t321 in dynVar as{TypeError} core::Iterable<dynamic>*) {
- final core::int* #t322 = #t321 as{TypeError} core::int*;
- #t320.{core::Set::add}(#t322);
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t321 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int* #t322 = #t321 as{TypeError} core::int*;
+ #t320.{core::Set::add}(#t322);
+ }
}
+ }
#t320.{core::Set::add}(null);
} =>#t320;
core::Map<core::String*, core::int*>* map91 = block {
final core::Map<core::String*, core::int*>* #t323 = <core::String*, core::int*>{};
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::MapEntry<dynamic, dynamic>* #t324 in (dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
- final core::String* #t325 = #t324.{core::MapEntry::key} as{TypeError} core::String*;
- final core::int* #t326 = #t324.{core::MapEntry::value} as{TypeError} core::int*;
- #t323.{core::Map::[]=}(#t325, #t326);
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<dynamic, dynamic>* #t324 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::String* #t325 = #t324.{core::MapEntry::key} as{TypeError} core::String*;
+ final core::int* #t326 = #t324.{core::MapEntry::value} as{TypeError} core::int*;
+ #t323.{core::Map::[]=}(#t325, #t326);
+ }
}
+ }
#t323.{core::Map::[]=}("baz", null);
} =>#t323;
core::List<core::int*>* list100 = block {
@@ -1760,36 +2230,66 @@
} =>#t331;
core::List<core::int*>* list110 = block {
final core::List<core::int*>* #t333 = <core::int*>[];
- for (core::int* i in <core::int*>[1, 2, 3])
- #t333.{core::List::add}(i);
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[1, 2, 3]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ core::int* i = :sync-for-iterator.{core::Iterator::current};
+ #t333.{core::List::add}(i);
+ }
+ }
} =>#t333;
core::Set<core::int*>* set110 = block {
final core::Set<core::int*>* #t334 = col::LinkedHashSet::•<core::int*>();
- for (core::int* i in <core::int*>[1, 2, 3])
- #t334.{core::Set::add}(i);
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[1, 2, 3]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ core::int* i = :sync-for-iterator.{core::Iterator::current};
+ #t334.{core::Set::add}(i);
+ }
+ }
#t334.{core::Set::add}(null);
} =>#t334;
core::Map<core::String*, core::int*>* map110 = block {
final core::Map<core::String*, core::int*>* #t335 = <core::String*, core::int*>{};
- for (core::int* i in <core::int*>[1, 2, 3])
- #t335.{core::Map::[]=}("bar", i);
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[1, 2, 3]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ core::int* i = :sync-for-iterator.{core::Iterator::current};
+ #t335.{core::Map::[]=}("bar", i);
+ }
+ }
#t335.{core::Map::[]=}("baz", null);
} =>#t335;
core::List<core::int*>* list120 = block {
final core::List<core::int*>* #t336 = <core::int*>[];
- for (dynamic i in dynVar as{TypeError} core::Iterable<dynamic>*)
- #t336.{core::List::add}(i as{TypeError} core::int*);
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic i = :sync-for-iterator.{core::Iterator::current};
+ #t336.{core::List::add}(i as{TypeError} core::int*);
+ }
+ }
} =>#t336;
core::Set<core::int*>* set120 = block {
final core::Set<core::int*>* #t337 = col::LinkedHashSet::•<core::int*>();
- for (dynamic i in dynVar as{TypeError} core::Iterable<dynamic>*)
- #t337.{core::Set::add}(i as{TypeError} core::int*);
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic i = :sync-for-iterator.{core::Iterator::current};
+ #t337.{core::Set::add}(i as{TypeError} core::int*);
+ }
+ }
#t337.{core::Set::add}(null);
} =>#t337;
core::Map<core::String*, core::int*>* map120 = block {
final core::Map<core::String*, core::int*>* #t338 = <core::String*, core::int*>{};
- for (dynamic i in dynVar as{TypeError} core::Iterable<dynamic>*)
- #t338.{core::Map::[]=}("bar", i as{TypeError} core::int*);
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic i = :sync-for-iterator.{core::Iterator::current};
+ #t338.{core::Map::[]=}("bar", i as{TypeError} core::int*);
+ }
+ }
#t338.{core::Map::[]=}("baz", null);
} =>#t338;
core::List<core::int*>* list130 = block {
@@ -1853,30 +2353,42 @@
} =>#t346;
block {
final core::List<core::int*>* #t350 = <core::int*>[];
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::int* #t351 in <core::int*>[let final<BottomType> #t352 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t351 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
<int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
- ^" in "bar" as{TypeError} core::int*])
- #t350.{core::List::add}(#t351);
+ ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t352 = :sync-for-iterator.{core::Iterator::current};
+ #t350.{core::List::add}(#t352);
+ }
+ }
} =>#t350;
block {
final core::Set<core::int*>* #t353 = col::LinkedHashSet::•<core::int*>();
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::int* #t354 in <core::int*>[let final<BottomType> #t355 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t354 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
<int>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
- ^" in "bar" as{TypeError} core::int*])
- #t353.{core::Set::add}(#t354);
+ ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t355 = :sync-for-iterator.{core::Iterator::current};
+ #t353.{core::Set::add}(#t355);
+ }
+ }
#t353.{core::Set::add}(null);
} =>#t353;
block {
final core::Map<core::int*, core::int*>* #t356 = <core::int*, core::int*>{};
- for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
- for (final core::MapEntry<core::int*, core::int*>* #t357 in <core::int*, core::int*>{let final<BottomType> #t358 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+ for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+ core::Iterator<core::MapEntry<core::int*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::int*, core::int*>*>*>(<core::int*, core::int*>{let final<BottomType> #t357 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
<int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
- ^" in "bar" as{TypeError} core::int*: let final<BottomType> #t359 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+ ^" in "bar" as{TypeError} core::int*: let final<BottomType> #t358 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
<int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
- ^" in "bar" as{TypeError} core::int*}.{core::Map::entries})
- #t356.{core::Map::[]=}(#t357.{core::MapEntry::key}, #t357.{core::MapEntry::value});
+ ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::int*, core::int*>* #t359 = :sync-for-iterator.{core::Iterator::current};
+ #t356.{core::Map::[]=}(#t359.{core::MapEntry::key}, #t359.{core::MapEntry::value});
+ }
+ }
#t356.{core::Map::[]=}(let final<BottomType> #t360 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
<int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
^" in "baz" as{TypeError} core::int*, null);
@@ -2006,86 +2518,134 @@
final core::int* i = 0;
block {
final core::List<core::int*>* #t376 = <core::int*>[];
- for (final core::int* #t377 in <core::int*>[1]) {
- invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:230:14: Error: Setter not found: 'i'.
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[1]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t377 = :sync-for-iterator.{core::Iterator::current};
+ {
+ invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:230:14: Error: Setter not found: 'i'.
<int>[for (i in <int>[1]) i];
^";
- #t376.{core::List::add}(i);
+ #t376.{core::List::add}(i);
+ }
+ }
}
} =>#t376;
block {
final core::Set<core::int*>* #t378 = col::LinkedHashSet::•<core::int*>();
- for (final core::int* #t379 in <core::int*>[1]) {
- invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:231:14: Error: Setter not found: 'i'.
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[1]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t379 = :sync-for-iterator.{core::Iterator::current};
+ {
+ invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:231:14: Error: Setter not found: 'i'.
<int>{for (i in <int>[1]) i, null};
^";
- #t378.{core::Set::add}(i);
+ #t378.{core::Set::add}(i);
+ }
+ }
}
#t378.{core::Set::add}(null);
} =>#t378;
block {
final core::Map<core::String*, core::int*>* #t380 = <core::String*, core::int*>{};
- for (final core::int* #t381 in <core::int*>[1]) {
- invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:21: Error: Setter not found: 'i'.
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[1]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t381 = :sync-for-iterator.{core::Iterator::current};
+ {
+ invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:21: Error: Setter not found: 'i'.
\t<String, int>{for (i in <int>[1]) \"bar\": i, \"baz\": null};
\t ^";
- #t380.{core::Map::[]=}("bar", i);
+ #t380.{core::Map::[]=}("bar", i);
+ }
+ }
}
#t380.{core::Map::[]=}("baz", null);
} =>#t380;
core::List<dynamic>* list10 = block {
final core::List<dynamic>* #t382 = <dynamic>[];
- for (dynamic i in let final<BottomType> #t383 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(let final<BottomType> #t383 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
- 'Iterable' is from 'dart:core'.
var list10 = [for (var i in \"not iterable\") i];
- ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*)
- #t382.{core::List::add}(i);
+ ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic i = :sync-for-iterator.{core::Iterator::current};
+ #t382.{core::List::add}(i);
+ }
+ }
} =>#t382;
core::Set<dynamic>* set10 = block {
final core::Set<dynamic>* #t384 = col::LinkedHashSet::•<dynamic>();
- for (dynamic i in let final<BottomType> #t385 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(let final<BottomType> #t385 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
- 'Iterable' is from 'dart:core'.
var set10 = {for (var i in \"not iterable\") i, null};
- ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*)
- #t384.{core::Set::add}(i);
+ ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic i = :sync-for-iterator.{core::Iterator::current};
+ #t384.{core::Set::add}(i);
+ }
+ }
#t384.{core::Set::add}(null);
} =>#t384;
core::Map<core::String*, dynamic>* map10 = block {
final core::Map<core::String*, dynamic>* #t386 = <core::String*, dynamic>{};
- for (dynamic i in let final<BottomType> #t387 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(let final<BottomType> #t387 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
- 'Iterable' is from 'dart:core'.
var map10 = {for (var i in \"not iterable\") \"bar\": i, \"baz\": null};
- ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*)
- #t386.{core::Map::[]=}("bar", i);
+ ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic i = :sync-for-iterator.{core::Iterator::current};
+ #t386.{core::Map::[]=}("bar", i);
+ }
+ }
#t386.{core::Map::[]=}("baz", null);
} =>#t386;
core::List<core::int*>* list20 = block {
final core::List<core::int*>* #t388 = <core::int*>[];
- for (core::int* i in <core::int*>[let final<BottomType> #t389 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t389 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
var list20 = [for (int i in [\"not\", \"int\"]) i];
^" in "not" as{TypeError} core::int*, let final<BottomType> #t390 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
var list20 = [for (int i in [\"not\", \"int\"]) i];
- ^" in "int" as{TypeError} core::int*])
- #t388.{core::List::add}(i);
+ ^" in "int" as{TypeError} core::int*]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ core::int* i = :sync-for-iterator.{core::Iterator::current};
+ #t388.{core::List::add}(i);
+ }
+ }
} =>#t388;
core::Set<core::int*>* set20 = block {
final core::Set<core::int*>* #t391 = col::LinkedHashSet::•<core::int*>();
- for (core::int* i in <core::int*>[let final<BottomType> #t392 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t392 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
var set20 = {for (int i in [\"not\", \"int\"]) i, null};
^" in "not" as{TypeError} core::int*, let final<BottomType> #t393 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
var set20 = {for (int i in [\"not\", \"int\"]) i, null};
- ^" in "int" as{TypeError} core::int*])
- #t391.{core::Set::add}(i);
+ ^" in "int" as{TypeError} core::int*]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ core::int* i = :sync-for-iterator.{core::Iterator::current};
+ #t391.{core::Set::add}(i);
+ }
+ }
#t391.{core::Set::add}(null);
} =>#t391;
core::Map<core::String*, core::int*>* map20 = block {
final core::Map<core::String*, core::int*>* #t394 = <core::String*, core::int*>{};
- for (core::int* i in <core::int*>[let final<BottomType> #t395 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t395 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
^" in "not" as{TypeError} core::int*, let final<BottomType> #t396 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
- ^" in "int" as{TypeError} core::int*])
- #t394.{core::Map::[]=}("bar", i);
+ ^" in "int" as{TypeError} core::int*]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ core::int* i = :sync-for-iterator.{core::Iterator::current};
+ #t394.{core::Map::[]=}("bar", i);
+ }
+ }
#t394.{core::Map::[]=}("baz", null);
} =>#t394;
final core::List<dynamic>* #t397 = <dynamic>[];
diff --git a/pkg/front_end/testcases/general/for_in_scope.dart.strong.transformed.expect b/pkg/front_end/testcases/general/for_in_scope.dart.strong.transformed.expect
index 78f359e..cb9a540 100644
--- a/pkg/front_end/testcases/general/for_in_scope.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/for_in_scope.dart.strong.transformed.expect
@@ -1,9 +1,16 @@
library;
import self as self;
import "dart:core" as core;
+import "dart:_internal" as _in;
static method main(core::List<core::String*>* arguments) → dynamic {
- for (core::String* arguments in arguments) {
- core::print(arguments);
+ {
+ core::Iterator<core::String*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::String*>*>(arguments).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ core::String* arguments = :sync-for-iterator.{core::Iterator::current};
+ {
+ core::print(arguments);
+ }
+ }
}
}
diff --git a/pkg/front_end/testcases/general/for_in_without_declaration.dart.strong.transformed.expect b/pkg/front_end/testcases/general/for_in_without_declaration.dart.strong.transformed.expect
index 6916586..0571257 100644
--- a/pkg/front_end/testcases/general/for_in_without_declaration.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/for_in_without_declaration.dart.strong.transformed.expect
@@ -66,6 +66,7 @@
//
import self as self;
import "dart:core" as core;
+import "dart:_internal" as _in;
class Super extends core::Object {
field core::int* superInstanceField = null;
@@ -85,93 +86,201 @@
method m() → dynamic {
core::String* local;
dynamic untypedLocal;
- for (final core::String* #t1 in <core::String*>[]) {
- local = #t1;
+ {
+ core::Iterator<core::String*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::String*>*>(<core::String*>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::String* #t1 = :sync-for-iterator.{core::Iterator::current};
+ {
+ local = #t1;
+ }
+ }
}
- for (final dynamic #t2 in <dynamic>[]) {
- untypedLocal = #t2;
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
+ {
+ untypedLocal = #t2;
+ }
+ }
}
- for (final core::int* #t3 in <core::int*>[]) {
- this.{self::C::instanceField} = #t3;
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t3 = :sync-for-iterator.{core::Iterator::current};
+ {
+ this.{self::C::instanceField} = #t3;
+ }
+ }
}
- for (final dynamic #t4 in <dynamic>[]) {
- this.{self::C::untypedInstanceField} = #t4;
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t4 = :sync-for-iterator.{core::Iterator::current};
+ {
+ this.{self::C::untypedInstanceField} = #t4;
+ }
+ }
}
- for (final core::double* #t5 in <core::double*>[]) {
- self::C::staticField = #t5;
+ {
+ core::Iterator<core::double*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::double*>*>(<core::double*>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::double* #t5 = :sync-for-iterator.{core::Iterator::current};
+ {
+ self::C::staticField = #t5;
+ }
+ }
}
- for (final dynamic #t6 in <dynamic>[]) {
- self::C::untypedStaticField = #t6;
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t6 = :sync-for-iterator.{core::Iterator::current};
+ {
+ self::C::untypedStaticField = #t6;
+ }
+ }
}
- for (final core::bool* #t7 in <core::bool*>[]) {
- self::topLevelField = #t7;
+ {
+ core::Iterator<core::bool*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::bool*>*>(<core::bool*>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::bool* #t7 = :sync-for-iterator.{core::Iterator::current};
+ {
+ self::topLevelField = #t7;
+ }
+ }
}
- for (final dynamic #t8 in <dynamic>[]) {
- self::untypedTopLevelField = #t8;
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t8 = :sync-for-iterator.{core::Iterator::current};
+ {
+ self::untypedTopLevelField = #t8;
+ }
+ }
}
- for (final core::int* #t9 in <core::int*>[]) {
- super.{self::Super::superInstanceField} = #t9;
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t9 = :sync-for-iterator.{core::Iterator::current};
+ {
+ super.{self::Super::superInstanceField} = #t9;
+ }
+ }
}
- for (final dynamic #t10 in <dynamic>[]) {
- super.{self::Super::untypedSuperInstanceField} = #t10;
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t10 = :sync-for-iterator.{core::Iterator::current};
+ {
+ super.{self::Super::untypedSuperInstanceField} = #t10;
+ }
+ }
}
self::C* c = new self::C::•();
- for (final core::int* #t11 in <core::int*>[]) {
- c.{self::C::instanceField} = #t11;
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t11 = :sync-for-iterator.{core::Iterator::current};
+ {
+ c.{self::C::instanceField} = #t11;
+ }
+ }
}
- for (final dynamic #t12 in <dynamic>[]) {
- c.{self::Super::untypedSuperInstanceField} = #t12;
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t12 = :sync-for-iterator.{core::Iterator::current};
+ {
+ c.{self::Super::untypedSuperInstanceField} = #t12;
+ }
+ }
}
- for (final dynamic #t13 in <dynamic>[]) {
- invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:37:10: Error: The setter 'unresolved' isn't defined for the class 'C'.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t13 = :sync-for-iterator.{core::Iterator::current};
+ {
+ invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:37:10: Error: The setter 'unresolved' isn't defined for the class 'C'.
- 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
for (unresolved in []) {}
^^^^^^^^^^";
+ }
+ }
}
- for (final dynamic #t14 in <dynamic>[]) {
- invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:38:10: Error: The getter 'unresolved' isn't defined for the class 'C'.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t14 = :sync-for-iterator.{core::Iterator::current};
+ {
+ invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:38:10: Error: The getter 'unresolved' isn't defined for the class 'C'.
- 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
for (unresolved.foo in []) {}
^^^^^^^^^^".foo = #t14;
+ }
+ }
}
- for (final dynamic #t15 in <dynamic>[]) {
- invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:39:12: Error: The setter 'unresolved' isn't defined for the class 'C'.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t15 = :sync-for-iterator.{core::Iterator::current};
+ {
+ invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:39:12: Error: The setter 'unresolved' isn't defined for the class 'C'.
- 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
for (c.unresolved in []) {}
^^^^^^^^^^";
+ }
+ }
}
{
invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:40:10: Error: Can't assign to this, so it can't be used in a for-in loop.
for (main() in []) {}
^^^^";
- for (final dynamic #t16 in <dynamic>[]) {
- invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:40:10: Error: Can't assign to this, so it can't be used in a for-in loop.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t16 = :sync-for-iterator.{core::Iterator::current};
+ {
+ invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:40:10: Error: Can't assign to this, so it can't be used in a for-in loop.
for (main() in []) {}
^^^^";
- self::main();
+ self::main();
+ }
+ }
}
}
{
invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:41:10: Error: A for-in loop can't have more than one loop variable.
for (var x, y in <int>[]) {
^^^";
- for (final core::int* #t17 in <core::int*>[]) {
- invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:41:10: Error: A for-in loop can't have more than one loop variable.
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t17 = :sync-for-iterator.{core::Iterator::current};
+ {
+ invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:41:10: Error: A for-in loop can't have more than one loop variable.
for (var x, y in <int>[]) {
^^^";
- dynamic x;
- dynamic y;
- core::print(x);
- core::print(y);
+ dynamic x;
+ dynamic y;
+ core::print(x);
+ core::print(y);
+ }
+ }
}
}
- for (final dynamic #t18 in <dynamic>[]) {
- invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:46:10: Error: Setter not found: 'constant'.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t18 = :sync-for-iterator.{core::Iterator::current};
+ {
+ invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:46:10: Error: Setter not found: 'constant'.
for (constant in []) {}
^^^^^^^^";
+ }
+ }
}
}
}
diff --git a/pkg/front_end/testcases/general/issue37027.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue37027.dart.strong.transformed.expect
index 4789444..606d3a0 100644
--- a/pkg/front_end/testcases/general/issue37027.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue37027.dart.strong.transformed.expect
@@ -2,15 +2,21 @@
import self as self;
import "dart:core" as core;
import "dart:collection" as col;
+import "dart:_internal" as _in;
class C extends core::Object {
final field core::Set<core::int*>* s;
constructor •(core::List<core::int*>* ell) → self::C*
: self::C::s = block {
final core::Set<core::int*>* #t1 = col::LinkedHashSet::•<core::int*>();
- for (core::int* e in ell)
- if(e.{core::int::isOdd})
- #t1.{core::Set::add}(2.{core::num::*}(e));
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(ell).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ core::int* e = :sync-for-iterator.{core::Iterator::current};
+ if(e.{core::int::isOdd})
+ #t1.{core::Set::add}(2.{core::num::*}(e));
+ }
+ }
} =>#t1, super core::Object::•()
;
}
diff --git a/pkg/front_end/testcases/general/null_aware_for_in.dart.strong.transformed.expect b/pkg/front_end/testcases/general/null_aware_for_in.dart.strong.transformed.expect
index 18203ab..f6157cd7 100644
--- a/pkg/front_end/testcases/general/null_aware_for_in.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/null_aware_for_in.dart.strong.transformed.expect
@@ -1,6 +1,7 @@
library;
import self as self;
import "dart:core" as core;
+import "dart:_internal" as _in;
class Class extends core::Object {
synthetic constructor •() → self::Class*
@@ -10,8 +11,14 @@
static method main() → dynamic {
dynamic o;
if(false) {
- for (final dynamic #t1 in (let final dynamic #t2 = o in #t2.{core::Object::==}(null) ?{dynamic} null : #t2.iterable) as{TypeError} core::Iterable<dynamic>*) {
- self::Class* c = #t1 as{TypeError} self::Class*;
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((let final dynamic #t1 = o in #t1.{core::Object::==}(null) ?{dynamic} null : #t1.iterable) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
+ {
+ self::Class* c = #t2 as{TypeError} self::Class*;
+ }
+ }
}
}
}
diff --git a/pkg/front_end/testcases/general/spread_collection.dart.strong.transformed.expect b/pkg/front_end/testcases/general/spread_collection.dart.strong.transformed.expect
index eb0c3cc..4d80567b 100644
--- a/pkg/front_end/testcases/general/spread_collection.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/spread_collection.dart.strong.transformed.expect
@@ -9,38 +9,66 @@
//
import self as self;
import "dart:core" as core;
+import "dart:_internal" as _in;
import "dart:collection" as col;
static method main() → dynamic {
final core::List<core::int*>* aList = block {
final core::List<core::int*>* #t1 = <core::int*>[];
#t1.{core::List::add}(1);
- for (final core::int* #t2 in <core::int*>[2])
- #t1.{core::List::add}(#t2);
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[2]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t2 = :sync-for-iterator.{core::Iterator::current};
+ #t1.{core::List::add}(#t2);
+ }
+ }
final dynamic #t3 = <core::int*>[3];
- if(!#t3.{core::Object::==}(null))
- for (final core::int* #t4 in #t3)
+ if(!#t3.{core::Object::==}(null)) {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(#t3).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t4 = :sync-for-iterator.{core::Iterator::current};
#t1.{core::List::add}(#t4);
+ }
+ }
} =>#t1;
final core::Map<core::int*, core::int*>* aMap = block {
final core::Map<core::int*, core::int*>* #t5 = <core::int*, core::int*>{};
#t5.{core::Map::[]=}(1, 1);
- for (final core::MapEntry<core::int*, core::int*>* #t6 in <core::int*, core::int*>{2: 2}.{core::Map::entries})
- #t5.{core::Map::[]=}(#t6.{core::MapEntry::key}, #t6.{core::MapEntry::value});
+ {
+ core::Iterator<core::MapEntry<core::int*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::int*, core::int*>*>*>(<core::int*, core::int*>{2: 2}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::int*, core::int*>* #t6 = :sync-for-iterator.{core::Iterator::current};
+ #t5.{core::Map::[]=}(#t6.{core::MapEntry::key}, #t6.{core::MapEntry::value});
+ }
+ }
final core::Map<dynamic, dynamic>* #t7 = <core::int*, core::int*>{3: 3};
- if(!#t7.{core::Object::==}(null))
- for (final core::MapEntry<core::int*, core::int*>* #t8 in #t7.{core::Map::entries})
+ if(!#t7.{core::Object::==}(null)) {
+ core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>(#t7.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::int*, core::int*>* #t8 = :sync-for-iterator.{core::Iterator::current};
#t5.{core::Map::[]=}(#t8.{core::MapEntry::key}, #t8.{core::MapEntry::value});
+ }
+ }
} =>#t5;
final core::Set<core::int*>* aSet = block {
final core::Set<core::int*>* #t9 = col::LinkedHashSet::•<core::int*>();
#t9.{core::Set::add}(1);
- for (final core::int* #t10 in <core::int*>[2])
- #t9.{core::Set::add}(#t10);
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[2]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t10 = :sync-for-iterator.{core::Iterator::current};
+ #t9.{core::Set::add}(#t10);
+ }
+ }
final dynamic #t11 = <core::int*>[3];
- if(!#t11.{core::Object::==}(null))
- for (final core::int* #t12 in #t11)
+ if(!#t11.{core::Object::==}(null)) {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(#t11).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t12 = :sync-for-iterator.{core::Iterator::current};
#t9.{core::Set::add}(#t12);
+ }
+ }
} =>#t9;
final dynamic aSetOrMap = invalid-expression "pkg/front_end/testcases/general/spread_collection.dart:21:21: Error: Not enough type information to disambiguate between literal set and literal map.
Try providing type arguments for the literal explicitly to disambiguate it.
diff --git a/pkg/front_end/testcases/general/spread_collection_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/general/spread_collection_inference.dart.strong.transformed.expect
index 3a6b58b..24aaf98 100644
--- a/pkg/front_end/testcases/general/spread_collection_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/spread_collection_inference.dart.strong.transformed.expect
@@ -98,6 +98,7 @@
//
import self as self;
import "dart:core" as core;
+import "dart:_internal" as _in;
import "dart:collection" as col;
static method bar<K extends core::Object* = dynamic, V extends core::Object* = dynamic>() → core::Map<self::bar::K*, self::bar::V*>*
@@ -111,68 +112,129 @@
core::List<core::num*>* listNum = <core::num*>[42];
core::List<dynamic>* lhs10 = block {
final core::List<dynamic>* #t1 = <dynamic>[];
- for (final dynamic #t2 in <dynamic>[])
- #t1.{core::List::add}(#t2);
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
+ #t1.{core::List::add}(#t2);
+ }
+ }
} =>#t1;
core::Set<dynamic>* set10 = block {
final core::Set<dynamic>* #t3 = col::LinkedHashSet::•<dynamic>();
- for (final dynamic #t4 in <dynamic>[])
- #t3.{core::Set::add}(#t4);
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t4 = :sync-for-iterator.{core::Iterator::current};
+ #t3.{core::Set::add}(#t4);
+ }
+ }
} =>#t3;
core::Map<dynamic, dynamic>* map10 = block {
final core::Map<dynamic, dynamic>* #t5 = <dynamic, dynamic>{};
- for (final core::MapEntry<dynamic, dynamic>* #t6 in <dynamic, dynamic>{}.{core::Map::entries})
- #t5.{core::Map::[]=}(#t6.{core::MapEntry::key}, #t6.{core::MapEntry::value});
+ {
+ core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>(<dynamic, dynamic>{}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<dynamic, dynamic>* #t6 = :sync-for-iterator.{core::Iterator::current};
+ #t5.{core::Map::[]=}(#t6.{core::MapEntry::key}, #t6.{core::MapEntry::value});
+ }
+ }
} =>#t5;
core::Map<dynamic, dynamic>* map10ambiguous = block {
final core::Map<dynamic, dynamic>* #t7 = <dynamic, dynamic>{};
- for (final core::MapEntry<dynamic, dynamic>* #t8 in <dynamic, dynamic>{}.{core::Map::entries})
- #t7.{core::Map::[]=}(#t8.{core::MapEntry::key}, #t8.{core::MapEntry::value});
+ {
+ core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>(<dynamic, dynamic>{}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<dynamic, dynamic>* #t8 = :sync-for-iterator.{core::Iterator::current};
+ #t7.{core::Map::[]=}(#t8.{core::MapEntry::key}, #t8.{core::MapEntry::value});
+ }
+ }
} =>#t7;
core::List<core::int*>* lhs20 = block {
final core::List<core::int*>* #t9 = <core::int*>[];
- for (final core::int* #t10 in spread)
- #t9.{core::List::add}(#t10);
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(spread).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t10 = :sync-for-iterator.{core::Iterator::current};
+ #t9.{core::List::add}(#t10);
+ }
+ }
} =>#t9;
core::Set<core::int*>* set20 = block {
final core::Set<core::int*>* #t11 = col::LinkedHashSet::•<core::int*>();
- for (final core::int* #t12 in spread)
- #t11.{core::Set::add}(#t12);
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(spread).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t12 = :sync-for-iterator.{core::Iterator::current};
+ #t11.{core::Set::add}(#t12);
+ }
+ }
#t11.{core::Set::add}(42);
} =>#t11;
core::Set<core::int*>* set20ambiguous = block {
final core::Set<core::int*>* #t13 = col::LinkedHashSet::•<core::int*>();
- for (final dynamic #t14 in spread) {
- final core::int* #t15 = #t14 as{TypeError} core::int*;
- #t13.{core::Set::add}(#t15);
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(spread).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t14 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int* #t15 = #t14 as{TypeError} core::int*;
+ #t13.{core::Set::add}(#t15);
+ }
+ }
}
} =>#t13;
core::Map<core::String*, core::int*>* map20 = block {
final core::Map<core::String*, core::int*>* #t16 = <core::String*, core::int*>{};
- for (final core::MapEntry<core::String*, core::int*>* #t17 in mapSpread.{core::Map::entries})
- #t16.{core::Map::[]=}(#t17.{core::MapEntry::key}, #t17.{core::MapEntry::value});
+ {
+ core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapSpread.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::int*>* #t17 = :sync-for-iterator.{core::Iterator::current};
+ #t16.{core::Map::[]=}(#t17.{core::MapEntry::key}, #t17.{core::MapEntry::value});
+ }
+ }
#t16.{core::Map::[]=}("baz", 42);
} =>#t16;
core::Map<core::String*, core::int*>* map20ambiguous = block {
final core::Map<core::String*, core::int*>* #t18 = <core::String*, core::int*>{};
- for (final core::MapEntry<core::String*, core::int*>* #t19 in mapSpread.{core::Map::entries})
- #t18.{core::Map::[]=}(#t19.{core::MapEntry::key}, #t19.{core::MapEntry::value});
+ {
+ core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapSpread.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::int*>* #t19 = :sync-for-iterator.{core::Iterator::current};
+ #t18.{core::Map::[]=}(#t19.{core::MapEntry::key}, #t19.{core::MapEntry::value});
+ }
+ }
} =>#t18;
core::List<dynamic>* lhs21 = block {
final core::List<dynamic>* #t20 = <dynamic>[];
- for (final dynamic #t21 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>*)
- #t20.{core::List::add}(#t21);
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t21 = :sync-for-iterator.{core::Iterator::current};
+ #t20.{core::List::add}(#t21);
+ }
+ }
} =>#t20;
core::Set<dynamic>* set21 = block {
final core::Set<dynamic>* #t22 = col::LinkedHashSet::•<dynamic>();
- for (final dynamic #t23 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>*)
- #t22.{core::Set::add}(#t23);
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t23 = :sync-for-iterator.{core::Iterator::current};
+ #t22.{core::Set::add}(#t23);
+ }
+ }
#t22.{core::Set::add}(42);
} =>#t22;
core::Map<dynamic, dynamic>* map21 = block {
final core::Map<dynamic, dynamic>* #t24 = <dynamic, dynamic>{};
- for (final core::MapEntry<dynamic, dynamic>* #t25 in ((mapSpread as dynamic) as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries})
- #t24.{core::Map::[]=}(#t25.{core::MapEntry::key}, #t25.{core::MapEntry::value});
+ {
+ core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>(((mapSpread as dynamic) as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<dynamic, dynamic>* #t25 = :sync-for-iterator.{core::Iterator::current};
+ #t24.{core::Map::[]=}(#t25.{core::MapEntry::key}, #t25.{core::MapEntry::value});
+ }
+ }
#t24.{core::Map::[]=}("baz", 42);
} =>#t24;
dynamic map21ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:64:28: Error: Not enough type information to disambiguate between literal set and literal map.
@@ -181,49 +243,91 @@
^";
core::List<core::int*>* lhs22 = block {
final core::List<core::int*>* #t26 = <core::int*>[];
- for (final core::int* #t27 in <core::int*>[])
- #t26.{core::List::add}(#t27);
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t27 = :sync-for-iterator.{core::Iterator::current};
+ #t26.{core::List::add}(#t27);
+ }
+ }
} =>#t26;
core::Set<core::int*>* set22 = block {
final core::Set<core::int*>* #t28 = col::LinkedHashSet::•<core::int*>();
- for (final core::int* #t29 in <core::int*>[])
- #t28.{core::Set::add}(#t29);
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t29 = :sync-for-iterator.{core::Iterator::current};
+ #t28.{core::Set::add}(#t29);
+ }
+ }
#t28.{core::Set::add}(42);
} =>#t28;
core::Set<core::int*>* set22ambiguous = block {
final core::Set<core::int*>* #t30 = col::LinkedHashSet::•<core::int*>();
- for (final dynamic #t31 in <core::int*>[]) {
- final core::int* #t32 = #t31 as{TypeError} core::int*;
- #t30.{core::Set::add}(#t32);
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t31 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int* #t32 = #t31 as{TypeError} core::int*;
+ #t30.{core::Set::add}(#t32);
+ }
+ }
}
} =>#t30;
core::Map<core::String*, core::int*>* map22 = block {
final core::Map<core::String*, core::int*>* #t33 = <core::String*, core::int*>{};
- for (final core::MapEntry<core::String*, core::int*>* #t34 in <core::String*, core::int*>{}.{core::Map::entries})
- #t33.{core::Map::[]=}(#t34.{core::MapEntry::key}, #t34.{core::MapEntry::value});
+ {
+ core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::int*>* #t34 = :sync-for-iterator.{core::Iterator::current};
+ #t33.{core::Map::[]=}(#t34.{core::MapEntry::key}, #t34.{core::MapEntry::value});
+ }
+ }
} =>#t33;
core::List<core::List<core::int*>*>* lhs23 = block {
final core::List<core::List<core::int*>*>* #t35 = <core::List<core::int*>*>[];
- for (final core::List<core::int*>* #t36 in <core::List<core::int*>*>[<core::int*>[]])
- #t35.{core::List::add}(#t36);
+ {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t36 = :sync-for-iterator.{core::Iterator::current};
+ #t35.{core::List::add}(#t36);
+ }
+ }
} =>#t35;
core::Set<core::List<core::int*>*>* set23 = block {
final core::Set<core::List<core::int*>*>* #t37 = col::LinkedHashSet::•<core::List<core::int*>*>();
- for (final core::List<core::int*>* #t38 in <core::List<core::int*>*>[<core::int*>[]])
- #t37.{core::Set::add}(#t38);
+ {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::List<core::int*>* #t38 = :sync-for-iterator.{core::Iterator::current};
+ #t37.{core::Set::add}(#t38);
+ }
+ }
#t37.{core::Set::add}(<core::int*>[42]);
} =>#t37;
core::Set<core::List<core::int*>*>* set23ambiguous = block {
final core::Set<core::List<core::int*>*>* #t39 = col::LinkedHashSet::•<core::List<core::int*>*>();
- for (final dynamic #t40 in <core::List<core::int*>*>[<core::int*>[]]) {
- final core::List<core::int*>* #t41 = #t40 as{TypeError} core::List<core::int*>*;
- #t39.{core::Set::add}(#t41);
+ {
+ core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t40 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::List<core::int*>* #t41 = #t40 as{TypeError} core::List<core::int*>*;
+ #t39.{core::Set::add}(#t41);
+ }
+ }
}
} =>#t39;
core::Map<core::String*, core::List<core::int*>*>* map23 = block {
final core::Map<core::String*, core::List<core::int*>*>* #t42 = <core::String*, core::List<core::int*>*>{};
- for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t43 in <core::String*, core::List<core::int*>*>{"baz": <core::int*>[]}.{core::Map::entries})
- #t42.{core::Map::[]=}(#t43.{core::MapEntry::key}, #t43.{core::MapEntry::value});
+ {
+ core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"baz": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::List<core::int*>*>* #t43 = :sync-for-iterator.{core::Iterator::current};
+ #t42.{core::Map::[]=}(#t43.{core::MapEntry::key}, #t43.{core::MapEntry::value});
+ }
+ }
} =>#t42;
dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:96:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
dynamic map24ambiguous = {...spread, ...mapSpread};
@@ -233,16 +337,26 @@
int lhs30 = /*@ typeArgs=int* */ [...spread];
^" in ( block {
final core::List<core::int*>* #t45 = <core::int*>[];
- for (final core::int* #t46 in spread)
- #t45.{core::List::add}(#t46);
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(spread).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t46 = :sync-for-iterator.{core::Iterator::current};
+ #t45.{core::List::add}(#t46);
+ }
+ }
} =>#t45) as{TypeError} core::int*;
core::int* set30 = let final<BottomType> #t47 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:100:36: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
- 'Set' is from 'dart:core'.
int set30 = /*@ typeArgs=int* */ {...spread, 42};
^" in ( block {
final core::Set<core::int*>* #t48 = col::LinkedHashSet::•<core::int*>();
- for (final core::int* #t49 in spread)
- #t48.{core::Set::add}(#t49);
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(spread).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t49 = :sync-for-iterator.{core::Iterator::current};
+ #t48.{core::Set::add}(#t49);
+ }
+ }
#t48.{core::Set::add}(42);
} =>#t48) as{TypeError} core::int*;
core::int* set30ambiguous = let final<BottomType> #t50 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:103:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
@@ -250,9 +364,15 @@
{...spread};
^" in ( block {
final core::Set<core::int*>* #t51 = col::LinkedHashSet::•<core::int*>();
- for (final dynamic #t52 in spread) {
- final core::int* #t53 = #t52 as{TypeError} core::int*;
- #t51.{core::Set::add}(#t53);
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(spread).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t52 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int* #t53 = #t52 as{TypeError} core::int*;
+ #t51.{core::Set::add}(#t53);
+ }
+ }
}
} =>#t51) as{TypeError} core::int*;
core::int* map30 = let final<BottomType> #t54 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:106:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
@@ -260,8 +380,13 @@
{...mapSpread, \"baz\": 42};
^" in ( block {
final core::Map<core::String*, core::int*>* #t55 = <core::String*, core::int*>{};
- for (final core::MapEntry<core::String*, core::int*>* #t56 in mapSpread.{core::Map::entries})
- #t55.{core::Map::[]=}(#t56.{core::MapEntry::key}, #t56.{core::MapEntry::value});
+ {
+ core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapSpread.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::int*>* #t56 = :sync-for-iterator.{core::Iterator::current};
+ #t55.{core::Map::[]=}(#t56.{core::MapEntry::key}, #t56.{core::MapEntry::value});
+ }
+ }
#t55.{core::Map::[]=}("baz", 42);
} =>#t55) as{TypeError} core::int*;
core::int* map30ambiguous = let final<BottomType> #t57 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:109:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
@@ -269,8 +394,13 @@
{...mapSpread};
^" in ( block {
final core::Map<core::String*, core::int*>* #t58 = <core::String*, core::int*>{};
- for (final core::MapEntry<core::String*, core::int*>* #t59 in mapSpread.{core::Map::entries})
- #t58.{core::Map::[]=}(#t59.{core::MapEntry::key}, #t59.{core::MapEntry::value});
+ {
+ core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapSpread.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::int*>* #t59 = :sync-for-iterator.{core::Iterator::current};
+ #t58.{core::Map::[]=}(#t59.{core::MapEntry::key}, #t59.{core::MapEntry::value});
+ }
+ }
} =>#t58) as{TypeError} core::int*;
core::List<dynamic>* lhs40 = <dynamic>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:111:38: Error: Unexpected type 'int' of a spread. Expected 'dynamic' or an Iterable.
List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
@@ -313,9 +443,15 @@
#t68.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:137:8: Error: Expected ',' before this.
...null,
^");
- for (final dynamic #t69 in <dynamic>[]) {
- final dynamic #t70 = #t69 as{TypeError} dynamic;
- #t68.{core::Set::add}(#t70);
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t69 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final dynamic #t70 = #t69 as{TypeError} dynamic;
+ #t68.{core::Set::add}(#t70);
+ }
+ }
}
} =>#t68;
core::Map<core::String*, core::int*>* map70 = <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:142:45: Error: Can't spread a value with static type Null.
@@ -324,70 +460,122 @@
core::List<core::int*>* lhs80 = block {
final core::List<core::int*>* #t71 = <core::int*>[];
final dynamic #t72 = null;
- if(!#t72.{core::Object::==}(null))
- for (final core::int* #t73 in #t72)
+ if(!#t72.{core::Object::==}(null)) {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(#t72).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t73 = :sync-for-iterator.{core::Iterator::current};
#t71.{core::List::add}(#t73);
+ }
+ }
} =>#t71;
core::Set<core::int*>* set80 = block {
final core::Set<core::int*>* #t74 = col::LinkedHashSet::•<core::int*>();
final dynamic #t75 = null;
- if(!#t75.{core::Object::==}(null))
- for (final core::int* #t76 in #t75)
+ if(!#t75.{core::Object::==}(null)) {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(#t75).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::int* #t76 = :sync-for-iterator.{core::Iterator::current};
#t74.{core::Set::add}(#t76);
+ }
+ }
} =>#t74;
core::Set<dynamic>* set81ambiguous = block {
final core::Set<dynamic>* #t77 = col::LinkedHashSet::•<dynamic>();
final dynamic #t78 = null;
- if(!#t78.{core::Object::==}(null))
- for (final dynamic #t79 in #t78) {
- final dynamic #t80 = #t79 as{TypeError} dynamic;
- #t77.{core::Set::add}(#t80);
+ if(!#t78.{core::Object::==}(null)) {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(#t78).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t79 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final dynamic #t80 = #t79 as{TypeError} dynamic;
+ #t77.{core::Set::add}(#t80);
+ }
}
- for (final dynamic #t81 in <dynamic>[]) {
- final dynamic #t82 = #t81 as{TypeError} dynamic;
- #t77.{core::Set::add}(#t82);
+ }
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t81 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final dynamic #t82 = #t81 as{TypeError} dynamic;
+ #t77.{core::Set::add}(#t82);
+ }
+ }
}
} =>#t77;
core::Map<core::String*, core::int*>* map80 = block {
final core::Map<core::String*, core::int*>* #t83 = <core::String*, core::int*>{};
final core::Map<dynamic, dynamic>* #t84 = null;
- if(!#t84.{core::Object::==}(null))
- for (final core::MapEntry<core::String*, core::int*>* #t85 in #t84.{core::Map::entries})
+ if(!#t84.{core::Object::==}(null)) {
+ core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>(#t84.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::int*>* #t85 = :sync-for-iterator.{core::Iterator::current};
#t83.{core::Map::[]=}(#t85.{core::MapEntry::key}, #t85.{core::MapEntry::value});
+ }
+ }
} =>#t83;
core::Map<core::String*, core::int*>* map90 = block {
final core::Map<core::String*, core::int*>* #t86 = <core::String*, core::int*>{};
- for (final core::MapEntry<core::String*, core::int*>* #t87 in self::bar<core::String*, core::int*>().{core::Map::entries})
- #t86.{core::Map::[]=}(#t87.{core::MapEntry::key}, #t87.{core::MapEntry::value});
+ {
+ core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(self::bar<core::String*, core::int*>().{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::String*, core::int*>* #t87 = :sync-for-iterator.{core::Iterator::current};
+ #t86.{core::Map::[]=}(#t87.{core::MapEntry::key}, #t87.{core::MapEntry::value});
+ }
+ }
} =>#t86;
core::List<core::int*>* list100 = block {
final core::List<core::int*>* #t88 = <core::int*>[];
- for (final dynamic #t89 in listNum) {
- final core::int* #t90 = #t89 as{TypeError} core::int*;
- #t88.{core::List::add}(#t90);
+ {
+ core::Iterator<core::num*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::num*>*>(listNum).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t89 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int* #t90 = #t89 as{TypeError} core::int*;
+ #t88.{core::List::add}(#t90);
+ }
+ }
}
} =>#t88;
core::Map<core::num*, core::int*>* map100 = block {
final core::Map<core::num*, core::int*>* #t91 = <core::num*, core::int*>{};
- for (final core::MapEntry<dynamic, dynamic>* #t92 in mapIntNum.{core::Map::entries}) {
- final core::num* #t93 = #t92.{core::MapEntry::key} as{TypeError} core::num*;
- final core::int* #t94 = #t92.{core::MapEntry::value} as{TypeError} core::int*;
- #t91.{core::Map::[]=}(#t93, #t94);
+ {
+ core::Iterator<core::MapEntry<core::int*, core::num*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::int*, core::num*>*>*>(mapIntNum.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<dynamic, dynamic>* #t92 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::num* #t93 = #t92.{core::MapEntry::key} as{TypeError} core::num*;
+ final core::int* #t94 = #t92.{core::MapEntry::value} as{TypeError} core::int*;
+ #t91.{core::Map::[]=}(#t93, #t94);
+ }
+ }
}
} =>#t91;
core::List<core::int*>* list110 = block {
final core::List<core::int*>* #t95 = <core::int*>[];
- for (final dynamic #t96 in dynVar as{TypeError} core::Iterable<dynamic>*) {
- final core::int* #t97 = #t96 as{TypeError} core::int*;
- #t95.{core::List::add}(#t97);
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t96 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::int* #t97 = #t96 as{TypeError} core::int*;
+ #t95.{core::List::add}(#t97);
+ }
+ }
}
} =>#t95;
core::Map<core::num*, core::int*>* map110 = block {
final core::Map<core::num*, core::int*>* #t98 = <core::num*, core::int*>{};
- for (final core::MapEntry<dynamic, dynamic>* #t99 in (dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
- final core::num* #t100 = #t99.{core::MapEntry::key} as{TypeError} core::num*;
- final core::int* #t101 = #t99.{core::MapEntry::value} as{TypeError} core::int*;
- #t98.{core::Map::[]=}(#t100, #t101);
+ {
+ core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<dynamic, dynamic>* #t99 = :sync-for-iterator.{core::Iterator::current};
+ {
+ final core::num* #t100 = #t99.{core::MapEntry::key} as{TypeError} core::num*;
+ final core::int* #t101 = #t99.{core::MapEntry::value} as{TypeError} core::int*;
+ #t98.{core::Map::[]=}(#t100, #t101);
+ }
+ }
}
} =>#t98;
}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.strong.transformed.expect
index 2a1ae24..7d1a7f3 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.strong.transformed.expect
@@ -1,6 +1,7 @@
library test;
import self as self;
import "dart:core" as core;
+import "dart:_internal" as _in;
class Foo extends core::Object {
const constructor •(core::List<core::String*>* l) → self::Foo*
@@ -10,7 +11,12 @@
static method test() → void {
for (@#C1 core::int* i = 0; i.{core::num::<}(1); i = i.{core::num::+}(1)) {
}
- for (@#C1 core::int* i in <core::int*>[0]) {
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[0]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ @#C1 core::int* i = :sync-for-iterator.{core::Iterator::current};
+ {}
+ }
}
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.transformed.expect
index 95bdb47..f95b190 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.transformed.expect
@@ -30,17 +30,44 @@
{
dynamic d;
core::Object* o;
- for (dynamic x in self::F<core::Iterable<dynamic>*>()) {
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(self::F<core::Iterable<dynamic>*>()).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic x = :sync-for-iterator.{core::Iterator::current};
+ {}
+ }
}
- for (dynamic x in self::F<core::Iterable<dynamic>*>()) {
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(self::F<core::Iterable<dynamic>*>()).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic x = :sync-for-iterator.{core::Iterator::current};
+ {}
+ }
}
- for (core::Object* x in self::F<core::Iterable<core::Object*>*>()) {
+ {
+ core::Iterator<core::Object*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::Object*>*>(self::F<core::Iterable<core::Object*>*>()).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ core::Object* x = :sync-for-iterator.{core::Iterator::current};
+ {}
+ }
}
- for (final dynamic #t1 in self::F<core::Iterable<dynamic>*>()) {
- d = #t1;
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(self::F<core::Iterable<dynamic>*>()).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t1 = :sync-for-iterator.{core::Iterator::current};
+ {
+ d = #t1;
+ }
+ }
}
- for (final core::Object* #t2 in self::F<core::Iterable<core::Object*>*>()) {
- o = #t2;
+ {
+ core::Iterator<core::Object*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::Object*>*>(self::F<core::Iterable<core::Object*>*>()).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::Object* #t2 = :sync-for-iterator.{core::Iterator::current};
+ {
+ o = #t2;
+ }
+ }
}
{
dynamic :stream = self::F<asy::Stream<dynamic>*>();
@@ -185,11 +212,26 @@
try {
#L7:
{
- for (core::int* x in <core::int*>[1, 2, 3]) {
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[1, 2, 3]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ core::int* x = :sync-for-iterator.{core::Iterator::current};
+ {}
+ }
}
- for (core::num* x in <core::num*>[1, 2, 3]) {
+ {
+ core::Iterator<core::num*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::num*>*>(<core::num*>[1, 2, 3]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ core::num* x = :sync-for-iterator.{core::Iterator::current};
+ {}
+ }
}
- for (core::int* x in <core::int*>[1, 2, 3]) {
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[1, 2, 3]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ core::int* x = :sync-for-iterator.{core::Iterator::current};
+ {}
+ }
}
{
dynamic :stream = self::MyStream::•<core::int*>();
diff --git a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.strong.transformed.expect
index 1e3cd61..6d20b98 100644
--- a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.strong.transformed.expect
@@ -21,7 +21,12 @@
#L1:
{
core::Object* o;
- for (dynamic x in o as{TypeError} core::Iterable<dynamic>*) {
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(o as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic x = :sync-for-iterator.{core::Iterator::current};
+ {}
+ }
}
{
dynamic :stream = o as{TypeError} asy::Stream<dynamic>*;
@@ -46,8 +51,14 @@
}
}
core::int* y;
- for (final dynamic #t4 in o as{TypeError} core::Iterable<dynamic>*) {
- y = #t4 as{TypeError} core::int*;
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(o as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t4 = :sync-for-iterator.{core::Iterator::current};
+ {
+ y = #t4 as{TypeError} core::int*;
+ }
+ }
}
{
dynamic :stream = o as{TypeError} asy::Stream<dynamic>*;
diff --git a/pkg/front_end/testcases/inference/for_in_loop_promotion.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/for_in_loop_promotion.dart.strong.transformed.expect
index f98e42e..a5c5985 100644
--- a/pkg/front_end/testcases/inference/for_in_loop_promotion.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/for_in_loop_promotion.dart.strong.transformed.expect
@@ -1,11 +1,18 @@
library test;
import self as self;
import "dart:core" as core;
+import "dart:_internal" as _in;
static method test(core::List<core::num*>* nums) → void {
- for (core::num* x in nums) {
- if(x is core::int*) {
- core::int* y = x{core::int*};
+ {
+ core::Iterator<core::num*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::num*>*>(nums).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ core::num* x = :sync-for-iterator.{core::Iterator::current};
+ {
+ if(x is core::int*) {
+ core::int* y = x{core::int*};
+ }
+ }
}
}
}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.transformed.expect
index 12a0f49..67247a8 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.transformed.expect
@@ -30,6 +30,7 @@
//
import self as self;
import "dart:core" as core;
+import "dart:_internal" as _in;
class Foo extends core::Object {
field core::int* bar = 42;
@@ -42,10 +43,16 @@
: super core::Object::•()
;
method foo(generic-covariant-impl self::Bar::T* t) → void {
- for (core::String* i in t) {
- core::int* x = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(t).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ core::String* i = :sync-for-iterator.{core::Iterator::current};
+ {
+ core::int* x = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
int x = /*error:INVALID_ASSIGNMENT*/ i;
^" in i as{TypeError} core::int*;
+ }
+ }
}
}
}
@@ -54,59 +61,113 @@
: super core::Object::•()
;
method foo(generic-covariant-impl self::Baz::S* t) → void {
- for (self::Baz::T* i in t) {
- core::int* x = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(t).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ self::Baz::T* i = :sync-for-iterator.{core::Iterator::current};
+ {
+ core::int* x = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
int x = /*error:INVALID_ASSIGNMENT*/ i;
^" in i as{TypeError} core::int*;
- self::Baz::T* y = i;
+ self::Baz::T* y = i;
+ }
+ }
}
}
}
static method test() → dynamic {
core::List<self::Foo*>* list = <self::Foo*>[];
- for (self::Foo* x in list) {
- core::String* y = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+ {
+ core::Iterator<self::Foo*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<self::Foo*>*>(list).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ self::Foo* x = :sync-for-iterator.{core::Iterator::current};
+ {
+ core::String* y = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
- 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
String y = /*error:INVALID_ASSIGNMENT*/ x;
^" in x as{TypeError} core::String*;
+ }
+ }
}
- for (dynamic x in list) {
- core::String* y = x as{TypeError} core::String*;
+ {
+ core::Iterator<self::Foo*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<self::Foo*>*>(list).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic x = :sync-for-iterator.{core::Iterator::current};
+ {
+ core::String* y = x as{TypeError} core::String*;
+ }
+ }
}
- for (final self::Foo* #t4 in list) {
- core::String* x = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:39:15: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+ {
+ core::Iterator<self::Foo*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<self::Foo*>*>(list).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final self::Foo* #t4 = :sync-for-iterator.{core::Iterator::current};
+ {
+ core::String* x = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:39:15: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
- 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
Try changing the type of the variable.
for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ list) {
^" in #t4 as{TypeError} core::String*;
- core::String* y = x;
+ core::String* y = x;
+ }
+ }
}
dynamic z;
- for (final self::Foo* #t6 in list) {
- z = #t6;
- core::String* y = z as{TypeError} core::String*;
+ {
+ core::Iterator<self::Foo*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<self::Foo*>*>(list).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final self::Foo* #t6 = :sync-for-iterator.{core::Iterator::current};
+ {
+ z = #t6;
+ core::String* y = z as{TypeError} core::String*;
+ }
+ }
}
core::Iterable<dynamic>* iter = list;
- for (final dynamic #t7 in iter) {
- self::Foo* x = #t7 as{TypeError} self::Foo*;
- self::Foo* y = x;
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(iter).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t7 = :sync-for-iterator.{core::Iterator::current};
+ {
+ self::Foo* x = #t7 as{TypeError} self::Foo*;
+ self::Foo* y = x;
+ }
+ }
}
dynamic iter2 = list;
- for (final dynamic #t8 in iter2 as{TypeError} core::Iterable<dynamic>*) {
- self::Foo* x = #t8 as{TypeError} self::Foo*;
- self::Foo* y = x;
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(iter2 as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t8 = :sync-for-iterator.{core::Iterator::current};
+ {
+ self::Foo* x = #t8 as{TypeError} self::Foo*;
+ self::Foo* y = x;
+ }
+ }
}
core::Map<core::String*, self::Foo*>* map = <core::String*, self::Foo*>{};
- for (dynamic x in let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:70: Error: The type 'Map<String, Foo>' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:70: Error: The type 'Map<String, Foo>' used in the 'for' loop must implement 'Iterable<dynamic>'.
- 'Map' is from 'dart:core'.
- 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
- 'Iterable' is from 'dart:core'.
for (var /*@ type=dynamic */ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
- ^" in map as{TypeError} core::Iterable<dynamic>*) {
- core::String* y = x as{TypeError} core::String*;
+ ^" in map as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic x = :sync-for-iterator.{core::Iterator::current};
+ {
+ core::String* y = x as{TypeError} core::String*;
+ }
+ }
}
- for (core::String* x in map.{core::Map::keys}) {
- core::String* y = x;
+ {
+ core::Iterator<core::String*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::String*>*>(map.{core::Map::keys}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ core::String* x = :sync-for-iterator.{core::Iterator::current};
+ {
+ core::String* y = x;
+ }
+ }
}
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.strong.transformed.expect
index b48f3df..6bbfddf 100644
--- a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.strong.transformed.expect
@@ -1,6 +1,7 @@
library test;
import self as self;
import "dart:core" as core;
+import "dart:_internal" as _in;
class A extends core::Object {
synthetic constructor •() → self::A*
@@ -15,20 +16,50 @@
set aSetter(self::A* value) → void {}
method test() → void {
self::A* aLocal;
- for (final self::A* #t1 in self::f<core::Iterable<self::A*>*>()) {
- aLocal = #t1;
+ {
+ core::Iterator<self::A*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<self::A*>*>(self::f<core::Iterable<self::A*>*>()).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final self::A* #t1 = :sync-for-iterator.{core::Iterator::current};
+ {
+ aLocal = #t1;
+ }
+ }
}
- for (final self::A* #t2 in self::f<core::Iterable<self::A*>*>()) {
- this.{self::C::aField} = #t2;
+ {
+ core::Iterator<self::A*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<self::A*>*>(self::f<core::Iterable<self::A*>*>()).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final self::A* #t2 = :sync-for-iterator.{core::Iterator::current};
+ {
+ this.{self::C::aField} = #t2;
+ }
+ }
}
- for (final self::A* #t3 in self::f<core::Iterable<self::A*>*>()) {
- this.{self::C::aSetter} = #t3;
+ {
+ core::Iterator<self::A*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<self::A*>*>(self::f<core::Iterable<self::A*>*>()).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final self::A* #t3 = :sync-for-iterator.{core::Iterator::current};
+ {
+ this.{self::C::aSetter} = #t3;
+ }
+ }
}
- for (final self::A* #t4 in self::f<core::Iterable<self::A*>*>()) {
- self::aTopLevel = #t4;
+ {
+ core::Iterator<self::A*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<self::A*>*>(self::f<core::Iterable<self::A*>*>()).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final self::A* #t4 = :sync-for-iterator.{core::Iterator::current};
+ {
+ self::aTopLevel = #t4;
+ }
+ }
}
- for (final self::A* #t5 in self::f<core::Iterable<self::A*>*>()) {
- self::aTopLevelSetter = #t5;
+ {
+ core::Iterator<self::A*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<self::A*>*>(self::f<core::Iterable<self::A*>*>()).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final self::A* #t5 = :sync-for-iterator.{core::Iterator::current};
+ {
+ self::aTopLevelSetter = #t5;
+ }
+ }
}
}
}
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.transformed.expect
index ee4302e..367cb2e 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.transformed.expect
@@ -44,11 +44,17 @@
#L1:
{
core::String* s;
- for (final dynamic #t1 in let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
- 'Iterable' is from 'dart:core'.
for (int x in s) {}
- ^" in s as{TypeError} core::Iterable<dynamic>*) {
- core::int* x = #t1 as{TypeError} core::int*;
+ ^" in s as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
+ {
+ core::int* x = #t2 as{TypeError} core::int*;
+ }
+ }
}
{
dynamic :stream = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:23: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
@@ -78,11 +84,17 @@
}
}
core::int* y;
- for (final dynamic #t8 in let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:13: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:13: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
- 'Iterable' is from 'dart:core'.
for (y in s) {}
- ^" in s as{TypeError} core::Iterable<dynamic>*) {
- y = #t8 as{TypeError} core::int*;
+ ^" in s as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t9 = :sync-for-iterator.{core::Iterator::current};
+ {
+ y = #t9 as{TypeError} core::int*;
+ }
+ }
}
{
dynamic :stream = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:19: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.transformed.expect
index 649f649..480adea 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.transformed.expect
@@ -54,8 +54,14 @@
self::A* a;
self::B* b;
core::int* i;
- for (final self::A* #t1 in iterable) {
- a = #t1;
+ {
+ core::Iterator<self::A*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<self::A*>*>(iterable).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final self::A* #t1 = :sync-for-iterator.{core::Iterator::current};
+ {
+ a = #t1;
+ }
+ }
}
{
dynamic :stream = stream;
@@ -81,8 +87,14 @@
:result;
}
}
- for (final self::A* #t6 in iterable) {
- b = #t6 as{TypeError} self::B*;
+ {
+ core::Iterator<self::A*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<self::A*>*>(iterable).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final self::A* #t6 = :sync-for-iterator.{core::Iterator::current};
+ {
+ b = #t6 as{TypeError} self::B*;
+ }
+ }
}
{
dynamic :stream = stream;
@@ -108,12 +120,18 @@
:result;
}
}
- for (final self::A* #t11 in iterable) {
- i = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:10: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
+ {
+ core::Iterator<self::A*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<self::A*>*>(iterable).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final self::A* #t11 = :sync-for-iterator.{core::Iterator::current};
+ {
+ i = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:10: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
- 'A' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
Try changing the type of the variable.
for (i in iterable) {}
^" in #t11 as{TypeError} core::int*;
+ }
+ }
}
{
dynamic :stream = stream;
@@ -143,8 +161,14 @@
:result;
}
}
- for (final self::A* #t18 in self::f<core::Iterable<self::A*>*>()) {
- a = #t18;
+ {
+ core::Iterator<self::A*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<self::A*>*>(self::f<core::Iterable<self::A*>*>()).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final self::A* #t18 = :sync-for-iterator.{core::Iterator::current};
+ {
+ a = #t18;
+ }
+ }
}
{
dynamic :stream = self::f<asy::Stream<self::A*>*>();
diff --git a/pkg/front_end/testcases/rasta/issue_000004.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/issue_000004.dart.strong.transformed.expect
index ee3a0ca..024a770 100644
--- a/pkg/front_end/testcases/rasta/issue_000004.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000004.dart.strong.transformed.expect
@@ -1,6 +1,7 @@
library;
import self as self;
import "dart:core" as core;
+import "dart:_internal" as _in;
import "package:expect/expect.dart" as exp;
import "package:expect/expect.dart";
@@ -8,25 +9,43 @@
static field dynamic global;
static method fact4() → dynamic {
core::int* f = 1;
- for (core::int* n in <core::int*>[1, 2, 3, 4]) {
- f = f.{core::num::*}(n);
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[1, 2, 3, 4]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ core::int* n = :sync-for-iterator.{core::Iterator::current};
+ {
+ f = f.{core::num::*}(n);
+ }
+ }
}
return f;
}
static method fact5() → dynamic {
core::int* f = 1;
dynamic n;
- for (final dynamic #t1 in <dynamic>[1, 2, 3, 4, 5]) {
- n = #t1;
- f = f.{core::num::*}(n as{TypeError} core::num*) as{TypeError} core::int*;
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[1, 2, 3, 4, 5]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t1 = :sync-for-iterator.{core::Iterator::current};
+ {
+ n = #t1;
+ f = f.{core::num::*}(n as{TypeError} core::num*) as{TypeError} core::int*;
+ }
+ }
}
return f;
}
static method fact6() → dynamic {
core::int* f = 1;
- for (final dynamic #t2 in <dynamic>[1, 2, 3, 4, 5, 6]) {
- self::global = #t2;
- f = f.{core::num::*}(self::global as{TypeError} core::num*) as{TypeError} core::int*;
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[1, 2, 3, 4, 5, 6]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
+ {
+ self::global = #t2;
+ f = f.{core::num::*}(self::global as{TypeError} core::num*) as{TypeError} core::int*;
+ }
+ }
}
return f;
}
diff --git a/pkg/front_end/testcases/rasta/issue_000042.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/issue_000042.dart.strong.transformed.expect
index 2abfb5d..e81f7fc 100644
--- a/pkg/front_end/testcases/rasta/issue_000042.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000042.dart.strong.transformed.expect
@@ -22,18 +22,25 @@
//
import self as self;
import "dart:core" as core;
+import "dart:_internal" as _in;
static method main() → dynamic {
{
invalid-expression "pkg/front_end/testcases/rasta/issue_000042.dart:6:8: Error: A for-in loop can't have more than one loop variable.
for (var x, y in []) {}
^^^";
- for (final dynamic #t1 in <dynamic>[]) {
- invalid-expression "pkg/front_end/testcases/rasta/issue_000042.dart:6:8: Error: A for-in loop can't have more than one loop variable.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t1 = :sync-for-iterator.{core::Iterator::current};
+ {
+ invalid-expression "pkg/front_end/testcases/rasta/issue_000042.dart:6:8: Error: A for-in loop can't have more than one loop variable.
for (var x, y in []) {}
^^^";
- dynamic x;
- dynamic y;
+ dynamic x;
+ dynamic y;
+ }
+ }
}
}
#L1:
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.strong.transformed.expect
index c41f760..e5f407f 100644
--- a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.strong.transformed.expect
@@ -82,6 +82,7 @@
//
import self as self;
import "dart:core" as core;
+import "dart:_internal" as _in;
import "dart:collection" as collection;
@@ -91,98 +92,158 @@
: super core::Object::•()
;
method it1(dynamic x) → dynamic {
- for (final dynamic #t1 in x as{TypeError} core::Iterable<dynamic>*) {
- invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:11:10: Error: The setter 'key' isn't defined for the class 'Fisk'.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t1 = :sync-for-iterator.{core::Iterator::current};
+ {
+ invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:11:10: Error: The setter 'key' isn't defined for the class 'Fisk'.
- 'Fisk' is from 'pkg/front_end/testcases/rasta/unresolved_for_in.dart'.
Try correcting the name to the name of an existing setter, or defining a setter or field named 'key'.
for (key in x) {
^^^";
- core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:12:13: Error: The getter 'key' isn't defined for the class 'Fisk'.
+ core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:12:13: Error: The getter 'key' isn't defined for the class 'Fisk'.
- 'Fisk' is from 'pkg/front_end/testcases/rasta/unresolved_for_in.dart'.
Try correcting the name to the name of an existing getter, or defining a getter or field named 'key'.
print(key);
^^^");
+ }
+ }
}
- for (final dynamic #t2 in x as{TypeError} core::Iterable<dynamic>*) {
- invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:14:10: Error: Setter not found: 'Fisk'.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
+ {
+ invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:14:10: Error: Setter not found: 'Fisk'.
for (Fisk in x) {
^^^^";
- core::print(self::Fisk*);
+ core::print(self::Fisk*);
+ }
+ }
}
- for (final dynamic #t3 in x as{TypeError} core::Iterable<dynamic>*) {
- invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:17:10: Error: A prefix can't be used as an expression.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t3 = :sync-for-iterator.{core::Iterator::current};
+ {
+ invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:17:10: Error: A prefix can't be used as an expression.
for (collection in x) {
^^^^^^^^^^";
- core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:18:13: Error: A prefix can't be used as an expression.
+ core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:18:13: Error: A prefix can't be used as an expression.
print(collection);
^^^^^^^^^^");
+ }
+ }
}
- for (final dynamic #t4 in x as{TypeError} core::Iterable<dynamic>*) {
- invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:20:10: Error: Setter not found: 'VoidFunction'.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t4 = :sync-for-iterator.{core::Iterator::current};
+ {
+ invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:20:10: Error: Setter not found: 'VoidFunction'.
for (VoidFunction in x) {
^^^^^^^^^^^^";
- core::print(() →* void);
+ core::print(() →* void);
+ }
+ }
}
{
invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Can't assign to this, so it can't be used in a for-in loop.
for (1 in x) {
^";
- for (final dynamic #t5 in x as{TypeError} core::Iterable<dynamic>*) {
- invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Can't assign to this, so it can't be used in a for-in loop.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t5 = :sync-for-iterator.{core::Iterator::current};
+ {
+ invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Can't assign to this, so it can't be used in a for-in loop.
for (1 in x) {
^";
- 1;
- core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:24:13: Error: The getter 'key' isn't defined for the class 'Fisk'.
+ 1;
+ core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:24:13: Error: The getter 'key' isn't defined for the class 'Fisk'.
- 'Fisk' is from 'pkg/front_end/testcases/rasta/unresolved_for_in.dart'.
Try correcting the name to the name of an existing getter, or defining a getter or field named 'key'.
print(key);
^^^");
+ }
+ }
}
}
}
}
static method main(dynamic arguments) → dynamic {
new self::Fisk::•();
- for (final dynamic #t6 in arguments as{TypeError} core::Iterable<dynamic>*) {
- invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:31:8: Error: Setter not found: 'key'.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t6 = :sync-for-iterator.{core::Iterator::current};
+ {
+ invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:31:8: Error: Setter not found: 'key'.
for (key in arguments) {
^^^";
- core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:32:11: Error: Getter not found: 'key'.
+ core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:32:11: Error: Getter not found: 'key'.
print(key);
^^^");
+ }
+ }
}
- for (final dynamic #t7 in arguments as{TypeError} core::Iterable<dynamic>*) {
- invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:34:8: Error: Setter not found: 'Fisk'.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t7 = :sync-for-iterator.{core::Iterator::current};
+ {
+ invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:34:8: Error: Setter not found: 'Fisk'.
for (Fisk in arguments) {
^^^^";
- core::print(self::Fisk*);
+ core::print(self::Fisk*);
+ }
+ }
}
- for (final dynamic #t8 in arguments as{TypeError} core::Iterable<dynamic>*) {
- invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:37:8: Error: A prefix can't be used as an expression.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t8 = :sync-for-iterator.{core::Iterator::current};
+ {
+ invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:37:8: Error: A prefix can't be used as an expression.
for (collection in arguments) {
^^^^^^^^^^";
- core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:38:11: Error: A prefix can't be used as an expression.
+ core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:38:11: Error: A prefix can't be used as an expression.
print(collection);
^^^^^^^^^^");
+ }
+ }
}
- for (final dynamic #t9 in arguments as{TypeError} core::Iterable<dynamic>*) {
- invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:40:8: Error: Setter not found: 'VoidFunction'.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t9 = :sync-for-iterator.{core::Iterator::current};
+ {
+ invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:40:8: Error: Setter not found: 'VoidFunction'.
for (VoidFunction in arguments) {
^^^^^^^^^^^^";
- core::print(() →* void);
+ core::print(() →* void);
+ }
+ }
}
{
invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:43:8: Error: Can't assign to this, so it can't be used in a for-in loop.
for (1 in arguments) {
^";
- for (final dynamic #t10 in arguments as{TypeError} core::Iterable<dynamic>*) {
- invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:43:8: Error: Can't assign to this, so it can't be used in a for-in loop.
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t10 = :sync-for-iterator.{core::Iterator::current};
+ {
+ invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:43:8: Error: Can't assign to this, so it can't be used in a for-in loop.
for (1 in arguments) {
^";
- 1;
- core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:44:11: Error: Getter not found: 'key'.
+ 1;
+ core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:44:11: Error: Getter not found: 'key'.
print(key);
^^^");
+ }
+ }
}
}
}
diff --git a/pkg/front_end/testcases/regress/issue_37681.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_37681.dart.strong.transformed.expect
index 519cf0e..12c970e 100644
--- a/pkg/front_end/testcases/regress/issue_37681.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_37681.dart.strong.transformed.expect
@@ -137,8 +137,14 @@
}
return new core::_SyncIterable::•<dynamic>(:sync_op);
}
- for (dynamic x in (f_sync_star.call() as dynamic) as{TypeError} core::Iterable<dynamic>*) {
- core::print(x);
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((f_sync_star.call() as dynamic) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic x = :sync-for-iterator.{core::Iterator::current};
+ {
+ core::print(x);
+ }
+ }
}
}
asy::_completeOnAsyncReturn(:async_completer, :return_value);
diff --git a/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.strong.transformed.expect
index 7c5b3c9..5ae1f55 100644
--- a/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.strong.transformed.expect
@@ -1,6 +1,7 @@
library test;
import self as self;
import "dart:core" as core;
+import "dart:_internal" as _in;
class C extends core::Object {
static field dynamic staticField = null;
@@ -12,26 +13,68 @@
set instanceSetter(dynamic x) → void {}
method test() → void {
dynamic localVar;
- for (final dynamic #t1 in <dynamic>[]) {
- self::topLevel = #t1;
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t1 = :sync-for-iterator.{core::Iterator::current};
+ {
+ self::topLevel = #t1;
+ }
+ }
}
- for (final dynamic #t2 in <dynamic>[]) {
- self::topLevelSetter = #t2;
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
+ {
+ self::topLevelSetter = #t2;
+ }
+ }
}
- for (final dynamic #t3 in <dynamic>[]) {
- self::C::staticField = #t3;
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t3 = :sync-for-iterator.{core::Iterator::current};
+ {
+ self::C::staticField = #t3;
+ }
+ }
}
- for (final dynamic #t4 in <dynamic>[]) {
- self::C::staticSetter = #t4;
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t4 = :sync-for-iterator.{core::Iterator::current};
+ {
+ self::C::staticSetter = #t4;
+ }
+ }
}
- for (final dynamic #t5 in <dynamic>[]) {
- this.{self::C::instanceField} = #t5;
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t5 = :sync-for-iterator.{core::Iterator::current};
+ {
+ this.{self::C::instanceField} = #t5;
+ }
+ }
}
- for (final dynamic #t6 in <dynamic>[]) {
- this.{self::C::instanceSetter} = #t6;
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t6 = :sync-for-iterator.{core::Iterator::current};
+ {
+ this.{self::C::instanceSetter} = #t6;
+ }
+ }
}
- for (final dynamic #t7 in <dynamic>[]) {
- localVar = #t7;
+ {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final dynamic #t7 = :sync-for-iterator.{core::Iterator::current};
+ {
+ localVar = #t7;
+ }
+ }
}
}
}
diff --git a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.strong.transformed.expect b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.strong.transformed.expect
index 6852242..083afec 100644
--- a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.strong.transformed.expect
@@ -40,6 +40,7 @@
//
import self as self;
import "dart:core" as core;
+import "dart:_internal" as _in;
static field core::bool* b = false;
static field core::List<dynamic>* list = <dynamic>[];
@@ -48,40 +49,64 @@
final core::Map<dynamic, dynamic>* #t1 = <dynamic, dynamic>{};
if(self::b)
#t1.{core::Map::[]=}(0, 1);
- else
- for (final core::MapEntry<dynamic, dynamic>* #t2 in self::map0.{core::Map::entries})
+ else {
+ core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>(self::map0.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<dynamic, dynamic>* #t2 = :sync-for-iterator.{core::Iterator::current};
#t1.{core::Map::[]=}(#t2.{core::MapEntry::key}, #t2.{core::MapEntry::value});
+ }
+ }
} =>#t1;
static field core::Map<dynamic, dynamic>* map2 = block {
final core::Map<dynamic, dynamic>* #t3 = <dynamic, dynamic>{};
- if(self::b)
- for (final core::MapEntry<dynamic, dynamic>* #t4 in self::map0.{core::Map::entries})
+ if(self::b) {
+ core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>(self::map0.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<dynamic, dynamic>* #t4 = :sync-for-iterator.{core::Iterator::current};
#t3.{core::Map::[]=}(#t4.{core::MapEntry::key}, #t4.{core::MapEntry::value});
+ }
+ }
else
#t3.{core::Map::[]=}(0, 1);
} =>#t3;
static field core::Map<dynamic, dynamic>* map3 = block {
final core::Map<dynamic, dynamic>* #t5 = <dynamic, dynamic>{};
- if(self::b)
- for (final core::MapEntry<dynamic, dynamic>* #t6 in self::map0.{core::Map::entries})
+ if(self::b) {
+ core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>(self::map0.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<dynamic, dynamic>* #t6 = :sync-for-iterator.{core::Iterator::current};
#t5.{core::Map::[]=}(#t6.{core::MapEntry::key}, #t6.{core::MapEntry::value});
- else
- for (final core::MapEntry<dynamic, dynamic>* #t7 in self::map0.{core::Map::entries})
+ }
+ }
+ else {
+ core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>(self::map0.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<dynamic, dynamic>* #t7 = :sync-for-iterator.{core::Iterator::current};
#t5.{core::Map::[]=}(#t7.{core::MapEntry::key}, #t7.{core::MapEntry::value});
+ }
+ }
} =>#t5;
static field core::Map<dynamic, core::int*>* map4 = block {
final core::Map<dynamic, core::int*>* #t8 = <dynamic, core::int*>{};
if(self::b)
#t8.{core::Map::[]=}(0, 1);
- else
- for (dynamic a in self::list)
+ else {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(self::list).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic a = :sync-for-iterator.{core::Iterator::current};
#t8.{core::Map::[]=}(a, 1);
+ }
+ }
} =>#t8;
static field core::Map<dynamic, core::int*>* map5 = block {
final core::Map<dynamic, core::int*>* #t9 = <dynamic, core::int*>{};
- if(self::b)
- for (dynamic a in self::list)
+ if(self::b) {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(self::list).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic a = :sync-for-iterator.{core::Iterator::current};
#t9.{core::Map::[]=}(a, 1);
+ }
+ }
else
#t9.{core::Map::[]=}(0, 1);
} =>#t9;
@@ -89,17 +114,35 @@
final core::Map<dynamic, core::int*>* #t10 = <dynamic, core::int*>{};
if(self::b)
#t10.{core::Map::[]=}(0, 1);
- else
- for (dynamic a in self::list)
- for (final core::MapEntry<dynamic, core::int*>* #t11 in <dynamic, core::int*>{a: 1}.{core::Map::entries})
- #t10.{core::Map::[]=}(#t11.{core::MapEntry::key}, #t11.{core::MapEntry::value});
+ else {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(self::list).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic a = :sync-for-iterator.{core::Iterator::current};
+ {
+ core::Iterator<core::MapEntry<dynamic, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, core::int*>*>*>(<dynamic, core::int*>{a: 1}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<dynamic, core::int*>* #t11 = :sync-for-iterator.{core::Iterator::current};
+ #t10.{core::Map::[]=}(#t11.{core::MapEntry::key}, #t11.{core::MapEntry::value});
+ }
+ }
+ }
+ }
} =>#t10;
static field core::Map<dynamic, core::int*>* map7 = block {
final core::Map<dynamic, core::int*>* #t12 = <dynamic, core::int*>{};
- if(self::b)
- for (dynamic a in self::list)
- for (final core::MapEntry<dynamic, core::int*>* #t13 in <dynamic, core::int*>{a: 1}.{core::Map::entries})
- #t12.{core::Map::[]=}(#t13.{core::MapEntry::key}, #t13.{core::MapEntry::value});
+ if(self::b) {
+ core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(self::list).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ dynamic a = :sync-for-iterator.{core::Iterator::current};
+ {
+ core::Iterator<core::MapEntry<dynamic, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, core::int*>*>*>(<dynamic, core::int*>{a: 1}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<dynamic, core::int*>* #t13 = :sync-for-iterator.{core::Iterator::current};
+ #t12.{core::Map::[]=}(#t13.{core::MapEntry::key}, #t13.{core::MapEntry::value});
+ }
+ }
+ }
+ }
else
#t12.{core::Map::[]=}(0, 1);
} =>#t12;
@@ -124,16 +167,24 @@
if(self::b)
#t16.{core::Map::[]=}(0, 1);
else
- for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}); i = i.{core::num::+}(1))
- for (final core::MapEntry<dynamic, core::int*>* #t17 in <dynamic, core::int*>{self::list.{core::List::[]}(i): 1}.{core::Map::entries})
+ for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}); i = i.{core::num::+}(1)) {
+ core::Iterator<core::MapEntry<dynamic, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, core::int*>*>*>(<dynamic, core::int*>{self::list.{core::List::[]}(i): 1}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<dynamic, core::int*>* #t17 = :sync-for-iterator.{core::Iterator::current};
#t16.{core::Map::[]=}(#t17.{core::MapEntry::key}, #t17.{core::MapEntry::value});
+ }
+ }
} =>#t16;
static field core::Map<dynamic, core::int*>* map11 = block {
final core::Map<dynamic, core::int*>* #t18 = <dynamic, core::int*>{};
if(self::b)
- for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}); i = i.{core::num::+}(1))
- for (final core::MapEntry<dynamic, core::int*>* #t19 in <dynamic, core::int*>{self::list.{core::List::[]}(i): 1}.{core::Map::entries})
+ for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}); i = i.{core::num::+}(1)) {
+ core::Iterator<core::MapEntry<dynamic, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, core::int*>*>*>(<dynamic, core::int*>{self::list.{core::List::[]}(i): 1}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<dynamic, core::int*>* #t19 = :sync-for-iterator.{core::Iterator::current};
#t18.{core::Map::[]=}(#t19.{core::MapEntry::key}, #t19.{core::MapEntry::value});
+ }
+ }
else
#t18.{core::Map::[]=}(0, 1);
} =>#t18;
@@ -142,9 +193,13 @@
if(self::b)
#t20.{core::Map::[]=}(0, 1);
else
- if(self::b)
- for (final core::MapEntry<core::int*, core::int*>* #t21 in <core::int*, core::int*>{0: 1}.{core::Map::entries})
+ if(self::b) {
+ core::Iterator<core::MapEntry<core::int*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::int*, core::int*>*>*>(<core::int*, core::int*>{0: 1}.{core::Map::entries}).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ final core::MapEntry<core::int*, core::int*>* #t21 = :sync-for-iterator.{core::Iterator::current};
#t20.{core::Map::[]=}(#t21.{core::MapEntry::key}, #t21.{core::MapEntry::value});
+ }
+ }
} =>#t20;
static field core::Map<dynamic, core::Null?>* error4 = <dynamic, core::Null?>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:33:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
var error4 = {if (b) 0: 1 else for (var a in list) a};
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index 40f1ea1..e86f789 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -143,7 +143,7 @@
type ComponentFile {
UInt32 magic = 0x90ABCDEF;
- UInt32 formatVersion = 36;
+ UInt32 formatVersion = 37;
List<String> problemsAsJson; // Described in problems.md.
Library[] libraries;
UriSource sourceMap;
diff --git a/pkg/kernel/lib/binary/tag.dart b/pkg/kernel/lib/binary/tag.dart
index 00e609f..9ed4051 100644
--- a/pkg/kernel/lib/binary/tag.dart
+++ b/pkg/kernel/lib/binary/tag.dart
@@ -149,7 +149,7 @@
/// Internal version of kernel binary format.
/// Bump it when making incompatible changes in kernel binaries.
/// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
- static const int BinaryFormatVersion = 36;
+ static const int BinaryFormatVersion = 37;
}
abstract class ConstantTag {
diff --git a/pkg/kernel/lib/core_types.dart b/pkg/kernel/lib/core_types.dart
index 059e579..a7adeed 100644
--- a/pkg/kernel/lib/core_types.dart
+++ b/pkg/kernel/lib/core_types.dart
@@ -64,6 +64,9 @@
Constructor _fallThroughErrorUrlAndLineConstructor;
Procedure _objectEquals;
Procedure _mapUnmodifiable;
+ Procedure _iterableGetIterator;
+ Procedure _iteratorMoveNext;
+ Procedure _iteratorGetCurrent;
Class _internalSymbolClass;
@@ -322,10 +325,25 @@
return _iterableClass ??= index.getClass('dart:core', 'Iterable');
}
+ Procedure get iterableGetIterator {
+ return _iterableGetIterator ??=
+ index.getMember('dart:core', 'Iterable', 'get:iterator');
+ }
+
Class get iteratorClass {
return _iteratorClass ??= index.getClass('dart:core', 'Iterator');
}
+ Procedure get iteratorMoveNext {
+ return _iteratorMoveNext ??=
+ index.getMember('dart:core', 'Iterator', 'moveNext');
+ }
+
+ Procedure get iteratorGetCurrent {
+ return _iteratorGetCurrent ??=
+ index.getMember('dart:core', 'Iterator', 'get:current');
+ }
+
Class get listClass {
return _listClass ??= index.getClass('dart:core', 'List');
}
diff --git a/pkg/kernel/lib/transformations/continuation.dart b/pkg/kernel/lib/transformations/continuation.dart
index 367e1e7..20219ac 100644
--- a/pkg/kernel/lib/transformations/continuation.dart
+++ b/pkg/kernel/lib/transformations/continuation.dart
@@ -131,6 +131,65 @@
return null;
}
}
+
+ @override
+ TreeNode visitForInStatement(ForInStatement stmt) {
+ if (stmt.isAsync) {
+ return super.visitForInStatement(stmt);
+ }
+
+ // Transform
+ //
+ // for ({var/final} T <variable> in <iterable>) { ... }
+ //
+ // Into
+ //
+ // {
+ // final Iterator<T> :sync-for-iterator = <iterable>.iterator;
+ // for (; :sync-for-iterator.moveNext() ;) {
+ // {var/final} T variable = :iterator.current;
+ // ...
+ // }
+ // }
+ // }
+ final CoreTypes coreTypes = staticTypeContext.typeEnvironment.coreTypes;
+
+ // TODO(39565): We should be able to use forInElementType.
+ helper.unsafeCast;
+ final DartType iterableType =
+ stmt.iterable.getStaticType(staticTypeContext);
+ final DartType iterationType = iterableType is InterfaceType
+ ? staticTypeContext.typeEnvironment.forInElementType(stmt, iterableType)
+ : DynamicType();
+ final expectedIterableType = InterfaceType(
+ coreTypes.iterableClass, Nullability.legacy, [iterationType]);
+ final iteratorType = InterfaceType(
+ coreTypes.iteratorClass, Nullability.legacy, [iterationType]);
+
+ // TODO(39566): Iterable expression is not always well typed in the AST.
+ final typedIterable = StaticInvocation(helper.unsafeCast,
+ Arguments([stmt.iterable], types: [expectedIterableType]));
+ final iterator = VariableDeclaration(':sync-for-iterator',
+ initializer: PropertyGet(
+ typedIterable, Name('iterator'), coreTypes.iterableGetIterator)
+ ..fileOffset = stmt.iterable.fileOffset,
+ type: iteratorType)
+ ..fileOffset = stmt.iterable.fileOffset;
+
+ final condition = MethodInvocation(VariableGet(iterator), Name('moveNext'),
+ Arguments([]), coreTypes.iteratorMoveNext)
+ ..fileOffset = stmt.iterable.fileOffset;
+
+ final variable = stmt.variable
+ ..initializer = (PropertyGet(
+ VariableGet(iterator), Name('current'), coreTypes.iteratorGetCurrent)
+ ..fileOffset = stmt.bodyOffset);
+
+ final Block body = Block([variable, stmt.body]);
+
+ return Block([iterator, ForStatement([], condition, [], body)])
+ .accept<TreeNode>(this);
+ }
}
abstract class ContinuationRewriterBase extends RecursiveContinuationRewriter {
@@ -864,13 +923,11 @@
tryFinally
]);
block.accept<TreeNode>(this);
+ return null;
} else {
- stmt.iterable = expressionRewriter.rewrite(stmt.iterable, statements)
- ..parent = stmt;
- stmt.body = visitDelimited(stmt.body)..parent = stmt;
- statements.add(stmt);
+ super.visitForInStatement(stmt);
+ return null;
}
- return null;
}
TreeNode visitSwitchStatement(SwitchStatement stmt) {
diff --git a/pkg/kernel/lib/type_environment.dart b/pkg/kernel/lib/type_environment.dart
index c10bc7d..200f1d7 100644
--- a/pkg/kernel/lib/type_environment.dart
+++ b/pkg/kernel/lib/type_environment.dart
@@ -99,6 +99,9 @@
DartType forInElementType(ForInStatement node, DartType iterableType) {
// TODO(johnniwinther): Update this to use the type of
// `iterable.iterator.current` if inference is updated accordingly.
+ while (iterableType is TypeParameterType) {
+ iterableType = (iterableType as TypeParameterType).bound;
+ }
if (node.isAsync) {
InterfaceType type =
getTypeAsInstanceOf(iterableType, coreTypes.streamClass);
diff --git a/pkg/vm/lib/bytecode/gen_bytecode.dart b/pkg/vm/lib/bytecode/gen_bytecode.dart
index 0d6cf3d..2abb4bd 100644
--- a/pkg/vm/lib/bytecode/gen_bytecode.dart
+++ b/pkg/vm/lib/bytecode/gen_bytecode.dart
@@ -4014,71 +4014,8 @@
@override
visitForInStatement(ForInStatement node) {
- _generateNode(node.iterable);
-
- // Front-end inserts implicit cast (type check) which ensures that
- // result of iterable expression is Iterable<dynamic>.
- _recordSourcePosition(node.iterable.fileOffset);
- asm.emitInterfaceCall(
- cp.addInterfaceCall(InvocationKind.getter, iterableIterator,
- objectTable.getArgDescHandle(1)),
- 1);
-
- final iteratorTemp = locals.tempIndexInFrame(node);
- asm.emitPopLocal(iteratorTemp);
-
- final capturedIteratorVar = locals.capturedIteratorVar(node);
- if (capturedIteratorVar != null) {
- _genPushContextForVariable(capturedIteratorVar);
- asm.emitPush(iteratorTemp);
- _genStoreVar(capturedIteratorVar);
- }
-
- if (asm.isUnreachable) {
- // Bail out before binding a label which allows backward jumps,
- // as it is not handled by local unreachable code elimination.
- return;
- }
-
- final Label done = new Label();
- final Label join = new Label(allowsBackwardJumps: true);
-
- asm.bind(join);
- asm.emitCheckStack(++currentLoopDepth);
-
- if (capturedIteratorVar != null) {
- _genLoadVar(capturedIteratorVar);
- asm.emitStoreLocal(iteratorTemp);
- } else {
- asm.emitPush(iteratorTemp);
- }
-
- asm.emitInterfaceCall(
- cp.addInterfaceCall(InvocationKind.method, iteratorMoveNext,
- objectTable.getArgDescHandle(1)),
- 1);
- asm.emitJumpIfFalse(done);
-
- _enterScope(node);
- _recordSourcePosition(node.bodyOffset);
-
- _genPushContextIfCaptured(node.variable);
-
- asm.emitPush(iteratorTemp);
- asm.emitInterfaceCall(
- cp.addInterfaceCall(InvocationKind.getter, iteratorCurrent,
- objectTable.getArgDescHandle(1)),
- 1);
-
- _genStoreVar(node.variable);
-
- _generateNode(node.body);
-
- _leaveScope();
- asm.emitJump(join);
-
- asm.bind(done);
- --currentLoopDepth;
+ // Should be lowered by the async transformation.
+ throw "unreachable";
}
@override
diff --git a/pkg/vm/testcases/bytecode/async.dart.expect b/pkg/vm/testcases/bytecode/async.dart.expect
index a3c5fb5..831596f 100644
--- a/pkg/vm/testcases/bytecode/async.dart.expect
+++ b/pkg/vm/testcases/bytecode/async.dart.expect
@@ -715,7 +715,7 @@
LoadConstant r1, CP#5
LoadConstant r2, CP#5
LoadConstant r3, CP#5
- Frame 7
+ Frame 6
Push r0
LoadFieldTOS CP#6
PopLocal r4
@@ -755,20 +755,18 @@
CompareIntLt
JumpIfFalse L2
Push r4
+ Push r4
LoadContextParent
LoadContextParent
LoadContextVar 0, 2
InterfaceCall CP#8, 1
- PopLocal r8
- Push r4
- Push r8
StoreContextVar 2, 1
L5:
CheckStack 2
Push r4
LoadContextVar 2, 1
- StoreLocal r8
InterfaceCall CP#10, 1
+ AssertBoolean 0
JumpIfFalse L3
AllocateContext 3, 1
StoreLocal r5
@@ -777,7 +775,9 @@
StoreContextParent
PopLocal r4
Push r4
- Push r8
+ Push r4
+ LoadContextParent
+ LoadContextVar 2, 1
InterfaceCall CP#12, 1
StoreContextVar 3, 0
Push r4
@@ -829,7 +829,7 @@
LoadContextParent
LoadContextVar 0, 10
DirectCall CP#16, 4
- PopLocal r10
+ PopLocal r9
PushNull
ReturnTOS
L11:
@@ -919,7 +919,7 @@
ReturnTOS
Try #0 end:
Try #0 handler:
- SetFrame 11
+ SetFrame 10
Push r0
LoadFieldTOS CP#6
PopLocal r4
@@ -2100,11 +2100,17 @@
{
dart.core::int* sum = 0;
for (dart.core::int* i = 0; i.{dart.core::num::<}(10); i = i.{dart.core::num::+}(1)) {
- for (dart.core::int* j in list) {
- :async_temporary_1 = sum;
- :async_temporary_0 = i.{dart.core::num::+}(j);
- [yield] let dynamic #t4 = dart.async::_awaitHelper(#lib::foo(), :async_op_then, :async_op_error, :async_op) in null;
- sum = :async_temporary_1.{dart.core::num::+}(:async_temporary_0.{dart.core::num::+}(dart._internal::unsafeCast<dart.core::int*>(:result)));
+ {
+ dart.core::Iterator<dart.core::int*>* :sync-for-iterator = dart._internal::unsafeCast<dart.core::Iterable<dart.core::int*>*>(list).{dart.core::Iterable::iterator};
+ for (; :sync-for-iterator.{dart.core::Iterator::moveNext}(); ) {
+ dart.core::int* j = :sync-for-iterator.{dart.core::Iterator::current};
+ {
+ :async_temporary_1 = sum;
+ :async_temporary_0 = i.{dart.core::num::+}(j);
+ [yield] let dynamic #t4 = dart.async::_awaitHelper(#lib::foo(), :async_op_then, :async_op_error, :async_op) in null;
+ sum = :async_temporary_1.{dart.core::num::+}(:async_temporary_0.{dart.core::num::+}(dart._internal::unsafeCast<dart.core::int*>(:result)));
+ }
+ }
}
}
for (dart.core::int* k = 0; k.{dart.core::num::<}(10); k = k.{dart.core::num::+}(1)) {
diff --git a/pkg/vm/testcases/bytecode/closures.dart.expect b/pkg/vm/testcases/bytecode/closures.dart.expect
index 383b1c0..5207c3e 100644
--- a/pkg/vm/testcases/bytecode/closures.dart.expect
+++ b/pkg/vm/testcases/bytecode/closures.dart.expect
@@ -1301,6 +1301,7 @@
CheckStack 1
Push r2
InterfaceCall CP#2, 1
+ AssertBoolean 0
JumpIfFalse L1
AllocateContext 0, 1
PopLocal r0
@@ -1840,12 +1841,18 @@
}
}
method testForInLoop(dart.core::List<dart.core::int*>* list) → void {
- for (dart.core::int* i in list) {
- () →* dart.core::Null? inc = () → dart.core::Null? {
- i = i.{dart.core::num::+}(1);
- };
- [@vm.call-site-attributes.metadata=receiverType:() →* dart.core::Null?] inc.call();
- dart.core::print(i);
+ {
+ dart.core::Iterator<dart.core::int*>* :sync-for-iterator = dart._internal::unsafeCast<dart.core::Iterable<dart.core::int*>*>(list).{dart.core::Iterable::iterator};
+ for (; :sync-for-iterator.{dart.core::Iterator::moveNext}(); ) {
+ dart.core::int* i = :sync-for-iterator.{dart.core::Iterator::current};
+ {
+ () →* dart.core::Null? inc = () → dart.core::Null? {
+ i = i.{dart.core::num::+}(1);
+ };
+ [@vm.call-site-attributes.metadata=receiverType:() →* dart.core::Null?] inc.call();
+ dart.core::print(i);
+ }
+ }
}
}
}
diff --git a/pkg/vm/testcases/bytecode/loops.dart.expect b/pkg/vm/testcases/bytecode/loops.dart.expect
index 2985990..cb40ac2 100644
--- a/pkg/vm/testcases/bytecode/loops.dart.expect
+++ b/pkg/vm/testcases/bytecode/loops.dart.expect
@@ -249,6 +249,7 @@
CheckStack 1
Push r1
InterfaceCall CP#2, 1
+ AssertBoolean 0
JumpIfFalse L1
Push r1
InterfaceCall CP#4, 1
@@ -290,6 +291,7 @@
CheckStack 1
Push r2
InterfaceCall CP#2, 1
+ AssertBoolean 0
JumpIfFalse L1
Push r2
InterfaceCall CP#4, 1
@@ -382,17 +384,29 @@
}
static method test_for_in(dart.core::List<dart.core::int*>* list) → dart.core::int* {
dart.core::int* sum = 0;
- for (dart.core::int* e in list) {
- sum = sum.{dart.core::num::+}(e);
+ {
+ dart.core::Iterator<dart.core::int*>* :sync-for-iterator = dart._internal::unsafeCast<dart.core::Iterable<dart.core::int*>*>(list).{dart.core::Iterable::iterator};
+ for (; :sync-for-iterator.{dart.core::Iterator::moveNext}(); ) {
+ dart.core::int* e = :sync-for-iterator.{dart.core::Iterator::current};
+ {
+ sum = sum.{dart.core::num::+}(e);
+ }
+ }
}
return sum;
}
static method test_for_in_with_outer_var(dart.core::List<dart.core::int*>* list) → dart.core::int* {
dart.core::int* sum = 0;
dart.core::int* e = 42;
- for (final dart.core::int* #t3 in list) {
- e = #t3;
- sum = sum.{dart.core::num::+}(e);
+ {
+ dart.core::Iterator<dart.core::int*>* :sync-for-iterator = dart._internal::unsafeCast<dart.core::Iterable<dart.core::int*>*>(list).{dart.core::Iterable::iterator};
+ for (; :sync-for-iterator.{dart.core::Iterator::moveNext}(); ) {
+ final dart.core::int* #t3 = :sync-for-iterator.{dart.core::Iterator::current};
+ {
+ e = #t3;
+ sum = sum.{dart.core::num::+}(e);
+ }
+ }
}
return sum;
}
diff --git a/pkg/vm/testcases/transformations/unreachable_code_elimination/uce_testcases.dart.expect b/pkg/vm/testcases/transformations/unreachable_code_elimination/uce_testcases.dart.expect
index 075f92e..bea1e0c 100644
--- a/pkg/vm/testcases/transformations/unreachable_code_elimination/uce_testcases.dart.expect
+++ b/pkg/vm/testcases/transformations/unreachable_code_elimination/uce_testcases.dart.expect
@@ -1,6 +1,7 @@
library #lib;
import self as self;
import "dart:core" as core;
+import "dart:_internal" as _in;
class TestAssertInitializer extends core::Object {
constructor •() → self::TestAssertInitializer*
@@ -56,7 +57,11 @@
while (self::foo())
for (; ; ) {
}
- for (core::int* i in <core::int*>[1, 2]) {
+ {
+ core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[1, 2]).{core::Iterable::iterator};
+ for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+ core::int* i = :sync-for-iterator.{core::Iterator::current};
+ }
}
try {
}
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index 66258fe..b0de882 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -4249,6 +4249,12 @@
}
Fragment StreamingFlowGraphBuilder::BuildForInStatement(bool async) {
+ // For-in statements are lowered after kernel version 37.
+ if (translation_helper_.GetKernelProgramInfo().kernel_binary_version() >=
+ 37) {
+ UNREACHABLE();
+ }
+
intptr_t offset = ReaderOffset() - 1; // Include the tag.
const TokenPosition position = ReadPosition(); // read position.
diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
index d739365..2061521 100644
--- a/runtime/vm/kernel_binary.h
+++ b/runtime/vm/kernel_binary.h
@@ -20,7 +20,7 @@
// Both version numbers are inclusive.
static const uint32_t kMinSupportedKernelFormatVersion = 29;
-static const uint32_t kMaxSupportedKernelFormatVersion = 36;
+static const uint32_t kMaxSupportedKernelFormatVersion = 37;
// Keep in sync with package:kernel/lib/binary/tag.dart
#define KERNEL_TAG_LIST(V) \