X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Ftypes%2Fcpp_macro_decl.c;h=42ed0f4208bbad931b8879dc6b575e370cc048e4;hp=d5e195c353fa0f35c442c064ceb79584ad4ef20c;hb=42f44eb5bf4ecd36e26e051fada79d861d0f92d2;hpb=1b6db76e3005344b33ab45b00e7e61386a33932a diff --git a/src/types/cpp_macro_decl.c b/src/types/cpp_macro_decl.c index d5e195c..42ed0f4 100644 --- a/src/types/cpp_macro_decl.c +++ b/src/types/cpp_macro_decl.c @@ -87,3 +87,52 @@ void psi_cpp_macro_decl_dump(int fd, struct psi_cpp_macro_decl *macro) } } } + +static inline bool cmp_token_list(struct psi_plist *l1, struct psi_plist *l2) +{ + size_t c = psi_plist_count(l1), i; + + if (c != psi_plist_count(l2)) { + return false; + } + + for (i = 0; i < c; ++i) { + struct psi_token *t1, *t2; + + psi_plist_get(l1, i, &t1); + psi_plist_get(l2, i, &t2); + + if (strcmp(t1->text, t2->text)) { + return false; + } + } + + return true; +} + +bool psi_cpp_macro_decl_equal(struct psi_cpp_macro_decl *d1, struct psi_cpp_macro_decl *d2) +{ + if (d1->sig) { + if (!d2->sig) { + return false; + } + + if (!cmp_token_list(d1->sig, d2->sig)) { + return false; + } + } + + if (d1->tokens) { + if (!d2->tokens) { + return false; + } + + if (!cmp_token_list(d1->tokens, d2->tokens)) { + return false; + } + } + + /* FIXME compare num_exps */ + + return true; +}