Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dart 3: ContinueSwitchStatement doesn't work on web #51802

Closed
goderbauer opened this issue Mar 21, 2023 · 6 comments
Closed

Dart 3: ContinueSwitchStatement doesn't work on web #51802

goderbauer opened this issue Mar 21, 2023 · 6 comments
Assignees
Labels
area-web Use area-web for Dart web related issues, including the DDC and dart2js compilers and JS interop. P1 A high priority bug; for example, a single project is unusable or has many test failures web-dev-compiler
Milestone

Comments

@goderbauer
Copy link
Contributor

goderbauer commented Mar 21, 2023

The following code fails to run with flutter test --platform=chrome test/pure_dart_test.dart under Dart 3.0:

test/pure_dart_test.dart:

import 'package:test/test.dart';

void main() {
  test('calculate', () {
    Foo().buildOverscrollIndicator(TargetPlatform.android, AndroidOverscrollIndicator.glow);
  });
}

class Foo {
  int buildOverscrollIndicator(TargetPlatform platform, AndroidOverscrollIndicator indicator) {
    switch (platform) {
      case TargetPlatform.iOS:
      case TargetPlatform.linux:
      case TargetPlatform.macOS:
      case TargetPlatform.windows:
        return 1;
      case TargetPlatform.android:
        switch (indicator) {
          case AndroidOverscrollIndicator.stretch:
            return 2;
          case AndroidOverscrollIndicator.glow:
            continue glow;
        }
      glow:
      case TargetPlatform.fuchsia:
        return 3;
    }
  }
}

enum AndroidOverscrollIndicator {
  stretch,
  glow,
}

enum TargetPlatform {
  android,
  fuchsia,
  iOS,
  linux,
  macOS,
  windows,
}

pubspec.yaml

name: pure_dart
description: A sample command-line application.
version: 1.0.0

environment:
  sdk: '>=3.0.0-0 <4.0.0'

dependencies:
  flutter:
    sdk: flutter

dev_dependencies:
  lints: ^2.0.0
  test: ^1.16.0
  flutter_test:
    sdk: flutter

Exception:

