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*] condition.call(), [@vm.call-site-attributes.metadata=receiverType:() →* dart.core::String*] message.call());
  }
  static method main() → dynamic {}
}
