library;
import self as self;
import "dart:core" as core;
import "dart:async" as asy;

static method foo() → dynamic {
  try {
    return;
  }
  finally {
    core::print("Hello from finally block!");
  }
}
static method bar(dynamic d) → dynamic async* {
  await for (dynamic x in d as{TypeError,ForDynamic} asy::Stream<dynamic>*) {
    yield x;
    yield* x as{TypeError,ForDynamic} asy::Stream<dynamic>*;
  }
}
static method main() → dynamic {
  do {
    core::print("Hello from do-while!");
  }
  while (false)
  do {
    void x = core::print("Hello from do-while!");
  }
  while (false)
  for (core::String* s in <core::String*>["Hello from for-in!"]) {
    core::print(s);
  }
  for (core::String* s in <core::String*>["Hello from for-in without block!"])
    core::print(s);
  dynamic s;
  for (final dynamic #t1 in <dynamic>["Hello from for-in without decl!"]) {
    s = #t1;
    core::print(s);
  }
  for (final dynamic #t2 in <dynamic>["Hello from for-in without decl and block!"]) {
    s = #t2;
    core::print(s);
  }
  core::print("Hello from labeled statement!");
  try {
    try {
      throw "Hello from rethrow!";
    }
    on dynamic catch(final dynamic e) {
      rethrow;
    }
  }
  on dynamic catch(final dynamic e) {
    core::print(e);
  }
  self::foo();
  core::bool* done = false;
  while (!done) {
    done = true;
    core::print("Hello from while!");
  }
  ;
  assert(true);
  assert(true, "Hello from assert!");
  try {
    assert(false, "Hello from assert!");
  }
  on dynamic catch(final dynamic e) {
    core::print(e);
  }
  #L1:
  switch(1) {
    #L2:
    case #C1:
    case #C2:
      {
        core::print("Hello from switch case!");
        break #L1;
      }
    #L3:
    default:
      {
        break #L1;
      }
  }
  #L4:
  switch(4) {
    #L5:
    case #C2:
      {
        core::print("Hello from case 2!");
        break #L4;
      }
    #L6:
    case #C1:
      {
        core::print("Hello from case 1!");
        continue #L5;
      }
    #L7:
    case #C3:
      {
        core::print("Hello from case 0!");
        continue #L6;
      }
    #L8:
    case #C4:
      {
        core::print("Hello from case 4!");
        continue #L9;
      }
    #L9:
    default:
      {
        continue #L7;
      }
  }
  #L10:
  switch(4) {
    #L11:
    case #C1:
      {
        core::print("Hello from next case 1");
        break #L10;
      }
    #L12:
    default:
      {
        continue #L11;
      }
  }
  core::int* i = 0;
  #L13:
  do
    #L14:
    {
      core::print("Hello from do-while!");
      if((i = i.{core::num::+}(1){(core::num*) →* core::int*}).{core::num::<}(3){(core::num*) →* core::bool*})
        break #L14;
      break #L13;
    }
  while (true)
  i = 0;
  #L15:
  while (true)
    #L16:
    {
      core::print("Hello from while!");
      if((i = i.{core::num::+}(1){(core::num*) →* core::int*}).{core::num::<}(3){(core::num*) →* core::bool*})
        break #L16;
      break #L15;
    }
}

constants  {
  #C1 = 1
  #C2 = 2
  #C3 = 0
  #C4 = 4
}
