Bytecode
Dynamic Module Entry Point: DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::main
Library 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart'
    name '#lib'
    script 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart'

Class '', script = 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart'


Function 'foo1', static, reflectable, debuggable
    parameters [] (required: 0)
    return-type dynamic

Bytecode {
  Entry                0
  CheckStack           0
  Allocate             CP#0
  Dup
  PushConstant         CP#1
  DirectCall           CP#2, 2
  Drop1
  ReturnTOS
}
ConstantPool {
  [0] = Class DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::C
  [1] = ObjectRef 'hello'
  [2] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::C:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
  [3] = Reserved
}


Function 'foo2', static, reflectable, debuggable
    parameters [] (required: 0)
    return-type void

Bytecode {
  Entry                0
  CheckStack           0
  PushConstant         CP#1
  PushConstant         CP#0
  AllocateT
  Dup
  PushConstant         CP#2
  DirectCall           CP#3, 2
  Drop1
  Drop1
  PushConstant         CP#6
  PushConstant         CP#5
  AllocateT
  Dup
  DirectCall           CP#7, 1
  Drop1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = Class DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::A
  [1] = ObjectRef < dart:core::int, dart:core::String >
  [2] = ObjectRef 'hi'
  [3] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::A:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
  [4] = Reserved
  [5] = Class DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::B
  [6] = ObjectRef < dart:core::List < dart:core::int >, dart:core::String, dart:core::int >
  [7] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::B:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [8] = Reserved
}


Function 'foo3', static, reflectable, debuggable
    type-params <'T' extends dart:core::Object? (default dynamic)>
    parameters [] (required: 0)
    return-type void

Bytecode {
  Entry                1
  CheckFunctionTypeArgs 1, r0
  CheckStack           0
  PushNull
  Push                 r0
  InstantiateTypeArgumentsTOS 0, CP#1
  PushConstant         CP#0
  AllocateT
  Dup
  DirectCall           CP#2, 1
  Drop1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = Class DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::B
  [1] = ObjectRef < dart:core::List < dart:core::List < DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::foo3::TypeParam/0 > >, dart:core::String, dart:core::List < DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::foo3::TypeParam/0 > >
  [2] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::B:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [3] = Reserved
}


Function 'foo4', static, reflectable, debuggable
    parameters [] (required: 0)
    return-type void

Bytecode {
  Entry                0
  CheckStack           0
  PushConstant         CP#0
  DirectCall           CP#1, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ObjectRef < dart:core::int, dart:core::List < dart:core::String > >
  [1] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::G::testFactory (constructor)', ArgDesc num-args 0, num-type-args 2, names []
  [2] = Reserved
}


Function 'foo5', static, reflectable, debuggable
    parameters [] (required: 0)
    return-type void

Bytecode {
  Entry                0
  CheckStack           0
  DirectCall           CP#0, 0
  Drop1
  PushInt              42
  DirectCall           CP#2, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::I::testFactory2 (constructor)', ArgDesc num-args 0, num-type-args 0, names []
  [1] = Reserved
  [2] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::I::testFactory2 (constructor)', ArgDesc num-args 1, num-type-args 0, names ['param']
  [3] = Reserved
}


Function 'foo6', static, reflectable, debuggable
    parameters [] (required: 0)
    return-type dynamic

Bytecode {
  Entry                0
  CheckStack           0
  PushConstant         CP#0
  DirectCall           CP#1, 1
  ReturnTOS
}
ConstantPool {
  [0] = ObjectRef < dart:core::String >
  [1] = DirectCall 'dart:core::_List::empty (constructor)', ArgDesc num-args 0, num-type-args 1, names []
  [2] = Reserved
}


Function 'foo7', static, reflectable, debuggable
    parameters [dart:core::int 'n'] (required: 1)
    return-type dynamic

Bytecode {
  Entry                0
  CheckStack           0
  PushConstant         CP#0
  Push                 FP[-5]
  PushInt              0
  DirectCall           CP#1, 3
  ReturnTOS
}
ConstantPool {
  [0] = ObjectRef < dart:core::int >
  [1] = DirectCall 'dart:core::_List::filled (constructor)', ArgDesc num-args 2, num-type-args 1, names []
  [2] = Reserved
}


Function 'main', static, reflectable, debuggable
    parameters [] (required: 0)
    return-type dynamic

Bytecode {
  Entry                0
  CheckStack           0
  DirectCall           CP#0, 0
  Drop1
  DirectCall           CP#2, 0
  Drop1
  PushConstant         CP#4
  DirectCall           CP#5, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::foo1', ArgDesc num-args 0, num-type-args 0, names []
  [1] = Reserved
  [2] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::foo2', ArgDesc num-args 0, num-type-args 0, names []
  [3] = Reserved
  [4] = ObjectRef < dart:core::String >
  [5] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::foo3', ArgDesc num-args 0, num-type-args 1, names []
  [6] = Reserved
}

