From 104330a399f405b83328525bb2be55b360109b16 Mon Sep 17 00:00:00 2001 From: lemon Date: Sun, 28 May 2023 19:29:10 +0200 Subject: improve struct token --- io.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'io.c') diff --git a/io.c b/io.c index d51e28d..cc9f672 100644 --- a/io.c +++ b/io.c @@ -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, ""); @@ -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 { -- cgit v1.2.3