library;
//
// Problems in library:
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:14:15: Error: A value of type 'E1' can't be assigned to a variable of type 'Object' because 'E1' is nullable and 'Object' isn't.
//  - 'Object' is from 'dart:core'.
//   Object v1 = e1; // Error.
//               ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:15:8: Error: The value 'null' can't be assigned to a variable of type 'E1' because 'E1' is not nullable.
//   e1 = null; // Error.
//        ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:18:8: Error: The value 'null' can't be assigned to a variable of type 'E2' because 'E2' is not nullable.
//   e2 = null; // Error.
//        ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:20:15: Error: A value of type 'E3' can't be assigned to a variable of type 'Object' because 'E3' is nullable and 'Object' isn't.
//  - 'Object' is from 'dart:core'.
//   Object v3 = e3; // Error.
//               ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:21:8: Error: The value 'null' can't be assigned to a variable of type 'E3' because 'E3' is not nullable.
//   e3 = null; // Error.
//        ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:24:8: Error: The value 'null' can't be assigned to a variable of type 'E4' because 'E4' is not nullable.
//   e4 = null; // Error.
//        ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:26:15: Error: A value of type 'E5<dynamic>' can't be assigned to a variable of type 'Object' because 'E5<dynamic>' is nullable and 'Object' isn't.
//  - 'Object' is from 'dart:core'.
//   Object v5 = e5; // Error.
//               ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:27:8: Error: The value 'null' can't be assigned to a variable of type 'E5<dynamic>' because 'E5<dynamic>' is not nullable.
//   e5 = null; // Error.
//        ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:30:8: Error: The value 'null' can't be assigned to a variable of type 'E6<Object>' because 'E6<Object>' is not nullable.
//  - 'Object' is from 'dart:core'.
//   e6 = null; // Error.
//        ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:33:8: Error: The value 'null' can't be assigned to a variable of type 'E7' because 'E7' is not nullable.
//   e7 = null; // Error.
//        ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:38:15: Error: A value of type 'X1' can't be assigned to a variable of type 'Object' because 'X1' is nullable and 'Object' isn't.
//  - 'Object' is from 'dart:core'.
//   Object v1 = x1; // Error.
//               ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:39:8: Error: The value 'null' can't be assigned to a variable of type 'X1' because 'X1' is not nullable.
//   x1 = null; // Error.
//        ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:42:8: Error: The value 'null' can't be assigned to a variable of type 'X2' because 'X2' is not nullable.
//   x2 = null; // Error.
//        ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:44:15: Error: A value of type 'X3' can't be assigned to a variable of type 'Object' because 'X3' is nullable and 'Object' isn't.
//  - 'Object' is from 'dart:core'.
//   Object v3 = x3; // Error.
//               ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:45:8: Error: The value 'null' can't be assigned to a variable of type 'X3' because 'X3' is not nullable.
//   x3 = null; // Error.
//        ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:48:8: Error: The value 'null' can't be assigned to a variable of type 'X4' because 'X4' is not nullable.
//   x4 = null; // Error.
//        ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:50:15: Error: A value of type 'X5' can't be assigned to a variable of type 'Object' because 'X5' is nullable and 'Object' isn't.
//  - 'Object' is from 'dart:core'.
//   Object v5 = x5; // Error.
//               ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:51:8: Error: The value 'null' can't be assigned to a variable of type 'X5' because 'X5' is not nullable.
//   x5 = null; // Error.
//        ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:54:8: Error: The value 'null' can't be assigned to a variable of type 'X6' because 'X6' is not nullable.
//   x6 = null; // Error.
//        ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:57:8: Error: The value 'null' can't be assigned to a variable of type 'X7' because 'X7' is not nullable.
//   x7 = null; // Error.
//        ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:62:16: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object' because 'Object?' is nullable and 'Object' isn't.
//  - 'Object' is from 'dart:core'.
//   Object v12 = v11; // Error.
//                ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:67:9: Error: The value 'null' can't be assigned to a variable of type 'Object' because 'Object' is not nullable.
//  - 'Object' is from 'dart:core'.
//   v21 = null; // Error.
//         ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:70:16: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object' because 'Object?' is nullable and 'Object' isn't.
//  - 'Object' is from 'dart:core'.
//   Object v32 = v31; // Error.
//                ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:75:9: Error: The value 'null' can't be assigned to a variable of type 'Object' because 'Object' is not nullable.
//  - 'Object' is from 'dart:core'.
//   v41 = null; // Error.
//         ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:78:16: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object' because 'Object?' is nullable and 'Object' isn't.
//  - 'Object' is from 'dart:core'.
//   Object v52 = v51; // Error.
//                ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:83:9: Error: The value 'null' can't be assigned to a variable of type 'Object' because 'Object' is not nullable.
//  - 'Object' is from 'dart:core'.
//   v61 = null; // Error.
//         ^
//
// pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:87:9: Error: The value 'null' can't be assigned to a variable of type 'Object' because 'Object' is not nullable.
//  - 'Object' is from 'dart:core'.
//   v71 = null; // Error.
//         ^
//
import self as self;
import "dart:core" as core;

