projects
/
m6w6
/
ext-psi
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
|
github
raw
|
inline
| side by side
interned strings++
[m6w6/ext-psi]
/
src
/
types
/
cpp_macro_decl.c
diff --git
a/src/types/cpp_macro_decl.c
b/src/types/cpp_macro_decl.c
index 42ed0f4208bbad931b8879dc6b575e370cc048e4..4f21d60848e97c854e9dfb60f06db9a87f7820ce 100644
(file)
--- 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 *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;
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;
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);
}
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)
{
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;
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, "(");
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, ")");
}
}
dprintf(fd, ")");
}
@@
-78,12
+76,24
@@
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);
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;
while (psi_plist_get(macro->tokens, i++, &tok)) {
} else if (macro->tokens) {
size_t i = 0;
struct psi_token *tok;
while (psi_plist_get(macro->tokens, i++, &tok)) {
- dprintf(fd, " %s", tok->text);
+ switch (tok->type) {
+ case PSI_T_QUOTED_STRING:
+ dprintf(fd, " \"%s\"", tok->text->val);
+ break;
+ case PSI_T_QUOTED_CHAR:
+ dprintf(fd, " '%s'", tok->text->val);
+ break;
+ default:
+ dprintf(fd, " %s", tok->text->val);
+ }
}
}
}
}
}
}
@@
-102,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);
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;
}
}
return false;
}
}
@@
-120,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;
}
if (!cmp_token_list(d1->sig, d2->sig)) {
return false;
}
+ } else if (d2->sig) {
+ return false;
}
if (d1->tokens) {
}
if (d1->tokens) {
@@
-130,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;
}
if (!cmp_token_list(d1->tokens, d2->tokens)) {
return false;
}
+ } else if (d2->tokens) {
+ return false;
}
/* FIXME compare num_exps */
}
/* FIXME compare num_exps */