#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)
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);
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, NULL)) {
+ 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);