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

[@vm.bytecode=
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
}
]static method test1(core::bool condition) → void {
  assert(condition);
}
[@vm.bytecode=
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
}
]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 {
  Entry                0
  CheckStack           0
  PushNull
  ReturnTOS
}
ConstantPool {
}
]static method main() → dynamic {}
