- return psi_hash(digest_buf, t->file, loc_buf, (char *) NULL);
+ return psi_hash(digest_buf, t->file->val, loc_buf, (char *) NULL);
+}
+
+void psi_token_dump(struct psi_dump *dump, struct psi_token *t)
+{
+ size_t i;
+
+ PSI_DUMP(dump, "TOKEN %p (%u) ", t, t->type);
+ if (t->type == PSI_T_EOF) {
+ PSI_DUMP(dump, "EOF");
+ } else {
+ PSI_DUMP(dump, "\"");
+ for (i = 0; i < t->text->len; ++i) {
+ switch (t->text->val[i]) {
+ case '\0':
+ PSI_DUMP(dump, "\\0");
+ break;
+ case '\a':
+ PSI_DUMP(dump, "\\a");
+ break;
+ case '\b':
+ PSI_DUMP(dump, "\\b");
+ break;
+ case '\f':
+ PSI_DUMP(dump, "\\f");
+ break;
+ case '\n':
+ PSI_DUMP(dump, "\\n");
+ break;
+ case '\r':
+ PSI_DUMP(dump, "\\r");
+ break;
+ case '\t':
+ PSI_DUMP(dump, "\\t");
+ break;
+ case '\v':
+ PSI_DUMP(dump, "\\v");
+ break;
+ case '"':
+ PSI_DUMP(dump, "\\\"");
+ break;
+ default:
+ if (isprint(t->text->val[i])) {
+ PSI_DUMP(dump, "%c", t->text->val[i]);
+ } else {
+ PSI_DUMP(dump, "\\x%02hhX", t->text->val[i]);
+ }
+ break;
+ }
+ }
+ PSI_DUMP(dump, "\"");
+ }
+ PSI_DUMP(dump, " at col %u in %s on line %u\n", t->col, t->file->val, t->line);