extension type E1(core::Object it) {
  abstract extension-type-member representation-field get it() → core::Object;
  constructor • = self::E1|constructor#;
  constructor tearoff • = self::E1|constructor#_#new#tearOff;
}
extension type E2(core::Object it) implements core::Object {
  abstract extension-type-member representation-field get it() → core::Object;
  constructor • = self::E2|constructor#;
  constructor tearoff • = self::E2|constructor#_#new#tearOff;
}
extension type E3(core::Object it) implements self::E1% /* erasure=core::Object, declared=! */ {
  abstract extension-type-member representation-field get it() → core::Object;
  constructor • = self::E3|constructor#;
  constructor tearoff • = self::E3|constructor#_#new#tearOff;
}
extension type E4(core::Object it) implements self::E2 /* erasure=core::Object */ {
  abstract extension-type-member representation-field get it() → core::Object;
  constructor • = self::E4|constructor#;
  constructor tearoff • = self::E4|constructor#_#new#tearOff;
}
extension type E5<X extends core::Object? = dynamic>(X% it) {
  abstract extension-type-member representation-field get it() → X%;
  constructor • = self::E5|constructor#;
  constructor tearoff • = self::E5|constructor#_#new#tearOff;
}
extension type E6<X extends core::Object>(X it) implements core::Object {
  abstract extension-type-member representation-field get it() → X;
  constructor • = self::E6|constructor#;
  constructor tearoff • = self::E6|constructor#_#new#tearOff;
}
extension type E7(core::num it) implements core::num {
  abstract extension-type-member representation-field get it() → core::num;
  constructor • = self::E7|constructor#;
  constructor tearoff • = self::E7|constructor#_#new#tearOff;
}
static extension-type-member method E1|constructor#(core::Object it) → self::E1% /* erasure=core::Object, declared=! */ {
  lowered final self::E1% /* erasure=core::Object, declared=! */ #this = it;
  return #this;
}
static extension-type-member method E1|constructor#_#new#tearOff(core::Object it) → self::E1% /* erasure=core::Object, declared=! */
  return self::E1|constructor#(it);
static extension-type-member method E2|constructor#(core::Object it) → self::E2 /* erasure=core::Object */ {
  lowered final self::E2 /* erasure=core::Object */ #this = it;
  return #this;
}
static extension-type-member method E2|constructor#_#new#tearOff(core::Object it) → self::E2 /* erasure=core::Object */
  return self::E2|constructor#(it);
static extension-type-member method E3|constructor#(core::Object it) → self::E3% /* erasure=core::Object, declared=! */ {
  lowered final self::E3% /* erasure=core::Object, declared=! */ #this = it;
  return #this;
}
static extension-type-member method E3|constructor#_#new#tearOff(core::Object it) → self::E3% /* erasure=core::Object, declared=! */
  return self::E3|constructor#(it);
