On Mon, May 16, 2022 at 1:28 AM Peter Eisentraut <peter.eisentr...@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