UnimplementedError: node <ContinueSwitchStatement> see https://github.com/dart-lang/sdk/issues/29352 `ContinueSwitchStatement(continue "case 2.0:";)`
  dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 288:49      throw_
  dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 17:3        throwUnimplementedError
  pure_dart_test.dart.js 124:28                                                     buildOverscrollIndicator
  pure_dart_test.dart.js 225:36                                                     <fn>
  packages/test_api/src/backend/declarer.dart.js 258:56                             <fn>
  dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 45:50                <fn>
  packages/stack_trace/src/stack_zone_specification.dart.js 184:98                  <fn>
  packages/stack_trace/src/stack_zone_specification.dart.js 236:16                  [_run]
  packages/stack_trace/src/stack_zone_specification.dart.js 184:80                  <fn>
  dart-sdk/lib/async/zone.dart 1406:47                                              _rootRunUnary
  dart-sdk/lib/async/zone.dart 1307:19                                              runUnary
  dart-sdk/lib/async/future_impl.dart 147:18                                        handleValue
  dart-sdk/lib/async/future_impl.dart 784:44                                        handleValueCallback
  dart-sdk/lib/async/future_impl.dart 813:13                                        _propagateToListeners
  dart-sdk/lib/async/future_impl.dart 448:9                                         <fn>
  packages/stack_trace/src/stack_zone_specification.dart.js 236:16                  [_run]
  packages/stack_trace/src/stack_zone_specification.dart.js 179:71                  <fn>
  dart-sdk/lib/async/zone.dart 1398:13                                              _rootRun
  dart-sdk/lib/async/zone.dart 1300:19                                              run
  dart-sdk/lib/async/zone.dart 1208:7                                               runGuarded
  dart-sdk/lib/async/zone.dart 1248:23                                              callback
  dart-sdk/lib/async/schedule_microtask.dart 40:11                                  _microtaskLoop
  dart-sdk/lib/async/schedule_microtask.dart 49:5                                   _startMicrotaskLoop
  dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 177:15               <fn>
  ===== asynchronous gap ===========================
  dart-sdk/lib/async/zone.dart 1328:19                                              registerUnaryCallback
  dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 67:19                _async
  packages/test_api/src/backend/declarer.dart.js 256:69                             <fn>
  dart-sdk/lib/async/zone.dart 1398:13                                              _rootRun
  dart-sdk/lib/async/zone.dart 1300:19                                              run
  dart-sdk/lib/async/zone.dart 1802:67                                              _runZoned
  dart-sdk/lib/async/zone.dart 1746:10                                              runZoned
  packages/test_api/src/backend/declarer.dart.js 256:21                             <fn>
  dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                runBody
  dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5                _async
  packages/test_api/src/backend/declarer.dart.js 246:90                             <fn>
  packages/test_api/src/backend/declarer.dart.js 662:61                             <fn>
  dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                runBody
  dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5                _async
  packages/test_api/src/backend/declarer.dart.js 658:61                             <fn>
  dart-sdk/lib/async/zone.dart 1398:13                                              _rootRun
  dart-sdk/lib/async/zone.dart 1300:19                                              run
  dart-sdk/lib/async/zone.dart 1802:67                                              _runZoned
  dart-sdk/lib/async/zone.dart 1746:10                                              runZoned
  packages/test_api/src/backend/declarer.dart.js 658:13                             [_waitForOutstandingCallbacks]
  packages/test_api/src/backend/declarer.dart.js 741:53                             <fn>
  dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 45:50                <fn>
  packages/stack_trace/src/stack_zone_specification.dart.js 184:98                  <fn>
  packages/stack_trace/src/stack_zone_specification.dart.js 236:16                  [_run]
  packages/stack_trace/src/stack_zone_specification.dart.js 184:80                  <fn>
  dart-sdk/lib/async/zone.dart 1406:47                                              _rootRunUnary
  dart-sdk/lib/async/zone.dart 1307:19                                              runUnary
  dart-sdk/lib/async/future_impl.dart 147:18                                        handleValue
  dart-sdk/lib/async/future_impl.dart 784:44                                        handleValueCallback
  dart-sdk/lib/async/future_impl.dart 813:13                                        _propagateToListeners
  dart-sdk/lib/async/future_impl.dart 575:7                                         [_complete]
  dart-sdk/lib/async/future.dart 255:15                                             <fn>
  packages/stack_trace/src/stack_zone_specification.dart.js 236:16                  [_run]
  packages/stack_trace/src/stack_zone_specification.dart.js 179:71                  <fn>
  dart-sdk/lib/async/zone.dart 1390:47                                              _rootRun
  dart-sdk/lib/async/zone.dart 1300:19                                              run
  dart-sdk/lib/async/zone.dart 1208:7                                               runGuarded
  dart-sdk/lib/async/zone.dart 1248:23                                              <fn>
  packages/stack_trace/src/stack_zone_specification.dart.js 236:16                  [_run]
  packages/stack_trace/src/stack_zone_specification.dart.js 179:71                  <fn>
  dart-sdk/lib/async/zone.dart 1398:13                                              _rootRun
  dart-sdk/lib/async/zone.dart 1300:19                                              run
  dart-sdk/lib/async/zone.dart 1232:23                                              <fn>
  dart-sdk/lib/_internal/js_dev_runtime/private/isolate_helper.dart 48:19           internalCallback
  ===== asynchronous gap ===========================
  dart-sdk/lib/async/zone.dart 1328:19                                              registerUnaryCallback
  dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 67:19                _async
  packages/test_api/src/backend/declarer.dart.js 738:65                             <fn>
  dart-sdk/lib/async/zone.dart 1398:13                                              _rootRun
  dart-sdk/lib/async/zone.dart 1300:19                                              run
  dart-sdk/lib/async/zone.dart 1802:67                                              _runZoned
  dart-sdk/lib/async/zone.dart 1746:10                                              runZoned
  packages/test_api/src/backend/declarer.dart.js 738:17                             <fn>
  packages/test_api/src/backend/declarer.dart.js 759:9                              [_guardIfGuarded]
  packages/test_api/src/backend/declarer.dart.js 737:30                             <fn>
  packages/stack_trace/src/stack_zone_specification.dart.js 1118:18                 <fn>
  dart-sdk/lib/async/zone.dart 1398:13                                              _rootRun
  dart-sdk/lib/async/zone.dart 1300:19                                              run
  dart-sdk/lib/async/zone.dart 1802:67                                              _runZoned
  dart-sdk/lib/async/zone.dart 1746:10                                              runZoned
  packages/stack_trace/src/stack_zone_specification.dart.js 1116:20                 capture
  packages/test_api/src/backend/declarer.dart.js 736:19                             [_onRun]
  packages/test_api/src/backend/live_test_controller.dart.js 157:20                 run
  packages/test_api/src/backend/remote_listener.dart.js 210:18                      <fn>
  dart-sdk/lib/async/zone.dart 1398:13                                              _rootRun
  dart-sdk/lib/async/zone.dart 1300:19                                              run
  dart-sdk/lib/async/zone.dart 1802:67                                              _runZoned
  dart-sdk/lib/async/zone.dart 1746:10                                              runZoned
  packages/test_api/src/backend/remote_listener.dart.js 209:13                      [_runLiveTest]
  packages/test_api/src/backend/remote_listener.dart.js 190:27                      <fn>
  dart-sdk/lib/async/zone.dart 1406:47                                              _rootRunUnary
  dart-sdk/lib/async/zone.dart 1307:19                                              runUnary
  dart-sdk/lib/async/zone.dart 1216:7                                               runUnaryGuarded
  dart-sdk/lib/async/stream_impl.dart 339:11                                        [_sendData]
  dart-sdk/lib/async/stream_impl.dart 271:7                                         [_add]
  dart-sdk/lib/async/stream_controller.dart 774:19                                  [_sendData]
  dart-sdk/lib/async/stream_controller.dart 648:7                                   [_add]
  dart-sdk/lib/async/stream_controller.dart 596:5                                   add
  dart-sdk/lib/async/zone.dart 1414:13                                              _rootRunUnary
  dart-sdk/lib/async/zone.dart 1307:19                                              runUnary
  dart-sdk/lib/async/zone.dart 1216:7                                               runUnaryGuarded
  dart-sdk/lib/async/stream_impl.dart 339:11                                        [_sendData]
  dart-sdk/lib/async/stream_impl.dart 271:7                                         [_add]
  dart-sdk/lib/async/stream_controller.dart 774:19                                  [_sendData]
  dart-sdk/lib/async/stream_controller.dart 648:7                                   [_add]
  dart-sdk/lib/async/stream_controller.dart 596:5                                   add
  dart-sdk/lib/async/stream_controller.dart 866:13                                  add
  packages/stream_channel/src/stream_channel_controller.dart.js 1177:24             add
  packages/stream_channel/src/stream_channel_controller.dart.js 458:33              <fn>
  dart-sdk/lib/async/zone.dart 1593:10                                              runUnaryGuarded
  dart-sdk/lib/internal/async_cast.dart 85:11                                       [_onData]
  dart-sdk/lib/async/zone.dart 1593:10                                              runUnaryGuarded
  dart-sdk/lib/async/stream_impl.dart 339:11                                        [_sendData]
  dart-sdk/lib/async/stream_impl.dart 271:7                                         [_add]
  dart-sdk/lib/async/stream_controller.dart 774:19                                  [_sendData]
  dart-sdk/lib/async/stream_controller.dart 648:7                                   [_add]
  dart-sdk/lib/async/stream_controller.dart 596:5                                   add
  dart-sdk/lib/async/zone.dart 1593:10                                              runUnaryGuarded
  dart-sdk/lib/async/stream_impl.dart 339:11                                        [_sendData]
  dart-sdk/lib/async/stream_impl.dart 271:7                                         [_add]
  dart-sdk/lib/async/stream_controller.dart 774:19                                  [_sendData]
  dart-sdk/lib/async/stream_controller.dart 648:7                                   [_add]
  dart-sdk/lib/async/stream_controller.dart 596:5                                   add
  dart-sdk/lib/async/stream_controller.dart 866:13                                  add
  dart-sdk/lib/async/zone.dart 1593:10                                              runUnaryGuarded
  dart-sdk/lib/async/stream_impl.dart 339:11                                        [_sendData]
  dart-sdk/lib/async/stream_impl.dart 271:7                                         [_add]
  dart-sdk/lib/async/stream_controller.dart 774:19                                  [_sendData]
  dart-sdk/lib/async/stream_controller.dart 648:7                                   [_add]
  dart-sdk/lib/async/stream_controller.dart 596:5                                   add
  dart-sdk/lib/async/zone.dart 1593:10                                              runUnaryGuarded
  dart-sdk/lib/async/stream_impl.dart 339:11                                        [_sendData]
  dart-sdk/lib/async/stream_impl.dart 271:7                                         [_add]
  dart-sdk/lib/async/stream_controller.dart 774:19                                  [_sendData]
  dart-sdk/lib/async/stream_controller.dart 648:7                                   [_add]
  dart-sdk/lib/async/stream_controller.dart 596:5                                   add
  dart-sdk/lib/async/stream_controller.dart 866:13                                  add
  packages/stream_channel/src/stream_channel_controller.dart.js 1177:24             add
  pure_dart_test.dart.test.dart.js 85:31                                            <fn>
  dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 367:37  _checkAndCall
  dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 372:39  dcall
  dart-sdk/lib/html/dart2js/html_dart2js.dart 37235:58                              <fn>

