On 4/11/19 3:50 AM, Jakub Jelinek wrote:
Hi!While looking into another PR, I've noticed that in two spots the parser->type_definition_forbidden_message messages are untranslatable, we construct them at runtime from 3 strings using concat. The following patch fixes it by adding a const char * member to the parser structure and passing that as another argument to error, in the more usual case where the argument string only contains %< and %> and not %qs added in this patch it will be just ignored. I believe this patch is more friendly to the translators (as well as less expensive at compile time because it doesn't have to concat/allocate anything). Another possibility would be to just use in cp_parser_has_attribute_expression G_("types may not be defined in %<__builtin_has_attribute%> expressions") and in cp_parser_sizeof_operand use a switch based on the 3 possible keyword values and use G_("types may not be defined in %<sizeof%> expressions") G_("types may not be defined in %<__alignof__%> expressions") G_("types may not be defined in %<alignof%> expressions") G_("types may not be defined in %<typeof%> expressions") depending on that (and C++ mode which determines which alignof spelling is in ridpointers). We wouldn't need to add an extra member, on the other side the translators would need to translate 5 messages instead of just one. Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
OK. Jason
