library;
//
// Problems in library:
//
// pkg/front_end/testcases/expressions.dart:74:16: Warning: Method not found: 'int.toString'.
//     print(int?.toString());
//                ^^^^^^^^
//
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(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"));
}
