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

Bytecode (version: stable)
Main library: #lib

}
] [@vm.bytecode=
MembersBytecodeMetadata {

Members {

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           3, CP#0
  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          1, CP#1
  AssertBoolean        0
  JumpIfTrue           L1
  PushInt              0
  PushInt              0
  Push                 FP[-5]
  DynamicCall          1, CP#2
  DirectCall           3, CP#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 {}
}
