library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/type_variable_bound_access.dart:22:36: Error: The getter 'length' isn't defined for the class 'num'.
// Try correcting the name to the name of an existing getter, or defining a getter or field named 'length'.
//   num method2() => field1 + field2.length;
//                                    ^^^^^^
//
import self as self;
import "dart:core" as core;

class DynamicClass<T extends dynamic, S extends self::DynamicClass::T% = dynamic> extends core::Object {
  covariant-by-class field self::DynamicClass::T% field1;
  covariant-by-class field self::DynamicClass::T% field2;
  constructor •(self::DynamicClass::T% field1, self::DynamicClass::T% field2) → self::DynamicClass<self::DynamicClass::T%, self::DynamicClass::S%>
    : self::DynamicClass::field1 = field1, self::DynamicClass::field2 = field2, super core::Object::•()
    ;
  method method() → dynamic
    return this.{self::DynamicClass::field1}{self::DynamicClass::T%}{dynamic}.*(this.{self::DynamicClass::field2}{self::DynamicClass::T%});
}
class NumClass<T extends core::num, S extends self::NumClass::T = core::num> extends core::Object {
  covariant-by-class field self::NumClass::T field1;
  covariant-by-class field self::NumClass::S field2;
  constructor •(self::NumClass::T field1, self::NumClass::S field2) → self::NumClass<self::NumClass::T, self::NumClass::S>
    : self::NumClass::field1 = field1, self::NumClass::field2 = field2, super core::Object::•()
    ;
  method method1() → core::num
    return this.{self::NumClass::field1}{self::NumClass::T}.{core::num::*}(this.{self::NumClass::field2}{self::NumClass::S}){(core::num) → core::num};
  method method2() → core::num
    return this.{self::NumClass::field1}{self::NumClass::T}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/type_variable_bound_access.dart:22:36: Error: The getter 'length' isn't defined for the class 'num'.
Try correcting the name to the name of an existing getter, or defining a getter or field named 'length'.
  num method2() => field1 + field2.length;
                                   ^^^^^^" in this.{self::NumClass::field2}{self::NumClass::S}{<unresolved>}.length){(core::num) → core::num};
}
class Class<X5 extends self::Class::X4 = core::int, X4 extends self::Class::X3 = core::int, X3 extends self::Class::X2 = core::int, X2 extends self::Class::X1 = core::int, X1 extends self::Class::X0 = core::int, X0 extends core::int> extends core::Object {
  covariant-by-class field self::Class::X0 field0;
  covariant-by-class field self::Class::X1 field1;
  covariant-by-class field self::Class::X2 field2;
  covariant-by-class field self::Class::X3 field3;
  covariant-by-class field self::Class::X4 field4;
  covariant-by-class field self::Class::X5 field5;
  constructor •(self::Class::X0 field0, self::Class::X1 field1, self::Class::X2 field2, self::Class::X3 field3, self::Class::X4 field4, self::Class::X5 field5) → self::Class<self::Class::X5, self::Class::X4, self::Class::X3, self::Class::X2, self::Class::X1, self::Class::X0>
    : self::Class::field0 = field0, self::Class::field1 = field1, self::Class::field2 = field2, self::Class::field3 = field3, self::Class::field4 = field4, self::Class::field5 = field5, super core::Object::•()
    ;
  method method() → dynamic {
    this.{self::Class::field0}{self::Class::X0}.{core::int::isEven}{core::bool};
    this.{self::Class::field1}{self::Class::X1}.{core::int::isEven}{core::bool};
    this.{self::Class::field2}{self::Class::X2}.{core::int::isEven}{core::bool};
    this.{self::Class::field3}{self::Class::X3}.{core::int::isEven}{core::bool};
    this.{self::Class::field4}{self::Class::X4}.{core::int::isEven}{core::bool};
    this.{self::Class::field5}{self::Class::X5}.{core::int::isEven}{core::bool};
  }
}
static method main() → dynamic {
  new self::DynamicClass::•<core::num, core::int>(0.5, 2).{self::DynamicClass::method}(){() → dynamic};
  new self::NumClass::•<core::num, core::double>(2, 0.5).{self::NumClass::method1}(){() → core::num};
}
