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

static method foo({dynamic fisk = null}) → dynamic {
  core::print(fisk);
}
static method caller(dynamic f) → dynamic {
  f.call();
}
static method main() → dynamic {
  core::int i = 0;
  core::print(i.==(1) ? "bad" : "good");
  core::print("${i}");
  core::print("'${i}'");
  core::print(" '${i}' ");
  core::print(" '${i}' '${i}'");
  core::print(" '${i}' '${i}'");
  core::print("foobar");
  core::print(" '${i}' '${i}' '${i}' '${i}'");
  try {
    throw "fisk";
  }
  on core::String catch(final core::String e, final core::StackTrace s) {
    core::print(e);
    if(!s.==(null))
      core::print(s);
  }
  for (; false; ) {
  }
  dynamic list = <dynamic>["Hello, World!"];
  core::print(list.[](i));
  list.[]=(i, "Hello, Brave New World!");
  core::print(list.[](i));
  i = 87;
  core::print(i.unary-());
  core::print(i.~());
  core::print(!i.==(42));
  core::print(i = i.-(1));
  core::print(i = i.+(1));
  core::print(let final dynamic #t1 = i in let final dynamic #t2 = i = #t1.-(1) in #t1);
  core::print(let final dynamic #t3 = i in let final dynamic #t4 = i = #t3.+(1) in #t3);
  core::print(new core::Object::•());
  core::print(const core::Object::•());
  core::print(core::_List::•<core::String>(2).runtimeType);
  self::foo(fisk: "Blorp gulp");
  function f() → dynamic {
    core::print("f was called");
  }
  self::caller(f);
  self::caller(() → dynamic {
    core::print("<anon> was called");
  });
  function g([dynamic message = null]) → dynamic {
    core::print(message);
  }
  g.call("Hello, World");
  self::caller(([dynamic x = null]) → dynamic {
    core::print("<anon> was called with ${x}");
  });
  function h({dynamic message = null}) → dynamic {
    core::print(message);
  }
  h.call(message: "Hello, World");
  self::caller(({dynamic x = null}) → dynamic {
    core::print("<anon> was called with ${x}");
  });
  core::print(core::int.toString());
  core::print(core::int);
  core::print(let final dynamic #t5 = core::int in let final dynamic #t6 = #t5.toString() in #t5);
  try {
    core::print(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#int.toString, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
    throw "Shouldn't work";
  }
  on core::NoSuchMethodError catch(final core::NoSuchMethodError e) {
    core::print("As expected: ${e}");
  }
  core::print(core::int::parse("42"));
}
