+ token_t let_fn, vatype = va->name->type->type;
+
+ if (vatype == PSI_T_MIXED) {
+ switch (Z_TYPE_P(vaarg->_zv)) {
+ case IS_TRUE:
+ case IS_FALSE: vatype = PSI_T_BOOL; break;
+ case IS_LONG: vatype = PSI_T_INT; break;
+ case IS_DOUBLE: vatype = PSI_T_FLOAT; break;
+ default: vatype = PSI_T_STRING; break;
+ }
+ }
+
+
+ switch (vatype) {
+ case PSI_T_BOOL: let_fn = PSI_T_BOOLVAL; break;
+ case PSI_T_INT: let_fn = PSI_T_INTVAL; break;
+ case PSI_T_FLOAT:
+ case PSI_T_DOUBLE: let_fn = PSI_T_FLOATVAL;break;
+ case PSI_T_STRING: let_fn = PSI_T_STRVAL; break;
+ EMPTY_SWITCH_DEFAULT_CASE();
+ }
+
+ va->types[i] = vatype;
+ psi_let_val(let_fn, vaarg, &va->values[i], NULL, &to_free);