library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/expressions.dart:74:16: Error: 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{dynamic}();
}
static method main() → dynamic {
  core::int i = 0;
  core::print(i =={core::num::==}{(core::Object) → core::bool} 1 ?{core::String} "bad" : "good");
  core::print("${i}");
  core::print("'${i}'");
  core::print(" '${i}' ");
  core::print(" '${i}' '${i}'");
  core::print(" '${i}' '${i}'");
  core::print(#C2);
  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; ) {
  }
  core::List<core::String> list = <core::String>["Hello, World!"];
  core::print(list.{core::List::[]}(i){(core::int) → core::String});
  list.{core::List::[]=}(i, "Hello, Brave New World!"){(core::int, core::String) → void};
  core::print(list.{core::List::[]}(i){(core::int) → core::String});
  i = 87;
  core::print(i.{core::int::unary-}(){() → core::int});
  core::print(i.{core::int::~}(){() → core::int});
  core::print(!(i =={core::num::==}{(core::Object) → core::bool} 42));
  core::print(i = i.{core::num::-}(1){(core::num) → core::int});
  core::print(i = i.{core::num::+}(1){(core::num) → core::int});
  core::print(let final core::int #t1 = i in let final void #t2 = i = #t1.{core::num::-}(1){(core::num) → core::int} in #t1);
  core::print(let final core::int #t3 = i in let final void #t4 = i = #t3.{core::num::+}(1){(core::num) → core::int} in #t3);
  core::print(new core::Object::•());
  core::print(#C3);
  core::print(core::List::filled<core::String>(2, "").{core::Object::runtimeType}{core::Type});
  self::foo(fisk: "Blorp gulp");
  function f() → Null {
    core::print("f was called");
  }
  self::caller(f);
  self::caller(() → Null {
    core::print("<anon> was called");
  });
  function g([dynamic message = #C1]) → Null {
    core::print(message);
  }
  g("Hello, World"){([dynamic]) → Null};
  self::caller(([dynamic x = #C1]) → Null {
    core::print("<anon> was called with ${x}");
  });
  function h({dynamic message = #C1}) → Null {
    core::print(message);
  }
  h(message: "Hello, World"){({message: dynamic}) → Null};
  self::caller(({dynamic x = #C1}) → Null {
    core::print("<anon> was called with ${x}");
  });
  core::print(#C4.{core::Type::toString}(){() → core::String});
  core::print(#C4);
  core::print(let final core::Type #t5 = #C4 in block {
    #t5.{core::Type::toString}(){() → core::String};
  } =>#t5);
  try {
    core::print(invalid-expression "pkg/front_end/testcases/general/expressions.dart:74:16: Error: Method not found: 'int.toString'.
    print(int?.toString());
               ^^^^^^^^");
    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 = "foobar"
  #C3 = core::Object {}
  #C4 = TypeLiteralConstant(core::int)
}


Constructor coverage from constants:
org-dartlang-testcase:///expressions.dart:
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
