add parens for C preprocessor macro argument usages
this is needed for correctness because the preprocessor is just
doing text replacement.
This is the correct way:
#define MUL(x, y) ((x) * (y))
MUL(1+2, 3-4) -> ((1+2) * (3-4)) # not: (1+2 * 3-4)
I didn't put parens around all arg usages for readability.
Some stuff (like index) is not expected to be an expression.
Also, when a arg is only used in another macro or function call,
no parens are needed either.
I reviewed the code: no harm was done (yet) due to this fault.
Thanks to @rciorba who found this.
(cherry picked from commit a3cecf599f42173b2fc485407aa439a9c6365d9c)
(cherry picked from commit 981a936f47473e8c3a16595264a1be0b064fad12)