X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Ftoken.c;h=18c74375fe0b84eb18cd5fadf0994e7774755762;hp=7b303e712fa0c44ebdea49cc1d3227b8b064bc3f;hb=16e375c9503246b179550cd97c0739c916dc802a;hpb=216e7ac3b97aed5a5d65c511dc061c78be90e79d diff --git a/src/token.c b/src/token.c index 7b303e7..18c7437 100644 --- a/src/token.c +++ b/src/token.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 @@ -46,9 +50,10 @@ struct psi_token *psi_token_init(token_t token_typ, const char *token_txt, T->col = col; T->line = line; T->file = zend_string_copy(file); - T->text = zend_string_init_interned(token_txt, token_len, 1); + T->text = psi_string_init_interned(token_txt, token_len, 1); #if PSI_DEBUG_TOKEN_ALLOC - fprintf(stderr, "PSI: token_init %p\n", T); + fprintf(stderr, "PSI: token_init %p\t", T); + psi_token_dump(NULL, T); #endif return T; } @@ -57,7 +62,8 @@ void psi_token_free(struct psi_token **token_ptr) { if (*token_ptr) { struct psi_token *token = *token_ptr; #if PSI_DEBUG_TOKEN_ALLOC - fprintf(stderr, "PSI: token_free %p\n", token); + fprintf(stderr, "PSI: token_free %p\t", token); + psi_token_dump(NULL, token); #endif *token_ptr = NULL; zend_string_release(token->text); @@ -71,7 +77,8 @@ struct psi_token *psi_token_copy(struct psi_token *src) { *ptr = *src; #if PSI_DEBUG_TOKEN_ALLOC - fprintf(stderr, "PSI: token_copy %p <= %p\n", ptr, src); + fprintf(stderr, "PSI: token_copy %p\t", ptr); + psi_token_dump(NULL, src); #endif ptr->text = zend_string_copy(ptr->text); ptr->file = zend_string_copy(ptr->file); @@ -185,54 +192,59 @@ uint64_t psi_token_hash(struct psi_token *t, char *digest_buf) { return psi_hash(digest_buf, t->file->val, loc_buf, (char *) NULL); } -void psi_token_dump(int fd, struct psi_token *t) +void psi_token_dump(struct psi_dump *dump, struct psi_token *t) { size_t i; - dprintf(fd, "TOKEN %p (%u) ", t, t->type); + if (!t) { + PSI_DUMP(dump, "TOKEN deleted\n"); + return; + } + + PSI_DUMP(dump, "TOKEN %p (%u) ", t, t->type); if (t->type == PSI_T_EOF) { - dprintf(fd, "EOF"); + PSI_DUMP(dump, "EOF"); } else { - dprintf(fd, "\""); + PSI_DUMP(dump, "\""); for (i = 0; i < t->text->len; ++i) { switch (t->text->val[i]) { case '\0': - dprintf(fd, "\\0"); + PSI_DUMP(dump, "\\0"); break; case '\a': - dprintf(fd, "\\a"); + PSI_DUMP(dump, "\\a"); break; case '\b': - dprintf(fd, "\\b"); + PSI_DUMP(dump, "\\b"); break; case '\f': - dprintf(fd, "\\f"); + PSI_DUMP(dump, "\\f"); break; case '\n': - dprintf(fd, "\\n"); + PSI_DUMP(dump, "\\n"); break; case '\r': - dprintf(fd, "\\r"); + PSI_DUMP(dump, "\\r"); break; case '\t': - dprintf(fd, "\\t"); + PSI_DUMP(dump, "\\t"); break; case '\v': - dprintf(fd, "\\v"); + PSI_DUMP(dump, "\\v"); break; case '"': - dprintf(fd, "\\\""); + PSI_DUMP(dump, "\\\""); break; default: if (isprint(t->text->val[i])) { - dprintf(fd, "%c", t->text->val[i]); + PSI_DUMP(dump, "%c", t->text->val[i]); } else { - dprintf(fd, "\\x%02hhX", t->text->val[i]); + PSI_DUMP(dump, "\\x%02hhX", t->text->val[i]); } break; } } - dprintf(fd, "\""); + PSI_DUMP(dump, "\""); } - dprintf(fd, " at col %u in %s on line %u\n", t->col, t->file->val, t->line); + PSI_DUMP(dump, " at col %u in %s on line %u\n", t->col, t->file->val, t->line); }