- /* FIXME */
- struct stat sb;
- char *message, template[] = "psi.assert.XXXXXX";
- int fd = mkstemp(template);
-
- dprintf(fd, "Failed asserting that ");
- psi_num_exp_dump(fd, stmt->exp);
- fstat(fd, &sb);
- message = malloc(sb.st_size + 1);
- lseek(fd, 0, SEEK_SET);
- read(fd, message, sb.st_size);
- close(fd);
- message[sb.st_size] = '\0';
- return message;
+ struct psi_dump dump;
+ smart_str str = {0};
+
+ dump.ctx.hn = &str;
+ dump.fun = (psi_dump_cb) smart_str_append_printf;
+
+ PSI_DUMP(&dump, "Failed asserting that ");
+ psi_num_exp_dump(&dump, stmt->exp);
+ smart_str_0(&str);
+ zend_throw_exception(stmt->kind == PSI_ASSERT_PRE
+ ? spl_ce_InvalidArgumentException
+ : spl_ce_UnexpectedValueException, str.s->val, 0);
+ smart_str_free(&str);