Everything works fine when running the test on the VM with flutter test test/pure_dart_test.dart .

@goderbauer
Copy link
Contributor Author

goderbauer commented Mar 21, 2023

cc @jakemac53 @itsjustkevin This is currently blocking for getting the Flutter Framework onto Dart 3.0.

Edit: I have a work around: We can just refactor the code that uses continue with label statements in a switch/case to not do that anymore.

@goderbauer
Copy link
Contributor Author

goderbauer commented Mar 21, 2023

Based on the exception, is this maybe an issue with the web compiler:

node, 'see https://github.com/dart-lang/sdk/issues/29352')

The issue (#29352) it links to is closed, though.

@itsjustkevin
Copy link
Contributor

@nshahan do you know who would be the expert in this area?

@goderbauer goderbauer changed the title Dart 3: CuntineSwitchStatement doesn't work on web Dart 3: ContinueSwitchStatement doesn't work on web Mar 21, 2023
@mit-mit mit-mit added this to the Dart 3 beta 3 milestone Mar 21, 2023
@nshahan nshahan added web-dev-compiler area-web Use area-web for Dart web related issues, including the DDC and dart2js compilers and JS interop. labels Mar 21, 2023
@nshahan
Copy link
Contributor

nshahan commented Mar 21, 2023

One of us will take a look at this today and respond with an update here.

@goderbauer It sound like you identified a workaround, are you already taking that option or waiting to find out the turnaround for a fix?

@goderbauer
Copy link
Contributor Author

If there is no fix by the time we’re ready to submit flutter/flutter#122546 I’m gonna go with the work around as it’s currently implemented in that PR. I don’t want to delay Flutter’s migration to Dart 3 further to leave some time to fix any additional issues that may come up. When the fix lands I’d undo the workaround, though.

@nshahan nshahan added the P1 A high priority bug; for example, a single project is unusable or has many test failures label Mar 21, 2023
@nshahan
Copy link
Contributor

nshahan commented Mar 21, 2023

@Markzipan has a fix out for review.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-web Use area-web for Dart web related issues, including the DDC and dart2js compilers and JS interop. P1 A high priority bug; for example, a single project is unusable or has many test failures web-dev-compiler
Projects
None yet
Development

No branches or pull requests

5 participants