Re: Convert macros to static inline functions

Peter Geoghegan <pg@bowt.ie>

From: Peter Geoghegan <pg@bowt.ie>
To: Peter Eisentraut <peter.eisentraut@enterprisedb.com>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2022-06-09T02:01:56Z
Lists: pgsql-hackers
On Mon, May 16, 2022 at 1:28 AM Peter Eisentraut
<peter.eisentraut@enterprisedb.com> wrote:
> Inspired by [0], I looked to convert more macros to inline functions.
> The attached patches are organized "bottom up" in terms of their API
> layering; some of the later ones depend on some of the earlier ones.

Big +1 from me.

I converted over most of the nbtree.h function style macros in
Postgres 13, having put it off in Postgres 12 (there is one remaining
function macro due to an issue with #include dependencies). This
vastly improved the maintainability of the code, and I wish I'd done
it sooner.

Inline functions made it a lot easier to pepper various B-Tree code
utility functions with defensive assertions concerning preconditions
and postconditions. That's something that I am particular about. In
theory you can just use AssertMacro() in a function style macro. In
practice that approach is ugly, and necessitates thinking about
multiple evaluation hazards, which is enough to discourage good
defensive coding practices.

-- 
Peter Geoghegan



Commits

  1. Add some const decorations (htup.h)

  2. Convert macros to static inline functions (htup_details.h, itup.h)

  3. Convert macros to static inline functions (rel.h)

  4. Convert macros to static inline functions (itup.h)

  5. Convert macros to static inline functions (tupmacs.h)

  6. Convert macros to static inline functions (xlog_internal.h)

  7. Convert macros to static inline functions (bufmgr.h)

  8. Convert macros to static inline functions (itemptr.h)

  9. Convert macros to static inline functions (bufpage.h)

  10. Convert macros to static inline functions (block.h)