static void phase8_get (token_ty *tp) { phase5_get (tp); if (tp->type != token_type_string_literal) return; for (;;) { token_ty tmp; size_t len; phase5_get (&tmp); if (tmp.type != token_type_string_literal) { phase5_unget (&tmp); return; } len = strlen (tp->string); tp->string = xrealloc (tp->string, len + strlen (tmp.string) + 1); strcpy (tp->string + len, tmp.string); free_token (&tmp); } }
static void phaseX_get (token_ty *tp) { static bool middle; /* false at the beginning of a line, true otherwise. */ phase5_get (tp); if (tp->type == token_type_eoln || tp->type == token_type_eof) middle = false; else { if (middle) { /* Turn hash in the middle of a line into a plain symbol token. */ if (tp->type == token_type_hash) tp->type = token_type_symbol; } else { /* When we see leading whitespace followed by a hash sign, discard the leading white space token. The hash is all phase 6 is interested in. */ if (tp->type == token_type_white_space) { token_ty next; phase5_get (&next); if (next.type == token_type_hash) *tp = next; else phase5_unget (&next); } middle = true; } } }