projects
/
m6w6
/
ext-psi
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
|
github
raw
|
inline
| side by side
flush
[m6w6/ext-psi]
/
src
/
libjit.c
diff --git
a/src/libjit.c
b/src/libjit.c
index 5dc011f47eb082e029189f577417cf80a684070a..5cc8525931c4f63999b3fe7640d80b4a14562cda 100644
(file)
--- 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;
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;
}
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 {
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:
}
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;
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) {
zval_dtor(return_value);
switch (func->type) {