projects
/
m6w6
/
ext-psi
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
|
github
raw
|
inline
| side by side
paranoid watcher
[m6w6/ext-psi]
/
src
/
token.c
diff --git
a/src/token.c
b/src/token.c
index df7d2e8592905062cd82ae1025e5fdbc0a5350e8..1b4cc5ea01026214f9b19b75fd8c441b3259a0af 100644
(file)
--- a/
src/token.c
+++ b/
src/token.c
@@
-32,29
+32,33
@@
#include "token.h"
#include "parser.h"
#include "token.h"
#include "parser.h"
-size_t psi_token_alloc_size(size_t token_len, size_t fname_len) {
- return sizeof(struct psi_token) + token_len + fname_len + 2;
-}
+#ifndef PSI_DEBUG_TOKEN_ALLOC
+# define PSI_DEBUG_TOKEN_ALLOC 0
+#endif
struct psi_token *psi_token_init(token_t token_typ, const char *token_txt,
size_t token_len, unsigned col, unsigned line, zend_string *file)
{
struct psi_token *T;
struct psi_token *psi_token_init(token_t token_typ, const char *token_txt,
size_t token_len, unsigned col, unsigned line, zend_string *file)
{
struct psi_token *T;
- T =
calloc(1, sizeof(*T)
);
+ T =
pecalloc(1, sizeof(*T), 1
);
T->type = token_typ;
T->col = col;
T->line = line;
T->file = zend_string_copy(file);
T->type = token_typ;
T->col = col;
T->line = line;
T->file = zend_string_copy(file);
- T->text = zend_string_init(token_txt, token_len, 1);
-
+ T->text = zend_string_init_interned(token_txt, token_len, 1);
+#if PSI_DEBUG_TOKEN_ALLOC
+ PSI_DEBUG_PRINT(cpp->parser, "PSI: token_init %p\n", T);
+#endif
return T;
}
void psi_token_free(struct psi_token **token_ptr) {
if (*token_ptr) {
struct psi_token *token = *token_ptr;
return T;
}
void psi_token_free(struct psi_token **token_ptr) {
if (*token_ptr) {
struct psi_token *token = *token_ptr;
-
+#if PSI_DEBUG_TOKEN_ALLOC
+ PSI_DEBUG_PRINT(cpp->parser, "PSI: token_free %p\n", token);
+#endif
*token_ptr = NULL;
zend_string_release(token->text);
zend_string_release(token->file);
*token_ptr = NULL;
zend_string_release(token->text);
zend_string_release(token->file);
@@
-63,10
+67,12
@@
void psi_token_free(struct psi_token **token_ptr) {
}
struct psi_token *psi_token_copy(struct psi_token *src) {
}
struct psi_token *psi_token_copy(struct psi_token *src) {
- struct psi_token *ptr =
malloc(sizeof(*ptr)
);
+ struct psi_token *ptr =
pemalloc(sizeof(*ptr), 1
);
*ptr = *src;
*ptr = *src;
-
+#if PSI_DEBUG_TOKEN_ALLOC
+ PSI_DEBUG_PRINT(cpp->parser, "PSI: token_copy %p <= %p\n", ptr, src);
+#endif
ptr->text = zend_string_copy(ptr->text);
ptr->file = zend_string_copy(ptr->file);
ptr->text = zend_string_copy(ptr->text);
ptr->file = zend_string_copy(ptr->file);
@@
-82,7
+88,7
@@
struct psi_token *psi_token_cat(const char *sep, unsigned argc, ...) {
va_list argv;
unsigned i;
size_t sep_len = sep ? strlen(sep) : 0;
va_list argv;
unsigned i;
size_t sep_len = sep ? strlen(sep) : 0;
- struct psi_token *T =
malloc(sizeof(*T)
);
+ struct psi_token *T =
pemalloc(sizeof(*T), 1
);
smart_str text = {0};
va_start(argv, argc);
smart_str text = {0};
va_start(argv, argc);
@@
-103,6
+109,9
@@
struct psi_token *psi_token_cat(const char *sep, unsigned argc, ...) {
T->text = smart_str_extract(&text);
T->text = smart_str_extract(&text);
+#if PSI_DEBUG_TOKEN_ALLOC
+ PSI_DEBUG_PRINT(cpp->parser, "PSI: token_cat %p\n", T);
+#endif
return T;
}
return T;
}
@@
-176,54
+185,54
@@
uint64_t psi_token_hash(struct psi_token *t, char *digest_buf) {
return psi_hash(digest_buf, t->file->val, loc_buf, (char *) NULL);
}
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;
{
size_t i;
-
dprintf(fd
, "TOKEN %p (%u) ", t, t->type);
+
PSI_DUMP(dump
, "TOKEN %p (%u) ", t, t->type);
if (t->type == PSI_T_EOF) {
if (t->type == PSI_T_EOF) {
-
dprintf(fd
, "EOF");
+
PSI_DUMP(dump
, "EOF");
} else {
} else {
-
dprintf(fd
, "\"");
+
PSI_DUMP(dump
, "\"");
for (i = 0; i < t->text->len; ++i) {
switch (t->text->val[i]) {
case '\0':
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':
break;
case '\a':
-
dprintf(fd
, "\\a");
+
PSI_DUMP(dump
, "\\a");
break;
case '\b':
break;
case '\b':
-
dprintf(fd
, "\\b");
+
PSI_DUMP(dump
, "\\b");
break;
case '\f':
break;
case '\f':
-
dprintf(fd
, "\\f");
+
PSI_DUMP(dump
, "\\f");
break;
case '\n':
break;
case '\n':
-
dprintf(fd
, "\\n");
+
PSI_DUMP(dump
, "\\n");
break;
case '\r':
break;
case '\r':
-
dprintf(fd
, "\\r");
+
PSI_DUMP(dump
, "\\r");
break;
case '\t':
break;
case '\t':
-
dprintf(fd
, "\\t");
+
PSI_DUMP(dump
, "\\t");
break;
case '\v':
break;
case '\v':
-
dprintf(fd
, "\\v");
+
PSI_DUMP(dump
, "\\v");
break;
case '"':
break;
case '"':
-
dprintf(fd
, "\\\"");
+
PSI_DUMP(dump
, "\\\"");
break;
default:
if (isprint(t->text->val[i])) {
break;
default:
if (isprint(t->text->val[i])) {
-
dprintf(fd
, "%c", t->text->val[i]);
+
PSI_DUMP(dump
, "%c", t->text->val[i]);
} else {
} else {
-
dprintf(fd
, "\\x%02hhX", t->text->val[i]);
+
PSI_DUMP(dump
, "\\x%02hhX", t->text->val[i]);
}
break;
}
}
}
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);
}
}