library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "various_2_lib.dart" as var;

import "org-dartlang-testcase:///various_2_lib.dart" as lib;

typedef F1<invariant T extends core::Object? = dynamic> = (T%) → T%;
typedef F2 = <T extends core::Object? = dynamic>(T%) → T%;
static const field core::Type objectTypeLiteral = #C1;
static const field (core::int) → core::int partialInstantiation = #C3;
static const field var::Class<core::int> instance = #C5;
static const field var::Class<dynamic> instance2 = #C8;
static const field core::Type functionTypeLiteral = #C9;
static const field core::Type genericFunctionTypeLiteral = #C10;
static const field core::List<core::int> listLiteral = #C11;
static const field core::List<dynamic> listLiteral2 = #C12;
static const field core::Set<core::int> setLiteral = #C13;
static const field core::Set<dynamic> setLiteral2 = #C14;
static const field core::Map<core::int, core::String> mapLiteral = #C16;
static const field core::Map<dynamic, dynamic> mapLiteral2 = #C18;
static const field core::List<core::int> listConcatenation = #C11;
static const field core::Set<core::int> setConcatenation = #C13;
static const field core::Map<core::int, core::String> mapConcatenation = #C16;
static const field core::bool objectTypeLiteralIdentical = #C19;
static const field core::bool partialInstantiationIdentical = #C21;
static const field core::bool instanceIdentical = #C19;
static const field core::bool instance2Identical = #C19;
static const field core::bool functionTypeLiteralIdentical = #C19;
static const field core::bool genericFunctionTypeLiteralIdentical = #C19;
static const field core::bool listLiteralIdentical = #C19;
static const field core::bool listLiteral2Identical = #C19;
static const field core::bool setLiteralIdentical = #C19;
static const field core::bool setLiteral2Identical = #C19;
static const field core::bool mapLiteralIdentical = #C19;
static const field core::bool mapLiteral2Identical = #C19;
static const field core::bool listConcatenationIdentical = #C19;
static const field core::bool setConcatenationIdentical = #C19;
static const field core::bool mapConcatenationIdentical = #C19;
static method main() → dynamic {
  self::test(#C1, #C1);
  self::test(#C3, #C22);
  self::test(#C5, #C5);
  self::test(#C9, #C9);
  self::test(#C10, #C10);
  self::test(#C11, #C11);
  self::test(#C13, #C13);
  self::test(#C16, #C16);
  self::test(#C11, #C11);
  self::test(#C13, #C13);
  self::test(#C16, #C16);
  self::test(true, #C19);
  self::test(true, #C21);
  self::test(true, #C19);
  self::test(true, #C19);
  self::test(true, #C19);
  self::test(true, #C19);
  self::test(true, #C19);
  self::test(true, #C19);
  self::test(true, #C19);
  self::test(true, #C19);
  self::test(true, #C19);
}
static method test(dynamic expected, dynamic actual) → dynamic {
  core::print("test(${expected}, ${actual})");
  if(!core::identical(expected, actual)) {
    throw "Expected ${expected}, actual ${actual}";
  }
}

library /*isNonNullableByDefault*/;
import self as var;
import "dart:core" as core;

typedef F1<invariant T extends core::Object? = dynamic> = (T%) → T%;
typedef F2 = <T extends core::Object? = dynamic>(T%) → T%;
class Class<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
  final field var::Class::T% field;
  const constructor •(var::Class::T% field) → var::Class<var::Class::T%>
    : var::Class::field = field, super core::Object::•()
    ;
}
static const field core::Type objectTypeLiteral = #C1;
static const field (core::Object?, core::Object?) → core::bool c2 = #C23;
static const field (core::int) → core::int partialInstantiation = #C22;
static const field var::Class<core::int> instance = #C5;
static const field var::Class<dynamic> instance2 = #C8;
static const field core::Type functionTypeLiteral = #C9;
static const field core::Type genericFunctionTypeLiteral = #C10;
static const field core::List<core::int> listLiteral = #C11;
static const field core::List<dynamic> listLiteral2 = #C12;
static const field core::Set<core::int> setLiteral = #C13;
static const field core::Set<dynamic> setLiteral2 = #C14;
static const field core::Map<core::int, core::String> mapLiteral = #C16;
static const field core::Map<dynamic, dynamic> mapLiteral2 = #C18;
static const field core::List<core::int> listConcatenation = #C11;
static const field core::Set<core::int> setConcatenation = #C13;
static const field core::Map<core::int, core::String> mapConcatenation = #C16;
static method id1<T extends core::Object? = dynamic>(var::id1::T% t) → var::id1::T%
  return t;
static method id2<T extends core::Object? = dynamic>(var::id2::T% t) → var::id2::T%
  return t;

constants  {
  #C1 = TypeLiteralConstant(core::Object*)
  #C2 = static-tearoff var::id1
  #C3 = instantiation var::id1 <core::int*>
  #C4 = 0
  #C5 = var::Class<core::int*> {field:#C4}
  #C6 = 42
  #C7 = <core::int*>[#C6]
  #C8 = var::Class<dynamic> {field:#C7}
  #C9 = TypeLiteralConstant((dynamic) →* dynamic)
  #C10 = TypeLiteralConstant(<T extends core::Object? = dynamic>(T*) →* T*)
  #C11 = <core::int*>[#C4]
  #C12 = <dynamic>[#C7]
  #C13 = <core::int*>{#C4}
  #C14 = <dynamic>{#C7}
  #C15 = "foo"
  #C16 = <core::int*, core::String*>{#C4:#C15)
  #C17 = null
  #C18 = <dynamic, dynamic>{#C7:#C15, #C17:#C7)
  #C19 = true
  #C20 = static-tearoff var::id2
  #C21 = eval const core::identical(#C3, const core::bool::fromEnvironment(#C15) ?{(core::int) → core::int} #C2<core::int> : #C20<core::int>)
  #C22 = eval const core::bool::fromEnvironment(#C15) ?{(core::int) → core::int} #C2<core::int> : #C20<core::int>
  #C23 = static-tearoff core::identical
}


Constructor coverage from constants:
org-dartlang-testcase:///various_2.dart:
- Class. (from org-dartlang-testcase:///various_2_lib.dart:8:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)

org-dartlang-testcase:///various_2_lib.dart:
- Class. (from org-dartlang-testcase:///various_2_lib.dart:8:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
