diff options
| author | 2023-05-28 19:29:10 +0200 | |
|---|---|---|
| committer | 2023-05-28 20:22:33 +0200 | |
| commit | 104330a399f405b83328525bb2be55b360109b16 (patch) | |
| tree | 31dd3fa40c11464148fdc07af1c558324ff9940d /io.c | |
| parent | d0784193a8589982290373e95e2f228439e59160 (diff) | |
improve struct token
Diffstat (limited to 'io.c')
| -rw-r--r-- | io.c | 16 |
1 files changed, 10 insertions, 6 deletions
@@ -437,17 +437,21 @@ vbfmt(struct wbuf *out, const char *fmt, va_list ap) n += bwriteS(buf, "\?\?\?"); break; case TKNUMLIT: - s = (const char *)(getfile(tok->span.sl.file)->p + tok->span.sl.off); if (quote) n += bputc(buf, '`'); - for (i = tok->span.sl.len; i--; ++s) - if (*s != '\\' && *s != '\n') n += bputc(buf, *s); + n += bfmt(buf, "%S", tok->s, tok->len); if (quote) n += bputc(buf, '\''); break; + case TKCHRLIT: + n += bputc(buf, '\''); + for (int i = 0; i < tok->len; ++i) + n += putquoted(buf, tok->s[i], '\'', i < tok->len - 1 ? tok->s[i+1] : -1); + n += bputc(buf, '\''); + break; case TKSTRLIT: - n += bfmt(buf, "%'S", tok->s.p, tok->s.n-1); + n += bfmt(buf, "%'S", tok->s, tok->len); break; case TKIDENT: - n += bfmt(buf, "`%s'", tok->ident); + n += bfmt(buf, "`%s'", tok->s); break; case TKEOF: n += bwriteS(buf, "<end-of-file>"); @@ -478,7 +482,7 @@ vbfmt(struct wbuf *out, const char *fmt, va_list ap) default: if (quote) n += bputc(buf, '`'); if (in_range(tok->t, TKWBEGIN_, TKWEND_)) { - n += bfmt(buf, "%s", tok->ident); + n += bfmt(buf, "%s", tok->s); } else if (aisprint(tok->t)) { n += bputc(buf, tok->t); } else { |