main = #lib::main;
 [@vm.bytecode=
BytecodeMetadata {
Bytecode (version: stable)
Main library: #lib
Library '#lib'
    name '#lib'
    script '#lib'

Class '', script = '#lib'


Function 'test1', static, reflectable, debuggable
    parameters [dart:core::bool* 'condition'] (required: 1)
    return-type void

Bytecode {
  Entry                0
  CheckStack           0
  JumpIfNoAsserts      L1
  Push                 FP[-5]
  AssertBoolean        0
  JumpIfTrue           L1
  PushInt              0
  PushInt              0
  PushNull
  DirectCall           CP#0, 3
  Drop1
L1:
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'dart:core::_AssertionError::_throwNew', ArgDesc num-args 3, num-type-args 0, names []
  [1] = Reserved
}


Function 'test2', static, reflectable, debuggable
    parameters [FunctionType ()* -> dart:core::bool* 'condition', FunctionType ()* -> dart:core::String* 'message'] (required: 2)
    return-type void

Bytecode {
  Entry                1
  CheckStack           0
  JumpIfNoAsserts      L1
  Push                 FP[-6]
  StoreLocal           r0
  Push                 r0
  UncheckedClosureCall CP#0, 1
  AssertBoolean        0
  JumpIfTrue           L1
  PushInt              0
  PushInt              0
  Push                 FP[-5]
  StoreLocal           r0
  Push                 r0
  UncheckedClosureCall CP#0, 1
  DirectCall           CP#1, 3
  Drop1
L1:
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
  [1] = DirectCall 'dart:core::_AssertionError::_throwNew', ArgDesc num-args 3, num-type-args 0, names []
  [2] = Reserved
}


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

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


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

  static method test1(dart.core::bool* condition) → void {
    assert(condition);
  }
  static method test2(() →* dart.core::bool* condition, () →* dart.core::String* message) → void {
    assert([@vm.call-site-attributes.metadata=receiverType:dart.core::bool* Function()*] condition.call(), [@vm.call-site-attributes.metadata=receiverType:dart.core::String* Function()*] message.call());
  }
  static method main() → dynamic {}
}