static extension-type-member method E4|constructor#(core::Object it) → self::E4 /* erasure=core::Object */ {
  lowered final self::E4 /* erasure=core::Object */ #this = it;
  return #this;
}
static extension-type-member method E4|constructor#_#new#tearOff(core::Object it) → self::E4 /* erasure=core::Object */
  return self::E4|constructor#(it);
static extension-type-member method E5|constructor#<X extends core::Object? = dynamic>(self::E5|constructor#::X% it) → self::E5<self::E5|constructor#::X%>% /* erasure=self::E5|constructor#::X%, declared=! */ {
  lowered final self::E5<self::E5|constructor#::X%>% /* erasure=self::E5|constructor#::X%, declared=! */ #this = it;
  return #this;
}
static extension-type-member method E5|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E5|constructor#_#new#tearOff::X% it) → self::E5<self::E5|constructor#_#new#tearOff::X%>% /* erasure=self::E5|constructor#_#new#tearOff::X%, declared=! */
  return self::E5|constructor#<self::E5|constructor#_#new#tearOff::X%>(it);
static extension-type-member method E6|constructor#<X extends core::Object>(self::E6|constructor#::X it) → self::E6<self::E6|constructor#::X> /* erasure=self::E6|constructor#::X */ {
  lowered final self::E6<self::E6|constructor#::X> /* erasure=self::E6|constructor#::X */ #this = it;
  return #this;
}
static extension-type-member method E6|constructor#_#new#tearOff<X extends core::Object>(self::E6|constructor#_#new#tearOff::X it) → self::E6<self::E6|constructor#_#new#tearOff::X> /* erasure=self::E6|constructor#_#new#tearOff::X */
  return self::E6|constructor#<self::E6|constructor#_#new#tearOff::X>(it);
static extension-type-member method E7|constructor#(core::num it) → self::E7 /* erasure=core::num */ {
  lowered final self::E7 /* erasure=core::num */ #this = it;
  return #this;
}
static extension-type-member method E7|constructor#_#new#tearOff(core::num it) → self::E7 /* erasure=core::num */
  return self::E7|constructor#(it);
