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

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


Function 'simpleClosure', static, reflectable, debuggable
    parameters [] (required: 0)
    return-type dart:core::int

Bytecode {
  Entry                4
  CheckStack           0
  AllocateContext      0, 1
  PopLocal             r0
  Push                 r0
  PushInt              5
  StoreContextVar      0, 0
  PushConstant         CP#0
  Push                 r0
  PushNull
  AllocateClosure
  StoreLocal           r3
  PopLocal             r2
  Push                 r2
  StoreLocal           r3
  PushInt              3
  Push                 r3
  UncheckedClosureCall CP#7, 2
  Drop1
  Push                 r0
  LoadContextVar       0, 0
  ReturnTOS
}
ConstantPool {
  [0] = ClosureFunction 0
  [1] = InstanceField dart:core::_Closure::_context (field)
  [2] = Reserved
  [3] = Type dart:core::int
  [4] = ObjectRef 'y'
  [5] = SubtypeTestCache
  [6] = EndClosureFunctionScope
  [7] = ObjectRef ArgDesc num-args 2, num-type-args 0, names []
}
Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::simpleClosure::'<anonymous closure>' (dart:core::int y) -> Null
ClosureCode {
  Entry                3
  Push                 FP[-6]
  LoadFieldTOS         CP#1
  PopLocal             r0
  CheckStack           0
  JumpIfUnchecked      L1
  Push                 FP[-5]
  PushConstant         CP#3
  PushNull
  PushNull
  PushConstant         CP#4
  AssertAssignable     1, CP#5
  Drop1
L1:
  Push                 r0
  Push                 r0
  LoadContextVar       0, 0
  Push                 FP[-5]
  AddInt
  StoreContextVar      0, 0
  PushNull
  ReturnTOS
}


Function 'callWithArgs', static, reflectable, debuggable
    type-params <'T1' extends dart:core::Object? (default dynamic), 'T2' extends dart:core::Object? (default dynamic), 'T3' extends dart:core::Object? (default dynamic), 'T4' extends dart:core::Object? (default dynamic), 'T5' extends dart:core::Object? (default dynamic), 'T6' extends dart:core::Object? (default dynamic), 'T7' extends dart:core::Object? (default dynamic), 'T8' extends dart:core::Object? (default dynamic)>
    parameters [] (required: 0)
    return-type void

Bytecode {
  Entry                1
  CheckFunctionTypeArgs 8, r0
  CheckStack           0
  PushConstant         CP#0
  PushNull
  Push                 r0
  InstantiateType      CP#1
  PushNull
  Push                 r0
  InstantiateType      CP#2
  PushNull
  Push                 r0
  InstantiateType      CP#3
  PushNull
  Push                 r0
  InstantiateType      CP#4
  PushNull
  Push                 r0
  InstantiateType      CP#5
  PushNull
  Push                 r0
  InstantiateType      CP#6
  PushNull
  Push                 r0
  InstantiateType      CP#7
  PushNull
  Push                 r0
  InstantiateType      CP#8
  DirectCall           CP#9, 9
  DirectCall           CP#11, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ObjectRef < dart:core::Type >
  [1] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::callWithArgs::TypeParam/0
  [2] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::callWithArgs::TypeParam/1
  [3] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::callWithArgs::TypeParam/2
  [4] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::callWithArgs::TypeParam/3
  [5] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::callWithArgs::TypeParam/4
  [6] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::callWithArgs::TypeParam/5
  [7] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::callWithArgs::TypeParam/6
  [8] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::callWithArgs::TypeParam/7
  [9] = DirectCall 'dart:core::_GrowableList::_literal8 (constructor)', ArgDesc num-args 9, num-type-args 0, names []
  [10] = Reserved
  [11] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [12] = Reserved
}


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

