googlearchive / async_await_transformer_deprecated

Deprecated. Use Dart 1.9+ for native support for async/await
https://www.dartlang.org/guides/language/language-tour#asynchrony-support
BSD 3-Clause "New" or "Revised" License
3 stars 7 forks source link

Too many await cause an error #84

Open jorat1346 opened 9 years ago

jorat1346 commented 9 years ago

Having too many await in a function cause the compiler to crash, limit seen to be about 800:

C:\Users\admin\dart\test_for_var>pub build --trace --mode debug
Loading source assets...
Building test_for_var...
[Info from Dart2JS]:
Compiling test_for_var|web/main.dart...
[Error from Dart2JS]:
web\main.dart:
The compiler crashed when compiling this element.
The compiler is broken.

When compiling the above element, the compiler crashed. It is not
possible to tell if this is caused by a problem in your program or
not. Regardless, the compiler should not crash.

The Dart team would greatly appreciate if you would take a moment to
report this problem at http://dartbug.com/new.

Please include the following information:

* the name and version of your operating system,

* the Dart SDK build number (build number could not be determined), and

* the entire message you see here (including the full stack trace
  below as well as the source location above).

Couldn't parse VM stack trace line '#3      _CustomZone.runUnary (dart:async/zone.dart)'.
Stack trace:
#0      StackZoneSpecification._run (package:stack_trace/src/stack_zone_specification.dart:211)
#1      registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart:134)
#2      _rootRunUnary (dart:async/zone.dart:902)
#3      _CustomZone.runUnary (dart:async/zone.dart)
#4      _Future._propagateToListeners.handleError (dart:async/future_impl.dart:515)
...
...
#5      registerUnaryCallback.<anonymous closure>.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart:134)
#6      StackZoneSpecification._run (package:stack_trace/src/stack_zone_specification.da#7      _Future._propagateToListeners (dart:async/future_impl.dart:570)
#8      _Future._completeWithValue (dart:async/future_impl.dart:358)
#9      _Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:412)
#10     StackZoneSpecification._run (package:stack_trace/src/stack_zone_specification.dart:210)
#11     registerCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart:124)
#12     _rootRun (dart:async/zone.dart:895)
#13     _CustomZone.run (dart:async/zone.dart:796)
#14     _CustomZone.runGuarded (dart:async/zone.dart:704)
#15     _CustomZone.bindCallback.<anonymous closure> (dart:async/zone.dart:729)
#16     _asyncRunCallbackLoop (dart:async/schedule_microtask.dart:41)
#17     _asyncRunCallback (dart:async/schedule_microtask.dart:48)
#18     _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:96)
#19     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:143)
package:stack_trace/src/chain.dart 148                                                                         Chain.terse
package:barback/src/errors.dart 128                                                                            _WrappedException.toString
dart:core                                                                                                      _StringBase._interpolate
e:\b\build\slave\dart-editor-win-dev\build\dart\sdk\lib\_internal\pub_generated\lib\src\command\build.dart 64  BuildCommand.onRunTransformerCommand.<fn>.<fn>.<fn>
dart:async                                                                                                     _BroadcastStreamController.add
package:barback/src/graph/asset_cascade.dart 209                                                               AssetCascade.reportError
package:barback/src/graph/transform_node.dart 656                                                              TransformNode._runApply.<fn>
dart:isolate                                                                                                   _RawReceivePortImpl._handleMessage
===== asynchronous gap ===========================
dart:async                                                                                                     _StreamImpl.listen
e:\b\build\slave\dart-editor-win-dev\build\dart\sdk\lib\_internal\pub_generated\lib\src\command\build.dart 63  BuildCommand.onRunTransformerCommand.<fn>.<fn>
dart:isolate                                                                                                   _RawReceivePortImpl._handleMessage
===== asynchronous gap ===========================
dart:async                                                                                                     _Future.then
e:\b\build\slave\dart-editor-win-dev\build\dart\sdk\lib\_internal\pub_generated\lib\src\command\build.dart 62  BuildCommand.onRunTransformerCommand.<fn>
dart:isolate                                                                                                   _RawReceivePortImpl._handleMessage
===== asynchronous gap ===========================
dart:async                                                                                                       scheduleMicrotask
e:\b\build\slave\dart-editor-win-dev\build\dart\sdk\lib\_internal\pub_generated\lib\src\command\build.dart 53    BuildCommand.onRunTransformerCommand
e:\b\build\slave\dart-editor-win-dev\build\dart\sdk\lib\_internal\pub_generated\lib\src\command\barback.dart 61  BarbackCommand.run
package:args/command_runner.dart 179                                                                             CommandRunner.runCommand.<fn>
dart:async                                                                                                       Future.Future.sync
package:args/command_runner.dart 132                                                                             CommandRunner.runCommand
e:\b\build\slave\dart-editor-win-dev\build\dart\sdk\lib\_internal\pub_generated\lib\src\command_runner.dart 196  PubCommandRunner.runCommand.<fn>.join0.join1.break0.<fn>.<fn>
dart:async                                                                                                       Future.Future.sync
e:\b\build\slave\dart-editor-win-dev\build\dart\sdk\lib\_internal\pub_generated\lib\src\utils.dart 98            captureErrors.<fn>
package:stack_trace/src/chain.dart 78                                                                            Chain.capture
e:\b\build\slave\dart-editor-win-dev\build\dart\sdk\lib\_internal\pub_generated\lib\src\utils.dart 112           captureErrors
e:\b\build\slave\dart-editor-win-dev\build\dart\sdk\lib\_internal\pub_generated\lib\src\command_runner.dart 195  PubCommandRunner.runCommand.<fn>.join0.join1.break0.<fn>
dart:isolate                                                                                                     _RawReceivePortImpl._handleMessage
---- Log transcript ----
FINE: Pub 1.9.0-dev.8.0
IO  : Spawning "cmd /c ver" in C:\Users\darkangel\dart\test_for_var\.
IO  : Finished ver. Exit code 0.
    | stdout:
    | |
    | | Microsoft Windows [Version 6.2.9200]
    | Nothing output on stderr.
