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 as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(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};
}