Bytecode {
  Entry                1
  CheckStack           0
  PushConstant         CP#0
  PushConstant         CP#2
  PushConstant         CP#1
  AllocateT
  StoreLocal           r0
  Push                 r0
  DirectCall           CP#3, 1
  Drop1
  InterfaceCall        CP#5, 2
  Drop1
  PushConstant         CP#7
  PushConstant         CP#2
  PushConstant         CP#1
  AllocateT
  StoreLocal           r0
  Push                 r0
  DirectCall           CP#3, 1
  Drop1
  InterfaceCall        CP#5, 2
  Drop1
  PushConstant         CP#7
  PushConstant         CP#8
  PushConstant         CP#1
  AllocateT
  StoreLocal           r0
  Push                 r0
  DirectCall           CP#3, 1
  Drop1
  InterfaceCall        CP#5, 2
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ObjectRef < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C3, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C4 >
  [1] = Class DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A
  [2] = ObjectRef < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C1, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C2 >
  [3] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [4] = Reserved
  [5] = InterfaceCall 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo', ArgDesc num-args 1, num-type-args 2, names []
  [6] = Reserved
  [7] = ObjectRef < dart:core::List < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C3 >, dart:core::List < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C4 > >
  [8] = ObjectRef < dart:core::List < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C1 >, dart:core::List < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C2 > >
}


Function 'testPartialInstantiation', static, reflectable, debuggable
    parameters [] (required: 0)
    return-type FunctionType (dart:core::int) -> void

Bytecode {
  Entry                7
  CheckStack           0
  PushConstant         CP#0
  Push                 r0
  PushNull
  AllocateClosure
  StoreLocal           r3
  Push                 r3
  PushConstant         CP#5
  StoreFieldTOS        CP#3
  PopLocal             r2
  Push                 r2
  StoreLocal           r3
  PushConstant         CP#14
  StoreLocal           r6
  DirectCall           CP#15, 2
  Drop1
  Push                 r3
  LoadFieldTOS         CP#17
  Push                 r3
  LoadFieldTOS         CP#1
  Push                 r3
  LoadFieldTOS         CP#19
  AllocateClosure
  StoreLocal           r5
  Push                 r6
  StoreFieldTOS        CP#3
  Push                 r5
  Push                 r3
  LoadFieldTOS         CP#6
  StoreFieldTOS        CP#6
  Push                 r5
  PopLocal             r4
  Push                 r4
  ReturnTOS
}
ConstantPool {
  [0] = ClosureFunction 0
  [1] = InstanceField dart:core::_Closure::_context (field)
  [2] = Reserved
  [3] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [4] = Reserved
  [5] = EmptyTypeArguments
  [6] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [7] = Reserved
  [8] = DirectCall 'dart:_internal::_prependTypeArguments', ArgDesc num-args 4, num-type-args 0, names []
  [9] = Reserved
  [10] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::testPartialInstantiation::Closure/0::TypeParam/0
  [11] = ObjectRef 't'
  [12] = SubtypeTestCache
  [13] = EndClosureFunctionScope
  [14] = ObjectRef < dart:core::int >
  [15] = DirectCall 'dart:_internal::_boundsCheckForPartialInstantiation', ArgDesc num-args 2, num-type-args 0, names []
  [16] = Reserved
  [17] = InstanceField dart:core::_Closure::_function (field)
  [18] = Reserved
  [19] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [20] = Reserved
}
Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::testPartialInstantiation::'foo' type-params <'T' extends dart:core::Object? (default dynamic)> (DART_SDK/pkg/dart2bytecode/testcases/closures.dart::testPartialInstantiation::Closure/0::TypeParam/0 t) -> void
ClosureCode {
  Entry                3
  Push                 FP[-6]
  LoadFieldTOS         CP#1
  PopLocal             r1
  Push                 FP[-6]
  LoadFieldTOS         CP#3
  StoreLocal           r0
  PushConstant         CP#5
  JumpIfEqStrict       L1
  CheckFunctionTypeArgs 0, r2
  Jump                 L2
L1:
  CheckFunctionTypeArgs 1, r0
L2:
  CheckStack           0
  Push                 r0
  Push                 FP[-6]
  LoadFieldTOS         CP#6
  PushInt              0
  PushInt              1
  DirectCall           CP#8, 4
  PopLocal             r0
  JumpIfUnchecked      L3
  Push                 FP[-5]
  PushConstant         CP#10
  PushNull
  Push                 r0
  PushConstant         CP#11
  AssertAssignable     0, CP#12
  Drop1
L3:
  PushNull
  ReturnTOS
}


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

Bytecode {
  Entry                0
  CheckStack           0
  PushNull
  ReturnTOS
}
ConstantPool {
}

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


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C1

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
}

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


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C2

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
}

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


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C3

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
}

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


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C4

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
}

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


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C5

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
}

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


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C6

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
}

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


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C7

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
}

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


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C8

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
}

