X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Ftypes%2Fcpp_macro_decl.c;h=4f21d60848e97c854e9dfb60f06db9a87f7820ce;hp=e540131243761d44281744acddfbb7190ca249a9;hb=216e7ac3b97aed5a5d65c511dc061c78be90e79d;hpb=503860f8936b47b2d4e356d815c112c60d91a95a diff --git a/src/types/cpp_macro_decl.c b/src/types/cpp_macro_decl.c index e540131..4f21d60 100644 --- a/src/types/cpp_macro_decl.c +++ b/src/types/cpp_macro_decl.c @@ -31,7 +31,7 @@ struct psi_cpp_macro_decl *psi_cpp_macro_decl_init(struct psi_plist *sig, struct psi_plist *tokens, struct psi_num_exp *exp) { - struct psi_cpp_macro_decl *macro = calloc(1, sizeof(*macro)); + struct psi_cpp_macro_decl *macro = pecalloc(1, sizeof(*macro), 1); macro->exp = exp; macro->sig = sig; macro->tokens = tokens; @@ -44,9 +44,7 @@ void psi_cpp_macro_decl_free(struct psi_cpp_macro_decl **macro_ptr) struct psi_cpp_macro_decl *macro = *macro_ptr; *macro_ptr = NULL; - if (macro->token) { - free(macro->token); - } + psi_token_free(¯o->token); if (macro->exp) { psi_num_exp_free(¯o->exp); } @@ -62,7 +60,7 @@ void psi_cpp_macro_decl_free(struct psi_cpp_macro_decl **macro_ptr) void psi_cpp_macro_decl_dump(int fd, struct psi_cpp_macro_decl *macro) { - dprintf(fd, "%s", macro->token->text); + dprintf(fd, "%s", macro->token->text->val); if (macro->sig) { size_t i = 0; @@ -70,7 +68,7 @@ void psi_cpp_macro_decl_dump(int fd, struct psi_cpp_macro_decl *macro) dprintf(fd, "("); while (psi_plist_get(macro->sig, i++, &tok)) { - dprintf(fd, "%s%s", i>1?",":"", tok->text); + dprintf(fd, "%s%s", i>1?",":"", tok->text->val); } dprintf(fd, ")"); } @@ -78,6 +76,9 @@ void psi_cpp_macro_decl_dump(int fd, struct psi_cpp_macro_decl *macro) if (macro->exp) { dprintf(fd, " "); psi_num_exp_dump(fd, macro->exp); + + assert(macro->tokens); + } else if (macro->tokens) { size_t i = 0; struct psi_token *tok; @@ -85,13 +86,13 @@ void psi_cpp_macro_decl_dump(int fd, struct psi_cpp_macro_decl *macro) while (psi_plist_get(macro->tokens, i++, &tok)) { switch (tok->type) { case PSI_T_QUOTED_STRING: - dprintf(fd, " \"%s\"", tok->text); + dprintf(fd, " \"%s\"", tok->text->val); break; case PSI_T_QUOTED_CHAR: - dprintf(fd, " '%s'", tok->text); + dprintf(fd, " '%s'", tok->text->val); break; default: - dprintf(fd, " %s", tok->text); + dprintf(fd, " %s", tok->text->val); } } } @@ -111,7 +112,7 @@ static inline bool cmp_token_list(struct psi_plist *l1, struct psi_plist *l2) psi_plist_get(l1, i, &t1); psi_plist_get(l2, i, &t2); - if (strcmp(t1->text, t2->text)) { + if (!zend_string_equals(t1->text, t2->text)) { return false; } } @@ -129,6 +130,8 @@ bool psi_cpp_macro_decl_equal(struct psi_cpp_macro_decl *d1, struct psi_cpp_macr if (!cmp_token_list(d1->sig, d2->sig)) { return false; } + } else if (d2->sig) { + return false; } if (d1->tokens) { @@ -139,6 +142,8 @@ bool psi_cpp_macro_decl_equal(struct psi_cpp_macro_decl *d1, struct psi_cpp_macr if (!cmp_token_list(d1->tokens, d2->tokens)) { return false; } + } else if (d2->tokens) { + return false; } /* FIXME compare num_exps */