Class 'Base', script = 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart'
    type-params <'T1' extends dart:core::Object? (default dynamic), 'T2' extends dart:core::Object? (default dynamic)> (args: 2)
    extends dart:core::Object

Field 't1', type = DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::Base::TypeParam/0?, getter = 'get:t1', setter = 'set:t1', reflectable, has-initializer
    value = null

Field 't2', type = DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::Base::TypeParam/1?, getter = 'get:t2', setter = 'set:t2', reflectable, has-initializer
    value = null

Function '', constructor, reflectable, debuggable
    parameters [] (required: 0)
    return-type DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::Base < DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::Base::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::Base::TypeParam/1 >

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  PushInt              4
  CreateArrayTOS
  Dup
  PushInt              0
  PushConstant         CP#2
  StoreIndexedTOS
  Dup
  PushInt              1
  Push                 FP[-5]
  LoadTypeArgumentsField CP#3
  PushNull
  InstantiateType      CP#4
  StoreIndexedTOS
  Dup
  PushInt              2
  PushConstant         CP#5
  StoreIndexedTOS
  Dup
  PushInt              3
  Push                 FP[-5]
  LoadTypeArgumentsField CP#3
  PushNull
  InstantiateType      CP#6
  StoreIndexedTOS
  DirectCall           CP#7, 1
  DirectCall           CP#9, 1
  Drop1
  PushNull
  ReturnTOS
}
Nullable fields: [DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::Base::t1 (field), DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::Base::t2 (field)]
ConstantPool {
  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
  [2] = ObjectRef 'Base: '
  [3] = TypeArgumentsField DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::Base
  [4] = Type DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::Base::TypeParam/0
  [5] = ObjectRef ', '
  [6] = Type DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::Base::TypeParam/1
  [7] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
  [8] = Reserved
  [9] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [10] = Reserved
}

Class 'A', script = 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart'
    extends DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::Base < dart:core::int, dart:core::String >


Function '', constructor, reflectable, debuggable
    parameters [dart:core::String 's'] (required: 1)
    return-type DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::A

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-6]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::Base:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}

Class 'B', script = 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart'
    type-params <'T' extends dart:core::Object? (default dynamic)> (args: 3)
    extends DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::Base < dart:core::List < DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::B::TypeParam/0 >, dart:core::String >


Function '', constructor, reflectable, debuggable
    parameters [] (required: 0)
    return-type DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::B < DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::B::TypeParam/0 >

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  PushInt              2
  CreateArrayTOS
  Dup
  PushInt              0
  PushConstant         CP#2
  StoreIndexedTOS
  Dup
  PushInt              1
  Push                 FP[-5]
  LoadTypeArgumentsField CP#3
  PushNull
  InstantiateType      CP#4
  StoreIndexedTOS
  DirectCall           CP#5, 1
  DirectCall           CP#7, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::Base:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
  [2] = ObjectRef 'B: '
  [3] = TypeArgumentsField DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::B
  [4] = Type DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::B::TypeParam/0
  [5] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
  [6] = Reserved
  [7] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [8] = Reserved
}

Class 'C', script = 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart'
    extends dart:core::Object


Function '', constructor, reflectable, debuggable
    parameters [dart:core::String 's'] (required: 1)
    return-type DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::C

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-6]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  PushInt              2
  CreateArrayTOS
  Dup
  PushInt              0
  PushConstant         CP#2
  StoreIndexedTOS
  Dup
  PushInt              1
  Push                 FP[-5]
  StoreIndexedTOS
  DirectCall           CP#3, 1
  DirectCall           CP#5, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
  [2] = ObjectRef 'C: '
  [3] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
  [4] = Reserved
  [5] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [6] = Reserved
}

Class 'E', script = 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart'
    type-params <'K' extends dart:core::Object? (default dynamic), 'V' extends dart:core::Object? (default dynamic)> (args: 2)
    extends dart:core::Object


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::E < DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::E::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::E::TypeParam/1 >

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}


Function 'testReuse1', reflectable, debuggable
    parameters [] (required: 0)
    return-type dynamic

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  LoadTypeArgumentsField CP#0
  DirectCall           CP#1, 1
  ReturnTOS
}
ConstantPool {
  [0] = TypeArgumentsField DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::E
  [1] = DirectCall 'dart:core::Map:: (constructor)', ArgDesc num-args 0, num-type-args 2, names []
  [2] = Reserved
}

Class 'F', script = 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart'
    type-params <'K' extends dart:core::Object? (default dynamic), 'V' extends dart:core::Object? (default dynamic)> (args: 4)
    extends DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::E < dart:core::String, dart:core::List < DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::F::TypeParam/1 > >


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::F < DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::F::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::F::TypeParam/1 >

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::E:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}


Function 'testReuse2', reflectable, debuggable
    parameters [] (required: 0)
    return-type dynamic

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  LoadTypeArgumentsField CP#0
  DirectCall           CP#1, 1
  ReturnTOS
}
ConstantPool {
  [0] = TypeArgumentsField DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::F
  [1] = DirectCall 'dart:core::Map:: (constructor)', ArgDesc num-args 0, num-type-args 2, names []
  [2] = Reserved
}