Class 'A', script = 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart'
    type-params <'T1' extends dart:core::Object? (default dynamic), 'T2' 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/closures.dart::A < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::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 'foo', reflectable, debuggable
    type-params <'T3' extends dart:core::Object? (default dynamic), 'T4' extends dart:core::Object? (default dynamic)>
    parameters [] (required: 0)
    return-type void

Bytecode {
  Entry                5
  CheckFunctionTypeArgs 2, r0
  CheckStack           0
  AllocateContext      0, 1
  PopLocal             r1
  Push                 r1
  Push                 FP[-5]
  StoreContextVar      0, 0
  PushConstant         CP#0
  Push                 r1
  Push                 FP[-5]
  LoadTypeArgumentsField CP#13
  AllocateClosure
  StoreLocal           r4
  Push                 r4
  Push                 r0
  StoreFieldTOS        CP#6
  Push                 r4
  PushConstant         CP#5
  StoreFieldTOS        CP#3
  PopLocal             r3
  PushConstant         CP#36
  Push                 r3
  Push                 r3
  UncheckedClosureCall CP#33, 2
  Drop1
  PushConstant         CP#37
  Push                 r3
  Push                 r3
  UncheckedClosureCall CP#33, 2
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ClosureFunction 0
  [1] = InstanceField dart:core::_Closure::_context (field)
  [2] = Reserved
  [3] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [4] = Reserved
  [5] = EmptyTypeArguments
  [6] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [7] = Reserved
  [8] = DirectCall 'dart:_internal::_prependTypeArguments', ArgDesc num-args 4, num-type-args 0, names []
  [9] = Reserved
  [10] = ClosureFunction 1
  [11] = ClosureFunction 2
  [12] = ObjectRef < dart:core::Type >
  [13] = TypeArgumentsField DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A
  [14] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::TypeParam/0
  [15] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::TypeParam/1
  [16] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::TypeParam/0
  [17] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::TypeParam/1
  [18] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/0::TypeParam/0
  [19] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/0::TypeParam/1
  [20] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/1::TypeParam/0
  [21] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/1::TypeParam/1
  [22] = DirectCall 'dart:core::_GrowableList::_literal8 (constructor)', ArgDesc num-args 9, num-type-args 0, names []
  [23] = Reserved
  [24] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [25] = Reserved
  [26] = ObjectRef < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::TypeParam/1, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::TypeParam/1, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/0::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/0::TypeParam/1, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/1::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/1::TypeParam/1 >
  [27] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart::callWithArgs', ArgDesc num-args 0, num-type-args 8, names []
  [28] = Reserved
  [29] = EndClosureFunctionScope
  [30] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
  [31] = EndClosureFunctionScope
  [32] = ObjectRef < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C7, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C8 >
  [33] = ObjectRef ArgDesc num-args 1, num-type-args 2, names []
  [34] = ObjectRef < dart:core::List < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C7 >, dart:core::List < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C8 > >
  [35] = EndClosureFunctionScope
  [36] = ObjectRef < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C5, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C6 >
  [37] = ObjectRef < dart:core::List < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C5 >, dart:core::List < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C6 > >
}
Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::'nested1' type-params <'T5' extends dart:core::Object? (default dynamic), 'T6' extends dart:core::Object? (default dynamic)> () -> void
ClosureCode {
  Entry                5
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r1
  Push                 FP[-5]
  LoadFieldTOS         CP#3
  StoreLocal           r0
  PushConstant         CP#5
  JumpIfEqStrict       L1
  CheckFunctionTypeArgs 0, r2
  Jump                 L2
L1:
  CheckFunctionTypeArgs 2, r0
L2:
  CheckStack           0
  Push                 r0
  Push                 FP[-5]
  LoadFieldTOS         CP#6
  PushInt              2
  PushInt              4
  DirectCall           CP#8, 4
  PopLocal             r0
  PushConstant         CP#10
  Push                 r1
  Push                 r1
  LoadContextVar       0, 0
  LoadTypeArgumentsField CP#13
  AllocateClosure
  StoreLocal           r4
  Push                 r4
  Push                 r0
  StoreFieldTOS        CP#6
  Push                 r4
  PushConstant         CP#5
  StoreFieldTOS        CP#3
  PopLocal             r3
  PushConstant         CP#32
  Push                 r3
  Push                 r3
  UncheckedClosureCall CP#33, 2
  Drop1
  PushConstant         CP#34
  Push                 r3
  Push                 r3
  UncheckedClosureCall CP#33, 2
  Drop1
  PushNull
  ReturnTOS
}

Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/0::'nested2' type-params <'T7' extends dart:core::Object? (default dynamic), 'T8' extends dart:core::Object? (default dynamic)> () -> void
ClosureCode {
  Entry                5
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r1
  Push                 FP[-5]
  LoadFieldTOS         CP#3
  StoreLocal           r0
  PushConstant         CP#5
  JumpIfEqStrict       L1
  CheckFunctionTypeArgs 0, r2
  Jump                 L2
L1:
  CheckFunctionTypeArgs 2, r0
L2:
  CheckStack           0
  Push                 r0
  Push                 FP[-5]
  LoadFieldTOS         CP#6
  PushInt              4
  PushInt              6
  DirectCall           CP#8, 4
  PopLocal             r0
  PushConstant         CP#11
  Push                 r1
  Push                 r1
  LoadContextVar       0, 0
  LoadTypeArgumentsField CP#13
  AllocateClosure
  StoreLocal           r4
  Push                 r4
  Push                 r0
  StoreFieldTOS        CP#6
  PopLocal             r3
  Push                 r3
  StoreLocal           r4
  Push                 r4
  UncheckedClosureCall CP#30, 1
  Drop1
  PushNull
  ReturnTOS
}

Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/1::'<anonymous closure>' () -> Null
ClosureCode {
  Entry                3
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r1
  CheckStack           0
  Push                 FP[-5]
  LoadFieldTOS         CP#6
  PopLocal             r0
  PushConstant         CP#12
  Push                 r1
  LoadContextVar       0, 0
  LoadTypeArgumentsField CP#13
  PushNull
  InstantiateType      CP#14
  Push                 r1
  LoadContextVar       0, 0
  LoadTypeArgumentsField CP#13
  PushNull
  InstantiateType      CP#15
  PushNull
  Push                 r0
  InstantiateType      CP#16
  PushNull
  Push                 r0
  InstantiateType      CP#17
  PushNull
  Push                 r0
  InstantiateType      CP#18
  PushNull
  Push                 r0
  InstantiateType      CP#19
  PushNull
  Push                 r0
  InstantiateType      CP#20
  PushNull
  Push                 r0
  InstantiateType      CP#21
  DirectCall           CP#22, 9
  DirectCall           CP#24, 1
  Drop1
  Push                 r1
  LoadContextVar       0, 0
  LoadTypeArgumentsField CP#13
  Push                 r0
  InstantiateTypeArgumentsTOS 0, CP#26
  DirectCall           CP#27, 1
  Drop1
  PushNull
  ReturnTOS
}

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