IO  : Deleting directory build.
FINE: Loading asset environment...
FINE: Loading package graph...
FINE: Loading package graph finished (0.1s).
FINE: Initializing barback...
FINE: Serving packages on localhost:0.
MSG : Loading source assets...
FINE: Providing sources for test_for_var|lib.
FINE: Loading source assets finished (0.0s).
FINE: Provided sources.
FINE: Loading transformers...
FINE: Transformer dependencies:
FINE: Loading transformers finished (0.0s).
FINE: Initializing barback finished (0.0s).
FINE: Loading asset environment finished (0.2s).
MSG : Building test_for_var...
FINE: Providing sources for test_for_var|web.
FINE: Bound "web" to localhost:0.
MSG : [Info from Dart2JS]:
    | Compiling test_for_var|web/main.dart...
ERR : [Error from Dart2JS]:
    | web\main.dart:
    | The compiler crashed when compiling this element.
ERR : Couldn't parse VM stack trace line '#3      _CustomZone.runUnary (dart:async/zone.dart)'.
    | Stack trace:
    | #0      StackZoneSpecification._run (package:stack_trace/src/stack_zone_specification.dart:211)
    | #1      registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart:134)
    | #2      _rootRunUnary (dart:async/zone.dart:902)
    | #3      _CustomZone.runUnary (dart:async/zone.dart)
    | #4      _Future._propagateToListeners.handleError (dart:async/future_impl.dart:515)
    | ...
    | ...
    | #5      registerUnaryCallback.<anonymous closure>.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart:134)
    | #6      StackZoneSpecification._run (package:stack_trace/src/stack_zone_specification.da#7      _Future._propagateToListeners (dart:async/future_impl.dart:570)
    | #8      _Future._completeWithValue (dart:async/future_impl.dart:358)
    | #9      _Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:412)
    | #10     StackZoneSpecification._run (package:stack_trace/src/stack_zone_specification.dart:210)
    | #11     registerCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart:124)
    | #12     _rootRun (dart:async/zone.dart:895)
    | #13     _CustomZone.run (dart:async/zone.dart:796)
    | #14     _CustomZone.runGuarded (dart:async/zone.dart:704)
    | #15     _CustomZone.bindCallback.<anonymous closure> (dart:async/zone.dart:729)
    | #16     _asyncRunCallbackLoop (dart:async/schedule_microtask.dart:41)
    | #17     _asyncRunCallback (dart:async/schedule_microtask.dart:48)
    | #18     _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:96)
    | #19     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:143)
