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;
}
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:
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) {