Field 'foo', type = dart:core::int, getter = 'get:foo', setter = 'set:foo', reflectable, has-initializer
    value = const 0

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

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  PushInt              0
  StoreFieldTOS        CP#0
  Push                 FP[-5]
  DirectCall           CP#2, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = InstanceField DART_SDK/pkg/dart2bytecode/testcases/closures.dart::B::foo (field)
  [1] = Reserved
  [2] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [3] = Reserved
}


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

Bytecode {
  Entry                5
  CheckStack           0
  AllocateContext      0, 4
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      0, 0
  Push                 r0
  PushInt              1
  StoreContextVar      0, 1
  PushInt              2
  PopLocal             r2
  Push                 r0
  PushInt              3
  StoreContextVar      0, 2
  PushConstant         CP#0
  Push                 r0
  PushNull
  AllocateClosure
  StoreLocal           r4
  PopLocal             r3
  Push                 r3
  StoreLocal           r4
  PushInt              10
  Push                 r4
  UncheckedClosureCall CP#14, 2
  Drop1
  Push                 r3
  StoreLocal           r4
  PushInt              11
  Push                 r4
  UncheckedClosureCall CP#14, 2
  Drop1
  Push                 r2
  DirectCall           CP#11, 1
  Drop1
  Push                 r0
  LoadContextVar       0, 2
  DirectCall           CP#11, 1
  Drop1
  Push                 r0
  LoadContextVar       0, 1
  DirectCall           CP#11, 1
  Drop1
  Push                 r0
  PushInt              42
  StoreContextVar      0, 3
  PushConstant         CP#15
  Push                 r0
  PushNull
  AllocateClosure
  StoreLocal           r3
  PopLocal             r2
  Push                 r2
  StoreLocal           r3
  Push                 r3
  UncheckedClosureCall CP#10, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ClosureFunction 0
  [1] = InstanceField dart:core::_Closure::_context (field)
  [2] = Reserved
  [3] = Type dart:core::int
  [4] = ObjectRef 'y'
  [5] = SubtypeTestCache
  [6] = ClosureFunction 1
  [7] = InterfaceCall 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart::B::get:foo', ArgDesc num-args 1, num-type-args 0, names []
  [8] = Reserved
  [9] = EndClosureFunctionScope
  [10] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
  [11] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [12] = Reserved
  [13] = EndClosureFunctionScope
  [14] = ObjectRef ArgDesc num-args 2, num-type-args 0, names []
  [15] = ClosureFunction 2
  [16] = InterfaceCall 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart::B::set:foo', ArgDesc num-args 2, num-type-args 0, names []
  [17] = Reserved
  [18] = EndClosureFunctionScope
}
Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::B::topLevel::'<anonymous closure>' (dart:core::int y) -> Null
ClosureCode {
  Entry                4
  Push                 FP[-6]
  LoadFieldTOS         CP#1
  PopLocal             r0
  CheckStack           0
  AllocateContext      1, 2
  StoreLocal           r1
  Push                 r1
  Push                 r0
  StoreContextParent
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      1, 0
  JumpIfUnchecked      L1
  Push                 FP[-5]
  PushConstant         CP#3
  PushNull
  PushNull
  PushConstant         CP#4
  AssertAssignable     1, CP#5
  Drop1
L1:
  Push                 r0
  LoadContextParent
  Push                 r0
  LoadContextVar       1, 0
  PushInt              1
  AddInt
  StoreContextVar      0, 1
  Push                 r0
  LoadContextParent
  LoadContextVar       0, 1
  PushInt              5
  CompareIntGt
  JumpIfFalse          L2
  Push                 r0
  PushInt              4
  StoreContextVar      1, 1
  PushConstant         CP#6
  Push                 r0
  PushNull
  AllocateClosure
  StoreLocal           r2
  PopLocal             r3
  Push                 r3
  Push                 r3
  UncheckedClosureCall CP#10, 1
  Drop1
  Push                 r0
  LoadContextVar       1, 1
  DirectCall           CP#11, 1
  Drop1
L2:
  PushNull
  ReturnTOS
}

Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::B::topLevel::Closure/0::'closure2' () -> void
ClosureCode {
  Entry                3
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r0
  CheckStack           0
  Push                 r0
  LoadContextParent
  Push                 r0
  LoadContextParent
  LoadContextVar       0, 1
  PushInt              2
  AddInt
  StoreContextVar      0, 2
  Push                 r0
  Push                 r0
  LoadContextParent
  LoadContextVar       0, 0
  InterfaceCall        CP#7, 1
  Push                 r0
  LoadContextVar       1, 0
  AddInt
  StoreContextVar      1, 1
  PushNull
  ReturnTOS
}

Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::B::topLevel::'<anonymous closure>' () -> Null
ClosureCode {
  Entry                3
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r0
  CheckStack           0
  Push                 r0
  LoadContextVar       0, 0
  Push                 r0
  LoadContextVar       0, 3
  InterfaceCall        CP#16, 2
  Drop1
  PushNull
  ReturnTOS
}

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


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C

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 'testForLoop', reflectable, debuggable
    parameters [] (required: 0)
    return-type void

