X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Ftypes%2Fdecl.c;h=250aa509bd87412c2c3d292b3a321ca63d00a755;hb=refs%2Fheads%2Fmaster;hp=94f43368c978c306f04f7f6c0456550330e5e2bc;hpb=d2e0af1718294569a84c3c15616c74e4d55ea579;p=m6w6%2Fext-psi diff --git a/src/types/decl.c b/src/types/decl.c index 94f4336..250aa50 100644 --- a/src/types/decl.c +++ b/src/types/decl.c @@ -28,14 +28,13 @@ #else # include "php_config.h" #endif -#include "php_psi.h" -#include #include - #include +#include "php_psi.h" #include "data.h" +#include "dl.h" #define PSI_FUNC_REDIRS #include "php_psi_predef.h" @@ -65,7 +64,7 @@ void psi_decl_free(struct psi_decl **d_ptr) if (d->redir) { zend_string_release(d->redir); } - free(d); + pefree(d, 1); } } @@ -75,8 +74,13 @@ void psi_decl_dump(struct psi_dump *dump, struct psi_decl *decl) psi_decl_abi_dump(dump, decl->abi); } PSI_DUMP(dump, " "); - /* FIXME: functions returning arrays */ - psi_decl_arg_dump(dump, decl->func, 0); + + psi_decl_type_dump(dump, decl->func->type, 0); + PSI_DUMP(dump, " "); + PSI_DUMP(dump, "%s%s", + psi_t_indirection(decl->func->var->pointer_level - !!decl->func->var->array_size), + decl->func->var->name->val); + PSI_DUMP(dump, "("); if (decl->args) { size_t i; @@ -94,11 +98,13 @@ void psi_decl_dump(struct psi_dump *dump, struct psi_decl *decl) } if (decl->func->var->array_size) { PSI_DUMP(dump, ")[%u]", decl->func->var->array_size); + } else { + PSI_DUMP(dump, ")"); } if (decl->redir) { - PSI_DUMP(dump, ") __asm__ (\"%s\");", decl->redir->val); + PSI_DUMP(dump, " __asm__ (\"%s\");", decl->redir->val); } else { - PSI_DUMP(dump, ");"); + PSI_DUMP(dump, ";"); } } @@ -127,7 +133,7 @@ static inline bool psi_decl_validate_func(struct psi_data *data, "Failed to locate symbol '%s(%s)': %s", func->var->name->val, decl->redir ? decl->redir->val : "", - dlerror() ?: "not found"); + psi_dlerror() ?: "not found"); return false; } return true;