Skip to content

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

@goderbauer

Description

@goderbauer

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 .

Metadata

Metadata

Assignees

Labels

P1A high priority bug; for example, a single project is unusable or has many test failuresarea-web-jsIssues related to JavaScript support for Dart Web, including DDC, dart2js, and JS interop.web-dev-compiler

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions