speed dup_token() up

It's one of the hottest spots in the entire pre-process.c;
unfortunately, code generation is not good.

Compiler does not know that streampos won't be pointing
to alloc->pos (alloc has been freshly allocated, but...),
so it resorts to field-by-field copying, with arseloads of
reloads; worse, those are bitfields, so results are really
not pretty.

Better solution: fetch *streampos into a local variable first,
then copy the entire token->pos to alloc->pos and assign the
fields we need to copy from *streampos.

Ends up with much better code generation.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
1 file changed