library #lib;
import self as self;
import "dart:core" as core;

[@vm.bytecode=
Bytecode (version: stable) {
  Entry                0
  CheckStack
  JumpIfNoAsserts      L1
  Push                 FP[-5]
  AssertBoolean        0
  JumpIfTrue           L1
  PushInt              0
  PushInt              0
  PushNull
  PushConstant         CP#1
  IndirectStaticCall   3, CP#0
  Drop1
L1:
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ArgDesc num-args 3, num-type-args 0, names []
  [1] = StaticICData target 'dart.core::_AssertionError::_throwNew', arg-desc CP#0
}
]static method test1(core::bool condition) → void {
  assert(condition);
}
[@vm.bytecode=
Bytecode (version: stable) {
  Entry                0
  CheckStack
  JumpIfNoAsserts      L1
  Push                 FP[-6]
  InstanceCall         1, CP#1
  AssertBoolean        0
  JumpIfTrue           L1
  PushInt              0
  PushInt              0
  Push                 FP[-5]
  InstanceCall         1, CP#2
  PushConstant         CP#4
  IndirectStaticCall   3, CP#3
  Drop1
L1:
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = 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] = ArgDesc num-args 3, num-type-args 0, names []
  [4] = StaticICData target 'dart.core::_AssertionError::_throwNew', arg-desc CP#3
}
]static method test2(() → core::bool condition, () → 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());
}
[@vm.bytecode=
Bytecode (version: stable) {
  Entry                0
  CheckStack
  PushNull
  ReturnTOS
}
ConstantPool {
}
]static method main() → dynamic {}