Bytecode {
  Entry                5
  CheckStack           0
  AllocateContext      0, 1
  PopLocal             r0
  Push                 r0
  PushInt              0
  StoreContextVar      0, 0
  PushConstant         CP#0
  PushInt              0
  DirectCall           CP#1, 2
  PopLocal             r2
  PushConstant         CP#0
  PushInt              0
  DirectCall           CP#1, 2
  PopLocal             r3
  AllocateContext      1, 1
  StoreLocal           r1
  Push                 r1
  Push                 r0
  StoreContextParent
  PopLocal             r0
  Push                 r0
  PushInt              0
  StoreContextVar      1, 0
L2:
  CheckStack           1
  Push                 r0
  LoadContextVar       1, 0
  PushInt              10
  CompareIntLt
  JumpIfFalse          L1
  Push                 r2
  PushConstant         CP#3
  Push                 r0
  PushNull
  AllocateClosure
  StoreLocal           r4
  InstantiatedInterfaceCall CP#7, 2
  Drop1
  Push                 r3
  PushConstant         CP#10
  Push                 r0
  PushNull
  AllocateClosure
  StoreLocal           r4
  InstantiatedInterfaceCall CP#7, 2
  Drop1
  Push                 r0
  CloneContext         1, 1
  PopLocal             r0
  Push                 r0
  Push                 r0
  LoadContextVar       1, 0
  PushInt              1
  AddInt
  StoreLocal           r4
  StoreContextVar      1, 0
  Push                 r4
  Drop1
  Jump                 L2
L1:
  Push                 r0
  LoadContextParent
  PopLocal             r0
  Push                 r0
  LoadContextParent
  PopLocal             r0
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ObjectRef < dart:core::Function >
  [1] = DirectCall 'dart:core::_GrowableList:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
  [2] = Reserved
  [3] = ClosureFunction 0
  [4] = InstanceField dart:core::_Closure::_context (field)
  [5] = Reserved
  [6] = EndClosureFunctionScope
  [7] = InstantiatedInterfaceCall 'dart:core::List::add', ArgDesc num-args 2, num-type-args 0, names [], receiver dart:core::List < dart:core::Function >
  [8] = Reserved
  [9] = Reserved
  [10] = ClosureFunction 1
  [11] = Type dart:core::int
  [12] = ObjectRef 'ii'
  [13] = SubtypeTestCache
  [14] = EndClosureFunctionScope
}
Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C::testForLoop::'<anonymous closure>' () -> dart:core::int
ClosureCode {
  Entry                2
  Push                 FP[-5]
  LoadFieldTOS         CP#4
  PopLocal             r0
  CheckStack           0
  Push                 r0
  LoadContextVar       1, 0
  Push                 r0
  LoadContextParent
  LoadContextVar       0, 0
  AddInt
  ReturnTOS
}

Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C::testForLoop::'<anonymous closure>' (dart:core::int ii) -> Null
ClosureCode {
  Entry                3
  Push                 FP[-6]
  LoadFieldTOS         CP#4
  PopLocal             r0
  CheckStack           0
  JumpIfUnchecked      L1
  Push                 FP[-5]
  PushConstant         CP#11
  PushNull
  PushNull
  PushConstant         CP#12
  AssertAssignable     1, CP#13
  Drop1
L1:
  Push                 r0
  Push                 FP[-5]
  Push                 r0
  LoadContextParent
  LoadContextVar       0, 0
  AddInt
  StoreContextVar      1, 0
  PushNull
  ReturnTOS
}


