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

class C extends core::Object {
  final field core::int value;
  field core::String log = "";
  constructor •(core::int value) → self::C
    : self::C::value = value, super core::Object::•()
    ;
  method clearLog() → void {
    this.{self::C::log} = "";
  }
  operator >(core::num other) → dynamic {
    this.{self::C::log} = this.{self::C::log}{core::String}.{core::String::+}("C(${this.{self::C::value}{core::int}})>${other};"){(core::String) → core::String};
    return this.{self::C::value}{core::int}.{core::num::-}(other){(core::num) → core::num};
  }
}
static method test1(self::C c) → core::String {
  #L1:
  {
    final synthesized self::C #0#0 = c;
    {
      if(#0#0.{self::C::>}(#C1){(core::num) → dynamic} as core::bool) {
        {
          return "1";
        }
      }
    }
    {
      {
        {
          return "no match";
        }
      }
    }
  }
}
static method main() → dynamic {
  self::C c1 = new self::C::•(0);
  self::C c2 = new self::C::•(2);
  self::throws(() → void {
    self::test1(c1);
  });
}
static method throws(() → void f) → dynamic {
  try {
    f(){() → void};
  }
  on core::Object catch(final core::Object e) {
    core::print(e);
    return;
  }
  throw "Missing exception";
}

constants  {
  #C1 = 1
}