FINE: Exception type: FormatException
ERR : package:stack_trace/src/chain.dart 148                                                                         Chain.terse
    | package:barback/src/errors.dart 128                                                                            _WrappedException.toString
    | dart:core                                                                                                      _StringBase._interpolate
    | e:\b\build\slave\dart-editor-win-dev\build\dart\sdk\lib\_internal\pub_generated\lib\src\command\build.dart 64  BuildCommand.onRunTransformerCommand.<fn>.<fn>.<fn>
    | dart:async                                                                                                     _BroadcastStreamController.add
    | package:barback/src/graph/asset_cascade.dart 209                                                               AssetCascade.reportError
    | package:barback/src/graph/transform_node.dart 656                                                              TransformNode._runApply.<fn>
    | dart:isolate                                                                                                   _RawReceivePortImpl._handleMessage
    | ===== asynchronous gap ===========================
    | dart:async                                                                                                     _StreamImpl.listen
    | e:\b\build\slave\dart-editor-win-dev\build\dart\sdk\lib\_internal\pub_generated\lib\src\command\build.dart 63  BuildCommand.onRunTransformerCommand.<fn>.<fn>
    | dart:isolate                                                                                                   _RawReceivePortImpl._handleMessage
    | ===== asynchronous gap ===========================
    | dart:async                                                                                                     _Future.then
    | e:\b\build\slave\dart-editor-win-dev\build\dart\sdk\lib\_internal\pub_generated\lib\src\command\build.dart 62  BuildCommand.onRunTransformerCommand.<fn>
    | dart:isolate                                                                                                   _RawReceivePortImpl._handleMessage
    | ===== asynchronous gap ===========================
    | dart:async                                                                                                       scheduleMicrotask
    | e:\b\build\slave\dart-editor-win-dev\build\dart\sdk\lib\_internal\pub_generated\lib\src\command\build.dart 53    BuildCommand.onRunTransformerCommand
    | e:\b\build\slave\dart-editor-win-dev\build\dart\sdk\lib\_internal\pub_generated\lib\src\command\barback.dart 61  BarbackCommand.run
    | package:args/command_runner.dart 179                                                                             CommandRunner.runCommand.<fn>
    | dart:async                                                                                                       Future.Future.sync
    | package:args/command_runner.dart 132                                                                             CommandRunner.runCommand
    | e:\b\build\slave\dart-editor-win-dev\build\dart\sdk\lib\_internal\pub_generated\lib\src\command_runner.dart 196  PubCommandRunner.runCommand.<fn>.join0.join1.break0.<fn>.<fn>

    | dart:async                                                                                                       Future.Future.sync
    | e:\b\build\slave\dart-editor-win-dev\build\dart\sdk\lib\_internal\pub_generated\lib\src\utils.dart 98            captureErrors.<fn>
    | package:stack_trace/src/chain.dart 78                                                                            Chain.capture
    | e:\b\build\slave\dart-editor-win-dev\build\dart\sdk\lib\_internal\pub_generated\lib\src\utils.dart 112           captureErrors
    | e:\b\build\slave\dart-editor-win-dev\build\dart\sdk\lib\_internal\pub_generated\lib\src\command_runner.dart 195  PubCommandRunner.runCommand.<fn>.join0.join1.break0.<fn>
    | dart:isolate                                                                                                     _RawReceivePortImpl._handleMessage
---- End log transcript ----

Code:

// Copyright (c) 2015, <your name>. All rights reserved. Use of this source code
// is governed by a BSD-style license that can be found in the LICENSE file.

import 'dart:async';

Future<dynamic> f() {
  return new Future.value();
}

int func(a) async {
  await f();
  print(a);
  return a+1;
}

main() async {
  print('Hello world');
  var a = await func(0);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
  a = await func(a);
}
kmillikin commented 9 years ago

That's because the translator is implemented in continuation-passing style. It is (indirectly) recursive even for a sequence of statements. All the major Dart implementations (the VM and dart2js) should soon have native support, so we're unlikely to change the translation at this point.

As a workaround, you can split the function up or (in the test case above) await in a loop :)

jorat1346 commented 9 years ago

Yea, I know I can use a loop ;) but I am actually experimenting with code that have that much of await and that I can't put into a loop. And it's hard to diagnostic

kmillikin commented 9 years ago

@jorat1346 I sympathize. I don't have a great suggestion other than breaking the function up and I understand it's not necessarily that simple.

As a practical matter, there is a size limit on functions in both the VM and dart2js implementations. It's still too bad that the async_await transformer has such a (relatively) small size limit.