aboutsummaryrefslogtreecommitdiffhomepage
path: root/c.c
diff options
context:
space:
mode:
Diffstat (limited to 'c.c')
-rw-r--r--c.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/c.c b/c.c
index abd6a46..8da24a3 100644
--- a/c.c
+++ b/c.c
@@ -29,11 +29,16 @@ lexc(struct comp *cm, struct token *tk)
vec_of(char) rest = VINIT(buf, sizeof buf);
do {
lex(&cm->lx, &tk2);
- vpushn(&rest, tk2.s, tk2.len);
+ if (tk) {
+ joinspan(&tk->span.ex, tk2.span.ex);
+ vpushn(&rest, tk2.s, tk2.len);
+ }
} while (peek(cm, NULL) == TKSTRLIT);
- tk->s = memcpy(alloc(&cm->exarena, tk->len + rest.n, 0), tk->s, tk->len);
- memcpy((char *)tk->s + tk->len, rest.p, rest.n);
- tk->len += rest.n;
+ if (tk) {
+ tk->s = memcpy(alloc(&cm->exarena, tk->len + rest.n, 0), tk->s, tk->len);
+ memcpy((char *)tk->s + tk->len, rest.p, rest.n);
+ tk->len += rest.n;
+ }
vfree(&rest);
}
return t;