X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Ftypes%2Flet_exp.c;h=4ce32a2f028ea13ce77f7459b7c6287f841dcf37;hb=698841dfdd4d70d24e0b7af25ac7100bc2cb26a4;hp=fa74b16549b4658e690e474f10b7f90f5f704467;hpb=2fa436074ca9a5e87f39b696de832fa2188fcfc6;p=m6w6%2Fext-psi diff --git a/src/types/let_exp.c b/src/types/let_exp.c index fa74b16..4ce32a2 100644 --- a/src/types/let_exp.c +++ b/src/types/let_exp.c @@ -23,7 +23,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *******************************************************************************/ -#include "php_psi_stdinc.h" +#ifdef HAVE_CONFIG_H +# include "config.h" +#else +# include "php_config.h" +#endif #include "data.h" #include "call.h" #include "calc.h" @@ -42,7 +46,7 @@ struct psi_let_exp *psi_let_exp_init_ex(struct psi_decl_var *var, struct psi_let_exp *psi_let_exp_init(enum psi_let_exp_kind kind, void *data) { - struct psi_let_exp *let = calloc(1, sizeof(*let)); + struct psi_let_exp *let = pecalloc(1, sizeof(*let), 1); switch (let->kind = kind) { case PSI_LET_NULL: assert(!data); @@ -102,42 +106,42 @@ void psi_let_exp_free(struct psi_let_exp **let_ptr) } } -void psi_let_exp_dump(int fd, struct psi_let_exp *val, unsigned level, int last) +void psi_let_exp_dump(struct psi_dump *dump, struct psi_let_exp *val, unsigned level, int last) { if (level > 1) { /* only if not directly after `set ...` */ - dprintf(fd, "%s", psi_t_indent(level)); + PSI_DUMP(dump, "%s", psi_t_indent(level)); } if (val->var) { if (val->var->token) { - psi_decl_var_dump(fd, val->var); - dprintf(fd, " = "); + psi_decl_var_dump(dump, val->var); + PSI_DUMP(dump, " = "); } } if (val->is_reference) { - dprintf(fd, "&"); + PSI_DUMP(dump, "&"); } switch (val->kind) { case PSI_LET_NULL: - dprintf(fd, "NULL"); + PSI_DUMP(dump, "NULL"); break; case PSI_LET_TMP: - psi_decl_var_dump(fd, val->data.var); - dprintf(fd, "\t/* fqn=%s */", val->data.var->fqn->val); + psi_decl_var_dump(dump, val->data.var); + PSI_DUMP(dump, "\t/* fqn=%s */", val->data.var->fqn->val); break; case PSI_LET_CALLOC: - psi_let_calloc_dump(fd, val->data.alloc); + psi_let_calloc_dump(dump, val->data.alloc); break; case PSI_LET_CALLBACK: - psi_let_callback_dump(fd, val->data.callback, level); + psi_let_callback_dump(dump, val->data.callback, level); break; case PSI_LET_FUNC: - psi_let_func_dump(fd, val->data.func, level); + psi_let_func_dump(dump, val->data.func, level); break; case PSI_LET_NUMEXP: - psi_num_exp_dump(fd, val->data.num); + psi_num_exp_dump(dump, val->data.num); break; default: @@ -145,15 +149,15 @@ void psi_let_exp_dump(int fd, struct psi_let_exp *val, unsigned level, int last) } if (val->var) { - dprintf(fd, "\t/* fqn=%s */", val->var->fqn->val); + PSI_DUMP(dump, "\t/* fqn=%s */", val->var->fqn->val); } if (level > 1) { if (!last) { - dprintf(fd, ","); + PSI_DUMP(dump, ","); } } else { - dprintf(fd, ";"); + PSI_DUMP(dump, ";"); } } @@ -243,9 +247,11 @@ void *psi_let_exp_exec(struct psi_let_exp *val, struct psi_decl_arg *darg, struct psi_impl *impl = psi_call_frame_get_impl(frame); struct psi_let_stmt *let_temp = psi_impl_get_let(impl, val->data.var); struct psi_call_frame_symbol *temp_arg; + impl_val *src; temp_arg = psi_call_frame_fetch_symbol(frame, let_temp->exp->var); - frame_sym->temp_val = *deref_impl_val(temp_arg->ptr, val->data.var); + src = deref_impl_val(temp_arg->ptr, val->data.var); + memcpy(&frame_sym->temp_val, src, psi_decl_var_get_size(let_temp->exp->var)); } break;