-void psi_call_frame_do_call(struct psi_call_frame *frame) {
- size_t va_count = psi_call_frame_num_var_args(frame);
-
- if (va_count) {
- void **va_types = ecalloc(va_count, sizeof(void *));
- size_t i;
-
- for (i = 0; i < va_count; ++i) {
- struct psi_call_frame_argument *frame_arg;
-
- frame_arg = psi_call_frame_get_var_argument(frame, i);
- va_types[i] = frame->context->ops->query(frame->context,
- PSI_CONTEXT_QUERY_TYPE, &frame_arg->va_type);
+ZEND_RESULT_CODE psi_call_frame_do_assert(struct psi_call_frame *frame, enum psi_assert_kind kind) {
+ size_t i = 0;
+ struct psi_assert_stmt *ass;
+
+ while (psi_plist_get(frame->impl->stmts.ass, i++, &ass)) {
+ if (ass->kind == kind) {
+ if (!psi_assert_stmt_exec(ass, frame)) {
+ char *message = psi_assert_stmt_message(ass);
+ zend_throw_exception(kind == PSI_ASSERT_PRE
+ ? spl_ce_InvalidArgumentException
+ : spl_ce_UnexpectedValueException, message, 0);
+ free(message);
+ return FAILURE;
+ }