main = #lib::main;
 [@vm.bytecode=
ComponentBytecodeMetadata {

Bytecode (version: stable)
Main library: #lib

}
] [@vm.bytecode=
MembersBytecodeMetadata {

Members {

Function 'foo1', static, has-optional-positional-params, reflectable, debuggable
    parameters [dynamic 'x', dynamic 'a', dynamic 'b'] (required: 1)
    return-type void


Bytecode {
  EntryOptional        1, 2, 0
  LoadConstant         r1, CP#0
  LoadConstant         r2, CP#1
  Frame                1
  CheckStack           0
  PushNull
  PushInt              2
  CreateArrayTOS
  StoreLocal           r3
  Push                 r3
  PushInt              0
  PushConstant         CP#2
  StoreIndexedTOS
  Push                 r3
  PushInt              1
  Push                 r0
  StoreIndexedTOS
  DirectCall           1, CP#3
  DirectCall           1, CP#5
  Drop1
  PushNull
  PushInt              2
  CreateArrayTOS
  StoreLocal           r3
  Push                 r3
  PushInt              0
  PushConstant         CP#7
  StoreIndexedTOS
  Push                 r3
  PushInt              1
  Push                 r1
  StoreIndexedTOS
  DirectCall           1, CP#3
  DirectCall           1, CP#5
  Drop1
  PushNull
  PushInt              2
  CreateArrayTOS
  StoreLocal           r3
  Push                 r3
  PushInt              0
  PushConstant         CP#8
  StoreIndexedTOS
  Push                 r3
  PushInt              1
  Push                 r2
  StoreIndexedTOS
  DirectCall           1, CP#3
  DirectCall           1, CP#5
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ObjectRef 'default_a'
  [1] = ObjectRef 'default_b'
  [2] = ObjectRef 'x = '
  [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
  [7] = ObjectRef 'a = '
  [8] = ObjectRef 'b = '
}


Function 'foo2', static, has-optional-named-params, reflectable, debuggable
    parameters [dynamic 'y', dynamic 'z', dynamic 'c', dynamic 'a', dynamic 'b'] (required: 2)
    return-type void


Bytecode {
  EntryOptional        2, 0, 3
  LoadConstant         r2, CP#0
  LoadConstant         r2, CP#1
  LoadConstant         r3, CP#2
  LoadConstant         r3, CP#3
  LoadConstant         r4, CP#4
  LoadConstant         r4, CP#5
  Frame                1
  CheckStack           0
  PushNull
  PushInt              2
  CreateArrayTOS
  StoreLocal           r5
  Push                 r5
  PushInt              0
  PushConstant         CP#6
  StoreIndexedTOS
  Push                 r5
  PushInt              1
  Push                 r0
  StoreIndexedTOS
  DirectCall           1, CP#7
  DirectCall           1, CP#9
  Drop1
  PushNull
  PushInt              2
  CreateArrayTOS
  StoreLocal           r5
  Push                 r5
  PushInt              0
  PushConstant         CP#11
  StoreIndexedTOS
  Push                 r5
  PushInt              1
  Push                 r1
  StoreIndexedTOS
  DirectCall           1, CP#7
  DirectCall           1, CP#9
  Drop1
  PushNull
  PushInt              2
  CreateArrayTOS
  StoreLocal           r5
  Push                 r5
  PushInt              0
  PushConstant         CP#12
  StoreIndexedTOS
  Push                 r5
  PushInt              1
  Push                 r2
  StoreIndexedTOS
  DirectCall           1, CP#7
  DirectCall           1, CP#9
  Drop1
  PushNull
  PushInt              2
  CreateArrayTOS
  StoreLocal           r5
  Push                 r5
  PushInt              0
  PushConstant         CP#13
  StoreIndexedTOS
  Push                 r5
  PushInt              1
  Push                 r3
  StoreIndexedTOS
  DirectCall           1, CP#7
  DirectCall           1, CP#9
  Drop1
  PushNull
  PushInt              2
  CreateArrayTOS
  StoreLocal           r5
  Push                 r5
  PushInt              0
  PushConstant         CP#14
  StoreIndexedTOS
  Push                 r5
  PushInt              1
  Push                 r4
  StoreIndexedTOS
  DirectCall           1, CP#7
  DirectCall           1, CP#9
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ObjectRef 'a'
  [1] = ObjectRef const 42
  [2] = ObjectRef 'b'
  [3] = ObjectRef const <dart:core::String> ['default_b']
  [4] = ObjectRef 'c'
  [5] = ObjectRef 'default_c'
  [6] = ObjectRef 'y = '
  [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
  [11] = ObjectRef 'z = '
  [12] = ObjectRef 'a = '
  [13] = ObjectRef 'b = '
  [14] = ObjectRef 'c = '
}


Function 'foo3', static, has-optional-named-params, reflectable, debuggable
    type-params <dart:core::Object P, dart:core::Object Q>
    parameters [dynamic 'z', dynamic 'y', dart:core::bool 'a', dart:core::Map < #lib::foo3::TypeParam/0, #lib::foo3::TypeParam/1 > 'b'] (required: 2)
    return-type void


Bytecode {
  EntryOptional        2, 0, 2
  LoadConstant         r2, CP#0
  LoadConstant         r2, CP#1
  LoadConstant         r3, CP#2
  LoadConstant         r3, CP#3
  Frame                1
  CheckStack           0
  CheckFunctionTypeArgs 2, r4
  PushNull
  Push                 r4
  InstantiateType      CP#4
  DirectCall           1, CP#5
  Drop1
  Push                 r1
  DirectCall           1, CP#5
  Drop1
  Push                 r3
  DirectCall           1, CP#5
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ObjectRef 'a'
  [1] = ObjectRef const false
  [2] = ObjectRef 'b'
  [3] = ObjectRef null
  [4] = Type #lib::foo3::TypeParam/0
  [5] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [6] = Reserved
}


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


Bytecode {
  Entry                0
  CheckStack           0
  PushConstant         CP#0
  PushConstant         CP#1
  DirectCall           2, CP#2
  Drop1
  PushConstant         CP#4
  PushConstant         CP#5
  PushConstant         CP#1
  DirectCall           3, CP#6
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ObjectRef 'fixed_x'
  [1] = ObjectRef 'concrete_a'
  [2] = DirectCall '#lib::foo1', ArgDesc num-args 2, num-type-args 0, names []
  [3] = Reserved
  [4] = ObjectRef 'fixed_y'
  [5] = ObjectRef 'fixed_z'
  [6] = DirectCall '#lib::foo2', ArgDesc num-args 3, num-type-args 0, names ['a']
  [7] = Reserved
}

}

}
]library #lib from "#lib" as #lib {

  static method foo1(dynamic x, [dynamic a = "default_a", dynamic b = "default_b"]) → void {
    dart.core::print("x = ${x}");
    dart.core::print("a = ${a}");
    dart.core::print("b = ${b}");
  }
  static method foo2(dynamic y, dynamic z, {dynamic c = "default_c", dynamic a = 42, dynamic b = const <dart.core::String>["default_b"]}) → void {
    dart.core::print("y = ${y}");
    dart.core::print("z = ${z}");
    dart.core::print("a = ${a}");
    dart.core::print("b = ${b}");
    dart.core::print("c = ${c}");
  }
  static method foo3<P extends dart.core::Object = dynamic, Q extends dart.core::Object = dynamic>(dynamic z, dynamic y, {dart.core::bool a = false, dart.core::Map<#lib::foo3::P, #lib::foo3::Q> b = null}) → void {
    dart.core::print(#lib::foo3::P);
    dart.core::print(y);
    dart.core::print(b);
  }
  static method main() → dynamic {
    #lib::foo1("fixed_x", "concrete_a");
    #lib::foo2("fixed_y", "fixed_z", a: "concrete_a");
  }
}