Function 'testForInLoop', reflectable, debuggable
    parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
    return-type void

Bytecode {
  Entry                5
  CheckStack           0
  Push                 FP[-5]
  InterfaceCall        CP#0, 1
  PopLocal             r2
L2:
  CheckStack           1
  Push                 r2
  InterfaceCall        CP#2, 1
  JumpIfFalse          L1
  AllocateContext      0, 1
  PopLocal             r0
  Push                 r0
  Push                 r2
  InterfaceCall        CP#4, 1
  StoreContextVar      0, 0
  PushConstant         CP#6
  Push                 r0
  PushNull
  AllocateClosure
  StoreLocal           r4
  PopLocal             r3
  Push                 r3
  StoreLocal           r4
  Push                 r4
  UncheckedClosureCall CP#10, 1
  Drop1
  Push                 r0
  LoadContextVar       0, 0
  DirectCall           CP#11, 1
  Drop1
  Push                 r0
  LoadContextParent
  PopLocal             r0
  Jump                 L2
L1:
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = InterfaceCall 'dart:core::Iterable::get:iterator', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
  [2] = InterfaceCall 'dart:core::Iterator::moveNext', ArgDesc num-args 1, num-type-args 0, names []
  [3] = Reserved
  [4] = InterfaceCall 'dart:core::Iterator::get:current', ArgDesc num-args 1, num-type-args 0, names []
  [5] = Reserved
  [6] = ClosureFunction 0
  [7] = InstanceField dart:core::_Closure::_context (field)
  [8] = Reserved
  [9] = EndClosureFunctionScope
  [10] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
  [11] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [12] = Reserved
}
Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C::testForInLoop::'<anonymous closure>' () -> Null
ClosureCode {
  Entry                3
  Push                 FP[-5]
  LoadFieldTOS         CP#7
  PopLocal             r0
  CheckStack           0
  Push                 r0
  Push                 r0
  LoadContextVar       0, 0
  PushInt              1
  AddInt
  StoreContextVar      0, 0
  PushNull
  ReturnTOS
}

