X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fmarshal.h;fp=src%2Fmarshal.h;h=9880f522f5f975b7b7e0e701687627d654eed0f8;hp=a7777d3063cddb18b0d7f7797cd927329aaa3a3f;hb=2d34b0c215608bc3eae007ce5f4e80eae3c1e147;hpb=a0f437f26cd0f121ee911a55327a68a3544bf15f diff --git a/src/marshal.h b/src/marshal.h index a7777d3..9880f52 100644 --- a/src/marshal.h +++ b/src/marshal.h @@ -72,9 +72,19 @@ static inline char *psi_i128_to_buf(char *buf, __int128 i128) } else if (V >= -(1L<<52) && V <= (1L<<53)) { \ ZVAL_DOUBLE(z, V); \ } else if (V < ZEND_LONG_MIN || V > ZEND_LONG_MAX) { \ - ZVAL_STRING(z, psi_i128_to_buf(&buf[sizeof(buf) - 1], V)); \ + char *str = psi_i128_to_buf(&buf[sizeof(buf) - 1], V); \ + if (persistent) { \ + ZVAL_PSTRING(z, str); \ + } else { \ + ZVAL_STRING(z, str); \ + } \ } else { \ - ZVAL_STRING(z, zend_print_long_to_buf(&buf[sizeof(buf) - 1], V)); \ + char *str = zend_print_long_to_buf(&buf[sizeof(buf) - 1], V); \ + if (persistent) { \ + ZVAL_PSTRING(z, str); \ + } else { \ + ZVAL_STRING(z, str); \ + } \ } \ } else { \ if (V <= ZEND_LONG_MAX) { \ @@ -82,9 +92,19 @@ static inline char *psi_i128_to_buf(char *buf, __int128 i128) } else if (V <= (1L<<53)) { \ ZVAL_DOUBLE(z, V); \ } else if (V > ZEND_ULONG_MAX) { \ - ZVAL_STRING(z, psi_u128_to_buf(&buf[sizeof(buf) - 1], V)); \ + char *str = psi_u128_to_buf(&buf[sizeof(buf) - 1], V); \ + if (persistent) { \ + ZVAL_PSTRING(z, str); \ + } else { \ + ZVAL_STRING(z, str); \ + } \ } else { \ - ZVAL_STRING(z, zend_print_ulong_to_buf(&buf[sizeof(buf) - 1], V)); \ + char *str = zend_print_ulong_to_buf(&buf[sizeof(buf) - 1], V); \ + if (persistent) { \ + ZVAL_PSTRING(z, str); \ + } else { \ + ZVAL_STRING(z, str); \ + } \ } \ } \ } while (0)