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                0
  CheckStack           0
  JumpIfNoAsserts      L1
  Push                 FP[-6]
  DynamicCall          CP#1, 1
  AssertBoolean        0
  JumpIfTrue           L1
  PushInt              0
  PushInt              0
  Push                 FP[-5]
  DynamicCall          CP#2, 1
  DirectCall           CP#3, 3
  Drop1
L1:
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
  [1] = ICData dynamic target-name 'call', arg-desc CP#0
  [2] = ICData dynamic target-name 'call', arg-desc CP#0
  [3] = DirectCall 'dart:core::_AssertionError::_throwNew', ArgDesc num-args 3, num-type-args 0, names []
  [4] = 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 {}
}
