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

class Callable extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method call(dynamic x) → dynamic {
    return "string";
  }
}
class CallableGetter extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  get call() → dynamic
    return new self::Callable::•();
}
static method main() → dynamic {
  dynamic closure = (dynamic x) → dynamic => x;
  dynamic int1 = closure.call(1);
  dynamic int2 = closure.call(1);
  dynamic int3 = closure.call.call(1);
  dynamic int4 = closure.call.call.call(1);
  dynamic callable = new self::Callable::•();
  dynamic string1 = callable.call(1);
  dynamic string2 = callable.call(1);
  dynamic string3 = callable.call.call(1);
  dynamic string4 = callable.call.call.call(1);
  dynamic callableGetter = new self::CallableGetter::•();
  dynamic string5 = callableGetter.call(1);
  dynamic string6 = callableGetter.call(1);
  dynamic string7 = callableGetter.call.call(1);
  dynamic string8 = callableGetter.call.call.call(1);
  dynamic nothing1 = closure.call();
  dynamic nothing2 = closure.call();
  dynamic nothing3 = closure.call.call();
  dynamic nothing4 = closure.call.call.call();
  dynamic nothing5 = callable.call();
  dynamic nothing6 = callable.call();
  dynamic nothing7 = callable.call.call();
  dynamic nothing8 = callable.call.call.call();
  dynamic nothing9 = callableGetter.call();
  dynamic nothing10 = callableGetter.call();
  dynamic nothing11 = callableGetter.call.call();
  dynamic nothing12 = callableGetter.call.call.call();
}
