+struct psi_token *psi_token_prepend(const char *sep, struct psi_token *T, unsigned argc, ...) {
+ va_list argv;
+ unsigned i;
+ size_t sep_len = sep ? strlen(sep) : 0;
+
+ va_start(argv, argc);
+ for (i = 0; i < argc; ++i) {
+ char *str = va_arg(argv, char *);
+ size_t str_len = strlen(str), token_len = T->size, fname_len = strlen(T->file);
+
+ T = realloc(T, psi_token_alloc_size(T->size += str_len + sep_len, fname_len));
+ T->text = &T->buf[0];
+ T->file = &T->buf[T->size + 1];
+ memmove(&T->buf[str_len + sep_len], &T->buf[0], token_len + 1 + fname_len + 1);
+ memcpy(&T->buf[0], str, str_len);
+ memcpy(&T->buf[str_len], sep, sep_len);
+ T->buf[T->size] = '\0';
+ }
+ va_end(argv);
+
+ return T;
+}
+struct psi_token *psi_token_append(const char *sep, struct psi_token *T, unsigned argc, ...) {