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, #C23);
  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 = #C24;
static const field (core::int) → core::int partialInstantiation = #C25;
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 = tearoff var::id1
  #C3 = partial-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 = 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 = eval const core::identical(#C3, const core::bool::fromEnvironment(#C15) ?{(core::int) → core::int} #C2<core::int> : #C20<core::int>)
  #C24 = tearoff core::identical
  #C25 = eval const core::bool::fromEnvironment(#C15) ?{(core::int) → core::int} #C2<core::int> : #C20<core::int>
}

Extra constant evaluation status:
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various_2.dart:15:28 -> PartialInstantiationConstant(id2<int>)
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various_2.dart:37:5 -> BoolConstant(false)
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various_2.dart:37:5 -> BoolConstant(false)
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various_2_lib.dart:20:39 -> PartialInstantiationConstant(id2<int>)
Extra constant evaluation: evaluated: 41, effectively constant: 4


Constructor coverage from constants:
org-dartlang-testcase:///various_2.dart:
- Class. (from org-dartlang-testcase:///various_2_lib.dart:8:9)

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