pg_bsd_indent - improvements around offsetof and sizeof
От
Piotr Stefaniak
Тема
pg_bsd_indent - improvements around offsetof and sizeof
Дата
Msg-id
BLU436-SMTP19ACD22D6308DB99B395F1F24D0@phx.gbl
Список
Дерево обсуждения
pg_bsd_indent - improvements around offsetof and sizeof Piotr Stefaniak <postgres@piotr-stefaniak.me>
Re: pg_bsd_indent - improvements around offsetof and sizeof Robert Haas <robertmhaas@gmail.com>
Re: pg_bsd_indent - improvements around offsetof and sizeof Tom Lane <tgl@sss.pgh.pa.us>
Re: pg_bsd_indent - improvements around offsetof and sizeof Bruce Momjian <bruce@momjian.us>
Re: pg_bsd_indent - improvements around offsetof and sizeof Tom Lane <tgl@sss.pgh.pa.us>
Re: pg_bsd_indent - improvements around offsetof and sizeof Bruce Momjian <bruce@momjian.us>
Re: pg_bsd_indent - improvements around offsetof and sizeof Piotr Stefaniak <postgres@piotr-stefaniak.me>
Re: pg_bsd_indent - improvements around offsetof and sizeof Andres Freund <andres@anarazel.de>
Re: pg_bsd_indent - improvements around offsetof and sizeof Bruce Momjian <bruce@momjian.us>
Re: pg_bsd_indent - improvements around offsetof and sizeof Alvaro Herrera <alvherre@2ndquadrant.com>
Re: pg_bsd_indent - improvements around offsetof and sizeof Piotr Stefaniak <postgres@piotr-stefaniak.me>
Re: pg_bsd_indent - improvements around offsetof and sizeof Andres Freund <andres@anarazel.de>
Re: pg_bsd_indent - improvements around offsetof and sizeof Alvaro Herrera <alvherre@2ndquadrant.com>
Re: pg_bsd_indent - improvements around offsetof and sizeof Tom Lane <tgl@sss.pgh.pa.us>
Re: pg_bsd_indent - improvements around offsetof and sizeof Andres Freund <andres@anarazel.de>
Re: pg_bsd_indent - improvements around offsetof and sizeof Tom Lane <tgl@sss.pgh.pa.us>
Re: pg_bsd_indent - improvements around offsetof and sizeof Piotr Stefaniak <postgres@piotr-stefaniak.me>
Re: pg_bsd_indent - improvements around offsetof and sizeof Piotr Stefaniak <postgres@piotr-stefaniak.me>
Hello, I think I've managed to improve pg_bsd_indent's handling of two types of cases. The first are like in this example: - hashp = (HTAB *) DynaHashAlloc(sizeof(HTAB) + strlen(tabname) +1); + hashp = (HTAB *) DynaHashAlloc(sizeof(HTAB) + strlen(tabname) + 1); Pristine pg_bsd_indent is inconsistent in masking parentheses as those that are part of a cast and those that "are part of sizeof": seeing a type name following an lparen it always masks that lparen as a part of a cast; seeing an rparen it only removes the bit if it doesn't overlap with sizeof_mask. In the example above, "(HTAB" started both "cast parens" and "sizeof parens" at the same time, and the immediately following rparen ended only the "sizeof parens". According to indent, the cast-to type then ends at "tabname)" and what follows is the cast's operand, including the + operator; in that case it's assumed to be unary and not binary, which is why indent doesn't add the space after it. The fix was to make it consistent about masking parens: - ps.cast_mask |= 1 << ps.p_l_follow; + ps.cast_mask |= (1 << ps.p_l_follow & ~ps.sizeof_mask); The second type of cases are like this: - nse = palloc(offsetof(PLpgSQL_nsitem, name) +strlen(name) + 1); + nse = palloc(offsetof(PLpgSQL_nsitem, name) + strlen(name) + 1); pg_bsd_indent simply hasn't been taught that a parenthesized type name following the offsetof macro and then an lparen is another exception to the rule of thumb that a construction like that generally means a cast. You'll also notice other, seemingly unrelated changes, most notably the rearrangement in numbers assigned to keywords. I've done it that way so that it was easier and simpler to keep the -bs option functioning as designed. I've also renamed "sizeof_mask" to "not_cast_mask", because I think the latter is a better description of what the mask does (it prevents interpreting parenthesized type names as a cast where they aren't, namely where they follow sizeof or offsetof; I haven't done any support for function declarators and I don't plan to - the fact that pg_bsd_indent thinks that "(int" in "char func(int);" begins a cast is amusing but it seems harmless for now). I'm attaching the patch for pg_bsd_indent and also a full diff that shows the change in its behavior when run against PG's sources.
В списке pgsql-hackers по дате отправления