library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/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 = #C1}) → 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(#C2);
  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 = #C1]) → dynamic {
    core::print(message);
  }
  g.call("Hello, World");
  self::caller(([dynamic x = #C1]) → dynamic {
    core::print("<anon> was called with ${x}");
  });
  function h({dynamic message = #C1}) → dynamic {
    core::print(message);
  }
  h.call(message: "Hello, World");
  self::caller(({dynamic x = #C1}) → 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(#C3, 32, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))));
    throw "Shouldn't work";
  }
  on core::NoSuchMethodError* catch(final core::NoSuchMethodError* e) {
    core::print("As expected: ${e}");
  }
  core::print(core::int::parse("42"));
}

constants  {
  #C1 = null
  #C2 = core::Object {}
  #C3 = #int.toString
  #C4 = <core::Type*>[]
  #C5 = <dynamic>[]
  #C6 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C5}
}