Class 'D', script = 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart'
    type-params <'T' extends dart:core::Object? (default dynamic)> (args: 1)
    extends dart:core::Object


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

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 'foo', reflectable, debuggable
    parameters [DART_SDK/pkg/dart2bytecode/testcases/closures.dart::D::TypeParam/0 't'] (required: 1)
    return-type dynamic

Bytecode {
  Entry                3
  CheckStack           0
  AllocateContext      0, 1
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      0, 0
  JumpIfUnchecked      L1
  Push                 FP[-5]
  PushConstant         CP#0
  Push                 FP[-6]
  LoadTypeArgumentsField CP#1
  PushNull
  PushConstant         CP#2
  AssertAssignable     0, CP#3
  Drop1
L1:
  PushConstant         CP#4
  Push                 r0
  Push                 FP[-6]
  LoadTypeArgumentsField CP#1
  AllocateClosure
  StoreLocal           r2
  ReturnTOS
}
Parameter flags: [2]
ConstantPool {
  [0] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::D::TypeParam/0
  [1] = TypeArgumentsField DART_SDK/pkg/dart2bytecode/testcases/closures.dart::D
  [2] = ObjectRef 't'
  [3] = SubtypeTestCache
  [4] = ClosureFunction 0
  [5] = InstanceField dart:core::_Closure::_context (field)
  [6] = Reserved
  [7] = EndClosureFunctionScope
}
Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::D::foo::'<anonymous closure>' () -> DART_SDK/pkg/dart2bytecode/testcases/closures.dart::D::TypeParam/0
ClosureCode {
  Entry                2
  Push                 FP[-5]
  LoadFieldTOS         CP#5
  PopLocal             r0
  CheckStack           0
  Push                 r0
  LoadContextVar       0, 0
  ReturnTOS
}


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

Bytecode {
  Entry                3
  CheckStack           0
  AllocateContext      0, 1
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      0, 0
  PushConstant         CP#0
  Push                 r0
  Push                 FP[-5]
  LoadTypeArgumentsField CP#5
  AllocateClosure
  StoreLocal           r2
  ReturnTOS
}
ConstantPool {
  [0] = ClosureFunction 0
  [1] = InstanceField dart:core::_Closure::_context (field)
  [2] = Reserved
  [3] = ClosureFunction 1
  [4] = EndClosureFunctionScope
  [5] = TypeArgumentsField DART_SDK/pkg/dart2bytecode/testcases/closures.dart::D
  [6] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
  [7] = EndClosureFunctionScope
}
Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::D::bar::'<anonymous closure>' () -> Null
ClosureCode {
  Entry                4
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r0
  CheckStack           0
  PushConstant         CP#3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 0
  LoadTypeArgumentsField CP#5
  AllocateClosure
  StoreLocal           r3
  PopLocal             r2
  Push                 r2
  Push                 r2
  UncheckedClosureCall CP#6, 1
  Drop1
  PushNull
  ReturnTOS
}

Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::D::bar::Closure/0::'inner' () -> Null
ClosureCode {
  Entry                2
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r0
  CheckStack           0
  PushNull
  ReturnTOS
}

Class 'E', script = 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart', abstract
    extends dart:core::Object

Field 'foo1', type = FunctionType (dart:core::int, dart:core::int) -> dart:core::int, getter = 'get:foo1', setter = 'set:foo1', reflectable, is-late
    value = null

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

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


