library;
//
// Problems in library:
//
// pkg/front_end/testcases/rasta/issue_000042.dart:6:13: Error: Unexpected token ','.
//   for (var x, y in []) {}
//             ^
//
// 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 []) {}
//        ^^^
//
// pkg/front_end/testcases/rasta/issue_000042.dart:7:8: Error: A continue statement can't be used outside of a loop or switch statement.
// Try removing the continue statement.
//   L: { continue L; }
//        ^^^^^^^^
//
// pkg/front_end/testcases/rasta/issue_000042.dart:8:18: Error: A continue statement can't be used outside of a loop or switch statement.
// Try removing the continue statement.
//   L: if (true) { continue L; }
//                  ^^^^^^^^
//
import self as self;
import "dart:core" as core;

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.
  for (var x, y in []) {}
       ^^^";
      dynamic x;
      dynamic y;
      {}
    }
  }
  #L1:
  {
    break #L1;
  }
  #L2:
  if(true) {
    break #L2;
  }
  #L3:
  switch(1) {
    #L4:
    case 1:
      {
        break #L3;
      }
    #L5:
    case 2:
      {
        break #L3;
      }
  }
  try {
  }
  on core::NoSuchMethodError catch(no-exception-var) {
  }
}
