X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Ftypes%2Fset_exp.c;h=4ae7a45f48ae1bc944b01b77e411cd575d4fb631;hp=ac55c3ad4bcc3a0282196cc825b76fc9eecf2bca;hb=ddeb4918bce67ed63c5f4c8c4e250e92ebdef89d;hpb=9bcb1df0786a8193d65949c857baaba2f4296e84 diff --git a/src/types/set_exp.c b/src/types/set_exp.c index ac55c3a..4ae7a45 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) @@ -49,7 +50,7 @@ struct psi_set_exp *psi_set_exp_init(enum psi_set_exp_kind kind, void *data) void psi_set_exp_exec(struct psi_set_exp *val, struct psi_call_frame *frame) { - struct psi_call_frame_symbol *frame_sym = NULL; + struct psi_call_frame_symbol *frame_sym; struct psi_call_frame_argument *frame_arg; struct psi_decl_var *set_dvar = psi_set_exp_get_decl_var(val); struct psi_impl_var *set_ivar = psi_set_exp_get_impl_var(val); @@ -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);