On 08/05/2016 01:55 PM, Richard Biener wrote:
Hi Richard.
Please don't use std::string. For string building you can use obstacks.
Alright let's talk details then so I can write things up in a way you
approve of.
Take for instance simple uses like all the tree_*check_failed routines,
which I thought were great candidates for std::string-- they're going to
be outputted to the screen or disk which is clearly many times more
expensive than the malloc or overhead of std::string:
length += strlen ("expected ");
buffer = tmp = (char *) alloca (length);
length = 0;
while ((code = (enum tree_code) va_arg (args, int)))
{
const char *prefix = length ? " or " : "expected ";
strcpy (tmp + length, prefix);
length += strlen (prefix);
strcpy (tmp + length, get_tree_code_name (code));
length += strlen (get_tree_code_name (code));
}
Do you suggest using obstacks here, or did you have something else in mind?
How about if it's something like the above but there are multiple exit
points from the function. I mean, we still need to call obstack_free()
on all exit points, which is what I wanted to avoid for something as
simple as building a throw-away string.
Aldy