Class 'G', script = 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart'
    type-params <'K' extends dart:core::Object? (default dynamic), 'V' extends dart:core::Object? (default dynamic)> (args: 2)
    extends dart:core::Object


Function '', constructor, reflectable, debuggable
    parameters [] (required: 0)
    return-type DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::G < DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::G::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::G::TypeParam/1 >

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}


Function 'testFactory', factory, static, reflectable, debuggable
    type-params <'K' extends dart:core::Object? (default dynamic), 'V' extends dart:core::Object? (default dynamic)>
    parameters [] (required: 0)
    return-type DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::G < DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::G::testFactory (constructor)::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::G::testFactory (constructor)::TypeParam/1 >

Bytecode {
  Entry                1
  CheckFunctionTypeArgs 2, r0
  CheckStack           0
  PushNull
  Push                 r0
  InstantiateTypeArgumentsTOS 0, CP#1
  PushConstant         CP#0
  AllocateT
  Dup
  DirectCall           CP#2, 1
  Drop1
  ReturnTOS
}
ConstantPool {
  [0] = Class DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::H
  [1] = ObjectRef < DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::G::testFactory (constructor)::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::G::testFactory (constructor)::TypeParam/1, dart:core::String, DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::G::testFactory (constructor)::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::G::testFactory (constructor)::TypeParam/1 >
  [2] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::H:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [3] = Reserved
}

Class 'H', script = 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart'
    type-params <'P1' extends dart:core::Object? (default dynamic), 'P2' extends dart:core::Object? (default dynamic), 'P3' extends dart:core::Object? (default dynamic)> (args: 5)
    extends DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::G < DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::H::TypeParam/1, DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::H::TypeParam/2 >


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::H < DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::H::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::H::TypeParam/1, DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::H::TypeParam/2 >

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::G:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}

Class 'I', script = 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart'
    extends dart:core::Object


Function '', constructor, reflectable, debuggable
    parameters [dynamic 'param'] (required: 1)
    return-type DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::I

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-6]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}


Function 'testFactory2', factory, static, has-optional-named-params, reflectable, debuggable
    parameters [dynamic 'param'] (required: 0)
    return-type DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::I

Bytecode {
  EntryOptional        0, 0, 1
  LoadConstant         r0, CP#0
  LoadConstant         r0, CP#1
  Frame                0
  CheckStack           0
  Allocate             CP#2
  Dup
  Push                 r0
  DirectCall           CP#3, 2
  Drop1
  ReturnTOS
}
ConstantPool {
  [0] = ObjectRef 'param'
  [1] = ObjectRef null
  [2] = Class DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::I
  [3] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::I:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
  [4] = Reserved
}

Class 'J', script = 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart'
    extends dart:core::Object


Function '_', constructor, reflectable, debuggable
    parameters [] (required: 0)
    return-type DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::J

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}


Function '', factory, static, reflectable, debuggable
    parameters [] (required: 0)
    return-type DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::J

Bytecode {
  Entry                0
  CheckStack           0
  Allocate             CP#0
  Dup
  DirectCall           CP#1, 1
  Drop1
  ReturnTOS
}
ConstantPool {
  [0] = Class DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::J
  [1] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::J::_ (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [2] = Reserved
}

Class 'L', script = 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart', abstract
    type-params <'S' extends dart:core::Object? (default dynamic), 'T' extends dart:core::Object? (default dynamic)> (args: 2)
    extends dart:core::Object


Function '', factory, static, reflectable, debuggable
    type-params <'S' extends dart:core::Object? (default dynamic), 'T' extends dart:core::Object? (default dynamic)>
    parameters [] (required: 0)
    return-type DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::L < DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::L:: (constructor)::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::L:: (constructor)::TypeParam/1 >

Bytecode {
  Entry                1
  CheckFunctionTypeArgs 2, r0
  CheckStack           0
  Push                 r0
  PushConstant         CP#0
  AllocateT
  Dup
  DirectCall           CP#1, 1
  Drop1
  ReturnTOS
}
ConstantPool {
  [0] = Class DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::TestTypeArgReuse
  [1] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::TestTypeArgReuse:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [2] = Reserved
}

Class 'TestTypeArgReuse', script = 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart'
    type-params <'P' extends dart:core::Object? (default dynamic), 'Q' extends dart:core::Object? (default dynamic)> (args: 2)
    extends DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::Base < DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::TestTypeArgReuse::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::TestTypeArgReuse::TypeParam/1 >
    implements [DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::L < DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::TestTypeArgReuse::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::TestTypeArgReuse::TypeParam/1 >]


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::TestTypeArgReuse < DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::TestTypeArgReuse::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::TestTypeArgReuse::TypeParam/1 >

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/instance_creation.dart::Base:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}

