X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Ftypes%2Fset_exp.c;fp=src%2Ftypes%2Fset_exp.c;h=27ed0301b85c609fe27e5ddebf17f74d9a6db69f;hp=ac55c3ad4bcc3a0282196cc825b76fc9eecf2bca;hb=7df12c88a4e14611a2585d6e7c994c59e8d7485a;hpb=8c3b5c915ddf11e03e595d7db8917b2b4711a35b diff --git a/src/types/set_exp.c b/src/types/set_exp.c index ac55c3a..27ed030 100644 --- a/src/types/set_exp.c +++ b/src/types/set_exp.c @@ -26,6 +26,7 @@ #include "php_psi_stdinc.h" #include "data.h" #include "call.h" +#include "calc.h" #include "marshal.h" struct psi_set_exp *psi_set_exp_init(enum psi_set_exp_kind kind, void *data) @@ -74,8 +75,16 @@ void psi_set_exp_exec_ex(struct psi_set_exp *val, zval *zv, impl_val *iv, val->data.func->handler(zv, val, iv, frame); break; case PSI_SET_NUMEXP: - psi_num_exp_exec(val->data.num, iv, frame); - psi_set_to_int(zv, val, iv, frame); + switch (psi_num_exp_exec(val->data.num, iv, frame)) { + case PSI_T_FLOAT: + case PSI_T_DOUBLE: + case PSI_T_LONG_DOUBLE: + psi_set_to_float(zv, val, iv, frame); + break; + default: + psi_set_to_int(zv, val, iv, frame); + break; + } break; default: assert(0);