static method test1(self::E1% /* erasure=core::Object, declared=! */ e1, self::E2 /* erasure=core::Object */ e2, self::E3% /* erasure=core::Object, declared=! */ e3, self::E4 /* erasure=core::Object */ e4, self::E5<dynamic>% /* erasure=dynamic, declared=! */ e5, self::E6<core::Object> /* erasure=core::Object */ e6, self::E7 /* erasure=core::num */ e7) → dynamic {
  core::Object v1 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:14:15: Error: A value of type 'E1' can't be assigned to a variable of type 'Object' because 'E1' is nullable and 'Object' isn't.
 - 'Object' is from 'dart:core'.
  Object v1 = e1; // Error.
              ^" in e1 as{TypeError} core::Object;
  e1 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:15:8: Error: The value 'null' can't be assigned to a variable of type 'E1' because 'E1' is not nullable.
  e1 = null; // Error.
       ^" in null as{TypeError} self::E1% /* erasure=core::Object, declared=! */;
  core::Object v2 = e2;
  e2 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:18:8: Error: The value 'null' can't be assigned to a variable of type 'E2' because 'E2' is not nullable.
  e2 = null; // Error.
       ^" in null as{TypeError} self::E2 /* erasure=core::Object */;
  core::Object v3 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:20:15: Error: A value of type 'E3' can't be assigned to a variable of type 'Object' because 'E3' is nullable and 'Object' isn't.
 - 'Object' is from 'dart:core'.
  Object v3 = e3; // Error.
              ^" in e3 as{TypeError} core::Object;
  e3 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:21:8: Error: The value 'null' can't be assigned to a variable of type 'E3' because 'E3' is not nullable.
  e3 = null; // Error.
       ^" in null as{TypeError} self::E3% /* erasure=core::Object, declared=! */;
  core::Object v4 = e4;
  e4 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:24:8: Error: The value 'null' can't be assigned to a variable of type 'E4' because 'E4' is not nullable.
  e4 = null; // Error.
       ^" in null as{TypeError} self::E4 /* erasure=core::Object */;
  core::Object v5 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:26:15: Error: A value of type 'E5<dynamic>' can't be assigned to a variable of type 'Object' because 'E5<dynamic>' is nullable and 'Object' isn't.
 - 'Object' is from 'dart:core'.
  Object v5 = e5; // Error.
              ^" in e5 as{TypeError} core::Object;
  e5 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:27:8: Error: The value 'null' can't be assigned to a variable of type 'E5<dynamic>' because 'E5<dynamic>' is not nullable.
  e5 = null; // Error.
       ^" in null as{TypeError} self::E5<dynamic>% /* erasure=dynamic, declared=! */;
  core::Object v6 = e6;
  e6 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:30:8: Error: The value 'null' can't be assigned to a variable of type 'E6<Object>' because 'E6<Object>' is not nullable.
 - 'Object' is from 'dart:core'.
  e6 = null; // Error.
       ^" in null as{TypeError} self::E6<core::Object> /* erasure=core::Object */;
  core::Object v7 = e7;
  e7 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:33:8: Error: The value 'null' can't be assigned to a variable of type 'E7' because 'E7' is not nullable.
  e7 = null; // Error.
       ^" in null as{TypeError} self::E7 /* erasure=core::num */;
}
static method test2<X1 extends self::E1% /* erasure=core::Object, declared=! */, X2 extends self::E2 /* erasure=core::Object */, X3 extends self::E3% /* erasure=core::Object, declared=! */, X4 extends self::E4 /* erasure=core::Object */, X5 extends self::E5<dynamic>% /* erasure=dynamic, declared=! */, X6 extends self::E6<core::Object> /* erasure=core::Object */, X7 extends self::E7 /* erasure=core::num */>(self::test2::X1% x1, self::test2::X2 x2, self::test2::X3% x3, self::test2::X4 x4, self::test2::X5% x5, self::test2::X6 x6, self::test2::X7 x7) → dynamic {
  core::Object v1 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:38:15: Error: A value of type 'X1' can't be assigned to a variable of type 'Object' because 'X1' is nullable and 'Object' isn't.
 - 'Object' is from 'dart:core'.
  Object v1 = x1; // Error.
              ^" in x1 as{TypeError} core::Object;
  x1 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:39:8: Error: The value 'null' can't be assigned to a variable of type 'X1' because 'X1' is not nullable.
  x1 = null; // Error.
       ^" in null as{TypeError} Never;
  core::Object v2 = x2;
  x2 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:42:8: Error: The value 'null' can't be assigned to a variable of type 'X2' because 'X2' is not nullable.
  x2 = null; // Error.
       ^" in null as{TypeError} Never;
  core::Object v3 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:44:15: Error: A value of type 'X3' can't be assigned to a variable of type 'Object' because 'X3' is nullable and 'Object' isn't.
 - 'Object' is from 'dart:core'.
  Object v3 = x3; // Error.
              ^" in x3 as{TypeError} core::Object;
  x3 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:45:8: Error: The value 'null' can't be assigned to a variable of type 'X3' because 'X3' is not nullable.
  x3 = null; // Error.
       ^" in null as{TypeError} Never;
  core::Object v4 = x4;
  x4 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:48:8: Error: The value 'null' can't be assigned to a variable of type 'X4' because 'X4' is not nullable.
  x4 = null; // Error.
       ^" in null as{TypeError} Never;
  core::Object v5 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:50:15: Error: A value of type 'X5' can't be assigned to a variable of type 'Object' because 'X5' is nullable and 'Object' isn't.
 - 'Object' is from 'dart:core'.
  Object v5 = x5; // Error.
              ^" in x5 as{TypeError} core::Object;
  x5 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:51:8: Error: The value 'null' can't be assigned to a variable of type 'X5' because 'X5' is not nullable.
  x5 = null; // Error.
       ^" in null as{TypeError} Never;
  core::Object v6 = x6;
  x6 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:54:8: Error: The value 'null' can't be assigned to a variable of type 'X6' because 'X6' is not nullable.
  x6 = null; // Error.
       ^" in null as{TypeError} Never;
  core::Object v7 = x7;
  x7 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:57:8: Error: The value 'null' can't be assigned to a variable of type 'X7' because 'X7' is not nullable.
  x7 = null; // Error.
       ^" in null as{TypeError} Never;
}
static method test3(self::E1% /* erasure=core::Object, declared=! */ e1, self::E2 /* erasure=core::Object */ e2, self::E3% /* erasure=core::Object, declared=! */ e3, self::E4 /* erasure=core::Object */ e4, self::E5<dynamic>% /* erasure=dynamic, declared=! */ e5, self::E6<core::Object> /* erasure=core::Object */ e6, self::E7 /* erasure=core::num */ e7, core::String s, core::bool b) → dynamic {
  core::Object? v11 = b ?{core::Object?} e1 : s;
  core::Object v12 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:62:16: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object' because 'Object?' is nullable and 'Object' isn't.
 - 'Object' is from 'dart:core'.
  Object v12 = v11; // Error.
               ^" in v11 as{TypeError} core::Object;
  v11 = null;
  core::Object v21 = b ?{core::Object} e2 : s;
  core::Object v22 = v21;
  v21 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:67:9: Error: The value 'null' can't be assigned to a variable of type 'Object' because 'Object' is not nullable.
 - 'Object' is from 'dart:core'.
  v21 = null; // Error.
        ^" in null as{TypeError} core::Object;
  core::Object? v31 = b ?{core::Object?} e3 : s;
  core::Object v32 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:70:16: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object' because 'Object?' is nullable and 'Object' isn't.
 - 'Object' is from 'dart:core'.
  Object v32 = v31; // Error.
               ^" in v31 as{TypeError} core::Object;
  v31 = null;
  core::Object v41 = b ?{core::Object} e4 : s;
  core::Object v42 = v41;
  v41 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:75:9: Error: The value 'null' can't be assigned to a variable of type 'Object' because 'Object' is not nullable.
 - 'Object' is from 'dart:core'.
  v41 = null; // Error.
        ^" in null as{TypeError} core::Object;
  core::Object? v51 = b ?{core::Object?} e5 : s;
  core::Object v52 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:78:16: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object' because 'Object?' is nullable and 'Object' isn't.
 - 'Object' is from 'dart:core'.
  Object v52 = v51; // Error.
               ^" in v51 as{TypeError} core::Object;
  v51 = null;
  core::Object v61 = b ?{core::Object} e6 : s;
  core::Object v62 = v61;
  v61 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:83:9: Error: The value 'null' can't be assigned to a variable of type 'Object' because 'Object' is not nullable.
 - 'Object' is from 'dart:core'.
  v61 = null; // Error.
        ^" in null as{TypeError} core::Object;
  core::Object v71 = b ?{core::Object} e7 : s;
  core::Object v72 = v71;
  v71 = invalid-expression "pkg/front_end/testcases/extension_types/non_nullable_if_implements_object.dart:87:9: Error: The value 'null' can't be assigned to a variable of type 'Object' because 'Object' is not nullable.
 - 'Object' is from 'dart:core'.
  v71 = null; // Error.
        ^" in null as{TypeError} core::Object;
}