Function 'get:foo2', getter, abstract, reflectable, debuggable
    parameters [] (required: 0)
    return-type FunctionType <'T' extends dart:core::Object? (default dynamic)> (null::TypeParam/0, null::TypeParam/0) -> dart:core::int

Function 'evalArg1', abstract, reflectable, debuggable
    parameters [] (required: 0)
    return-type dart:core::int

Function 'evalArg2', abstract, reflectable, debuggable
    parameters [] (required: 0)
    return-type dart:core::int

Function 'getE', abstract, reflectable, debuggable
    parameters [] (required: 0)
    return-type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::E

Function 'testCallThroughGetter1', reflectable, debuggable
    parameters [] (required: 0)
    return-type dart:core::int

Bytecode {
  Entry                3
  CheckStack           0
  Push                 FP[-5]
  InterfaceCall        CP#0, 1
  PopLocal             r0
  Push                 FP[-5]
  InterfaceCall        CP#2, 1
  PopLocal             r1
  Push                 FP[-5]
  InterfaceCall        CP#4, 1
  StoreLocal           r2
  Push                 r0
  Push                 r1
  Push                 r2
  UncheckedClosureCall CP#6, 3
  ReturnTOS
}
ConstantPool {
  [0] = InterfaceCall 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart::E::evalArg1', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
  [2] = InterfaceCall 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart::E::evalArg2', ArgDesc num-args 1, num-type-args 0, names []
  [3] = Reserved
  [4] = InterfaceCall 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart::E::get:foo1', ArgDesc num-args 1, num-type-args 0, names []
  [5] = Reserved
  [6] = ObjectRef ArgDesc num-args 3, num-type-args 0, names []
}


Function 'testCallThroughGetter2', reflectable, debuggable
    parameters [] (required: 0)
    return-type dart:core::int

Bytecode {
  Entry                3
  CheckStack           0
  Push                 FP[-5]
  InterfaceCall        CP#0, 1
  PopLocal             r0
  Push                 FP[-5]
  InterfaceCall        CP#2, 1
  PopLocal             r1
  PushConstant         CP#4
  Push                 FP[-5]
  InterfaceCall        CP#5, 1
  StoreLocal           r2
  Push                 r0
  Push                 r1
  Push                 r2
  UncheckedClosureCall CP#7, 4
  ReturnTOS
}
ConstantPool {
  [0] = InterfaceCall 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart::E::evalArg1', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
  [2] = InterfaceCall 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart::E::evalArg2', ArgDesc num-args 1, num-type-args 0, names []
  [3] = Reserved
  [4] = ObjectRef < dart:core::int >
  [5] = InterfaceCall 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart::E::get:foo2', ArgDesc num-args 1, num-type-args 0, names []
  [6] = Reserved
  [7] = ObjectRef ArgDesc num-args 3, num-type-args 1, names []
}


Function 'testCallThroughGetter3', reflectable, debuggable
    parameters [] (required: 0)
    return-type dart:core::int

Bytecode {
  Entry                4
  CheckStack           0
  Push                 FP[-5]
  InterfaceCall        CP#0, 1
  PopLocal             r0
  Push                 FP[-5]
  InterfaceCall        CP#2, 1
  PopLocal             r1
  Push                 FP[-5]
  InterfaceCall        CP#4, 1
  PopLocal             r2
  PushConstant         CP#6
  Push                 r0
  InterfaceCall        CP#7, 1
  StoreLocal           r3
  Push                 r1
  Push                 r2
  Push                 r3
  UncheckedClosureCall CP#9, 4
  ReturnTOS
}
ConstantPool {
  [0] = InterfaceCall 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart::E::getE', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
  [2] = InterfaceCall 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart::E::evalArg1', ArgDesc num-args 1, num-type-args 0, names []
  [3] = Reserved
  [4] = InterfaceCall 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart::E::evalArg2', ArgDesc num-args 1, num-type-args 0, names []
  [5] = Reserved
  [6] = ObjectRef < dart:core::int >
  [7] = InterfaceCall 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart::E::get:foo2', ArgDesc num-args 1, num-type-args 0, names []
  [8] = Reserved
  [9] = ObjectRef ArgDesc num-args 3, num-type-args 1, names []
}

