X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Flibjit.c;h=5cc8525931c4f63999b3fe7640d80b4a14562cda;hp=5dc011f47eb082e029189f577417cf80a684070a;hb=762750b4a3f4e0471993849c4bd12965f6b62356;hpb=be3ceffdd27422aae6ba44d31d868fb12d08957a diff --git a/src/libjit.c b/src/libjit.c index 5dc011f..5cc8525 100644 --- a/src/libjit.c +++ b/src/libjit.c @@ -109,7 +109,7 @@ static inline PSI_ClosureData *PSI_ClosureDataAlloc(void *context, impl *impl) { static inline impl_val *deref(unsigned level, impl_val *ret_val, decl_arg *darg) { unsigned i; - for (i = level; i < darg->var->pointer_level; ++i) { + for (i = level; i < darg->var->pointer_level; ++i && ret_val->ptr) { ret_val = *(void **)ret_val; } @@ -135,7 +135,12 @@ static void to_string(impl_val *ret_val, decl_arg *func, zval *return_value) { char chr = ret_val->lval; RETVAL_STRINGL(&chr, 1); } else { - RETVAL_STRING(deref(1, ret_val, func)->ptr); + ret_val = deref(1, ret_val, func); + if (ret_val->ptr) { + RETVAL_STRING(ret_val->ptr); + } else { + RETVAL_EMPTY_STRING(); + } } break; case PSI_T_FLOAT: @@ -270,6 +275,7 @@ static void handle_rval(impl *impl, impl_val *ret_val, zval *return_value) { static void handle_set(zval *return_value, set_func *func, decl_vars *vars) { impl_val *val = &vars->vars[0]->arg->let->ptr; + ZVAL_DEREF(return_value); zval_dtor(return_value); switch (func->type) {