X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Fmarshal.c;h=959291a31fb914f822205b34e1a54153766e950e;hb=de9b3ba972626195328a82bb108cac86312bd288;hp=a900430664c374a0646652adb2d3b47ccfc7ea12;hpb=a13e1b24ca0efe550f3b04ff27cf6ff12233412e;p=m6w6%2Fext-psi diff --git a/src/marshal.c b/src/marshal.c index a900430..959291a 100644 --- a/src/marshal.c +++ b/src/marshal.c @@ -244,6 +244,7 @@ void psi_set_to_int(zval *return_value, struct psi_set_exp *set, impl_val *ret_v case PSI_T_UINT8: RETVAL_LONG(v->u8); break; case PSI_T_INT16: RETVAL_LONG(v->i16); break; case PSI_T_UINT16: RETVAL_LONG(v->u16); break; + case PSI_T_ENUM: case PSI_T_INT32: RETVAL_LONG(v->i32); break; case PSI_T_UINT32: RETVAL_LONG(v->u32); break; case PSI_T_INT64: RETVAL_LONG(v->i64); break; @@ -272,13 +273,11 @@ static inline impl_val *psi_val_intval(impl_val *tmp, token_t real_type, zend_lo case PSI_T_UINT8: tmp->u8 = intval; break; case PSI_T_INT16: tmp->i16 = intval; break; case PSI_T_UINT16: tmp->u16 = intval; break; + case PSI_T_ENUM: case PSI_T_INT32: tmp->i32 = intval; break; case PSI_T_UINT32: tmp->u32 = intval; break; case PSI_T_INT64: tmp->i64 = intval; break; case PSI_T_UINT64: tmp->u64 = intval; break; - case PSI_T_INT: tmp->ival = intval; break; - case PSI_T_ENUM: - case PSI_T_LONG: tmp->lval = intval; break; case PSI_T_FLOAT: tmp->fval = intval; break; case PSI_T_DOUBLE: tmp->dval = intval; break; #ifdef HAVE_LONG_DOUBLE @@ -454,16 +453,19 @@ impl_val *psi_let_strlen(impl_val *tmp, struct psi_decl_arg *spec, token_t impl_ { if (ival && impl_type == PSI_T_STRING) { if (ival->zend.str) { - tmp->lval = ival->zend.str->len; + tmp->u64 = ival->zend.str->len; } else { - tmp->lval = 0; + tmp->u64 = 0; } } else { zend_string *zs = zval_get_string(zvalue); - tmp->lval = zs->len; + tmp->u64 = zs->len; zend_string_release(zs); } + if (spec) { + psi_calc_cast(PSI_T_UINT64, tmp, psi_decl_type_get_real(spec->type)->type, tmp); + } return tmp; }